Свернуть ↑
Вот основные факторы по структуре, с которых начинал я, чтобы добиться определённых результатов.
Описание: нажимая на скил, мы можем указывать где будет его срабатывание (и его анимации. По факту оно должно выглядит как:
Всеми этими параметрами обладает L2Skill, когда вы создаёте его в .xml.
Но дальше сложнее, вызвать скилл на координатах и отладить работу не сложно, сложно заставить анимацию проигрываться в этом месте. В интерлюдах, нам по любому нужен объект - дочерний от NPC или чарактера, который может бросать broadcastPacket->toAllinRadius.
Т.е. указав на место в игре, запускается стандартная схема каста, которая дёргает onMagicSkillLaunched() метод, который вызывает анимацию на ЦЕЛИ. Созданный вам инстанс на основе NPC должен учитывать:
1. Союзников
2. Врагов
3. Siege
4. PVP
5. Попал ли в зону кастер
6. Суммонов
У вас уже есть похожий EffectPointInstance, можно даже использовать его.
Дальше вам надо учесть самые главные фишки данной способности:
1. Если мы указали на координаты, дистанция которых выше чем допустимо в скиле, тогда чар должен бежать к ним, как будто он кастует обычный TARGET_ONE скилл. Тут надо использовать maybePawnOnPosition() или что-то вроде.
2. При начале каста,должен создавать NPC дочерник, который вызовет анимацию на таргетах вокруг СЕБЯ (а не вас).
P.S. Согласно слухам, существует мистический пакет, который передаёт данные NPC в виде объекта, что позволяет на нём использовать анимацию без полноценных тяжёлых функции как спавн дочернего NPC, но я такой никогда не видел в живую.