From 64223af7fdd5512efed4a13c0c102e2fd6339a88 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 25 Oct 2021 00:52:51 +0000 Subject: [PATCH] Store most popular IBaseEvent to reduce object creation. --- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../LargeCocoon/LargeCocoon.java | 6 +- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 10 ++- .../gameserver/model/actor/Creature.java | 80 +++++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 18 +++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 18 +++-- .../impl/creature/OnCreatureDamageDealt.java | 50 +++++++++--- .../creature/OnCreatureDamageReceived.java | 50 +++++++++--- .../impl/creature/OnCreatureSkillUse.java | 42 +++++++--- .../l2jmobius/gameserver/ai/CreatureAI.java | 10 ++- .../gameserver/model/actor/Creature.java | 80 +++++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 18 +++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 18 +++-- .../impl/creature/OnCreatureDamageDealt.java | 50 +++++++++--- .../creature/OnCreatureDamageReceived.java | 50 +++++++++--- .../impl/creature/OnCreatureSkillUse.java | 42 +++++++--- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- .../l2jmobius/gameserver/ai/CreatureAI.java | 8 +- .../gameserver/model/actor/Creature.java | 73 +++++++++++++++-- .../impl/creature/OnCreatureAttack.java | 26 ++++-- .../impl/creature/OnCreatureAttackAvoid.java | 34 ++++---- .../impl/creature/OnCreatureAttacked.java | 26 ++++-- .../impl/creature/OnCreatureDamageDealt.java | 58 ++++++++++---- .../creature/OnCreatureDamageReceived.java | 58 ++++++++++---- .../creature/OnCreatureSkillFinishCast.java | 34 +++++--- .../impl/creature/OnCreatureSkillUse.java | 26 ++++-- .../gameserver/model/skills/SkillCaster.java | 19 ++++- 216 files changed, 5815 insertions(+), 1727 deletions(-) diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java index 48a329de17..6665842655 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index f91ffc7a7c..f63b96cccf 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java index 48a329de17..6665842655 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a3071496a5..9ea84be2e6 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java index afdc2dd852..dc006b4772 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a3071496a5..9ea84be2e6 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java index afdc2dd852..dc006b4772 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a3071496a5..9ea84be2e6 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java index 646cf3ee2b..25dc27f38a 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5049,7 +5105,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index b33bc67b01..3d92cfbcc8 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java index 646cf3ee2b..25dc27f38a 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5049,7 +5105,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index b33bc67b01..3d92cfbcc8 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index ea32473a93..daeb5ec253 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java index 646cf3ee2b..25dc27f38a 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4640,10 +4674,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5049,7 +5105,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index b33bc67b01..3d92cfbcc8 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index 6179cfa634..bcc48c468c 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -63,7 +63,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java index 4e57d214ff..81c4debb1b 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3907,8 +3925,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5048,7 +5104,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index 9bea983ec0..a3c400df21 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index 6179cfa634..bcc48c468c 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -63,7 +63,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java index f06946f18c..ecfe93fa8a 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3907,8 +3925,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5048,7 +5104,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index 9bea983ec0..a3c400df21 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java index 6179cfa634..bcc48c468c 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java @@ -63,7 +63,11 @@ public class LargeCocoon extends AbstractNpcAI { case "attack": { - onCreatureAttacked(new OnCreatureAttacked(player, npc, null)); + final OnCreatureAttacked attackEvent = new OnCreatureAttacked(); + attackEvent.setAttacker(player); + attackEvent.setTarget(npc); + attackEvent.setSkill(null); + onCreatureAttacked(attackEvent); break; } case "attackPowerful": diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/CreatureAI.java index fa38b02488..a6dc3cb68d 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java index f06946f18c..ecfe93fa8a 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3907,8 +3925,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5048,7 +5104,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index 9bea983ec0..a3c400df21 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 2cf9aba19e..6ea4f1ee66 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -71,6 +71,8 @@ import org.l2jmobius.gameserver.util.Util; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -690,13 +692,17 @@ public class CreatureAI extends AbstractAI } clientStoppedMoving(); - if (_actor instanceof Npc) + if (_actor.isNpc()) { final Npc npc = (Npc) _actor; WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // If the Intention was AI_INTENTION_MOVE_TO, set the Intention to AI_INTENTION_ACTIVE diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java index 89fd818d1e..42e2c1a09e 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -289,6 +289,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + private OnCreatureSkillUse _onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -916,7 +923,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Notify to scripts - final TerminateReturn attackReturn = EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target), this, TerminateReturn.class); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + + final TerminateReturn attackReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this, TerminateReturn.class); if ((attackReturn != null) && attackReturn.terminate()) { getAI().setIntention(AI_INTENTION_ACTIVE); @@ -925,7 +939,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Notify to scripts - final TerminateReturn attackedReturn = EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target), target, TerminateReturn.class); + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + final TerminateReturn attackedReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target, TerminateReturn.class); if ((attackedReturn != null) && attackedReturn.terminate()) { getAI().setIntention(AI_INTENTION_ACTIVE); @@ -1694,7 +1714,16 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe return; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(this, skill, simultaneously, target, targets), this, TerminateReturn.class); + if (_onCreatureSkillUse == null) + { + _onCreatureSkillUse = new OnCreatureSkillUse(); + } + _onCreatureSkillUse.setCaster(this); + _onCreatureSkillUse.setSkill(skill); + _onCreatureSkillUse.setSimultaneously(simultaneously); + _onCreatureSkillUse.setTarget(target); + _onCreatureSkillUse.setTargets(targets); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureSkillUse, this, TerminateReturn.class); if ((term != null) && term.terminate()) { if (simultaneously) @@ -2459,6 +2488,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { getAI().stopAITask(); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + _onCreatureSkillUse = null; + return super.decayMe(); } @@ -6546,8 +6583,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyDamageReceived(double damage, Creature attacker, Skill skill, boolean critical, boolean damageOverTime) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageReceived(attacker, this, damage, skill, critical, damageOverTime), this); - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, damage, skill, critical, damageOverTime), attacker); + if (attacker != null) + { + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(damage); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(damageOverTime); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); + } + + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(damage); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(damageOverTime); + EventDispatcher.getInstance().notifyEventAsync(_onCreatureDamageReceived, this); } /** @@ -6557,7 +6618,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index 77dc05d61d..5f344abf1c 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -26,13 +26,11 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; + private Creature _attacker; + private Creature _target; - public OnCreatureAttack(Creature attacker, Creature target) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; } public Creature getAttacker() @@ -40,11 +38,21 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index 5a54aa6111..563facf512 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -26,13 +26,11 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; + private Creature _attacker; + private Creature _target; - public OnCreatureAttacked(Creature attacker, Creature target) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; } public Creature getAttacker() @@ -40,11 +38,21 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 74d3cbe1aa..24b8416eb1 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,21 +27,15 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; } public Creature getAttacker() @@ -49,31 +43,61 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 85288287ec..145ca64c16 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,21 +27,15 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; } public Creature getAttacker() @@ -49,31 +43,61 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 40314968c2..6bb889a984 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -28,19 +28,14 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final Creature _target; - private final WorldObject[] _targets; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; + private Creature _target; + private WorldObject[] _targets; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously, Creature target, WorldObject[] targets) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; - _targets = targets; } public Creature getCaster() @@ -48,26 +43,51 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public WorldObject[] getTargets() { return _targets; } + public synchronized void setTargets(WorldObject[] targets) + { + _targets = targets; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 2cf9aba19e..6ea4f1ee66 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -71,6 +71,8 @@ import org.l2jmobius.gameserver.util.Util; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -690,13 +692,17 @@ public class CreatureAI extends AbstractAI } clientStoppedMoving(); - if (_actor instanceof Npc) + if (_actor.isNpc()) { final Npc npc = (Npc) _actor; WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // If the Intention was AI_INTENTION_MOVE_TO, set the Intention to AI_INTENTION_ACTIVE diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java index dc1401787a..54d1c0ea93 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -290,6 +290,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + private OnCreatureSkillUse _onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -917,7 +924,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Notify to scripts - final TerminateReturn attackReturn = EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target), this, TerminateReturn.class); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + + final TerminateReturn attackReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this, TerminateReturn.class); if ((attackReturn != null) && attackReturn.terminate()) { getAI().setIntention(AI_INTENTION_ACTIVE); @@ -926,7 +940,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Notify to scripts - final TerminateReturn attackedReturn = EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target), target, TerminateReturn.class); + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + final TerminateReturn attackedReturn = EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target, TerminateReturn.class); if ((attackedReturn != null) && attackedReturn.terminate()) { getAI().setIntention(AI_INTENTION_ACTIVE); @@ -1695,7 +1715,16 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe return; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(this, skill, simultaneously, target, targets), this, TerminateReturn.class); + if (_onCreatureSkillUse == null) + { + _onCreatureSkillUse = new OnCreatureSkillUse(); + } + _onCreatureSkillUse.setCaster(this); + _onCreatureSkillUse.setSkill(skill); + _onCreatureSkillUse.setSimultaneously(simultaneously); + _onCreatureSkillUse.setTarget(target); + _onCreatureSkillUse.setTargets(targets); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureSkillUse, this, TerminateReturn.class); if ((term != null) && term.terminate()) { if (simultaneously) @@ -2461,6 +2490,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { getAI().stopAITask(); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + _onCreatureSkillUse = null; + return super.decayMe(); } @@ -6548,8 +6585,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyDamageReceived(double damage, Creature attacker, Skill skill, boolean critical, boolean damageOverTime) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageReceived(attacker, this, damage, skill, critical, damageOverTime), this); - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, damage, skill, critical, damageOverTime), attacker); + if (attacker != null) + { + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(damage); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(damageOverTime); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); + } + + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(damage); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(damageOverTime); + EventDispatcher.getInstance().notifyEventAsync(_onCreatureDamageReceived, this); } /** @@ -6559,7 +6620,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index 77dc05d61d..5f344abf1c 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -26,13 +26,11 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; + private Creature _attacker; + private Creature _target; - public OnCreatureAttack(Creature attacker, Creature target) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; } public Creature getAttacker() @@ -40,11 +38,21 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index 5a54aa6111..563facf512 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -26,13 +26,11 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; + private Creature _attacker; + private Creature _target; - public OnCreatureAttacked(Creature attacker, Creature target) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; } public Creature getAttacker() @@ -40,11 +38,21 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 74d3cbe1aa..24b8416eb1 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,21 +27,15 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; } public Creature getAttacker() @@ -49,31 +43,61 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 85288287ec..145ca64c16 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,21 +27,15 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; } public Creature getAttacker() @@ -49,31 +43,61 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 40314968c2..6bb889a984 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -28,19 +28,14 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final Creature _target; - private final WorldObject[] _targets; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; + private Creature _target; + private WorldObject[] _targets; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously, Creature target, WorldObject[] targets) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; - _targets = targets; } public Creature getCaster() @@ -48,26 +43,51 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public WorldObject[] getTargets() { return _targets; } + public synchronized void setTargets(WorldObject[] targets) + { + _targets = targets; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index fbfa5b0b48..72a0ce33ed 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5039,7 +5095,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a4b561ab84..b49a60e0be 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java index fbfa5b0b48..72a0ce33ed 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5039,7 +5095,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a4b561ab84..b49a60e0be 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java index 63fe52bf4a..0ab049bfab 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5048,7 +5104,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a4b561ab84..b49a60e0be 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index dc58024aa0..12f6eb96f4 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -104,6 +104,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -290,6 +292,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -568,6 +578,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3921,8 +3939,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4652,10 +4686,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5073,7 +5129,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a4b561ab84..b49a60e0be 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index dc58024aa0..12f6eb96f4 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -104,6 +104,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -290,6 +292,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -568,6 +578,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3921,8 +3939,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4652,10 +4686,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5073,7 +5129,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a4b561ab84..b49a60e0be 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java index e33c3e4225..d79bfce28c 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -104,6 +104,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -290,6 +292,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -568,6 +578,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3920,8 +3938,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4651,10 +4685,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5072,7 +5128,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index 78079e44ae..2919f0f50f 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -528,7 +528,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -973,7 +981,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java index fbfa5b0b48..72a0ce33ed 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -103,6 +103,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -289,6 +291,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4639,10 +4673,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5039,7 +5095,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index a4b561ab84..b49a60e0be 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -523,7 +523,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -968,7 +976,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java index 5f71f0d796..85039fc1db 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -104,6 +104,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -290,6 +292,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -568,6 +578,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3923,8 +3941,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4661,10 +4695,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5082,7 +5138,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index 2e209f6999..e8247e7a7f 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -528,7 +528,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -973,7 +981,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/CreatureAI.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/CreatureAI.java index 8855a51323..093f6f16ca 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/CreatureAI.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/ai/CreatureAI.java @@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; */ public class CreatureAI extends AbstractAI { + private OnNpcMoveFinished _onNpcMoveFinished = null; + public static class IntentionCommand { protected final CtrlIntention _crtlIntention; @@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI WalkingManager.getInstance().onArrived(npc); // Walking Manager support // Notify to scripts - EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveFinished(npc), npc); + if (_onNpcMoveFinished == null) + { + _onNpcMoveFinished = new OnNpcMoveFinished(npc); + } + EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); } // Launch actions corresponding to the Event Think diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Creature.java index 95e70aea68..0f291f9fcc 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -104,6 +104,8 @@ import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDamageRecei import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillUse; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleport; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported; import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener; @@ -290,6 +292,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe /** A list containing the dropped items of this fake player. */ private final List _fakePlayerDrops = new CopyOnWriteArrayList<>(); + private OnCreatureAttack _onCreatureAttack = null; + private OnCreatureAttacked _onCreatureAttacked = null; + private OnCreatureDamageDealt _onCreatureDamageDealt = null; + private OnCreatureDamageReceived _onCreatureDamageReceived = null; + private OnCreatureAttackAvoid _onCreatureAttackAvoid = null; + public OnCreatureSkillFinishCast onCreatureSkillFinishCast = null; + public OnCreatureSkillUse onCreatureSkillUse = null; + /** * Creates a creature. * @param template the creature template @@ -568,6 +578,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe { _summoner.removeSummonedNpc(getObjectId()); } + + _onCreatureAttack = null; + _onCreatureAttacked = null; + _onCreatureDamageDealt = null; + _onCreatureDamageReceived = null; + _onCreatureAttackAvoid = null; + onCreatureSkillFinishCast = null; + onCreatureSkillUse = null; } @Override @@ -3930,8 +3948,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false); // Notify to scripts when the attack has been done. - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this); - EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target); + if (_onCreatureAttack == null) + { + _onCreatureAttack = new OnCreatureAttack(); + } + _onCreatureAttack.setAttacker(this); + _onCreatureAttack.setTarget(target); + _onCreatureAttack.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); + + if (_onCreatureAttacked == null) + { + _onCreatureAttacked = new OnCreatureAttacked(); + } + _onCreatureAttacked.setAttacker(this); + _onCreatureAttacked.setTarget(target); + _onCreatureAttacked.setSkill(null); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); + if (_triggerSkills != null) { for (OptionsSkillHolder holder : _triggerSkills.values()) @@ -4668,10 +4702,32 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe // Notify of this attack only if there is an attacking creature. if (attacker != null) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureDamageDealt(attacker, this, amount, skill, critical, isDOT, reflect), attacker); + if (_onCreatureDamageDealt == null) + { + _onCreatureDamageDealt = new OnCreatureDamageDealt(); + } + _onCreatureDamageDealt.setAttacker(attacker); + _onCreatureDamageDealt.setTarget(this); + _onCreatureDamageDealt.setDamage(amount); + _onCreatureDamageDealt.setSkill(skill); + _onCreatureDamageDealt.setCritical(critical); + _onCreatureDamageDealt.setDamageOverTime(isDOT); + _onCreatureDamageDealt.setReflect(reflect); + EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); } - final DamageReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureDamageReceived(attacker, this, amount, skill, critical, isDOT, reflect), this, DamageReturn.class); + if (_onCreatureDamageReceived == null) + { + _onCreatureDamageReceived = new OnCreatureDamageReceived(); + } + _onCreatureDamageReceived.setAttacker(attacker); + _onCreatureDamageReceived.setTarget(this); + _onCreatureDamageReceived.setDamage(amount); + _onCreatureDamageReceived.setSkill(skill); + _onCreatureDamageReceived.setCritical(critical); + _onCreatureDamageReceived.setDamageOverTime(isDOT); + _onCreatureDamageReceived.setReflect(reflect); + final DamageReturn term = EventDispatcher.getInstance().notifyEvent(_onCreatureDamageReceived, this, DamageReturn.class); if (term != null) { if (term.terminate()) @@ -5089,7 +5145,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public void notifyAttackAvoid(Creature target, boolean isDot) { - EventDispatcher.getInstance().notifyEventAsync(new OnCreatureAttackAvoid(this, target, isDot), target); + if (_onCreatureAttackAvoid == null) + { + _onCreatureAttackAvoid = new OnCreatureAttackAvoid(); + } + _onCreatureAttackAvoid.setAttacker(this); + _onCreatureAttackAvoid.setTarget(target); + _onCreatureAttackAvoid.setDamageOverTime(isDot); + EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); } /** diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java index fbc70e4f01..97bb553966 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttack.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttack implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttack(Creature attacker, Creature target, Skill skill) + public OnCreatureAttack() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java index 953b6d48f6..ce371d114a 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttackAvoid.java @@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent; */ public class OnCreatureAttackAvoid implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final boolean _damageOverTime; + private Creature _attacker; + private Creature _target; + private boolean _damageOverTime; - /** - * @param attacker who attack - * @param target who avoid - * @param isDot is dot damage - */ - public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot) + public OnCreatureAttackAvoid() { - _attacker = attacker; - _target = target; - _damageOverTime = isDot; } public Creature getAttacker() @@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } - /** - * @return - */ + public synchronized void setTarget(Creature target) + { + _target = target; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java index b76834ca77..2c7f027d32 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureAttacked.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureAttacked implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final Skill _skill; + private Creature _attacker; + private Creature _target; + private Skill _skill; - public OnCreatureAttacked(Creature attacker, Creature target, Skill skill) + public OnCreatureAttacked() { - _attacker = attacker; - _target = target; - _skill = skill; } public Creature getAttacker() @@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java index 0bba620894..6fbe073256 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageDealt.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageDealt implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageDealt(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageDealt() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java index 28bf3f9016..d5da87def3 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureDamageReceived.java @@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureDamageReceived implements IBaseEvent { - private final Creature _attacker; - private final Creature _target; - private final double _damage; - private final Skill _skill; - private final boolean _crit; - private final boolean _damageOverTime; - private final boolean _reflect; + private Creature _attacker; + private Creature _target; + private double _damage; + private Skill _skill; + private boolean _crit; + private boolean _damageOverTime; + private boolean _reflect; - public OnCreatureDamageReceived(Creature attacker, Creature target, double damage, Skill skill, boolean crit, boolean damageOverTime, boolean reflect) + public OnCreatureDamageReceived() { - _attacker = attacker; - _target = target; - _damage = damage; - _skill = skill; - _crit = crit; - _damageOverTime = damageOverTime; - _reflect = reflect; } public Creature getAttacker() @@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent return _attacker; } + public synchronized void setAttacker(Creature attacker) + { + _attacker = attacker; + } + public Creature getTarget() { return _target; } + public synchronized void setTarget(Creature target) + { + _target = target; + } + public double getDamage() { return _damage; } + public synchronized void setDamage(double damage) + { + _damage = damage; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isCritical() { return _crit; } + public synchronized void setCritical(boolean crit) + { + _crit = crit; + } + public boolean isDamageOverTime() { return _damageOverTime; } + public synchronized void setDamageOverTime(boolean damageOverTime) + { + _damageOverTime = damageOverTime; + } + public boolean isReflect() { return _reflect; } + public synchronized void setReflect(boolean reflect) + { + _reflect = reflect; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java index d6669f0d31..f59205e7a5 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillFinishCast.java @@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillFinishCast implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; - private final WorldObject _target; + private Creature _caster; + private WorldObject _target; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillFinishCast(Creature caster, WorldObject target, Skill skill, boolean simultaneously) + public OnCreatureSkillFinishCast() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; - _target = target; } public Creature getCaster() @@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public WorldObject getTarget() { return _target; } + public synchronized void setTarget(WorldObject target) + { + _target = target; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java index 7d5a5efc3c..794aeda885 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/events/impl/creature/OnCreatureSkillUse.java @@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill; */ public class OnCreatureSkillUse implements IBaseEvent { - private final Creature _caster; - private final Skill _skill; - private final boolean _simultaneously; + private Creature _caster; + private Skill _skill; + private boolean _simultaneously; - public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously) + public OnCreatureSkillUse() { - _caster = caster; - _skill = skill; - _simultaneously = simultaneously; } public Creature getCaster() @@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent return _caster; } + public synchronized void setCaster(Creature caster) + { + _caster = caster; + } + public Skill getSkill() { return _skill; } + public synchronized void setSkill(Skill skill) + { + _skill = skill; + } + public boolean isSimultaneously() { return _simultaneously; } + public synchronized void setSimultaneously(boolean simultaneously) + { + _simultaneously = simultaneously; + } + @Override public EventType getType() { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java index 2e209f6999..e8247e7a7f 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -528,7 +528,15 @@ public class SkillCaster implements Runnable } // Notify skill is casted. - EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillFinishCast(caster, target, _skill, _skill.isWithoutAction()), caster); + if (caster.onCreatureSkillFinishCast == null) + { + caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); + } + caster.onCreatureSkillFinishCast.setCaster(caster); + caster.onCreatureSkillFinishCast.setTarget(target); + caster.onCreatureSkillFinishCast.setSkill(_skill); + caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); + EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); // Call the skill's effects and AI interraction and stuff. callSkill(caster, target, _targets, _skill, _item); @@ -973,7 +981,14 @@ public class SkillCaster implements Runnable return false; } - final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureSkillUse(caster, skill, skill.isWithoutAction()), caster, TerminateReturn.class); + if (caster.onCreatureSkillUse == null) + { + caster.onCreatureSkillUse = new OnCreatureSkillUse(); + } + caster.onCreatureSkillUse.setCaster(caster); + caster.onCreatureSkillUse.setSkill(skill); + caster.onCreatureSkillUse.setSimultaneously(skill.isWithoutAction()); + final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillUse, caster, TerminateReturn.class); if ((term != null) && term.terminate()) { caster.sendPacket(ActionFailed.STATIC_PACKET);