Store most popular IBaseEvent to reduce object creation.
This commit is contained in:
L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/areas/FairySettlement/LargeCocoon/LargeCocoon.java
Vendored
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
+68
-5
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
Vendored
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
+68
-5
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5040,7 +5096,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5049,7 +5105,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5049,7 +5105,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -66,7 +66,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3908,8 +3926,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5049,7 +5105,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -63,7 +63,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
+68
-5
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3907,8 +3925,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5048,7 +5104,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -63,7 +63,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
|||||||
*/
|
*/
|
||||||
public class CreatureAI extends AbstractAI
|
public class CreatureAI extends AbstractAI
|
||||||
{
|
{
|
||||||
|
private OnNpcMoveFinished _onNpcMoveFinished = null;
|
||||||
|
|
||||||
public static class IntentionCommand
|
public static class IntentionCommand
|
||||||
{
|
{
|
||||||
protected final CtrlIntention _crtlIntention;
|
protected final CtrlIntention _crtlIntention;
|
||||||
@@ -691,7 +693,11 @@ public class CreatureAI extends AbstractAI
|
|||||||
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
WalkingManager.getInstance().onArrived(npc); // Walking Manager support
|
||||||
|
|
||||||
// Notify to scripts
|
// 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
|
// Launch actions corresponding to the Event Think
|
||||||
|
|||||||
@@ -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.OnCreatureDeath;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureKilled;
|
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.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.OnCreatureTeleport;
|
||||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureTeleported;
|
||||||
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
|
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. */
|
/** A list containing the dropped items of this fake player. */
|
||||||
private final List<ItemInstance> _fakePlayerDrops = new CopyOnWriteArrayList<>();
|
private final List<ItemInstance> _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.
|
* Creates a creature.
|
||||||
* @param template the creature template
|
* @param template the creature template
|
||||||
@@ -567,6 +577,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
{
|
{
|
||||||
_summoner.removeSummonedNpc(getObjectId());
|
_summoner.removeSummonedNpc(getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onCreatureAttack = null;
|
||||||
|
_onCreatureAttacked = null;
|
||||||
|
_onCreatureDamageDealt = null;
|
||||||
|
_onCreatureDamageReceived = null;
|
||||||
|
_onCreatureAttackAvoid = null;
|
||||||
|
onCreatureSkillFinishCast = null;
|
||||||
|
onCreatureSkillUse = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -3907,8 +3925,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
doAttack(hit.getDamage(), target, null, false, false, hit.isCritical(), false);
|
||||||
|
|
||||||
// Notify to scripts when the attack has been done.
|
// Notify to scripts when the attack has been done.
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttack(this, target, null), this);
|
if (_onCreatureAttack == null)
|
||||||
EventDispatcher.getInstance().notifyEvent(new OnCreatureAttacked(this, target, null), target);
|
{
|
||||||
|
_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)
|
if (_triggerSkills != null)
|
||||||
{
|
{
|
||||||
for (OptionsSkillHolder holder : _triggerSkills.values())
|
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.
|
// Notify of this attack only if there is an attacking creature.
|
||||||
if (attacker != null)
|
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 != null)
|
||||||
{
|
{
|
||||||
if (term.terminate())
|
if (term.terminate())
|
||||||
@@ -5048,7 +5104,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
*/
|
*/
|
||||||
public void notifyAttackAvoid(Creature target, boolean isDot)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttack implements IBaseEvent
|
public class OnCreatureAttack implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttack(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttack()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttack implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-15
@@ -26,20 +26,12 @@ import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttackAvoid implements IBaseEvent
|
public class OnCreatureAttackAvoid implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
|
|
||||||
/**
|
public OnCreatureAttackAvoid()
|
||||||
* @param attacker who attack
|
|
||||||
* @param target who avoid
|
|
||||||
* @param isDot is dot damage
|
|
||||||
*/
|
|
||||||
public OnCreatureAttackAvoid(Creature attacker, Creature target, boolean isDot)
|
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_damageOverTime = isDot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -47,19 +39,31 @@ public class OnCreatureAttackAvoid implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public synchronized void setTarget(Creature target)
|
||||||
* @return
|
{
|
||||||
*/
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureAttacked implements IBaseEvent
|
public class OnCreatureAttacked implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
|
|
||||||
public OnCreatureAttacked(Creature attacker, Creature target, Skill skill)
|
public OnCreatureAttacked()
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
|
||||||
_target = target;
|
|
||||||
_skill = skill;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getAttacker()
|
public Creature getAttacker()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureAttacked implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageDealt implements IBaseEvent
|
public class OnCreatureDamageDealt implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageDealt implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+43
-15
@@ -27,23 +27,16 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureDamageReceived implements IBaseEvent
|
public class OnCreatureDamageReceived implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _attacker;
|
private Creature _attacker;
|
||||||
private final Creature _target;
|
private Creature _target;
|
||||||
private final double _damage;
|
private double _damage;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _crit;
|
private boolean _crit;
|
||||||
private final boolean _damageOverTime;
|
private boolean _damageOverTime;
|
||||||
private final boolean _reflect;
|
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()
|
public Creature getAttacker()
|
||||||
@@ -51,36 +44,71 @@ public class OnCreatureDamageReceived implements IBaseEvent
|
|||||||
return _attacker;
|
return _attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setAttacker(Creature attacker)
|
||||||
|
{
|
||||||
|
_attacker = attacker;
|
||||||
|
}
|
||||||
|
|
||||||
public Creature getTarget()
|
public Creature getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(Creature target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public double getDamage()
|
public double getDamage()
|
||||||
{
|
{
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamage(double damage)
|
||||||
|
{
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCritical()
|
public boolean isCritical()
|
||||||
{
|
{
|
||||||
return _crit;
|
return _crit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCritical(boolean crit)
|
||||||
|
{
|
||||||
|
_crit = crit;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDamageOverTime()
|
public boolean isDamageOverTime()
|
||||||
{
|
{
|
||||||
return _damageOverTime;
|
return _damageOverTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setDamageOverTime(boolean damageOverTime)
|
||||||
|
{
|
||||||
|
_damageOverTime = damageOverTime;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReflect()
|
public boolean isReflect()
|
||||||
{
|
{
|
||||||
return _reflect;
|
return _reflect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setReflect(boolean reflect)
|
||||||
|
{
|
||||||
|
_reflect = reflect;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+25
-9
@@ -28,17 +28,13 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillFinishCast implements IBaseEvent
|
public class OnCreatureSkillFinishCast implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private WorldObject _target;
|
||||||
private final boolean _simultaneously;
|
private Skill _skill;
|
||||||
private final WorldObject _target;
|
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()
|
public Creature getCaster()
|
||||||
@@ -46,21 +42,41 @@ public class OnCreatureSkillFinishCast implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public WorldObject getTarget()
|
public WorldObject getTarget()
|
||||||
{
|
{
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setTarget(WorldObject target)
|
||||||
|
{
|
||||||
|
_target = target;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-7
@@ -27,15 +27,12 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
*/
|
*/
|
||||||
public class OnCreatureSkillUse implements IBaseEvent
|
public class OnCreatureSkillUse implements IBaseEvent
|
||||||
{
|
{
|
||||||
private final Creature _caster;
|
private Creature _caster;
|
||||||
private final Skill _skill;
|
private Skill _skill;
|
||||||
private final boolean _simultaneously;
|
private boolean _simultaneously;
|
||||||
|
|
||||||
public OnCreatureSkillUse(Creature caster, Skill skill, boolean simultaneously)
|
public OnCreatureSkillUse()
|
||||||
{
|
{
|
||||||
_caster = caster;
|
|
||||||
_skill = skill;
|
|
||||||
_simultaneously = simultaneously;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Creature getCaster()
|
public Creature getCaster()
|
||||||
@@ -43,16 +40,31 @@ public class OnCreatureSkillUse implements IBaseEvent
|
|||||||
return _caster;
|
return _caster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setCaster(Creature caster)
|
||||||
|
{
|
||||||
|
_caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
public Skill getSkill()
|
public Skill getSkill()
|
||||||
{
|
{
|
||||||
return _skill;
|
return _skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSkill(Skill skill)
|
||||||
|
{
|
||||||
|
_skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSimultaneously()
|
public boolean isSimultaneously()
|
||||||
{
|
{
|
||||||
return _simultaneously;
|
return _simultaneously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void setSimultaneously(boolean simultaneously)
|
||||||
|
{
|
||||||
|
_simultaneously = simultaneously;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EventType getType()
|
public EventType getType()
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-2
@@ -523,7 +523,15 @@ public class SkillCaster implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify skill is casted.
|
// 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.
|
// Call the skill's effects and AI interraction and stuff.
|
||||||
callSkill(caster, target, _targets, _skill, _item);
|
callSkill(caster, target, _targets, _skill, _item);
|
||||||
@@ -968,7 +976,14 @@ public class SkillCaster implements Runnable
|
|||||||
return false;
|
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())
|
if ((term != null) && term.terminate())
|
||||||
{
|
{
|
||||||
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
caster.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
|
|||||||
+5
-1
@@ -63,7 +63,11 @@ public class LargeCocoon extends AbstractNpcAI
|
|||||||
{
|
{
|
||||||
case "attack":
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case "attackPowerful":
|
case "attackPowerful":
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user