Addition of EventDispatcher hasListener methods.

This commit is contained in:
MobiusDevelopment
2022-08-20 21:34:27 +00:00
parent 58f30044d5
commit fdb7fdbe3b
1657 changed files with 20543 additions and 7176 deletions
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet; import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.PetStatusShow; import org.l2jmobius.gameserver.network.serverpackets.PetStatusShow;
@@ -79,7 +80,10 @@ public class PetAction implements IActionHandler
player.sendPacket(new PetStatusShow((Pet) target)); player.sendPacket(new PetStatusShow((Pet) target));
// Notify to scripts // Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), (Summon) target); if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_TALK, target))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), target);
}
} }
player.updateNotMoveUntil(); player.updateNotMoveUntil();
} }
@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -48,7 +49,10 @@ public class SummonAction implements IActionHandler
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
// Notify to scripts // Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), (Summon) target); if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_TALK, target))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), target);
}
} }
else if (player.getTarget() != target) else if (player.getTarget() != target)
{ {
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonAgathion; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonAgathion;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -59,11 +60,13 @@ public class SummonAgathion extends AbstractEffect
} }
final Player player = effected.getActingPlayer(); final Player player = effected.getActingPlayer();
player.setAgathionId(_npcId); player.setAgathionId(_npcId);
player.sendPacket(new ExUserInfoCubic(player)); player.sendPacket(new ExUserInfoCubic(player));
player.broadcastCharInfo(); player.broadcastCharInfo();
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_AGATHION))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonAgathion(player, _npcId)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonAgathion(player, _npcId));
} }
} }
}
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.Trap; import org.l2jmobius.gameserver.model.actor.instance.Trap;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -80,7 +81,10 @@ public class TrapRemove extends AbstractEffect
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, trap))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(trap, effector, TrapAction.TRAP_DISARMED), trap); EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(trap, effector, TrapAction.TRAP_DISARMED), trap);
}
trap.unSummon(); trap.unSummon();
if (effector.isPlayer()) if (effector.isPlayer())
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerUnsummonAgathion; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerUnsummonAgathion;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -55,8 +56,11 @@ public class UnsummonAgathion extends AbstractEffect
player.sendPacket(new ExUserInfoCubic(player)); player.sendPacket(new ExUserInfoCubic(player));
player.broadcastCharInfo(); player.broadcastCharInfo();
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_UNSUMMON_AGATHION))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerUnsummonAgathion(player, agathionId)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerUnsummonAgathion(player, agathionId));
} }
} }
} }
} }
}
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSocialAction; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSocialAction;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExAskCoupleAction; import org.l2jmobius.gameserver.network.serverpackets.ExAskCoupleAction;
@@ -93,8 +94,11 @@ public class SocialAction implements IPlayerActionHandler
player.broadcastPacket(new org.l2jmobius.gameserver.network.serverpackets.SocialAction(player.getObjectId(), id)); player.broadcastPacket(new org.l2jmobius.gameserver.network.serverpackets.SocialAction(player.getObjectId(), id));
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SOCIAL_ACTION, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSocialAction(player, id), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSocialAction(player, id), player);
} }
}
return true; return true;
} }
@@ -842,8 +842,12 @@ public class CeremonyOfChaos extends AbstractNpcAI
final StatSet params = new StatSet(); final StatSet params = new StatSet();
params.set("time", 30); params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30000, null, null); getTimers().addTimer("match_end_countdown", params, 30000, null, null);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT))
{
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, memberList)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, memberList));
} }
}
private void teleportPlayersOut() private void teleportPlayersOut()
{ {
@@ -47,6 +47,7 @@ import org.l2jmobius.gameserver.model.actor.instance.Monster;
import org.l2jmobius.gameserver.model.actor.instance.RaidBoss; import org.l2jmobius.gameserver.model.actor.instance.RaidBoss;
import org.l2jmobius.gameserver.model.effects.EffectType; import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableFactionCall; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableFactionCall;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableHate; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableHate;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
@@ -403,12 +404,15 @@ public class AttackableAI extends CreatureAI
} }
} }
else if (t.isPlayable()) else if (t.isPlayable())
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_HATE, getActiveChar()))
{ {
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnAttackableHate(getActiveChar(), t.getActingPlayer(), t.isSummon()), getActiveChar(), TerminateReturn.class); final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnAttackableHate(getActiveChar(), t.getActingPlayer(), t.isSummon()), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate()) if ((term != null) && term.terminate())
{ {
return; return;
} }
}
// Get the hate level of the Attackable against this Creature target contained in _aggroList // Get the hate level of the Attackable against this Creature target contained in _aggroList
final int hating = npc.getHating(t); final int hating = npc.getHating(t);
@@ -750,8 +754,12 @@ public class AttackableAI extends CreatureAI
// By default, when a faction member calls for help, attack the caller's attacker. // By default, when a faction member calls for help, attack the caller's attacker.
// Notify the AI with EVT_AGGRESSION // Notify the AI with EVT_AGGRESSION
called.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, finalTarget, 1); called.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, finalTarget, 1);
if (EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_FACTION_CALL, called))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableFactionCall(called, getActiveChar(), finalTarget.getActingPlayer(), finalTarget.isSummon()), called); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableFactionCall(called, getActiveChar(), finalTarget.getActingPlayer(), finalTarget.isSummon()), called);
} }
}
else if (called.getAI()._intention != CtrlIntention.AI_INTENTION_ATTACK) else if (called.getAI()._intention != CtrlIntention.AI_INTENTION_ATTACK)
{ {
called.addDamageHate(finalTarget, 0, npc.getHating(finalTarget)); called.addDamageHate(finalTarget, 0, npc.getHating(finalTarget));
@@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.effects.EffectType; import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveFinished; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveFinished;
import org.l2jmobius.gameserver.model.interfaces.ILocational; import org.l2jmobius.gameserver.model.interfaces.ILocational;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -701,12 +702,15 @@ 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
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_FINISHED, npc))
{
if (_onNpcMoveFinished == null) if (_onNpcMoveFinished == null)
{ {
_onNpcMoveFinished = new OnNpcMoveFinished(npc); _onNpcMoveFinished = new OnNpcMoveFinished(npc);
} }
EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc);
} }
}
// Launch actions corresponding to the Event Think // Launch actions corresponding to the Event Think
onEvtThink(); onEvtThink();
@@ -46,6 +46,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.EventMonster; import org.l2jmobius.gameserver.model.actor.instance.EventMonster;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate; import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -350,7 +351,11 @@ public class ItemTable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_CREATE, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemCreate(process, item, actor, reference), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemCreate(process, item, actor, reference), item.getTemplate());
}
return item; return item;
} }
@@ -45,6 +45,7 @@ import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege; import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.clan.ClanWar; import org.l2jmobius.gameserver.model.clan.ClanWar;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarFinish; import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarFinish;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanDestroy; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanDestroy;
@@ -214,7 +215,11 @@ public class ClanTable
player.broadcastUserInfo(UserInfoType.RELATION, UserInfoType.CLAN); player.broadcastUserInfo(UserInfoType.RELATION, UserInfoType.CLAN);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_CREATE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan));
}
return clan; return clan;
} }
@@ -327,8 +332,11 @@ public class ClanTable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_DESTROY))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanDestroy(leaderMember, clan)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanDestroy(leaderMember, clan));
} }
}
public void scheduleRemoveClan(int clanId) public void scheduleRemoveClan(int clanId)
{ {
@@ -383,7 +391,10 @@ public class ClanTable
final Clan clan1 = getInstance().getClan(clanId1); final Clan clan1 = getInstance().getClan(clanId1);
final Clan clan2 = getInstance().getClan(clanId2); final Clan clan2 = getInstance().getClan(clanId2);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CLAN_WAR_FINISH))
{
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarFinish(clan1, clan2)); EventDispatcher.getInstance().notifyEventAsync(new OnClanWarFinish(clan1, clan2));
}
clan1.deleteWar(clan2.getId()); clan1.deleteWar(clan2.getId());
clan2.deleteWar(clan1.getId()); clan2.deleteWar(clan1.getId());
@@ -45,6 +45,7 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.Monster; import org.l2jmobius.gameserver.model.actor.instance.Monster;
import org.l2jmobius.gameserver.model.actor.tasks.npc.walker.ArrivedTask; import org.l2jmobius.gameserver.model.actor.tasks.npc.walker.ArrivedTask;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveNodeArrived; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveNodeArrived;
import org.l2jmobius.gameserver.model.holders.NpcRoutesHolder; import org.l2jmobius.gameserver.model.holders.NpcRoutesHolder;
import org.l2jmobius.gameserver.network.NpcStringId; import org.l2jmobius.gameserver.network.NpcStringId;
@@ -424,7 +425,10 @@ public class WalkingManager implements IXmlReader
} }
// Notify quest // Notify quest
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_NODE_ARRIVED, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveNodeArrived(npc), npc); EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveNodeArrived(npc), npc);
}
final WalkInfo walk = _activeRoutes.get(npc.getObjectId()); final WalkInfo walk = _activeRoutes.get(npc.getObjectId());
// Opposite should not happen... but happens sometime // Opposite should not happen... but happens sometime
@@ -22,6 +22,7 @@ import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.instancemanager.WalkingManager; import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveRouteFinished; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveRouteFinished;
/** /**
@@ -92,7 +93,10 @@ public class WalkInfo
if (_currentNode == getRoute().getNodesCount()) // Last node arrived if (_currentNode == getRoute().getNodesCount()) // Last node arrived
{ {
// Notify quest // Notify quest
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_ROUTE_FINISHED, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveRouteFinished(npc), npc); EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveRouteFinished(npc), npc);
}
if (!getRoute().repeatWalk()) if (!getRoute().repeatWalk())
{ {
@@ -59,6 +59,7 @@ import org.l2jmobius.gameserver.model.actor.tasks.attackable.CommandChannelTimer
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAggroRangeEnter; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAggroRangeEnter;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAttack; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAttack;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableKill; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableKill;
@@ -296,9 +297,9 @@ public class Attackable extends Npc
return false; return false;
} }
if ((killer != null) && (killer.getActingPlayer() != null)) // Notify to scripts.
if ((killer != null) && (killer.getActingPlayer() != null) && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_KILL, this))
{ {
// Delayed notification
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(killer.getActingPlayer(), this, killer.isSummon()), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(killer.getActingPlayer(), this, killer.isSummon()), this);
} }
@@ -781,7 +782,7 @@ public class Attackable extends Npc
addDamageHate(attacker, damage, (int) hateValue); addDamageHate(attacker, damage, (int) hateValue);
final Player player = attacker.getActingPlayer(); final Player player = attacker.getActingPlayer();
if (player != null) if ((player != null) && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_ATTACK, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(player, this, damage, skill, attacker.isSummon()), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(player, this, damage, skill, attacker.isSummon()), this);
} }
@@ -845,8 +846,11 @@ public class Attackable extends Npc
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_AGGRO_RANGE_ENTER, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAggroRangeEnter(this, targetPlayer, attacker.isSummon()), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAggroRangeEnter(this, targetPlayer, attacker.isSummon()), this);
} }
}
else if ((targetPlayer == null) && (aggro == 0)) else if ((targetPlayer == null) && (aggro == 0))
{ {
aggro = 1; aggro = 1;
@@ -639,8 +639,12 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
spawnMe(getX(), getY(), getZ()); spawnMe(getX(), getY(), getZ());
setTeleporting(false); setTeleporting(false);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_TELEPORTED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureTeleported(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureTeleported(this), this);
} }
}
/** /**
* Add Creature instance that is attacking to the attacker list. * Add Creature instance that is attacking to the attacker list.
@@ -828,6 +832,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
int heading = headingValue; int heading = headingValue;
Instance instance = instanceValue; Instance instance = instanceValue;
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_TELEPORT, this))
{
final LocationReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureTeleport(this, x, y, z, heading, instance), this, LocationReturn.class); final LocationReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureTeleport(this, x, y, z, heading, instance), this, LocationReturn.class);
if (term != null) if (term != null)
{ {
@@ -844,6 +850,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
instance = term.getInstance(); instance = term.getInstance();
} }
} }
}
// Prepare creature for teleport. // Prepare creature for teleport.
if (_isPendingRevive) if (_isPendingRevive)
@@ -1718,8 +1725,16 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
setCurrentHp(0); setCurrentHp(0);
setDead(true); setDead(true);
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DEATH, this))
{
EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this); EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this);
}
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_KILLED, killer))
{
EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), killer); EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), killer);
}
abortAttack(); abortAttack();
abortCast(); abortCast();
@@ -3980,6 +3995,8 @@ 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.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACK, this))
{
if (_onCreatureAttack == null) if (_onCreatureAttack == null)
{ {
_onCreatureAttack = new OnCreatureAttack(); _onCreatureAttack = new OnCreatureAttack();
@@ -3988,7 +4005,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureAttack.setTarget(target); _onCreatureAttack.setTarget(target);
_onCreatureAttack.setSkill(null); _onCreatureAttack.setSkill(null);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this);
}
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACKED, target))
{
if (_onCreatureAttacked == null) if (_onCreatureAttacked == null)
{ {
_onCreatureAttacked = new OnCreatureAttacked(); _onCreatureAttacked = new OnCreatureAttacked();
@@ -3997,6 +4016,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureAttacked.setTarget(target); _onCreatureAttacked.setTarget(target);
_onCreatureAttacked.setSkill(null); _onCreatureAttacked.setSkill(null);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target);
}
if (_triggerSkills != null) if (_triggerSkills != null)
{ {
@@ -4725,7 +4745,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
double amount = amountValue; double amount = amountValue;
// 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().hasListener(EventType.ON_CREATURE_DAMAGE_DEALT, attacker))
{ {
if (_onCreatureDamageDealt == null) if (_onCreatureDamageDealt == null)
{ {
@@ -4740,7 +4760,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureDamageDealt.setReflect(reflect); _onCreatureDamageDealt.setReflect(reflect);
EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker);
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DAMAGE_RECEIVED, this))
{
if (_onCreatureDamageReceived == null) if (_onCreatureDamageReceived == null)
{ {
_onCreatureDamageReceived = new OnCreatureDamageReceived(); _onCreatureDamageReceived = new OnCreatureDamageReceived();
@@ -4764,6 +4785,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
amount = term.getDamage(); amount = term.getDamage();
} }
} }
}
final double damageCap = _stat.getValue(Stat.DAMAGE_LIMIT); final double damageCap = _stat.getValue(Stat.DAMAGE_LIMIT);
if (damageCap > 0) if (damageCap > 0)
@@ -5139,6 +5161,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
* @param isDot * @param isDot
*/ */
public void notifyAttackAvoid(Creature target, boolean isDot) public void notifyAttackAvoid(Creature target, boolean isDot)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACK_AVOID, target))
{ {
if (_onCreatureAttackAvoid == null) if (_onCreatureAttackAvoid == null)
{ {
@@ -5149,6 +5173,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureAttackAvoid.setDamageOverTime(isDot); _onCreatureAttackAvoid.setDamageOverTime(isDot);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target);
} }
}
/** /**
* @return {@link WeaponType} of current character's weapon or basic weapon type. * @return {@link WeaponType} of current character's weapon or basic weapon type.
@@ -5586,7 +5611,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
if (!creature.isInvisible()) if (!creature.isInvisible())
{ {
final WorldRegion worldRegion = getWorldRegion(); final WorldRegion worldRegion = getWorldRegion();
if ((worldRegion != null) && worldRegion.areNeighborsActive() && _seenCreatures.add(creature)) if ((worldRegion != null) && worldRegion.areNeighborsActive() && _seenCreatures.add(creature) && EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SEE, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureSee(this, creature), this); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureSee(this, creature), this);
} }
@@ -1055,10 +1055,13 @@ public class Npc extends Creature
_isRandomAnimationEnabled = getTemplate().isRandomAnimationEnabled(); _isRandomAnimationEnabled = getTemplate().isRandomAnimationEnabled();
_isRandomWalkingEnabled = !WalkingManager.getInstance().isTargeted(this) && getTemplate().isRandomWalkEnabled(); _isRandomWalkingEnabled = !WalkingManager.getInstance().isTargeted(this) && getTemplate().isRandomWalkEnabled();
if (isTeleporting()) if (isTeleporting())
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_TELEPORT, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcTeleport(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcTeleport(this), this);
} }
else }
else if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SPAWN, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSpawn(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcSpawn(this), this);
} }
@@ -1161,7 +1164,10 @@ public class Npc extends Creature
WalkingManager.getInstance().onDeath(this); WalkingManager.getInstance().onDeath(this);
// Notify DP scripts // Notify DP scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_DESPAWN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcDespawn(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcDespawn(this), this);
}
// Remove from instance world // Remove from instance world
final Instance instance = getInstanceWorld(); final Instance instance = getInstanceWorld();
@@ -1333,7 +1339,7 @@ public class Npc extends Creature
@Override @Override
public void notifyQuestEventSkillFinished(Skill skill, WorldObject target) public void notifyQuestEventSkillFinished(Skill skill, WorldObject target)
{ {
if (target != null) if ((target != null) && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_FINISHED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillFinished(this, target.getActingPlayer(), skill), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillFinished(this, target.getActingPlayer(), skill), this);
} }
@@ -1533,9 +1539,12 @@ public class Npc extends Creature
* @param reference the reference * @param reference the reference
*/ */
public void sendScriptEvent(String eventName, WorldObject receiver, WorldObject reference) public void sendScriptEvent(String eventName, WorldObject receiver, WorldObject reference)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_EVENT_RECEIVED, receiver))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcEventReceived(eventName, this, (Npc) receiver, reference), receiver); EventDispatcher.getInstance().notifyEventAsync(new OnNpcEventReceived(eventName, this, (Npc) receiver, reference), receiver);
} }
}
/** /**
* Gets point in range between radiusMin and radiusMax from this NPC * Gets point in range between radiusMin and radiusMax from this NPC
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanWar; import org.l2jmobius.gameserver.model.clan.ClanWar;
import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
@@ -99,12 +100,15 @@ public abstract class Playable extends Creature
@Override @Override
public boolean doDie(Creature killer) public boolean doDie(Creature killer)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DEATH, this))
{ {
final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class); final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class);
if ((returnBack != null) && returnBack.terminate()) if ((returnBack != null) && returnBack.terminate())
{ {
return false; return false;
} }
}
// killing is only possible one time // killing is only possible one time
synchronized (this) synchronized (this)
@@ -1911,8 +1911,12 @@ public class Player extends Playable
* @param pkKills * @param pkKills
*/ */
public void setPkKills(int pkKills) public void setPkKills(int pkKills)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PK_CHANGED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPKChanged(this, _pkKills, pkKills), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPKChanged(this, _pkKills, pkKills), this);
}
_pkKills = pkKills; _pkKills = pkKills;
} }
@@ -2022,7 +2026,10 @@ public class Player extends Playable
public void setReputation(int value) public void setReputation(int value)
{ {
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_REPUTATION_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerReputationChanged(this, getReputation(), value), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerReputationChanged(this, getReputation(), value), this);
}
int reputation = value; int reputation = value;
if (reputation > Config.MAX_REPUTATION) // Max count of positive reputation if (reputation > Config.MAX_REPUTATION) // Max count of positive reputation
@@ -2283,8 +2290,11 @@ public class Player extends Playable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_EQUIP, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemEquip(this, item), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemEquip(this, item), item.getTemplate());
} }
}
else else
{ {
sendPacket(SystemMessageId.NO_EQUIPMENT_SLOT_AVAILABLE); sendPacket(SystemMessageId.NO_EQUIPMENT_SLOT_AVAILABLE);
@@ -2322,8 +2332,12 @@ public class Player extends Playable
* @param pvpKills * @param pvpKills
*/ */
public void setPvpKills(int pvpKills) public void setPvpKills(int pvpKills)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PVP_CHANGED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPChanged(this, _pvpKills, pvpKills), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPChanged(this, _pvpKills, pvpKills), this);
}
_pvpKills = pvpKills; _pvpKills = pvpKills;
} }
@@ -2351,7 +2365,10 @@ public class Player extends Playable
newFame = 0; newFame = 0;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_FAME_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFameChanged(this, _fame, newFame), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFameChanged(this, _fame, newFame), this);
}
_fame = newFame; _fame = newFame;
} }
@@ -4842,8 +4859,11 @@ public class Player extends Playable
if ((pk != null) || fpcKill) if ((pk != null) || fpcKill)
{ {
if (pk != null) if (pk != null)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PVP_KILL, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this);
}
// pvp/pk item rewards // pvp/pk item rewards
if (!(Config.DISABLE_REWARDS_IN_INSTANCES && (getInstanceId() != 0)) && // if (!(Config.DISABLE_REWARDS_IN_INSTANCES && (getInstanceId() != 0)) && //
@@ -7929,7 +7949,11 @@ public class Player extends Playable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_HENNA_REMOVE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
}
return true; return true;
} }
@@ -8001,10 +8025,15 @@ public class Player extends Playable
broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED); broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_HENNA_ADD, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaAdd(this, henna), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaAdd(this, henna), this);
}
return true; return true;
} }
} }
return false; return false;
} }
@@ -9632,7 +9661,7 @@ public class Player extends Playable
public boolean modifySubClass(int classIndex, int newClassId, boolean isDualClass) public boolean modifySubClass(int classIndex, int newClassId, boolean isDualClass)
{ {
// Notify to scripts before class is removed. // Notify to scripts before class is removed.
if (!getSubClasses().isEmpty()) // also null check if (!getSubClasses().isEmpty() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PROFESSION_CANCEL, this))
{ {
final int classId = getSubClasses().get(classIndex).getClassId(); final int classId = getSubClasses().get(classIndex).getClassId();
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this);
@@ -9808,8 +9837,11 @@ public class Player extends Playable
setTemplate(pcTemplate); setTemplate(pcTemplate);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PROFESSION_CHANGE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionChange(this, pcTemplate, isSubClassActive()), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionChange(this, pcTemplate, isSubClassActive()), this);
} }
}
/** /**
* Changes the character's class based on the given class index.<br> * Changes the character's class based on the given class index.<br>
@@ -9964,8 +9996,12 @@ public class Player extends Playable
broadcastPacket(new SocialAction(getObjectId(), SocialAction.LEVEL_UP)); broadcastPacket(new SocialAction(getObjectId(), SocialAction.LEVEL_UP));
sendPacket(new SkillCoolTime(this)); sendPacket(new SkillCoolTime(this));
sendStorageMaxCount(); sendStorageMaxCount();
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUB_CHANGE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSubChange(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSubChange(this), this);
} }
}
finally finally
{ {
_subclassLock = false; _subclassLock = false;
@@ -10136,15 +10172,20 @@ public class Player extends Playable
LOGGER.log(Level.SEVERE, "", e); LOGGER.log(Level.SEVERE, "", e);
} }
// Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LOGIN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this);
}
if (isMentee()) if (isMentee())
{ {
// Notify to scripts if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_STATUS, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, true), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, true), this);
} }
else if (isMentor()) }
else if (isMentor() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTOR_STATUS, this))
{ {
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, true), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, true), this);
} }
} }
@@ -10806,8 +10847,11 @@ public class Player extends Playable
*/ */
@Override @Override
public boolean deleteMe() public boolean deleteMe()
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LOGOUT, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogout(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogout(this), this);
}
try try
{ {
@@ -11187,14 +11231,16 @@ public class Player extends Playable
player.removeSnooped(this); player.removeSnooped(this);
} }
// Notify to scripts
if (isMentee()) if (isMentee())
{ {
// Notify to scripts if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_STATUS, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, false), this);
} }
else if (isMentor()) }
else if (isMentor() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTOR_STATUS, this))
{ {
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, false), this);
} }
@@ -13524,8 +13570,12 @@ public class Player extends Playable
* @param points * @param points
*/ */
public void setAbilityPointsUsed(int points) public void setAbilityPointsUsed(int points)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ABILITY_POINTS_CHANGED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAbilityPointsChanged(this, getAbilityPointsUsed(), points), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAbilityPointsChanged(this, getAbilityPointsUsed(), points), this);
}
getVariables().set(isDualClassActive() ? PlayerVariables.ABILITY_POINTS_USED_DUAL_CLASS : PlayerVariables.ABILITY_POINTS_USED_MAIN_CLASS, points); getVariables().set(isDualClassActive() ? PlayerVariables.ABILITY_POINTS_USED_DUAL_CLASS : PlayerVariables.ABILITY_POINTS_USED_MAIN_CLASS, points);
} }
@@ -47,6 +47,7 @@ import org.l2jmobius.gameserver.model.actor.status.SummonStatus;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSpawn; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSpawn;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
@@ -141,8 +142,11 @@ public abstract class Summon extends Playable
rechargeShots(true, true, false); rechargeShots(true, true, false);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_SPAWN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSpawn(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSpawn(this), this);
} }
}
@Override @Override
public SummonStat getStat() public SummonStat getStat()
@@ -72,7 +72,7 @@ public class FriendlyNpc extends Attackable
super.addDamage(attacker, damage, skill); super.addDamage(attacker, damage, skill);
} }
if (attacker.isAttackable()) if (attacker.isAttackable() && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_ATTACK, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(null, this, damage, skill, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(null, this, damage, skill, false), this);
} }
@@ -96,9 +96,9 @@ public class FriendlyNpc extends Attackable
return false; return false;
} }
if ((killer != null) && killer.isAttackable()) // Notify to scripts.
if ((killer != null) && killer.isAttackable() && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_KILL, this))
{ {
// Delayed notification
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(null, this, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(null, this, false), this);
} }
return true; return true;
@@ -205,9 +205,12 @@ public class Guard extends Attackable
} }
if (hasListener(EventType.ON_NPC_FIRST_TALK)) if (hasListener(EventType.ON_NPC_FIRST_TALK))
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_FIRST_TALK, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(this, player), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(this, player), this);
} }
}
else else
{ {
showChatWindow(player, 0); showChatWindow(player, 0);
@@ -32,6 +32,7 @@ import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTask;
import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTriggerTask; import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTriggerTask;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
@@ -313,7 +314,11 @@ public class Trap extends Npc
_playersWhoDetectedMe.add(detector.getObjectId()); _playersWhoDetectedMe.add(detector.getObjectId());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, detector, TrapAction.TRAP_DETECTED), this); EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, detector, TrapAction.TRAP_DETECTED), this);
}
if (detector.isPlayable()) if (detector.isPlayable())
{ {
sendInfo(detector.getActingPlayer()); sendInfo(detector.getActingPlayer());
@@ -341,7 +346,11 @@ public class Trap extends Npc
broadcastPacket(new NpcInfo(this)); broadcastPacket(new NpcInfo(this));
setTarget(target); setTarget(target);
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, target, TrapAction.TRAP_TRIGGERED), this); EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, target, TrapAction.TRAP_TRIGGERED), this);
}
ThreadPool.schedule(new TrapTriggerTask(this), 500); ThreadPool.schedule(new TrapTriggerTask(this), 500);
} }
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.Playable;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.Pet; import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayableExpChanged; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayableExpChanged;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
@@ -41,12 +42,15 @@ public class PlayableStat extends CreatureStat
} }
public boolean addExp(long amount) public boolean addExp(long amount)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYABLE_EXP_CHANGED, getActiveChar()))
{ {
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayableExpChanged(getActiveChar(), getExp(), getExp() + amount), getActiveChar(), TerminateReturn.class); final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayableExpChanged(getActiveChar(), getExp(), getExp() + amount), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate()) if ((term != null) && term.terminate())
{ {
return false; return false;
} }
}
if (((getExp() + amount) < 0) || ((amount > 0) && (getExp() == (getExpForLevel(getMaxLevel()) - 1)))) if (((getExp() + amount) < 0) || ((amount > 0) && (getExp() == (getExpForLevel(getMaxLevel()) - 1))))
{ {
@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet; import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder; import org.l2jmobius.gameserver.model.holders.SubClassHolder;
@@ -249,7 +250,10 @@ public class PlayerStat extends PlayableStat
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LEVEL_CHANGED, getActiveChar()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLevelChanged(getActiveChar(), getLevel() - value, getLevel()), getActiveChar()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLevelChanged(getActiveChar(), getLevel() - value, getLevel()), getActiveChar());
}
// Give AutoGet skills and all normal skills if Auto-Learn is activated. // Give AutoGet skills and all normal skills if Auto-Learn is activated.
getActiveChar().rewardSkills(); getActiveChar().rewardSkills();
@@ -25,6 +25,7 @@ import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureHpChange; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureHpChange;
import org.l2jmobius.gameserver.model.skill.AbnormalType; import org.l2jmobius.gameserver.model.skill.AbnormalType;
import org.l2jmobius.gameserver.model.stats.Formulas; import org.l2jmobius.gameserver.model.stats.Formulas;
@@ -314,8 +315,12 @@ public class CreatureStatus
{ {
_creature.broadcastStatusUpdate(); _creature.broadcastStatusUpdate();
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_HP_CHANGE, getActiveChar()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureHpChange(getActiveChar(), oldHp, _currentHp), getActiveChar()); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureHpChange(getActiveChar(), oldHp, _currentHp), getActiveChar());
} }
}
return hpWasChanged; return hpWasChanged;
} }
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTransform; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTransform;
import org.l2jmobius.gameserver.model.holders.AdditionalItemHolder; import org.l2jmobius.gameserver.model.holders.AdditionalItemHolder;
import org.l2jmobius.gameserver.model.holders.AdditionalSkillHolder; import org.l2jmobius.gameserver.model.holders.AdditionalSkillHolder;
@@ -331,8 +332,11 @@ public class Transform implements IIdentifiable
player.broadcastUserInfo(); player.broadcastUserInfo();
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TRANSFORM, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, getId()), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, getId()), player);
} }
}
else else
{ {
creature.broadcastInfo(); creature.broadcastInfo();
@@ -396,9 +400,13 @@ public class Transform implements IIdentifiable
player.broadcastUserInfo(); player.broadcastUserInfo();
player.sendPacket(new ExUserInfoEquipSlot(player)); player.sendPacket(new ExUserInfoEquipSlot(player));
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TRANSFORM, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, 0), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, 0), player);
} }
}
else else
{ {
creature.broadcastInfo(); creature.broadcastInfo();
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeaderChange; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeaderChange;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeft; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeft;
@@ -252,7 +253,11 @@ public class Clan implements IIdentifiable, INamable
final Player exLeader = exMember.getPlayer(); final Player exLeader = exMember.getPlayer();
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEADER_CHANGE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeaderChange(exMember, member, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeaderChange(exMember, member, this));
}
if (exLeader != null) if (exLeader != null)
{ {
if (exLeader.isFlying()) if (exLeader.isFlying())
@@ -385,8 +390,11 @@ public class Clan implements IIdentifiable, INamable
addSkillEffects(player); addSkillEffects(player);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_JOIN))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanJoin(member, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanJoin(member, this));
} }
}
/** /**
* Updates player status in clan. * Updates player status in clan.
@@ -548,8 +556,11 @@ public class Clan implements IIdentifiable, INamable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEFT))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeft(exMember, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeft(exMember, this));
} }
}
public Collection<ClanMember> getMembers() public Collection<ClanMember> getMembers()
{ {
@@ -2700,7 +2711,11 @@ public class Clan implements IIdentifiable, INamable
changeLevel(_level + 1); changeLevel(_level + 1);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEVELUP))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLvlUp(player, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLvlUp(player, this));
}
return true; return true;
} }
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.ClanWarState;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarStart; import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarStart;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.SurrenderPledgeWar; import org.l2jmobius.gameserver.network.serverpackets.SurrenderPledgeWar;
@@ -59,7 +60,12 @@ public class ClanWar
_cancelTask = ThreadPool.schedule(this::clanWarTimeout, (_startTime + TIME_TO_CANCEL_NON_MUTUAL_CLAN_WAR) - System.currentTimeMillis()); _cancelTask = ThreadPool.schedule(this::clanWarTimeout, (_startTime + TIME_TO_CANCEL_NON_MUTUAL_CLAN_WAR) - System.currentTimeMillis());
attacker.addWar(attacked.getId(), this); attacker.addWar(attacked.getId(), this);
attacked.addWar(attacker.getId(), this); attacked.addWar(attacker.getId(), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CLAN_WAR_START))
{
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarStart(attacker, attacked)); EventDispatcher.getInstance().notifyEventAsync(new OnClanWarStart(attacker, attacked));
}
SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_DECLARED_A_CLAN_WAR_WITH_S1); SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_DECLARED_A_CLAN_WAR_WITH_S1);
sm.addString(attacked.getName()); sm.addString(attacked.getName());
attacker.broadcastToOnlineMembers(sm); attacker.broadcastToOnlineMembers(sm);
@@ -26,7 +26,7 @@ import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
import org.l2jmobius.gameserver.model.events.returns.AbstractEventReturn; import org.l2jmobius.gameserver.model.events.returns.AbstractEventReturn;
/** /**
* @author UnAfraid * @author UnAfraid, Mobius
*/ */
public class EventDispatcher public class EventDispatcher
{ {
@@ -36,6 +36,47 @@ public class EventDispatcher
{ {
} }
/**
* @param type EventType
* @return {@code true} if global containers have a listener of the given type.
*/
public boolean hasListener(EventType type)
{
return Containers.Global().hasListener(type);
}
/**
* @param type EventType
* @param container ListenersContainer
* @return {@code true} if container has a listener of the given type.
*/
public boolean hasListener(EventType type, ListenersContainer container)
{
return Containers.Global().hasListener(type) || ((container != null) && container.hasListener(type));
}
/**
* @param type EventType
* @param containers ListenersContainer...
* @return {@code true} if containers have a listener of the given type.
*/
public boolean hasListener(EventType type, ListenersContainer... containers)
{
boolean hasListeners = Containers.Global().hasListener(type);
if (!hasListeners)
{
for (ListenersContainer container : containers)
{
if (container.hasListener(type))
{
hasListeners = true;
break;
}
}
}
return hasListeners;
}
/** /**
* @param <T> * @param <T>
* @param event * @param event
@@ -79,7 +120,7 @@ public class EventDispatcher
{ {
try try
{ {
return Containers.Global().hasListener(event.getType()) || ((container != null) && container.hasListener(event.getType())) ? notifyEventImpl(event, container, callbackClass) : null; return notifyEventImpl(event, container, callbackClass);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -88,6 +129,21 @@ public class EventDispatcher
return null; return null;
} }
/**
* Executing current listener notification asynchronously
* @param event
* @param container
*/
public void notifyEventAsync(IBaseEvent event, ListenersContainer container)
{
if (event == null)
{
throw new NullPointerException("Event cannot be null!");
}
ThreadPool.execute(() -> notifyEventToSingleContainer(event, container, null));
}
/** /**
* Executing current listener notification asynchronously * Executing current listener notification asynchronously
* @param event * @param event
@@ -100,37 +156,45 @@ public class EventDispatcher
throw new NullPointerException("Event cannot be null!"); throw new NullPointerException("Event cannot be null!");
} }
boolean hasListeners = Containers.Global().hasListener(event.getType());
if (!hasListeners)
{
for (ListenersContainer container : containers)
{
if (container.hasListener(event.getType()))
{
hasListeners = true;
break;
}
}
}
if (hasListeners)
{
ThreadPool.execute(() -> notifyEventToMultipleContainers(event, containers, null)); ThreadPool.execute(() -> notifyEventToMultipleContainers(event, containers, null));
} }
}
/** /**
* Scheduling current listener notification asynchronously after specified delay. * @param <T>
* @param event * @param event
* @param container * @param container
* @param delay * @param callbackClass
* @return
*/ */
public void notifyEventAsyncDelayed(IBaseEvent event, ListenersContainer container, long delay) private <T extends AbstractEventReturn> T notifyEventToSingleContainer(IBaseEvent event, ListenersContainer container, Class<T> callbackClass)
{ {
if (Containers.Global().hasListener(event.getType()) || container.hasListener(event.getType())) if (event == null)
{ {
ThreadPool.schedule(() -> notifyEvent(event, container, null), delay); throw new NullPointerException("Event cannot be null!");
} }
try
{
// Local listener container.
T callback = null;
if (container != null)
{
callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback);
}
// Global listener container.
if ((callback == null) || !callback.abort())
{
callback = notifyToListeners(Containers.Global().getListeners(event.getType()), event, callbackClass, callback);
}
return callback;
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't notify event " + event.getClass().getSimpleName(), e);
}
return null;
} }
/** /**
@@ -152,7 +216,7 @@ public class EventDispatcher
T callback = null; T callback = null;
if (containers != null) if (containers != null)
{ {
// Local listeners container first. // Local listener containers.
for (ListenersContainer container : containers) for (ListenersContainer container : containers)
{ {
if ((callback == null) || !callback.abort()) if ((callback == null) || !callback.abort())
@@ -191,8 +255,8 @@ public class EventDispatcher
throw new NullPointerException("Event cannot be null!"); throw new NullPointerException("Event cannot be null!");
} }
// Local listener container.
T callback = null; T callback = null;
// Local listener container first.
if (container != null) if (container != null)
{ {
callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback); callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback);
@@ -32,6 +32,7 @@ import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerFishing; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerFishing;
import org.l2jmobius.gameserver.model.interfaces.ILocational; import org.l2jmobius.gameserver.model.interfaces.ILocational;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -333,7 +334,7 @@ public class Fishing
_player.sendPacket(SystemMessageId.THE_BAIT_HAS_BEEN_LOST_BECAUSE_THE_FISH_GOT_AWAY); _player.sendPacket(SystemMessageId.THE_BAIT_HAS_BEEN_LOST_BECAUSE_THE_FISH_GOT_AWAY);
} }
if (consumeBait) if (consumeBait && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_FISHING, _player))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFishing(_player, reason), _player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFishing(_player, reason), _player);
} }
@@ -56,6 +56,7 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Door; import org.l2jmobius.gameserver.model.actor.instance.Door;
import org.l2jmobius.gameserver.model.actor.templates.DoorTemplate; import org.l2jmobius.gameserver.model.actor.templates.DoorTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceCreated; import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceCreated;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceDestroy; import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceDestroy;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceEnter; import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceEnter;
@@ -130,9 +131,9 @@ public class Instance implements IIdentifiable, INamable
} }
} }
if (!isDynamic())
{
// Notify DP scripts // Notify DP scripts
if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_CREATED, _template))
{
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceCreated(this, player), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceCreated(this, player), _template);
} }
} }
@@ -220,8 +221,12 @@ public class Instance implements IIdentifiable, INamable
public void setStatus(int value) public void setStatus(int value)
{ {
_parameters.set("INSTANCE_STATUS", value); _parameters.set("INSTANCE_STATUS", value);
if (EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_STATUS_CHANGE, _template))
{
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceStatusChange(this, value), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceStatusChange(this, value), _template);
} }
}
/** /**
* Increment instance world status * Increment instance world status
@@ -836,7 +841,7 @@ public class Instance implements IIdentifiable, INamable
_ejectDeadTasks.clear(); _ejectDeadTasks.clear();
// Notify DP scripts // Notify DP scripts
if (!isDynamic()) if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_DESTROY, _template))
{ {
EventDispatcher.getInstance().notifyEvent(new OnInstanceDestroy(this), _template); EventDispatcher.getInstance().notifyEvent(new OnInstanceDestroy(this), _template);
} }
@@ -1073,7 +1078,7 @@ public class Instance implements IIdentifiable, INamable
} }
// Notify DP scripts // Notify DP scripts
if (!isDynamic()) if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_ENTER, _template))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceEnter(player, this), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceEnter(player, this), _template);
} }
@@ -1083,7 +1088,7 @@ public class Instance implements IIdentifiable, INamable
removePlayer(player); removePlayer(player);
// Notify DP scripts // Notify DP scripts
if (!isDynamic()) if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_LEAVE, _template))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceLeave(player, this), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceLeave(player, this), _template);
} }
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee;
import org.l2jmobius.gameserver.model.item.type.WeaponType; import org.l2jmobius.gameserver.model.item.type.WeaponType;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -307,7 +308,13 @@ public class Weapon extends ItemTemplate
// notify quests of a skill use // notify quests of a skill use
if (caster.isPlayer()) if (caster.isPlayer())
{ {
World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc -> EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npc, caster.getActingPlayer(), skill, false, target), npc)); World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc ->
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npc, caster.getActingPlayer(), skill, false, target), npc);
}
});
} }
if (caster.isPlayer()) if (caster.isPlayer())
{ {
@@ -60,6 +60,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.conditions.Condition; import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPickup; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPickup;
@@ -293,9 +294,9 @@ public class Item extends WorldObject
// Remove the Item from the world // Remove the Item from the world
World.getInstance().removeVisibleObject(this, oldregion); World.getInstance().removeVisibleObject(this, oldregion);
if (creature.isPlayer())
{
// Notify to scripts // Notify to scripts
if (creature.isPlayer() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_PICKUP, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemPickup(creature.getActingPlayer(), this), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemPickup(creature.getActingPlayer(), this), getTemplate());
} }
} }
@@ -972,7 +973,11 @@ public class Item extends WorldObject
} }
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_AUGMENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getTemplate());
}
return true; return true;
} }
@@ -1002,8 +1007,11 @@ public class Item extends WorldObject
} }
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_AUGMENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augment, false), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augment, false), getTemplate());
} }
}
public void restoreAttributes() public void restoreAttributes()
{ {
@@ -1532,9 +1540,12 @@ public class Item extends WorldObject
_owner = null; _owner = null;
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(dropper.getActingPlayer(), this, new Location(x, y, z)), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(dropper.getActingPlayer(), this, new Location(x, y, z)), getTemplate());
} }
} }
}
/** /**
* Update the database with values of the item * Update the database with values of the item
@@ -2025,10 +2036,13 @@ public class Item extends WorldObject
} }
if (event != null) if (event != null)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_BYPASS_EVENT, getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnItemBypassEvent(this, player, event), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemBypassEvent(this, player, event), getTemplate());
} }
else }
else if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_TALK, getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnItemTalk(this, player), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemTalk(this, player), getTemplate());
} }
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemAdd; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemAdd;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemDestroy; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemDestroy;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemTransfer;
@@ -71,7 +72,11 @@ public class ClanWarehouse extends Warehouse
final Item item = super.addItem(process, itemId, count, actor, reference); final Item item = super.addItem(process, itemId, count, actor, reference);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_ADD, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
}
return item; return item;
} }
@@ -79,7 +84,11 @@ public class ClanWarehouse extends Warehouse
public Item addItem(String process, Item item, Player actor, Object reference) public Item addItem(String process, Item item, Player actor, Object reference)
{ {
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_ADD, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
}
return super.addItem(process, item, actor, reference); return super.addItem(process, item, actor, reference);
} }
@@ -87,7 +96,11 @@ public class ClanWarehouse extends Warehouse
public Item destroyItem(String process, Item item, long count, Player actor, Object reference) public Item destroyItem(String process, Item item, long count, Player actor, Object reference)
{ {
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_DESTROY, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemDestroy(process, actor, item, count, this), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemDestroy(process, actor, item, count, this), item.getTemplate());
}
return super.destroyItem(process, item, count, actor, reference); return super.destroyItem(process, item, count, actor, reference);
} }
@@ -97,7 +110,11 @@ public class ClanWarehouse extends Warehouse
final Item item = getItemByObjectId(objectId); final Item item = getItemByObjectId(objectId);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_TRANSFER, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemTransfer(process, actor, item, count, target), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemTransfer(process, actor, item, count, target), item.getTemplate());
}
return super.transferItem(process, objectId, count, target, actor, reference); return super.transferItem(process, objectId, count, target, actor, reference);
} }
} }
@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
@@ -1412,7 +1413,7 @@ public abstract class Inventory extends ItemContainer
if (old != null) if (old != null)
{ {
final Creature owner = getOwner(); final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer()) if ((owner != null) && owner.isPlayer() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_UNEQUIP, old.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemUnequip(owner.getActingPlayer(), old), old.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemUnequip(owner.getActingPlayer(), old), old.getTemplate());
} }
@@ -37,6 +37,7 @@ import org.l2jmobius.gameserver.model.TradeItem;
import org.l2jmobius.gameserver.model.TradeList; import org.l2jmobius.gameserver.model.TradeList;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemAdd; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemAdd;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDestroy; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDestroy;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
@@ -422,9 +423,12 @@ public class PlayerInventory extends Inventory
actor.sendInventoryUpdate(playerIU); actor.sendInventoryUpdate(playerIU);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_ADD, actor, addedItem.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, addedItem), actor, addedItem.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, addedItem), actor, addedItem.getTemplate());
} }
} }
}
return addedItem; return addedItem;
} }
@@ -489,9 +493,12 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_ADD, actor, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, item), actor, item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, item), actor, item.getTemplate());
} }
} }
}
return item; return item;
} }
@@ -521,7 +528,10 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_TRANSFER, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemTransfer(actor, item, target), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemTransfer(actor, item, target), item.getTemplate());
}
return item; return item;
} }
@@ -575,7 +585,7 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (destroyedItem != null) if ((destroyedItem != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DESTROY, destroyedItem.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDestroy(actor, destroyedItem), destroyedItem.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDestroy(actor, destroyedItem), destroyedItem.getTemplate());
} }
@@ -648,7 +658,7 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (droppedItem != null) if ((droppedItem != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, droppedItem.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, droppedItem, droppedItem.getLocation()), droppedItem.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, droppedItem, droppedItem.getLocation()), droppedItem.getTemplate());
} }
@@ -681,7 +691,7 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (item != null) if ((item != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, item.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, item, item.getLocation()), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, item, item.getLocation()), item.getTemplate());
} }
@@ -46,6 +46,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTakeHero; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTakeHero;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory; import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
@@ -923,7 +924,11 @@ public class Hero
loadDiary(player.getObjectId()); loadDiary(player.getObjectId());
HERO_MESSAGE.put(player.getObjectId(), ""); HERO_MESSAGE.put(player.getObjectId(), "");
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TAKE_HERO))
{
EventDispatcher.getInstance().notifyEvent(new OnPlayerTakeHero(player)); EventDispatcher.getInstance().notifyEvent(new OnPlayerTakeHero(player));
}
updateHeroes(false); updateHeroes(false);
} }
@@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult; import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -465,8 +466,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
} }
}
else if (_pOneCrash && !_pTwoCrash) else if (_pOneCrash && !_pTwoCrash)
{ {
sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH); sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH);
@@ -489,9 +493,13 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
{ {
LOGGER_OLYMPIAD.info(_playerOne.getName() + " crash," + _playerOne + "," + _playerTwo + ",0,0,0,0," + pointDiff + "," + getType()); LOGGER_OLYMPIAD.info(_playerOne.getName() + " crash," + _playerOne + "," + _playerTwo + ",0,0,0,0," + pointDiff + "," + getType());
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
} }
}
else if (_pOneCrash && _pTwoCrash) else if (_pOneCrash && _pTwoCrash)
{ {
stadium.broadcastPacket(new SystemMessage(SystemMessageId.THERE_IS_NO_VICTOR_THE_MATCH_ENDS_IN_A_TIE)); stadium.broadcastPacket(new SystemMessage(SystemMessageId.THERE_IS_NO_VICTOR_THE_MATCH_ENDS_IN_A_TIE));
@@ -530,8 +538,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
stadium.broadcastPacket(result); stadium.broadcastPacket(result);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerOne, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerOne, getType()), Olympiad.getInstance());
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerTwo, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerTwo, getType()), Olympiad.getInstance());
}
return; return;
} }
catch (Exception e) catch (Exception e)
@@ -602,8 +613,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
rewardParticipant(_playerOne.getPlayer(), getReward()); rewardParticipant(_playerOne.getPlayer(), getReward());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
} }
}
else if ((_playerOne.getPlayer() == null) || !_playerOne.getPlayer().isOnline() || ((playerOneHp == 0) && (playerTwoHp != 0)) || ((_damageP2 > _damageP1) && (playerOneHp != 0) && (playerTwoHp != 0))) else if ((_playerOne.getPlayer() == null) || !_playerOne.getPlayer().isOnline() || ((playerOneHp == 0) && (playerTwoHp != 0)) || ((_damageP2 > _damageP1) && (playerOneHp != 0) && (playerTwoHp != 0)))
{ {
sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH); sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH);
@@ -627,8 +641,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
rewardParticipant(_playerTwo.getPlayer(), getReward()); rewardParticipant(_playerTwo.getPlayer(), getReward());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
} }
}
else else
{ {
// Save Fight Result // Save Fight Result
@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerQuestComplete; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerQuestComplete;
import org.l2jmobius.gameserver.network.serverpackets.ExShowQuestMark; import org.l2jmobius.gameserver.network.serverpackets.ExShowQuestMark;
import org.l2jmobius.gameserver.network.serverpackets.QuestList; import org.l2jmobius.gameserver.network.serverpackets.QuestList;
@@ -726,8 +727,11 @@ public class QuestState
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_COMPLETE, _player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), type), _player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), type), _player);
} }
}
/** /**
* Finishes the quest and removes all quest items associated with this quest from the player's inventory.<br> * Finishes the quest and removes all quest items associated with this quest from the player's inventory.<br>
@@ -813,8 +817,11 @@ public class QuestState
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_COMPLETE, _player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), repeatable ? QuestType.REPEATABLE : QuestType.ONE_TIME), _player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), repeatable ? QuestType.REPEATABLE : QuestType.ONE_TIME), _player);
} }
}
/** /**
* Set the restart time for the daily quests.<br> * Set the restart time for the daily quests.<br>
@@ -51,6 +51,7 @@ import org.l2jmobius.gameserver.model.actor.instance.Door;
import org.l2jmobius.gameserver.model.actor.instance.FortCommander; import org.l2jmobius.gameserver.model.actor.instance.FortCommander;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.sieges.OnFortSiegeFinish; import org.l2jmobius.gameserver.model.events.impl.sieges.OnFortSiegeFinish;
import org.l2jmobius.gameserver.model.events.impl.sieges.OnFortSiegeStart; import org.l2jmobius.gameserver.model.events.impl.sieges.OnFortSiegeStart;
import org.l2jmobius.gameserver.network.NpcStringId; import org.l2jmobius.gameserver.network.NpcStringId;
@@ -292,9 +293,12 @@ public class FortSiege implements Siegable
LOGGER.info(getClass().getSimpleName() + ": Siege of " + _fort.getName() + " fort finished."); LOGGER.info(getClass().getSimpleName() + ": Siege of " + _fort.getName() + " fort finished.");
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_FORT_SIEGE_FINISH, getFort()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeFinish(this), getFort()); EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeFinish(this), getFort());
} }
} }
}
/** /**
* When siege starts * When siege starts
@@ -339,9 +343,12 @@ public class FortSiege implements Siegable
LOGGER.info(getClass().getSimpleName() + ": Siege of " + _fort.getName() + " fort started."); LOGGER.info(getClass().getSimpleName() + ": Siege of " + _fort.getName() + " fort started.");
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_FORT_SIEGE_START, getFort()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeStart(this), getFort()); EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeStart(this), getFort());
} }
} }
}
/** /**
* Announce to player. * Announce to player.
@@ -58,6 +58,7 @@ import org.l2jmobius.gameserver.model.actor.instance.FlameTower;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember; import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeFinish; import org.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeFinish;
import org.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeOwnerChange; import org.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeOwnerChange;
import org.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeStart; import org.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeStart;
@@ -343,9 +344,12 @@ public class Siege implements Siegable
_castle.getZone().setSiegeInstance(null); _castle.getZone().setSiegeInstance(null);
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CASTLE_SIEGE_FINISH, getCastle()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), getCastle()); EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), getCastle());
} }
} }
}
private void removeDefender(SiegeClan sc) private void removeDefender(SiegeClan sc)
{ {
@@ -465,10 +469,13 @@ public class Siege implements Siegable
updatePlayerSiegeStateFlags(false); updatePlayerSiegeStateFlags(false);
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CASTLE_SIEGE_OWNER_CHANGE, getCastle()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), getCastle()); EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), getCastle());
} }
} }
} }
}
/** /**
* When siege starts. * When siege starts.
@@ -524,9 +531,12 @@ public class Siege implements Siegable
Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.17")); Broadcast.toAllOnlinePlayers(new PlaySound("systemmsg_e.17"));
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CASTLE_SIEGE_START, getCastle()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), getCastle()); EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeStart(this), getCastle());
} }
} }
}
/** /**
* Announce to player. * Announce to player.
@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.effects.EffectType; import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; 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.OnCreatureSkillUse;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee;
@@ -526,6 +527,8 @@ public class SkillCaster implements Runnable
} }
// Notify skill is casted. // Notify skill is casted.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SKILL_FINISH_CAST, caster))
{
if (caster.onCreatureSkillFinishCast == null) if (caster.onCreatureSkillFinishCast == null)
{ {
caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); caster.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast();
@@ -535,6 +538,7 @@ public class SkillCaster implements Runnable
caster.onCreatureSkillFinishCast.setSkill(_skill); caster.onCreatureSkillFinishCast.setSkill(_skill);
caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction()); caster.onCreatureSkillFinishCast.setSimultaneously(_skill.isWithoutAction());
EventDispatcher.getInstance().notifyEvent(caster.onCreatureSkillFinishCast, caster); 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);
@@ -681,8 +685,11 @@ public class SkillCaster implements Runnable
// Mobs in range 1000 see spell // Mobs in range 1000 see spell
World.getInstance().forEachVisibleObjectInRange(player, Npc.class, 1000, npcMob -> World.getInstance().forEachVisibleObjectInRange(player, Npc.class, 1000, npcMob ->
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npcMob))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npcMob, player, skill, caster.isSummon(), targets.toArray(new WorldObject[0])), npcMob); EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npcMob, player, skill, caster.isSummon(), targets.toArray(new WorldObject[0])), npcMob);
}
// On Skill See logic // On Skill See logic
if (npcMob.isAttackable() && !npcMob.isFakePlayer()) if (npcMob.isAttackable() && !npcMob.isFakePlayer())
@@ -873,6 +880,8 @@ public class SkillCaster implements Runnable
skill.activateSkill(creature, item, targets); skill.activateSkill(creature, item, targets);
// Notify skill is casted. // Notify skill is casted.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SKILL_FINISH_CAST, creature))
{
if (creature.onCreatureSkillFinishCast == null) if (creature.onCreatureSkillFinishCast == null)
{ {
creature.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast(); creature.onCreatureSkillFinishCast = new OnCreatureSkillFinishCast();
@@ -884,6 +893,7 @@ public class SkillCaster implements Runnable
EventDispatcher.getInstance().notifyEvent(creature.onCreatureSkillFinishCast, creature); EventDispatcher.getInstance().notifyEvent(creature.onCreatureSkillFinishCast, creature);
} }
} }
}
catch (Exception e) catch (Exception e)
{ {
LOGGER.log(Level.WARNING, "Failed simultaneous cast: ", e); LOGGER.log(Level.WARNING, "Failed simultaneous cast: ", e);
@@ -990,6 +1000,8 @@ public class SkillCaster implements Runnable
return false; return false;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SKILL_USE, caster))
{
if (caster.onCreatureSkillUse == null) if (caster.onCreatureSkillUse == null)
{ {
caster.onCreatureSkillUse = new OnCreatureSkillUse(); caster.onCreatureSkillUse = new OnCreatureSkillUse();
@@ -1003,6 +1015,7 @@ public class SkillCaster implements Runnable
caster.sendPacket(ActionFailed.STATIC_PACKET); caster.sendPacket(ActionFailed.STATIC_PACKET);
return false; return false;
} }
}
// Check if creature is already casting // Check if creature is already casting
if ((castingType != null) && caster.isCastingNow(castingType)) if ((castingType != null) && caster.isCastingNow(castingType))
@@ -30,6 +30,7 @@ import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcTeleportRequest; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcTeleportRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
@@ -241,11 +242,14 @@ public class TeleportHolder
} }
// Notify listeners // Notify listeners
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_TELEPORT_REQUEST, npc))
{
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnNpcTeleportRequest(player, npc, loc), npc, TerminateReturn.class); final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnNpcTeleportRequest(player, npc, loc), npc, TerminateReturn.class);
if ((term != null) && term.terminate()) if ((term != null) && term.terminate())
{ {
return; return;
} }
}
// Check rest of conditions // Check rest of conditions
if (shouldPayFee(player, loc) && !player.destroyItemByItemId("Teleport", loc.getFeeId(), calculateFee(player, loc), npc, true)) if (shouldPayFee(player, loc) && !player.destroyItemByItemId("Teleport", loc.getFeeId(), calculateFee(player, loc), npc, true))
@@ -30,6 +30,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenersContainer; import org.l2jmobius.gameserver.model.events.ListenersContainer;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureZoneEnter; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureZoneEnter;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureZoneExit; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureZoneExit;
@@ -427,7 +428,11 @@ public abstract class ZoneType extends ListenersContainer
if (_characterList.putIfAbsent(creature.getObjectId(), creature) == null) if (_characterList.putIfAbsent(creature.getObjectId(), creature) == null)
{ {
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ZONE_ENTER, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneEnter(creature, this), this); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneEnter(creature, this), this);
}
// Notify Zone implementation. // Notify Zone implementation.
onEnter(creature); onEnter(creature);
} }
@@ -448,7 +453,10 @@ public abstract class ZoneType extends ListenersContainer
if (_characterList.containsKey(creature.getObjectId())) if (_characterList.containsKey(creature.getObjectId()))
{ {
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ZONE_EXIT, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneExit(creature, this), this); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureZoneExit(creature, this), this);
}
// Unregister player. // Unregister player.
_characterList.remove(creature.getObjectId()); _characterList.remove(creature.getObjectId());
@@ -38,6 +38,7 @@ import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
import org.l2jmobius.gameserver.model.actor.templates.PlayerTemplate; import org.l2jmobius.gameserver.model.actor.templates.PlayerTemplate;
import org.l2jmobius.gameserver.model.events.Containers; import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCreate; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCreate;
import org.l2jmobius.gameserver.model.item.PlayerItemTemplate; import org.l2jmobius.gameserver.model.item.PlayerItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -324,7 +325,11 @@ public class CharacterCreate implements IClientIncomingPacket
// Register all shortcuts for actions, skills and items for this new character. // Register all shortcuts for actions, skills and items for this new character.
InitialShortcutData.getInstance().registerAllShortcuts(newChar); InitialShortcutData.getInstance().registerAllShortcuts(newChar);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CREATE, Containers.Players()))
{
EventDispatcher.getInstance().notifyEvent(new OnPlayerCreate(newChar, newChar.getObjectId(), newChar.getName(), client), Containers.Players()); EventDispatcher.getInstance().notifyEvent(new OnPlayerCreate(newChar, newChar.getObjectId(), newChar.getName(), client), Containers.Players());
}
newChar.setOnlineStatus(true, false); newChar.setOnlineStatus(true, false);
if (Config.SHOW_INTRO_VIDEO) if (Config.SHOW_INTRO_VIDEO)
{ {
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.enums.CharacterDeleteFailType;
import org.l2jmobius.gameserver.model.CharSelectInfoPackage; import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.events.Containers; import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerDelete; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerDelete;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@@ -61,7 +62,10 @@ public class CharacterDelete implements IClientIncomingPacket
{ {
client.sendPacket(new CharDeleteSuccess()); client.sendPacket(new CharDeleteSuccess());
final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot); final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_DELETE, Containers.Players()))
{
EventDispatcher.getInstance().notifyEvent(new OnPlayerDelete(charInfo.getObjectId(), charInfo.getName(), client), Containers.Players()); EventDispatcher.getInstance().notifyEvent(new OnPlayerDelete(charInfo.getObjectId(), charInfo.getName(), client), Containers.Players());
}
break; break;
} }
default: default:
@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.model.CharSelectInfoPackage; import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerRestore; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerRestore;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.serverpackets.CharSelectionInfo; import org.l2jmobius.gameserver.network.serverpackets.CharSelectionInfo;
@@ -50,7 +51,11 @@ public class CharacterRestore implements IClientIncomingPacket
final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1, 0); final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1, 0);
client.sendPacket(cl); client.sendPacket(cl);
client.setCharSelection(cl.getCharInfo()); client.setCharSelection(cl.getCharInfo());
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_RESTORE))
{
final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot); final CharSelectInfoPackage charInfo = client.getCharSelection(_charSlot);
EventDispatcher.getInstance().notifyEvent(new OnPlayerRestore(charInfo.getObjectId(), charInfo.getName(), client)); EventDispatcher.getInstance().notifyEvent(new OnPlayerRestore(charInfo.getObjectId(), charInfo.getName(), client));
} }
} }
}
@@ -29,6 +29,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.Containers; import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSelect; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSelect;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
@@ -161,12 +162,15 @@ public class CharacterSelect implements IClientIncomingPacket
client.setPlayer(cha); client.setPlayer(cha);
cha.setOnlineStatus(true, true); cha.setOnlineStatus(true, true);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SELECT, Containers.Players()))
{
final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerSelect(cha, cha.getObjectId(), cha.getName(), client), Containers.Players(), TerminateReturn.class); final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerSelect(cha, cha.getObjectId(), cha.getName(), client), Containers.Players(), TerminateReturn.class);
if ((terminate != null) && terminate.terminate()) if ((terminate != null) && terminate.terminate())
{ {
Disconnection.of(cha).defaultSequence(LeaveWorld.STATIC_PACKET); Disconnection.of(cha).defaultSequence(LeaveWorld.STATIC_PACKET);
return; return;
} }
}
client.setConnectionState(ConnectionState.ENTERING); client.setConnectionState(ConnectionState.ENTERING);
client.sendPacket(new CharSelected(cha, client.getSessionId().playOkID1)); client.sendPacket(new CharSelected(cha, client.getSessionId().playOkID1));
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.enums.PlayerAction;
import org.l2jmobius.gameserver.handler.AdminCommandHandler; import org.l2jmobius.gameserver.handler.AdminCommandHandler;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerDlgAnswer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerDlgAnswer;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.holders.DoorRequestHolder; import org.l2jmobius.gameserver.model.holders.DoorRequestHolder;
@@ -55,11 +56,14 @@ public class DlgAnswer implements IClientIncomingPacket
return; return;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_DLG_ANSWER, player))
{
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayerDlgAnswer(player, _messageId, _answer, _requesterId), player, TerminateReturn.class); final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayerDlgAnswer(player, _messageId, _answer, _requesterId), player, TerminateReturn.class);
if ((term != null) && term.terminate()) if ((term != null) && term.terminate())
{ {
return; return;
} }
}
if (_messageId == SystemMessageId.S1_3.getId()) if (_messageId == SystemMessageId.S1_3.getId())
{ {
@@ -29,6 +29,7 @@ import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.SayuneEntry; import org.l2jmobius.gameserver.model.SayuneEntry;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -178,6 +179,8 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
if (_movementMode == 1) if (_movementMode == 1)
{ {
player.setCursorKeyMovement(false); player.setCursorKeyMovement(false);
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MOVE_REQUEST, player))
{
final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerMoveRequest(player, new Location(_targetX, _targetY, _targetZ)), player, TerminateReturn.class); final TerminateReturn terminate = EventDispatcher.getInstance().notifyEvent(new OnPlayerMoveRequest(player, new Location(_targetX, _targetY, _targetZ)), player, TerminateReturn.class);
if ((terminate != null) && terminate.terminate()) if ((terminate != null) && terminate.terminate())
{ {
@@ -185,6 +188,7 @@ public class MoveBackwardToLocation implements IClientIncomingPacket
return; return;
} }
} }
}
else // 0 else // 0
{ {
if (!Config.ENABLE_KEYBOARD_MOVEMENT) if (!Config.ENABLE_KEYBOARD_MOVEMENT)
@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.actor.instance.VillageMaster;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege; import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSkillLearn; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSkillLearn;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
@@ -702,10 +703,13 @@ public class RequestAcquireSkill implements IClientIncomingPacket
// Notify scripts of the skill learn. // Notify scripts of the skill learn.
if (trainer != null) if (trainer != null)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SKILL_LEARN, trainer))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSkillLearn(trainer, player, skill, _skillType), trainer); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSkillLearn(trainer, player, skill, _skillType), trainer);
} }
else }
else if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SKILL_LEARN, player))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSkillLearn(trainer, player, skill, _skillType), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSkillLearn(trainer, player, skill, _skillType), player);
} }
@@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcManorBypass; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcManorBypass;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMenuSelect; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMenuSelect;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
@@ -126,11 +127,14 @@ public class RequestBypassToServer implements IClientIncomingPacket
return; return;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BYPASS, player))
{
final TerminateReturn terminateReturn = EventDispatcher.getInstance().notifyEvent(new OnPlayerBypass(player, _command), player, TerminateReturn.class); final TerminateReturn terminateReturn = EventDispatcher.getInstance().notifyEvent(new OnPlayerBypass(player, _command), player, TerminateReturn.class);
if ((terminateReturn != null) && terminateReturn.terminate()) if ((terminateReturn != null) && terminateReturn.terminate())
{ {
return; return;
} }
}
try try
{ {
@@ -233,7 +237,7 @@ public class RequestBypassToServer implements IClientIncomingPacket
else if (_command.startsWith("menu_select")) else if (_command.startsWith("menu_select"))
{ {
final Npc lastNpc = player.getLastFolkNPC(); final Npc lastNpc = player.getLastFolkNPC();
if ((lastNpc != null) && lastNpc.canInteract(player)) if ((lastNpc != null) && lastNpc.canInteract(player) && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MENU_SELECT, lastNpc))
{ {
final String[] split = _command.substring(_command.indexOf('?') + 1).split("&"); final String[] split = _command.substring(_command.indexOf('?') + 1).split("&");
final int ask = Integer.parseInt(split[0].split("=")[1]); final int ask = Integer.parseInt(split[0].split("=")[1]);
@@ -244,7 +248,7 @@ public class RequestBypassToServer implements IClientIncomingPacket
else if (_command.startsWith("manor_menu_select")) else if (_command.startsWith("manor_menu_select"))
{ {
final Npc lastNpc = player.getLastFolkNPC(); final Npc lastNpc = player.getLastFolkNPC();
if (Config.ALLOW_MANOR && (lastNpc != null) && lastNpc.canInteract(player)) if (Config.ALLOW_MANOR && (lastNpc != null) && lastNpc.canInteract(player) && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MANOR_BYPASS, lastNpc))
{ {
final String[] split = _command.substring(_command.indexOf('?') + 1).split("&"); final String[] split = _command.substring(_command.indexOf('?') + 1).split("&");
final int ask = Integer.parseInt(split[0].split("=")[1]); final int ask = Integer.parseInt(split[0].split("=")[1]);
@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChangeToAwakenedClass; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChangeToAwakenedClass;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -47,9 +48,12 @@ public class RequestChangeToAwakenedClass implements IClientIncomingPacket
} }
if (_change) if (_change)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CHANGE_TO_AWAKENED_CLASS, player))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerChangeToAwakenedClass(player), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerChangeToAwakenedClass(player), player);
} }
}
else else
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.Containers; import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerQuestAbort; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerQuestAbort;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState; import org.l2jmobius.gameserver.model.quest.QuestState;
@@ -60,7 +61,12 @@ public class RequestQuestAbort implements IClientIncomingPacket
qs.setSimulated(false); qs.setSimulated(false);
qs.exitQuest(QuestType.REPEATABLE); qs.exitQuest(QuestType.REPEATABLE);
player.sendPacket(new QuestList(player)); player.sendPacket(new QuestList(player));
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_ABORT, player, Containers.Players()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestAbort(player, _questId), player, Containers.Players()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestAbort(player, _questId), player, Containers.Players());
}
qe.onQuestAborted(player); qe.onQuestAborted(player);
} }
} }
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.BypassHandler;
import org.l2jmobius.gameserver.handler.IBypassHandler; import org.l2jmobius.gameserver.handler.IBypassHandler;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -57,6 +58,10 @@ public class RequestTutorialPassCmdToServer implements IClientIncomingPacket
handler.useBypass(_bypass, player, null); handler.useBypass(_bypass, player, null);
} }
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BYPASS, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBypass(player, _bypass), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBypass(player, _bypass), player);
} }
} }
}
@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerPressTutorialMark; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerPressTutorialMark;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -43,6 +44,9 @@ public class RequestTutorialQuestionMark implements IClientIncomingPacket
} }
// Notify scripts // Notify scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PRESS_TUTORIAL_MARK, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPressTutorialMark(player, _number), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPressTutorialMark(player, _number), player);
} }
} }
}
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.handler.IChatHandler;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChat; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChat;
import org.l2jmobius.gameserver.model.events.returns.ChatFilterReturn; import org.l2jmobius.gameserver.model.events.returns.ChatFilterReturn;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -191,12 +192,15 @@ public class Say2 implements IClientIncomingPacket
return; return;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CHAT, player))
{
final ChatFilterReturn filter = EventDispatcher.getInstance().notifyEvent(new OnPlayerChat(player, _target, _text, chatType), player, ChatFilterReturn.class); final ChatFilterReturn filter = EventDispatcher.getInstance().notifyEvent(new OnPlayerChat(player, _target, _text, chatType), player, ChatFilterReturn.class);
if (filter != null) if (filter != null)
{ {
_text = filter.getFilteredText(); _text = filter.getFilteredText();
chatType = filter.getChatType(); chatType = filter.getChatType();
} }
}
// Say Filter implementation // Say Filter implementation
if (Config.USE_SAY_FILTER) if (Config.USE_SAY_FILTER)
@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.EffectType; import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse; import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -290,10 +291,13 @@ public class UseItem implements IClientIncomingPacket
} }
// Notify events. // Notify events.
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_USE, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemUse(player, item), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemUse(player, item), item.getTemplate());
} }
} }
} }
}
private void reuseData(Player player, Item item, long remainingTime) private void reuseData(Player player, Item item, long remainingTime)
{ {
@@ -20,6 +20,7 @@ import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.gameserver.enums.CategoryType; import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCallToChangeClass; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCallToChangeClass;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
@@ -50,6 +51,9 @@ public class RequestCallToChangeClass implements IClientIncomingPacket
return; return;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CALL_TO_CHANGE_CLASS, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerCallToChangeClass(player), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerCallToChangeClass(player), player);
} }
} }
}
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.instancemanager.MentorManager;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeAdd; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeAdd;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@@ -84,7 +85,11 @@ public class ConfirmMenteeAdd implements IClientIncomingPacket
MentorManager.getInstance().addMentor(mentor.getObjectId(), mentee.getObjectId()); MentorManager.getInstance().addMentor(mentor.getObjectId(), mentee.getObjectId());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_ADD, mentor))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeAdd(mentor, mentee), mentor); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeAdd(mentor, mentee), mentor);
}
mentor.sendPacket(new SystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTEE).addString(mentee.getName())); mentor.sendPacket(new SystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTEE).addString(mentee.getName()));
mentor.sendPacket(new ExMentorList(mentor)); mentor.sendPacket(new ExMentorList(mentor));
mentee.sendPacket(new SystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTOR).addString(mentor.getName())); mentee.sendPacket(new SystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTOR).addString(mentor.getName()));
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.instancemanager.MentorManager;
import org.l2jmobius.gameserver.model.Mentee; import org.l2jmobius.gameserver.model.Mentee;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeLeft; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeLeft;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeRemove; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeRemove;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -75,9 +76,12 @@ public class RequestMentorCancel implements IClientIncomingPacket
MentorManager.getInstance().deleteMentor(player.getObjectId(), mentee.getObjectId()); MentorManager.getInstance().deleteMentor(player.getObjectId(), mentee.getObjectId());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_REMOVE, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeRemove(player, mentee), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeRemove(player, mentee), player);
} }
} }
}
else if (player.isMentee()) else if (player.isMentee())
{ {
final Mentee mentor = MentorManager.getInstance().getMentor(player.getObjectId()); final Mentee mentor = MentorManager.getInstance().getMentor(player.getObjectId());
@@ -94,7 +98,11 @@ public class RequestMentorCancel implements IClientIncomingPacket
MentorManager.getInstance().deleteMentor(mentor.getObjectId(), player.getObjectId()); MentorManager.getInstance().deleteMentor(mentor.getObjectId(), player.getObjectId());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_LEFT, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeLeft(mentor, player), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeLeft(mentor, player), player);
}
mentor.getPlayer().sendPacket(new SystemMessage(SystemMessageId.THE_MENTORING_RELATIONSHIP_WITH_S1_HAS_BEEN_CANCELED_THE_MENTOR_CANNOT_OBTAIN_ANOTHER_MENTEE_FOR_TWO_DAYS).addString(_name)); mentor.getPlayer().sendPacket(new SystemMessage(SystemMessageId.THE_MENTORING_RELATIONSHIP_WITH_S1_HAS_BEEN_CANCELED_THE_MENTOR_CANNOT_OBTAIN_ANOTHER_MENTEE_FOR_TWO_DAYS).addString(_name));
} }
} }
@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.taskmanager;
import java.util.Calendar; import java.util.Calendar;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange;
/** /**
@@ -68,8 +69,12 @@ public class GameTimeTaskManager extends Thread
if ((_gameHour < 6) != _isNight) if ((_gameHour < 6) != _isNight)
{ {
_isNight = !_isNight; _isNight = !_isNight;
if (EventDispatcher.getInstance().hasListener(EventType.ON_DAY_NIGHT_CHANGE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnDayNightChange(_isNight)); EventDispatcher.getInstance().notifyEventAsync(new OnDayNightChange(_isNight));
} }
}
try try
{ {
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet; import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.PetStatusShow; import org.l2jmobius.gameserver.network.serverpackets.PetStatusShow;
@@ -79,7 +80,10 @@ public class PetAction implements IActionHandler
player.sendPacket(new PetStatusShow((Pet) target)); player.sendPacket(new PetStatusShow((Pet) target));
// Notify to scripts // Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), (Summon) target); if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_TALK, target))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), target);
}
} }
player.updateNotMoveUntil(); player.updateNotMoveUntil();
} }
@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonTalk;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -48,7 +49,10 @@ public class SummonAction implements IActionHandler
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
// Notify to scripts // Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), (Summon) target); if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_TALK, target))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonTalk((Summon) target), target);
}
} }
else if (player.getTarget() != target) else if (player.getTarget() != target)
{ {
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonAgathion; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonAgathion;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -59,11 +60,13 @@ public class SummonAgathion extends AbstractEffect
} }
final Player player = effected.getActingPlayer(); final Player player = effected.getActingPlayer();
player.setAgathionId(_npcId); player.setAgathionId(_npcId);
player.sendPacket(new ExUserInfoCubic(player)); player.sendPacket(new ExUserInfoCubic(player));
player.broadcastCharInfo(); player.broadcastCharInfo();
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_AGATHION))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonAgathion(player, _npcId)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonAgathion(player, _npcId));
} }
} }
}
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.Trap; import org.l2jmobius.gameserver.model.actor.instance.Trap;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -80,7 +81,10 @@ public class TrapRemove extends AbstractEffect
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, trap))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(trap, effector, TrapAction.TRAP_DISARMED), trap); EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(trap, effector, TrapAction.TRAP_DISARMED), trap);
}
trap.unSummon(); trap.unSummon();
if (effector.isPlayer()) if (effector.isPlayer())
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerUnsummonAgathion; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerUnsummonAgathion;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -55,8 +56,11 @@ public class UnsummonAgathion extends AbstractEffect
player.sendPacket(new ExUserInfoCubic(player)); player.sendPacket(new ExUserInfoCubic(player));
player.broadcastCharInfo(); player.broadcastCharInfo();
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_UNSUMMON_AGATHION))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerUnsummonAgathion(player, agathionId)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerUnsummonAgathion(player, agathionId));
} }
} }
} }
} }
}
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.ActionDataHolder;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSocialAction; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSocialAction;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExAskCoupleAction; import org.l2jmobius.gameserver.network.serverpackets.ExAskCoupleAction;
@@ -93,8 +94,11 @@ public class SocialAction implements IPlayerActionHandler
player.broadcastPacket(new org.l2jmobius.gameserver.network.serverpackets.SocialAction(player.getObjectId(), id)); player.broadcastPacket(new org.l2jmobius.gameserver.network.serverpackets.SocialAction(player.getObjectId(), id));
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SOCIAL_ACTION, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSocialAction(player, id), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSocialAction(player, id), player);
} }
}
return true; return true;
} }
@@ -842,8 +842,12 @@ public class CeremonyOfChaos extends AbstractNpcAI
final StatSet params = new StatSet(); final StatSet params = new StatSet();
params.set("time", 30); params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30000, null, null); getTimers().addTimer("match_end_countdown", params, 30000, null, null);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT))
{
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, memberList)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, memberList));
} }
}
private void teleportPlayersOut() private void teleportPlayersOut()
{ {
@@ -47,6 +47,7 @@ import org.l2jmobius.gameserver.model.actor.instance.Monster;
import org.l2jmobius.gameserver.model.actor.instance.RaidBoss; import org.l2jmobius.gameserver.model.actor.instance.RaidBoss;
import org.l2jmobius.gameserver.model.effects.EffectType; import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableFactionCall; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableFactionCall;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableHate; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableHate;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
@@ -403,12 +404,15 @@ public class AttackableAI extends CreatureAI
} }
} }
else if (t.isPlayable()) else if (t.isPlayable())
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_HATE, getActiveChar()))
{ {
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnAttackableHate(getActiveChar(), t.getActingPlayer(), t.isSummon()), getActiveChar(), TerminateReturn.class); final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnAttackableHate(getActiveChar(), t.getActingPlayer(), t.isSummon()), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate()) if ((term != null) && term.terminate())
{ {
return; return;
} }
}
// Get the hate level of the Attackable against this Creature target contained in _aggroList // Get the hate level of the Attackable against this Creature target contained in _aggroList
final int hating = npc.getHating(t); final int hating = npc.getHating(t);
@@ -750,8 +754,12 @@ public class AttackableAI extends CreatureAI
// By default, when a faction member calls for help, attack the caller's attacker. // By default, when a faction member calls for help, attack the caller's attacker.
// Notify the AI with EVT_AGGRESSION // Notify the AI with EVT_AGGRESSION
called.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, finalTarget, 1); called.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, finalTarget, 1);
if (EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_FACTION_CALL, called))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableFactionCall(called, getActiveChar(), finalTarget.getActingPlayer(), finalTarget.isSummon()), called); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableFactionCall(called, getActiveChar(), finalTarget.getActingPlayer(), finalTarget.isSummon()), called);
} }
}
else if (called.getAI()._intention != CtrlIntention.AI_INTENTION_ATTACK) else if (called.getAI()._intention != CtrlIntention.AI_INTENTION_ATTACK)
{ {
called.addDamageHate(finalTarget, 0, npc.getHating(finalTarget)); called.addDamageHate(finalTarget, 0, npc.getHating(finalTarget));
@@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.effects.EffectType; import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveFinished; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveFinished;
import org.l2jmobius.gameserver.model.interfaces.ILocational; import org.l2jmobius.gameserver.model.interfaces.ILocational;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -701,12 +702,15 @@ 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
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_FINISHED, npc))
{
if (_onNpcMoveFinished == null) if (_onNpcMoveFinished == null)
{ {
_onNpcMoveFinished = new OnNpcMoveFinished(npc); _onNpcMoveFinished = new OnNpcMoveFinished(npc);
} }
EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc); EventDispatcher.getInstance().notifyEventAsync(_onNpcMoveFinished, npc);
} }
}
// Launch actions corresponding to the Event Think // Launch actions corresponding to the Event Think
onEvtThink(); onEvtThink();
@@ -46,6 +46,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.EventMonster; import org.l2jmobius.gameserver.model.actor.instance.EventMonster;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate; import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -350,7 +351,11 @@ public class ItemTable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_CREATE, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnItemCreate(process, item, actor, reference), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemCreate(process, item, actor, reference), item.getTemplate());
}
return item; return item;
} }
@@ -45,6 +45,7 @@ import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege; import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.clan.ClanWar; import org.l2jmobius.gameserver.model.clan.ClanWar;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarFinish; import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarFinish;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanDestroy; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanDestroy;
@@ -214,7 +215,11 @@ public class ClanTable
player.broadcastUserInfo(UserInfoType.RELATION, UserInfoType.CLAN); player.broadcastUserInfo(UserInfoType.RELATION, UserInfoType.CLAN);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_CREATE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan));
}
return clan; return clan;
} }
@@ -327,8 +332,11 @@ public class ClanTable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_DESTROY))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanDestroy(leaderMember, clan)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanDestroy(leaderMember, clan));
} }
}
public void scheduleRemoveClan(int clanId) public void scheduleRemoveClan(int clanId)
{ {
@@ -383,7 +391,10 @@ public class ClanTable
final Clan clan1 = getInstance().getClan(clanId1); final Clan clan1 = getInstance().getClan(clanId1);
final Clan clan2 = getInstance().getClan(clanId2); final Clan clan2 = getInstance().getClan(clanId2);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CLAN_WAR_FINISH))
{
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarFinish(clan1, clan2)); EventDispatcher.getInstance().notifyEventAsync(new OnClanWarFinish(clan1, clan2));
}
clan1.deleteWar(clan2.getId()); clan1.deleteWar(clan2.getId());
clan2.deleteWar(clan1.getId()); clan2.deleteWar(clan1.getId());
@@ -45,6 +45,7 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.Monster; import org.l2jmobius.gameserver.model.actor.instance.Monster;
import org.l2jmobius.gameserver.model.actor.tasks.npc.walker.ArrivedTask; import org.l2jmobius.gameserver.model.actor.tasks.npc.walker.ArrivedTask;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveNodeArrived; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveNodeArrived;
import org.l2jmobius.gameserver.model.holders.NpcRoutesHolder; import org.l2jmobius.gameserver.model.holders.NpcRoutesHolder;
import org.l2jmobius.gameserver.network.NpcStringId; import org.l2jmobius.gameserver.network.NpcStringId;
@@ -424,7 +425,10 @@ public class WalkingManager implements IXmlReader
} }
// Notify quest // Notify quest
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_NODE_ARRIVED, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveNodeArrived(npc), npc); EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveNodeArrived(npc), npc);
}
final WalkInfo walk = _activeRoutes.get(npc.getObjectId()); final WalkInfo walk = _activeRoutes.get(npc.getObjectId());
// Opposite should not happen... but happens sometime // Opposite should not happen... but happens sometime
@@ -22,6 +22,7 @@ import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.instancemanager.WalkingManager; import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveRouteFinished; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcMoveRouteFinished;
/** /**
@@ -92,7 +93,10 @@ public class WalkInfo
if (_currentNode == getRoute().getNodesCount()) // Last node arrived if (_currentNode == getRoute().getNodesCount()) // Last node arrived
{ {
// Notify quest // Notify quest
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_MOVE_ROUTE_FINISHED, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveRouteFinished(npc), npc); EventDispatcher.getInstance().notifyEventAsync(new OnNpcMoveRouteFinished(npc), npc);
}
if (!getRoute().repeatWalk()) if (!getRoute().repeatWalk())
{ {
@@ -58,6 +58,7 @@ import org.l2jmobius.gameserver.model.actor.tasks.attackable.CommandChannelTimer
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAggroRangeEnter; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAggroRangeEnter;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAttack; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableAttack;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableKill; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnAttackableKill;
@@ -292,9 +293,9 @@ public class Attackable extends Npc
return false; return false;
} }
if ((killer != null) && (killer.getActingPlayer() != null)) // Notify to scripts.
if ((killer != null) && (killer.getActingPlayer() != null) && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_KILL, this))
{ {
// Delayed notification
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(killer.getActingPlayer(), this, killer.isSummon()), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(killer.getActingPlayer(), this, killer.isSummon()), this);
} }
@@ -777,7 +778,7 @@ public class Attackable extends Npc
addDamageHate(attacker, damage, (int) hateValue); addDamageHate(attacker, damage, (int) hateValue);
final Player player = attacker.getActingPlayer(); final Player player = attacker.getActingPlayer();
if (player != null) if ((player != null) && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_ATTACK, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(player, this, damage, skill, attacker.isSummon()), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(player, this, damage, skill, attacker.isSummon()), this);
} }
@@ -841,8 +842,11 @@ public class Attackable extends Npc
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_AGGRO_RANGE_ENTER, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAggroRangeEnter(this, targetPlayer, attacker.isSummon()), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAggroRangeEnter(this, targetPlayer, attacker.isSummon()), this);
} }
}
else if ((targetPlayer == null) && (aggro == 0)) else if ((targetPlayer == null) && (aggro == 0))
{ {
aggro = 1; aggro = 1;
@@ -639,8 +639,12 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
spawnMe(getX(), getY(), getZ()); spawnMe(getX(), getY(), getZ());
setTeleporting(false); setTeleporting(false);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_TELEPORTED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureTeleported(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureTeleported(this), this);
} }
}
/** /**
* Add Creature instance that is attacking to the attacker list. * Add Creature instance that is attacking to the attacker list.
@@ -828,6 +832,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
int heading = headingValue; int heading = headingValue;
Instance instance = instanceValue; Instance instance = instanceValue;
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_TELEPORT, this))
{
final LocationReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureTeleport(this, x, y, z, heading, instance), this, LocationReturn.class); final LocationReturn term = EventDispatcher.getInstance().notifyEvent(new OnCreatureTeleport(this, x, y, z, heading, instance), this, LocationReturn.class);
if (term != null) if (term != null)
{ {
@@ -844,6 +850,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
instance = term.getInstance(); instance = term.getInstance();
} }
} }
}
// Prepare creature for teleport. // Prepare creature for teleport.
if (_isPendingRevive) if (_isPendingRevive)
@@ -1718,8 +1725,16 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
setCurrentHp(0); setCurrentHp(0);
setDead(true); setDead(true);
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DEATH, this))
{
EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this); EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this);
}
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_KILLED, killer))
{
EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), killer); EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), killer);
}
abortAttack(); abortAttack();
abortCast(); abortCast();
@@ -3980,6 +3995,8 @@ 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.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACK, this))
{
if (_onCreatureAttack == null) if (_onCreatureAttack == null)
{ {
_onCreatureAttack = new OnCreatureAttack(); _onCreatureAttack = new OnCreatureAttack();
@@ -3988,7 +4005,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureAttack.setTarget(target); _onCreatureAttack.setTarget(target);
_onCreatureAttack.setSkill(null); _onCreatureAttack.setSkill(null);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this); EventDispatcher.getInstance().notifyEvent(_onCreatureAttack, this);
}
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACKED, target))
{
if (_onCreatureAttacked == null) if (_onCreatureAttacked == null)
{ {
_onCreatureAttacked = new OnCreatureAttacked(); _onCreatureAttacked = new OnCreatureAttacked();
@@ -3997,6 +4016,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureAttacked.setTarget(target); _onCreatureAttacked.setTarget(target);
_onCreatureAttacked.setSkill(null); _onCreatureAttacked.setSkill(null);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target); EventDispatcher.getInstance().notifyEvent(_onCreatureAttacked, target);
}
if (_triggerSkills != null) if (_triggerSkills != null)
{ {
@@ -4725,7 +4745,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
double amount = amountValue; double amount = amountValue;
// 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().hasListener(EventType.ON_CREATURE_DAMAGE_DEALT, attacker))
{ {
if (_onCreatureDamageDealt == null) if (_onCreatureDamageDealt == null)
{ {
@@ -4740,7 +4760,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureDamageDealt.setReflect(reflect); _onCreatureDamageDealt.setReflect(reflect);
EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker); EventDispatcher.getInstance().notifyEvent(_onCreatureDamageDealt, attacker);
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DAMAGE_RECEIVED, this))
{
if (_onCreatureDamageReceived == null) if (_onCreatureDamageReceived == null)
{ {
_onCreatureDamageReceived = new OnCreatureDamageReceived(); _onCreatureDamageReceived = new OnCreatureDamageReceived();
@@ -4764,6 +4785,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
amount = term.getDamage(); amount = term.getDamage();
} }
} }
}
final double damageCap = _stat.getValue(Stat.DAMAGE_LIMIT); final double damageCap = _stat.getValue(Stat.DAMAGE_LIMIT);
if (damageCap > 0) if (damageCap > 0)
@@ -5139,6 +5161,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
* @param isDot * @param isDot
*/ */
public void notifyAttackAvoid(Creature target, boolean isDot) public void notifyAttackAvoid(Creature target, boolean isDot)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_ATTACK_AVOID, target))
{ {
if (_onCreatureAttackAvoid == null) if (_onCreatureAttackAvoid == null)
{ {
@@ -5149,6 +5173,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
_onCreatureAttackAvoid.setDamageOverTime(isDot); _onCreatureAttackAvoid.setDamageOverTime(isDot);
EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target); EventDispatcher.getInstance().notifyEvent(_onCreatureAttackAvoid, target);
} }
}
/** /**
* @return {@link WeaponType} of current character's weapon or basic weapon type. * @return {@link WeaponType} of current character's weapon or basic weapon type.
@@ -5586,7 +5611,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
if (!creature.isInvisible()) if (!creature.isInvisible())
{ {
final WorldRegion worldRegion = getWorldRegion(); final WorldRegion worldRegion = getWorldRegion();
if ((worldRegion != null) && worldRegion.areNeighborsActive() && _seenCreatures.add(creature)) if ((worldRegion != null) && worldRegion.areNeighborsActive() && _seenCreatures.add(creature) && EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_SEE, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureSee(this, creature), this); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureSee(this, creature), this);
} }
@@ -1055,10 +1055,13 @@ public class Npc extends Creature
_isRandomAnimationEnabled = getTemplate().isRandomAnimationEnabled(); _isRandomAnimationEnabled = getTemplate().isRandomAnimationEnabled();
_isRandomWalkingEnabled = !WalkingManager.getInstance().isTargeted(this) && getTemplate().isRandomWalkEnabled(); _isRandomWalkingEnabled = !WalkingManager.getInstance().isTargeted(this) && getTemplate().isRandomWalkEnabled();
if (isTeleporting()) if (isTeleporting())
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_TELEPORT, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcTeleport(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcTeleport(this), this);
} }
else }
else if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SPAWN, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSpawn(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcSpawn(this), this);
} }
@@ -1161,7 +1164,10 @@ public class Npc extends Creature
WalkingManager.getInstance().onDeath(this); WalkingManager.getInstance().onDeath(this);
// Notify DP scripts // Notify DP scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_DESPAWN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcDespawn(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcDespawn(this), this);
}
// Remove from instance world // Remove from instance world
final Instance instance = getInstanceWorld(); final Instance instance = getInstanceWorld();
@@ -1333,7 +1339,7 @@ public class Npc extends Creature
@Override @Override
public void notifyQuestEventSkillFinished(Skill skill, WorldObject target) public void notifyQuestEventSkillFinished(Skill skill, WorldObject target)
{ {
if (target != null) if ((target != null) && EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_FINISHED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillFinished(this, target.getActingPlayer(), skill), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillFinished(this, target.getActingPlayer(), skill), this);
} }
@@ -1533,9 +1539,12 @@ public class Npc extends Creature
* @param reference the reference * @param reference the reference
*/ */
public void sendScriptEvent(String eventName, WorldObject receiver, WorldObject reference) public void sendScriptEvent(String eventName, WorldObject receiver, WorldObject reference)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_EVENT_RECEIVED, receiver))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcEventReceived(eventName, this, (Npc) receiver, reference), receiver); EventDispatcher.getInstance().notifyEventAsync(new OnNpcEventReceived(eventName, this, (Npc) receiver, reference), receiver);
} }
}
/** /**
* Gets point in range between radiusMin and radiusMax from this NPC * Gets point in range between radiusMin and radiusMax from this NPC
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanWar; import org.l2jmobius.gameserver.model.clan.ClanWar;
import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
@@ -99,12 +100,15 @@ public abstract class Playable extends Creature
@Override @Override
public boolean doDie(Creature killer) public boolean doDie(Creature killer)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_DEATH, this))
{ {
final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class); final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class);
if ((returnBack != null) && returnBack.terminate()) if ((returnBack != null) && returnBack.terminate())
{ {
return false; return false;
} }
}
// killing is only possible one time // killing is only possible one time
synchronized (this) synchronized (this)
@@ -1913,8 +1913,12 @@ public class Player extends Playable
* @param pkKills * @param pkKills
*/ */
public void setPkKills(int pkKills) public void setPkKills(int pkKills)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PK_CHANGED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPKChanged(this, _pkKills, pkKills), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPKChanged(this, _pkKills, pkKills), this);
}
_pkKills = pkKills; _pkKills = pkKills;
} }
@@ -2024,7 +2028,10 @@ public class Player extends Playable
public void setReputation(int value) public void setReputation(int value)
{ {
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_REPUTATION_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerReputationChanged(this, getReputation(), value), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerReputationChanged(this, getReputation(), value), this);
}
int reputation = value; int reputation = value;
if (reputation > Config.MAX_REPUTATION) // Max count of positive reputation if (reputation > Config.MAX_REPUTATION) // Max count of positive reputation
@@ -2285,8 +2292,11 @@ public class Player extends Playable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_EQUIP, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemEquip(this, item), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemEquip(this, item), item.getTemplate());
} }
}
else else
{ {
sendPacket(SystemMessageId.NO_EQUIPMENT_SLOT_AVAILABLE); sendPacket(SystemMessageId.NO_EQUIPMENT_SLOT_AVAILABLE);
@@ -2324,8 +2334,12 @@ public class Player extends Playable
* @param pvpKills * @param pvpKills
*/ */
public void setPvpKills(int pvpKills) public void setPvpKills(int pvpKills)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PVP_CHANGED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPChanged(this, _pvpKills, pvpKills), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPChanged(this, _pvpKills, pvpKills), this);
}
_pvpKills = pvpKills; _pvpKills = pvpKills;
} }
@@ -2353,7 +2367,10 @@ public class Player extends Playable
newFame = 0; newFame = 0;
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_FAME_CHANGED, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFameChanged(this, _fame, newFame), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFameChanged(this, _fame, newFame), this);
}
_fame = newFame; _fame = newFame;
} }
@@ -4844,8 +4861,11 @@ public class Player extends Playable
if ((pk != null) || fpcKill) if ((pk != null) || fpcKill)
{ {
if (pk != null) if (pk != null)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PVP_KILL, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this);
}
// pvp/pk item rewards // pvp/pk item rewards
if (!(Config.DISABLE_REWARDS_IN_INSTANCES && (getInstanceId() != 0)) && // if (!(Config.DISABLE_REWARDS_IN_INSTANCES && (getInstanceId() != 0)) && //
@@ -7932,7 +7952,11 @@ public class Player extends Playable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_HENNA_REMOVE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
}
return true; return true;
} }
@@ -8004,10 +8028,15 @@ public class Player extends Playable
broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED); broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_HENNA_ADD, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaAdd(this, henna), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaAdd(this, henna), this);
}
return true; return true;
} }
} }
return false; return false;
} }
@@ -9635,7 +9664,7 @@ public class Player extends Playable
public boolean modifySubClass(int classIndex, int newClassId, boolean isDualClass) public boolean modifySubClass(int classIndex, int newClassId, boolean isDualClass)
{ {
// Notify to scripts before class is removed. // Notify to scripts before class is removed.
if (!getSubClasses().isEmpty()) // also null check if (!getSubClasses().isEmpty() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PROFESSION_CANCEL, this))
{ {
final int classId = getSubClasses().get(classIndex).getClassId(); final int classId = getSubClasses().get(classIndex).getClassId();
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionCancel(this, classId), this);
@@ -9811,8 +9840,11 @@ public class Player extends Playable
setTemplate(pcTemplate); setTemplate(pcTemplate);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_PROFESSION_CHANGE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionChange(this, pcTemplate, isSubClassActive()), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerProfessionChange(this, pcTemplate, isSubClassActive()), this);
} }
}
/** /**
* Changes the character's class based on the given class index.<br> * Changes the character's class based on the given class index.<br>
@@ -9967,8 +9999,12 @@ public class Player extends Playable
broadcastPacket(new SocialAction(getObjectId(), SocialAction.LEVEL_UP)); broadcastPacket(new SocialAction(getObjectId(), SocialAction.LEVEL_UP));
sendPacket(new SkillCoolTime(this)); sendPacket(new SkillCoolTime(this));
sendStorageMaxCount(); sendStorageMaxCount();
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUB_CHANGE, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSubChange(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSubChange(this), this);
} }
}
finally finally
{ {
_subclassLock = false; _subclassLock = false;
@@ -10139,15 +10175,20 @@ public class Player extends Playable
LOGGER.log(Level.SEVERE, "", e); LOGGER.log(Level.SEVERE, "", e);
} }
// Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LOGIN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this);
}
if (isMentee()) if (isMentee())
{ {
// Notify to scripts if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_STATUS, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, true), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, true), this);
} }
else if (isMentor()) }
else if (isMentor() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTOR_STATUS, this))
{ {
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, true), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, true), this);
} }
} }
@@ -10809,8 +10850,11 @@ public class Player extends Playable
*/ */
@Override @Override
public boolean deleteMe() public boolean deleteMe()
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LOGOUT, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogout(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogout(this), this);
}
try try
{ {
@@ -11190,14 +11234,16 @@ public class Player extends Playable
player.removeSnooped(this); player.removeSnooped(this);
} }
// Notify to scripts
if (isMentee()) if (isMentee())
{ {
// Notify to scripts if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTEE_STATUS, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeStatus(this, false), this);
} }
else if (isMentor()) }
else if (isMentor() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_MENTOR_STATUS, this))
{ {
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMentorStatus(this, false), this);
} }
@@ -13527,8 +13573,12 @@ public class Player extends Playable
* @param points * @param points
*/ */
public void setAbilityPointsUsed(int points) public void setAbilityPointsUsed(int points)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ABILITY_POINTS_CHANGED, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAbilityPointsChanged(this, getAbilityPointsUsed(), points), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAbilityPointsChanged(this, getAbilityPointsUsed(), points), this);
}
getVariables().set(isDualClassActive() ? PlayerVariables.ABILITY_POINTS_USED_DUAL_CLASS : PlayerVariables.ABILITY_POINTS_USED_MAIN_CLASS, points); getVariables().set(isDualClassActive() ? PlayerVariables.ABILITY_POINTS_USED_DUAL_CLASS : PlayerVariables.ABILITY_POINTS_USED_MAIN_CLASS, points);
} }
@@ -47,6 +47,7 @@ import org.l2jmobius.gameserver.model.actor.status.SummonStatus;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.effects.EffectFlag;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSpawn; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSpawn;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
@@ -141,8 +142,11 @@ public abstract class Summon extends Playable
rechargeShots(true, true, false); rechargeShots(true, true, false);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_SPAWN, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSpawn(this), this); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSpawn(this), this);
} }
}
@Override @Override
public SummonStat getStat() public SummonStat getStat()
@@ -72,7 +72,7 @@ public class FriendlyNpc extends Attackable
super.addDamage(attacker, damage, skill); super.addDamage(attacker, damage, skill);
} }
if (attacker.isAttackable()) if (attacker.isAttackable() && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_ATTACK, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(null, this, damage, skill, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableAttack(null, this, damage, skill, false), this);
} }
@@ -96,9 +96,9 @@ public class FriendlyNpc extends Attackable
return false; return false;
} }
if ((killer != null) && killer.isAttackable()) // Notify to scripts.
if ((killer != null) && killer.isAttackable() && EventDispatcher.getInstance().hasListener(EventType.ON_ATTACKABLE_KILL, this))
{ {
// Delayed notification
EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(null, this, false), this); EventDispatcher.getInstance().notifyEventAsync(new OnAttackableKill(null, this, false), this);
} }
return true; return true;
@@ -205,9 +205,12 @@ public class Guard extends Attackable
} }
if (hasListener(EventType.ON_NPC_FIRST_TALK)) if (hasListener(EventType.ON_NPC_FIRST_TALK))
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_FIRST_TALK, this))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(this, player), this); EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(this, player), this);
} }
}
else else
{ {
showChatWindow(player, 0); showChatWindow(player, 0);
@@ -32,6 +32,7 @@ import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTask;
import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTriggerTask; import org.l2jmobius.gameserver.model.actor.tasks.npc.trap.TrapTriggerTask;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnTrapAction;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
@@ -313,7 +314,11 @@ public class Trap extends Npc
_playersWhoDetectedMe.add(detector.getObjectId()); _playersWhoDetectedMe.add(detector.getObjectId());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, detector, TrapAction.TRAP_DETECTED), this); EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, detector, TrapAction.TRAP_DETECTED), this);
}
if (detector.isPlayable()) if (detector.isPlayable())
{ {
sendInfo(detector.getActingPlayer()); sendInfo(detector.getActingPlayer());
@@ -341,7 +346,11 @@ public class Trap extends Npc
broadcastPacket(new NpcInfo(this)); broadcastPacket(new NpcInfo(this));
setTarget(target); setTarget(target);
if (EventDispatcher.getInstance().hasListener(EventType.ON_TRAP_ACTION, this))
{
EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, target, TrapAction.TRAP_TRIGGERED), this); EventDispatcher.getInstance().notifyEventAsync(new OnTrapAction(this, target, TrapAction.TRAP_TRIGGERED), this);
}
ThreadPool.schedule(new TrapTriggerTask(this), 500); ThreadPool.schedule(new TrapTriggerTask(this), 500);
} }
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.actor.Playable;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.Pet; import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayableExpChanged; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayableExpChanged;
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
@@ -41,12 +42,15 @@ public class PlayableStat extends CreatureStat
} }
public boolean addExp(long amount) public boolean addExp(long amount)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYABLE_EXP_CHANGED, getActiveChar()))
{ {
final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayableExpChanged(getActiveChar(), getExp(), getExp() + amount), getActiveChar(), TerminateReturn.class); final TerminateReturn term = EventDispatcher.getInstance().notifyEvent(new OnPlayableExpChanged(getActiveChar(), getExp(), getExp() + amount), getActiveChar(), TerminateReturn.class);
if ((term != null) && term.terminate()) if ((term != null) && term.terminate())
{ {
return false; return false;
} }
}
if (((getExp() + amount) < 0) || ((amount > 0) && (getExp() == (getExpForLevel(getMaxLevel()) - 1)))) if (((getExp() + amount) < 0) || ((amount > 0) && (getExp() == (getExpForLevel(getMaxLevel()) - 1))))
{ {
@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Pet; import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder; import org.l2jmobius.gameserver.model.holders.SubClassHolder;
@@ -250,7 +251,10 @@ public class PlayerStat extends PlayableStat
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_LEVEL_CHANGED, getActiveChar()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLevelChanged(getActiveChar(), getLevel() - value, getLevel()), getActiveChar()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLevelChanged(getActiveChar(), getLevel() - value, getLevel()), getActiveChar());
}
// Give AutoGet skills and all normal skills if Auto-Learn is activated. // Give AutoGet skills and all normal skills if Auto-Learn is activated.
getActiveChar().rewardSkills(); getActiveChar().rewardSkills();
@@ -25,6 +25,7 @@ import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureHpChange; import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureHpChange;
import org.l2jmobius.gameserver.model.skill.AbnormalType; import org.l2jmobius.gameserver.model.skill.AbnormalType;
import org.l2jmobius.gameserver.model.stats.Formulas; import org.l2jmobius.gameserver.model.stats.Formulas;
@@ -314,8 +315,12 @@ public class CreatureStatus
{ {
_creature.broadcastStatusUpdate(); _creature.broadcastStatusUpdate();
} }
if (EventDispatcher.getInstance().hasListener(EventType.ON_CREATURE_HP_CHANGE, getActiveChar()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnCreatureHpChange(getActiveChar(), oldHp, _currentHp), getActiveChar()); EventDispatcher.getInstance().notifyEventAsync(new OnCreatureHpChange(getActiveChar(), oldHp, _currentHp), getActiveChar());
} }
}
return hpWasChanged; return hpWasChanged;
} }
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTransform; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTransform;
import org.l2jmobius.gameserver.model.holders.AdditionalItemHolder; import org.l2jmobius.gameserver.model.holders.AdditionalItemHolder;
import org.l2jmobius.gameserver.model.holders.AdditionalSkillHolder; import org.l2jmobius.gameserver.model.holders.AdditionalSkillHolder;
@@ -331,8 +332,11 @@ public class Transform implements IIdentifiable
player.broadcastUserInfo(); player.broadcastUserInfo();
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TRANSFORM, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, getId()), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, getId()), player);
} }
}
else else
{ {
creature.broadcastInfo(); creature.broadcastInfo();
@@ -396,9 +400,13 @@ public class Transform implements IIdentifiable
player.broadcastUserInfo(); player.broadcastUserInfo();
player.sendPacket(new ExUserInfoEquipSlot(player)); player.sendPacket(new ExUserInfoEquipSlot(player));
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TRANSFORM, player))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, 0), player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerTransform(player, 0), player);
} }
}
else else
{ {
creature.broadcastInfo(); creature.broadcastInfo();
@@ -54,6 +54,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeaderChange; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeaderChange;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeft; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanLeft;
@@ -253,7 +254,11 @@ public class Clan implements IIdentifiable, INamable
final Player exLeader = exMember.getPlayer(); final Player exLeader = exMember.getPlayer();
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEADER_CHANGE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeaderChange(exMember, member, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeaderChange(exMember, member, this));
}
if (exLeader != null) if (exLeader != null)
{ {
if (exLeader.isFlying()) if (exLeader.isFlying())
@@ -386,8 +391,11 @@ public class Clan implements IIdentifiable, INamable
addSkillEffects(player); addSkillEffects(player);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_JOIN))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanJoin(member, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanJoin(member, this));
} }
}
/** /**
* Updates player status in clan. * Updates player status in clan.
@@ -549,8 +557,11 @@ public class Clan implements IIdentifiable, INamable
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEFT))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeft(exMember, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLeft(exMember, this));
} }
}
public Collection<ClanMember> getMembers() public Collection<ClanMember> getMembers()
{ {
@@ -2701,7 +2712,11 @@ public class Clan implements IIdentifiable, INamable
changeLevel(_level + 1); changeLevel(_level + 1);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_LEVELUP))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLvlUp(player, this)); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanLvlUp(player, this));
}
return true; return true;
} }
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.ClanWarState;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarStart; import org.l2jmobius.gameserver.model.events.impl.clan.OnClanWarStart;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.SurrenderPledgeWar; import org.l2jmobius.gameserver.network.serverpackets.SurrenderPledgeWar;
@@ -59,7 +60,12 @@ public class ClanWar
_cancelTask = ThreadPool.schedule(this::clanWarTimeout, (_startTime + TIME_TO_CANCEL_NON_MUTUAL_CLAN_WAR) - System.currentTimeMillis()); _cancelTask = ThreadPool.schedule(this::clanWarTimeout, (_startTime + TIME_TO_CANCEL_NON_MUTUAL_CLAN_WAR) - System.currentTimeMillis());
attacker.addWar(attacked.getId(), this); attacker.addWar(attacked.getId(), this);
attacked.addWar(attacker.getId(), this); attacked.addWar(attacker.getId(), this);
if (EventDispatcher.getInstance().hasListener(EventType.ON_CLAN_WAR_START))
{
EventDispatcher.getInstance().notifyEventAsync(new OnClanWarStart(attacker, attacked)); EventDispatcher.getInstance().notifyEventAsync(new OnClanWarStart(attacker, attacked));
}
SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_DECLARED_A_CLAN_WAR_WITH_S1); SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_DECLARED_A_CLAN_WAR_WITH_S1);
sm.addString(attacked.getName()); sm.addString(attacked.getName());
attacker.broadcastToOnlineMembers(sm); attacker.broadcastToOnlineMembers(sm);
@@ -26,7 +26,7 @@ import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
import org.l2jmobius.gameserver.model.events.returns.AbstractEventReturn; import org.l2jmobius.gameserver.model.events.returns.AbstractEventReturn;
/** /**
* @author UnAfraid * @author UnAfraid, Mobius
*/ */
public class EventDispatcher public class EventDispatcher
{ {
@@ -36,6 +36,47 @@ public class EventDispatcher
{ {
} }
/**
* @param type EventType
* @return {@code true} if global containers have a listener of the given type.
*/
public boolean hasListener(EventType type)
{
return Containers.Global().hasListener(type);
}
/**
* @param type EventType
* @param container ListenersContainer
* @return {@code true} if container has a listener of the given type.
*/
public boolean hasListener(EventType type, ListenersContainer container)
{
return Containers.Global().hasListener(type) || ((container != null) && container.hasListener(type));
}
/**
* @param type EventType
* @param containers ListenersContainer...
* @return {@code true} if containers have a listener of the given type.
*/
public boolean hasListener(EventType type, ListenersContainer... containers)
{
boolean hasListeners = Containers.Global().hasListener(type);
if (!hasListeners)
{
for (ListenersContainer container : containers)
{
if (container.hasListener(type))
{
hasListeners = true;
break;
}
}
}
return hasListeners;
}
/** /**
* @param <T> * @param <T>
* @param event * @param event
@@ -79,7 +120,7 @@ public class EventDispatcher
{ {
try try
{ {
return Containers.Global().hasListener(event.getType()) || ((container != null) && container.hasListener(event.getType())) ? notifyEventImpl(event, container, callbackClass) : null; return notifyEventImpl(event, container, callbackClass);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -88,6 +129,21 @@ public class EventDispatcher
return null; return null;
} }
/**
* Executing current listener notification asynchronously
* @param event
* @param container
*/
public void notifyEventAsync(IBaseEvent event, ListenersContainer container)
{
if (event == null)
{
throw new NullPointerException("Event cannot be null!");
}
ThreadPool.execute(() -> notifyEventToSingleContainer(event, container, null));
}
/** /**
* Executing current listener notification asynchronously * Executing current listener notification asynchronously
* @param event * @param event
@@ -100,37 +156,45 @@ public class EventDispatcher
throw new NullPointerException("Event cannot be null!"); throw new NullPointerException("Event cannot be null!");
} }
boolean hasListeners = Containers.Global().hasListener(event.getType());
if (!hasListeners)
{
for (ListenersContainer container : containers)
{
if (container.hasListener(event.getType()))
{
hasListeners = true;
break;
}
}
}
if (hasListeners)
{
ThreadPool.execute(() -> notifyEventToMultipleContainers(event, containers, null)); ThreadPool.execute(() -> notifyEventToMultipleContainers(event, containers, null));
} }
}
/** /**
* Scheduling current listener notification asynchronously after specified delay. * @param <T>
* @param event * @param event
* @param container * @param container
* @param delay * @param callbackClass
* @return
*/ */
public void notifyEventAsyncDelayed(IBaseEvent event, ListenersContainer container, long delay) private <T extends AbstractEventReturn> T notifyEventToSingleContainer(IBaseEvent event, ListenersContainer container, Class<T> callbackClass)
{ {
if (Containers.Global().hasListener(event.getType()) || container.hasListener(event.getType())) if (event == null)
{ {
ThreadPool.schedule(() -> notifyEvent(event, container, null), delay); throw new NullPointerException("Event cannot be null!");
} }
try
{
// Local listener container.
T callback = null;
if (container != null)
{
callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback);
}
// Global listener container.
if ((callback == null) || !callback.abort())
{
callback = notifyToListeners(Containers.Global().getListeners(event.getType()), event, callbackClass, callback);
}
return callback;
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't notify event " + event.getClass().getSimpleName(), e);
}
return null;
} }
/** /**
@@ -152,7 +216,7 @@ public class EventDispatcher
T callback = null; T callback = null;
if (containers != null) if (containers != null)
{ {
// Local listeners container first. // Local listener containers.
for (ListenersContainer container : containers) for (ListenersContainer container : containers)
{ {
if ((callback == null) || !callback.abort()) if ((callback == null) || !callback.abort())
@@ -191,8 +255,8 @@ public class EventDispatcher
throw new NullPointerException("Event cannot be null!"); throw new NullPointerException("Event cannot be null!");
} }
// Local listener container.
T callback = null; T callback = null;
// Local listener container first.
if (container != null) if (container != null)
{ {
callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback); callback = notifyToListeners(container.getListeners(event.getType()), event, callbackClass, callback);
@@ -32,6 +32,7 @@ import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerFishing; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerFishing;
import org.l2jmobius.gameserver.model.interfaces.ILocational; import org.l2jmobius.gameserver.model.interfaces.ILocational;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -333,7 +334,7 @@ public class Fishing
_player.sendPacket(SystemMessageId.THE_BAIT_HAS_BEEN_LOST_BECAUSE_THE_FISH_GOT_AWAY); _player.sendPacket(SystemMessageId.THE_BAIT_HAS_BEEN_LOST_BECAUSE_THE_FISH_GOT_AWAY);
} }
if (consumeBait) if (consumeBait && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_FISHING, _player))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFishing(_player, reason), _player); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerFishing(_player, reason), _player);
} }
@@ -56,6 +56,7 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Door; import org.l2jmobius.gameserver.model.actor.instance.Door;
import org.l2jmobius.gameserver.model.actor.templates.DoorTemplate; import org.l2jmobius.gameserver.model.actor.templates.DoorTemplate;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceCreated; import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceCreated;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceDestroy; import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceDestroy;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceEnter; import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceEnter;
@@ -130,9 +131,9 @@ public class Instance implements IIdentifiable, INamable
} }
} }
if (!isDynamic())
{
// Notify DP scripts // Notify DP scripts
if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_CREATED, _template))
{
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceCreated(this, player), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceCreated(this, player), _template);
} }
} }
@@ -220,8 +221,12 @@ public class Instance implements IIdentifiable, INamable
public void setStatus(int value) public void setStatus(int value)
{ {
_parameters.set("INSTANCE_STATUS", value); _parameters.set("INSTANCE_STATUS", value);
if (EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_STATUS_CHANGE, _template))
{
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceStatusChange(this, value), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceStatusChange(this, value), _template);
} }
}
/** /**
* Increment instance world status * Increment instance world status
@@ -836,7 +841,7 @@ public class Instance implements IIdentifiable, INamable
_ejectDeadTasks.clear(); _ejectDeadTasks.clear();
// Notify DP scripts // Notify DP scripts
if (!isDynamic()) if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_DESTROY, _template))
{ {
EventDispatcher.getInstance().notifyEvent(new OnInstanceDestroy(this), _template); EventDispatcher.getInstance().notifyEvent(new OnInstanceDestroy(this), _template);
} }
@@ -1073,7 +1078,7 @@ public class Instance implements IIdentifiable, INamable
} }
// Notify DP scripts // Notify DP scripts
if (!isDynamic()) if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_ENTER, _template))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceEnter(player, this), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceEnter(player, this), _template);
} }
@@ -1083,7 +1088,7 @@ public class Instance implements IIdentifiable, INamable
removePlayer(player); removePlayer(player);
// Notify DP scripts // Notify DP scripts
if (!isDynamic()) if (!isDynamic() && EventDispatcher.getInstance().hasListener(EventType.ON_INSTANCE_LEAVE, _template))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnInstanceLeave(player, this), _template); EventDispatcher.getInstance().notifyEventAsync(new OnInstanceLeave(player, this), _template);
} }
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee; import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcSkillSee;
import org.l2jmobius.gameserver.model.item.type.WeaponType; import org.l2jmobius.gameserver.model.item.type.WeaponType;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
@@ -307,7 +308,13 @@ public class Weapon extends ItemTemplate
// notify quests of a skill use // notify quests of a skill use
if (caster.isPlayer()) if (caster.isPlayer())
{ {
World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc -> EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npc, caster.getActingPlayer(), skill, false, target), npc)); World.getInstance().forEachVisibleObjectInRange(caster, Npc.class, 1000, npc ->
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_NPC_SKILL_SEE, npc))
{
EventDispatcher.getInstance().notifyEventAsync(new OnNpcSkillSee(npc, caster.getActingPlayer(), skill, false, target), npc);
}
});
} }
if (caster.isPlayer()) if (caster.isPlayer())
{ {
@@ -62,6 +62,7 @@ import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.conditions.Condition; import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.ensoul.EnsoulOption; import org.l2jmobius.gameserver.model.ensoul.EnsoulOption;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPickup; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPickup;
@@ -298,9 +299,9 @@ public class Item extends WorldObject
// Remove the Item from the world // Remove the Item from the world
World.getInstance().removeVisibleObject(this, oldregion); World.getInstance().removeVisibleObject(this, oldregion);
if (creature.isPlayer())
{
// Notify to scripts // Notify to scripts
if (creature.isPlayer() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_PICKUP, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemPickup(creature.getActingPlayer(), this), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemPickup(creature.getActingPlayer(), this), getTemplate());
} }
} }
@@ -977,7 +978,11 @@ public class Item extends WorldObject
} }
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_AUGMENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getTemplate());
}
return true; return true;
} }
@@ -1007,8 +1012,11 @@ public class Item extends WorldObject
} }
// Notify to scripts. // Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_AUGMENT, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augment, false), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augment, false), getTemplate());
} }
}
public void restoreAttributes() public void restoreAttributes()
{ {
@@ -1537,9 +1545,12 @@ public class Item extends WorldObject
_owner = null; _owner = null;
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(dropper.getActingPlayer(), this, new Location(x, y, z)), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(dropper.getActingPlayer(), this, new Location(x, y, z)), getTemplate());
} }
} }
}
/** /**
* Update the database with values of the item * Update the database with values of the item
@@ -2036,10 +2047,13 @@ public class Item extends WorldObject
} }
if (event != null) if (event != null)
{
if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_BYPASS_EVENT, getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnItemBypassEvent(this, player, event), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemBypassEvent(this, player, event), getTemplate());
} }
else }
else if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_TALK, getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnItemTalk(this, player), getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnItemTalk(this, player), getTemplate());
} }
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemAdd; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemAdd;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemDestroy; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemDestroy;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanWHItemTransfer;
@@ -71,7 +72,11 @@ public class ClanWarehouse extends Warehouse
final Item item = super.addItem(process, itemId, count, actor, reference); final Item item = super.addItem(process, itemId, count, actor, reference);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_ADD, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
}
return item; return item;
} }
@@ -79,7 +84,11 @@ public class ClanWarehouse extends Warehouse
public Item addItem(String process, Item item, Player actor, Object reference) public Item addItem(String process, Item item, Player actor, Object reference)
{ {
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_ADD, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemAdd(process, actor, item, this), item.getTemplate());
}
return super.addItem(process, item, actor, reference); return super.addItem(process, item, actor, reference);
} }
@@ -87,7 +96,11 @@ public class ClanWarehouse extends Warehouse
public Item destroyItem(String process, Item item, long count, Player actor, Object reference) public Item destroyItem(String process, Item item, long count, Player actor, Object reference)
{ {
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_DESTROY, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemDestroy(process, actor, item, count, this), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemDestroy(process, actor, item, count, this), item.getTemplate());
}
return super.destroyItem(process, item, count, actor, reference); return super.destroyItem(process, item, count, actor, reference);
} }
@@ -97,7 +110,11 @@ public class ClanWarehouse extends Warehouse
final Item item = getItemByObjectId(objectId); final Item item = getItemByObjectId(objectId);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_CLAN_WH_ITEM_TRANSFER, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemTransfer(process, actor, item, count, target), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanWHItemTransfer(process, actor, item, count, target), item.getTemplate());
}
return super.transferItem(process, objectId, count, target, actor, reference); return super.transferItem(process, objectId, count, target, actor, reference);
} }
} }
@@ -52,6 +52,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
@@ -1418,7 +1419,7 @@ public abstract class Inventory extends ItemContainer
if (old != null) if (old != null)
{ {
final Creature owner = getOwner(); final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer()) if ((owner != null) && owner.isPlayer() && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_UNEQUIP, old.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemUnequip(owner.getActingPlayer(), old), old.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemUnequip(owner.getActingPlayer(), old), old.getTemplate());
} }
@@ -37,6 +37,7 @@ import org.l2jmobius.gameserver.model.TradeItem;
import org.l2jmobius.gameserver.model.TradeList; import org.l2jmobius.gameserver.model.TradeList;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemAdd; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemAdd;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDestroy; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDestroy;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
@@ -422,9 +423,12 @@ public class PlayerInventory extends Inventory
actor.sendInventoryUpdate(playerIU); actor.sendInventoryUpdate(playerIU);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_ADD, actor, addedItem.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, addedItem), actor, addedItem.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, addedItem), actor, addedItem.getTemplate());
} }
} }
}
return addedItem; return addedItem;
} }
@@ -489,9 +493,12 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_ADD, actor, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, item), actor, item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemAdd(actor, item), actor, item.getTemplate());
} }
} }
}
return item; return item;
} }
@@ -521,7 +528,10 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_TRANSFER, item.getTemplate()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemTransfer(actor, item, target), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemTransfer(actor, item, target), item.getTemplate());
}
return item; return item;
} }
@@ -575,7 +585,7 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (destroyedItem != null) if ((destroyedItem != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DESTROY, destroyedItem.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDestroy(actor, destroyedItem), destroyedItem.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDestroy(actor, destroyedItem), destroyedItem.getTemplate());
} }
@@ -648,7 +658,7 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (droppedItem != null) if ((droppedItem != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, droppedItem.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, droppedItem, droppedItem.getLocation()), droppedItem.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, droppedItem, droppedItem.getLocation()), droppedItem.getTemplate());
} }
@@ -681,7 +691,7 @@ public class PlayerInventory extends Inventory
} }
// Notify to scripts // Notify to scripts
if (item != null) if ((item != null) && EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_ITEM_DROP, item.getTemplate()))
{ {
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, item, item.getLocation()), item.getTemplate()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerItemDrop(actor, item, item.getLocation()), item.getTemplate());
} }
@@ -46,6 +46,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTakeHero; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerTakeHero;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory; import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
@@ -923,7 +924,11 @@ public class Hero
loadDiary(player.getObjectId()); loadDiary(player.getObjectId());
HERO_MESSAGE.put(player.getObjectId(), ""); HERO_MESSAGE.put(player.getObjectId(), "");
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_TAKE_HERO))
{
EventDispatcher.getInstance().notifyEvent(new OnPlayerTakeHero(player)); EventDispatcher.getInstance().notifyEvent(new OnPlayerTakeHero(player));
}
updateHeroes(false); updateHeroes(false);
} }
@@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.events.EventDispatcher; import org.l2jmobius.gameserver.model.events.EventDispatcher;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult; import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -466,8 +467,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
} }
}
else if (_pOneCrash && !_pTwoCrash) else if (_pOneCrash && !_pTwoCrash)
{ {
sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH); sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH);
@@ -491,9 +495,13 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
{ {
LOGGER_OLYMPIAD.info(_playerOne.getName() + " crash," + _playerOne + "," + _playerTwo + ",0,0,0,0," + pointDiff + "," + getType()); LOGGER_OLYMPIAD.info(_playerOne.getName() + " crash," + _playerOne + "," + _playerTwo + ",0,0,0,0," + pointDiff + "," + getType());
} }
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
} }
}
else if (_pOneCrash && _pTwoCrash) else if (_pOneCrash && _pTwoCrash)
{ {
stadium.broadcastPacket(new SystemMessage(SystemMessageId.THERE_IS_NO_VICTOR_THE_MATCH_ENDS_IN_A_TIE)); stadium.broadcastPacket(new SystemMessage(SystemMessageId.THERE_IS_NO_VICTOR_THE_MATCH_ENDS_IN_A_TIE));
@@ -532,8 +540,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
stadium.broadcastPacket(result); stadium.broadcastPacket(result);
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerOne, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerOne, getType()), Olympiad.getInstance());
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerTwo, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(null, _playerTwo, getType()), Olympiad.getInstance());
}
return; return;
} }
catch (Exception e) catch (Exception e)
@@ -606,8 +617,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
rewardQuests(_playerTwo.getPlayer()); rewardQuests(_playerTwo.getPlayer());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerOne, _playerTwo, getType()), Olympiad.getInstance());
} }
}
else if ((_playerOne.getPlayer() == null) || !_playerOne.getPlayer().isOnline() || ((playerOneHp == 0) && (playerTwoHp != 0)) || ((_damageP2 > _damageP1) && (playerOneHp != 0) && (playerTwoHp != 0))) else if ((_playerOne.getPlayer() == null) || !_playerOne.getPlayer().isOnline() || ((playerOneHp == 0) && (playerTwoHp != 0)) || ((_damageP2 > _damageP1) && (playerOneHp != 0) && (playerTwoHp != 0)))
{ {
sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH); sm = new SystemMessage(SystemMessageId.CONGRATULATIONS_C1_YOU_WIN_THE_MATCH);
@@ -633,8 +647,11 @@ public abstract class OlympiadGameNormal extends AbstractOlympiadGame
rewardQuests(_playerTwo.getPlayer()); rewardQuests(_playerTwo.getPlayer());
// Notify to scripts // Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_OLYMPIAD_MATCH_RESULT, Olympiad.getInstance()))
{
EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance()); EventDispatcher.getInstance().notifyEventAsync(new OnOlympiadMatchResult(_playerTwo, _playerOne, getType()), Olympiad.getInstance());
} }
}
else else
{ {
// Save Fight Result // Save Fight Result

Some files were not shown because too many files have changed in this diff Show More