pvpgate 11 Опубликовано 18 октября, 2018 (изменено) Всем привет Сборка lostworld Интересует взаимодействие (разговор и атака) с Npc и со своим самоном. В каких классах искать это? Проблема: автоатака по своему пету прерывается после первого удара, хотя не должна. По нпц не прерывается. И после разговора с нпц есть задержка, как на птс, а со своим петом нет, хотя должна быть. Хочу найти классы/методы в которых это происходит, и настроить пета аналогично нпц. Всем спасибо за подсказки! Изменено 18 октября, 2018 пользователем pvpgate Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 18 октября, 2018 Смотрите пакет AttackRequest и Action. Там должно быть что-то вроде вызова виртуального\абстрактного метода onAction у GameObject, а соотвественно частные инстансы типа нпц, самонов, петов, игроков этот метод реализуют по своему. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
pvpgate 11 Опубликовано 18 октября, 2018 28 минут назад, lvlkoo сказал: Смотрите пакет AttackRequest и Action. Там должно быть что-то вроде вызова виртуального\абстрактного метода onAction у GameObject, а соотвественно частные инстансы типа нпц, самонов, петов, игроков этот метод реализуют по своему. Сложновато. Т.е. мне по сути нужен метод onAction в этих классах(нпц, самое и т.д.)? Я правильно понимаю что самон это gameserver/model/servitor.java , и именно его onAction мне нужен? И в случае с нпц куда смотреть? model/instances/npcInstance.java ? Или npcFriendInstance.java ? Не совсем понимаю разницу. Или я вообще не туда смотрю? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 18 октября, 2018 (изменено) 27 минут назад, pvpgate сказал: Т.е. мне по сути нужен метод onAction в этих классах(нпц, самое и т.д.)? Да. Смотреть в model/instances/*.java Там вы можете найти NpcInstance, PetInstance, SummonIntance итд ПС. Реализации метода может и не быть в конченом инстансе, она может быть гдето у родителя. Изменено 18 октября, 2018 пользователем lvlkoo 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 18 октября, 2018 Наверное самым быстрым будет вариант с тем, чтобы открыть клас GameObject, найти там onAction и использовать функцию IDE Go to -> Implementations (Если вы конечно используете IDE). Увидите весь список реализаций метода 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
pvpgate 11 Опубликовано 18 октября, 2018 10 часов назад, lvlkoo сказал: Наверное самым быстрым будет вариант с тем, чтобы открыть клас GameObject, найти там onAction и использовать функцию IDE Go to -> Implementations (Если вы конечно используете IDE). Увидите весь список реализаций метода Спасибо, и еще вопросик, чтоб не создавать лишних тем, где искать переход самона в боевую стойку? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 18 октября, 2018 (изменено) 10 минут назад, pvpgate сказал: Спасибо, и еще вопросик, чтоб не создавать лишних тем, где искать переход самона в боевую стойку? Все там же. в summon\pet instance, по ключевым словам attackstance, должно быть что вроде startAttackStanceTask\stopAttackStanceTask Там собственно методы которые шлют клиенту пакеты AutoAttackStart\AutoAttackStop Изменено 18 октября, 2018 пользователем lvlkoo 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
pvpgate 11 Опубликовано 18 октября, 2018 11 часов назад, lvlkoo сказал: Наверное самым быстрым будет вариант с тем, чтобы открыть клас GameObject, найти там onAction и использовать функцию IDE Go to -> Implementations (Если вы конечно используете IDE). Увидите весь список реализаций метода Весь вечер ковырялся, но так и не понял, почему у меня прерывается автоатака по самону. Да и где она находится тоже. в instances в summoninstance и petinstance вообще нет ни слова об атаке. Есть в model/servitor добавил логирование: else if(isAutoAttackable(player)) { player.getAI().Attack(this, false, shift); player.sendMessage("message servitor"+isAutoAttackable(player)); } но при атаке сообщение не получаю, хотя аналогичное в npcinstance if(isAutoAttackable(player)) { player.getAI().Attack(this, false, shift); player.sendMessage("message npc "+isAutoAttackable(player)); return; } дает мне сообщение при атаке мобов (но не НПЦ, что тоже запутало меня) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 18 октября, 2018 @pvpgate Действуйте от обратного 1 час назад, lvlkoo сказал: Там собственно методы которые шлют клиенту пакеты AutoAttackStart\AutoAttackStop Находите эти пакеты, далее с помощью функции IDE "Find Usages" надите где эти пакеты отправляются, конкретнее ищите упоминания в классах связанные с самоном. Не забывайте, что они наследники всяких там Creature и тд, и могут не иметь собственных реализаций методов, которые работают с тасками автоатаки и вся магия может просиходить в базовом класе 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Rovskoi 14 Опубликовано 18 октября, 2018 (изменено) Там скорее основная логика в классе-родителе (ищите в нужных методах по ключевым словам super). Смотрите класс Playable (он является одним из супер классов для Pet\Summon Instance), метод doAttack(). Возможно ещё нужно будет смотреть checkTarget в родительских классах (родители относительно Pet\Summon) PS: совет: почитайте что такое наследование в джава, как оно устроено, что позволяет делать и для чего его используют. Изменено 18 октября, 2018 пользователем Rovskoi 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
pvpgate 11 Опубликовано 18 октября, 2018 8 минут назад, lvlkoo сказал: @pvpgate Действуйте от обратного Находите эти пакеты, далее с помощью функции IDE "Find Usages" надите где эти пакеты отправляются, конкретнее ищите упоминания в классах связанные с самоном. Не забывайте, что они наследники всяких там Creature и тд, и могут не иметь собственных реализаций методов, которые работают с тасками автоатаки и вся магия может просиходить в базовом класе 2 минуты назад, Rovskoi сказал: Там скорее основная логика в классе-родителе (ищите в нужных методах по ключевым словам super). Смотрите класс Playable (он является одним из супер классов для Pet\Summon Instance), метод doAttack(). Возможно ещё нужно будет смотреть checkTarget в дочерних-родительских классах. PS: совет: почитайте что такое наследование в джава, как оно устроено, что позволяет делать и для чего его используют. мне кажется мы немного запутались, речь идет не об авто атаке пета, а о том что хозяин самона при атаке на своего самона через ctrl проводит 1 удар и останавливается, хотя должен продолжать. А при атаке NPC через ctrl продолжает его бить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Rovskoi 14 Опубликовано 18 октября, 2018 ну это не сильно дела меняет, все те же методы doAttack(), checkTarget(), но теперь только Player < Playable < Creature (возможно есть какие-то триггеры которые прерывают таск на автоатаку, тут нужно смотреть) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 19 октября, 2018 (изменено) 8 часов назад, pvpgate сказал: мне кажется мы немного запутались, речь идет не об авто атаке пета, а о том что хозяин самона при атаке на своего самона через ctrl проводит 1 удар и останавливается, хотя должен продолжать. А при атаке NPC через ctrl продолжает его бить. Скорее всего в данной ситуации вам нужно искать не пета, а чара - то есть искать автоатаку чара, насколько помню есть такая штука - флаг. И автоатака работает по флагу, то есть если чар не флагнутый автоатака не проводится, а если флагнутый или пк - то проводится. Пет в данной ситуации - не флагнутый, попробуйте твина загрузите с суммоном и по нему автоатаку проведите когда враг будет во флагнутом состоянии и без флага. Наверняка по флагу автоатака пройдет. Тогда решение наипростейшее Изменено 19 октября, 2018 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты