Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
EffectAggressionDebuff
#1
Добрый вечер, есть нужна в создании эффекта который будет агрить всех окружающих монстров вокруг в то время пока эффект находится на персонаже накидал собственно такой вот эффект

Код:
package l2p.gameserver.skills.effects;

import l2p.commons.collections.GArray;
import l2p.gameserver.ai.CtrlEvent;
import l2p.gameserver.ai.CtrlIntention;
import l2p.gameserver.model.Effect;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.World;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.stats.Env;
import l2p.gameserver.stats.Stats;

public class EffectAggressionDebuff extends Effect {

    public EffectAggressionDebuff (Env env, EffectTemplate template) {
        super(env, template);
    }

    @Override
    public void onStart() {
        super.onStart();
        onActionTime();
    }

    @Override
    public boolean onActionTime() {
        if (_effected.isDead()) {
            return false;
        }
            GArray<NpcInstance> around = _effected.getAroundNpc(1500, 300);
            if ((around != null) && !around.isEmpty())
            {
                for (NpcInstance npc : around)
                {
                    if ((npc.getNpcId() >= тут айди нпцов) && (npc.getNpcId() <= тут тоже айди нпцов))
                    {
                            npc.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, _effected, 100);
                    }
                }
            }
        return true;
    }

    @Override
    public void onExit() {
        super.onExit();
    }
}
Всё в принципе работает, как только эффект появляется на персонаже то вокруг нпц сразу кидаются давать ему заслуженных люлей, но вот проблема что в тот момент пока эффект висит и персонаж передвигается по локации другие мобы которые не попали в дистанцию агра которая указана в эффекте тупо не агрятся, а надо бы чтобы агрились :-) Всем спасибо, за меня писать ничего не надо просто подскажите как это сделать, подозреваю что можно сотворить таск который будет через определённый промежуток времени агрить мобов вокруг, но хочется узнать может есть куда более целесообразный метод для решения данной задачи :-)

Чуть не забыл, сорсы овера :-)
Ответ
#2
убрать из onStart вызов onActionTime, а в описании самого скилла (в хмлке) эффекту задать количество и нужную периодичность вызова, например count=30 и time=1 - 30 раз вызвать onActionTime с периодом в 1 секунду.
Ответ
#3
Gaikotsu Написал:убрать из onStart вызов onActionTime, а в описании самого скилла (в хмлке) эффекту задать количество и нужную периодичность вызова, например count=30 и time=1 - 30 раз вызвать onActionTime с периодом в 1 секунду.

Оу спасибо, сейчас проверю)


Проверил всё работает, ещё раз спасибо)
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)