2
0
Эх сурвалжийг харах

BETA: Updating listeners thanks theone and nonom for testing.
* ClanWarehouse moved to it's new location
* All the null checks are in the "fireAction" methods
* Enums are now all capitalized (thx for pointing this out jurchiks)
* Added a listener into RequestRestart packet so that the player despawn events get triggered on restart also.
More info here http://www.l2jserver.com/forum/viewtopic.php?f=70&t=25089

Rumen Nikiforov 13 жил өмнө
parent
commit
54425bae42
67 өөрчлөгдсөн 3364 нэмэгдсэн , 673 устгасан
  1. 32 7
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/ItemTable.java
  2. 171 47
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Clan.java
  3. 146 70
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  4. 9 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Playable.java
  5. 109 45
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  6. 23 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java
  7. 41 10
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java
  8. 50 15
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java
  9. 60 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/TvTEvent.java
  10. 88 21
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/ClanWarehouse.java
  11. 93 42
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java
  12. 79 20
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java
  13. 32 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java
  14. 45 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/Say2.java
  15. 57 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/AddToInventoryEvent.java
  16. 56 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/AttackEvent.java
  17. 73 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/AugmentEvent.java
  18. 87 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ChatEvent.java
  19. 43 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanCreationEvent.java
  20. 57 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanJoinEvent.java
  21. 72 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanLeaderChangeEvent.java
  22. 56 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanLeaveEvent.java
  23. 56 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanLevelUpEvent.java
  24. 73 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarEvent.java
  25. 89 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarehouseAddItemEvent.java
  26. 88 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarehouseDeleteItemEvent.java
  27. 103 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarehouseTransferEvent.java
  28. 56 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/DeathEvent.java
  29. 56 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/EquipmentEvent.java
  30. 61 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/FortSiegeEvent.java
  31. 73 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/HennaEvent.java
  32. 101 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemCreateEvent.java
  33. 60 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemDestroyEvent.java
  34. 103 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemDropEvent.java
  35. 102 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemPickupEvent.java
  36. 73 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemTransferEvent.java
  37. 71 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/PlayerLevelChangeEvent.java
  38. 72 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ProfessionChangeEvent.java
  39. 61 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/SiegeEvent.java
  40. 73 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/SkillUseEvent.java
  41. 60 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/TransformEvent.java
  42. 72 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/TvtKillEvent.java
  43. 24 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/impl/L2Event.java
  44. 189 218
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/impl/L2Script.java
  45. 5 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/character/AttackListener.java
  46. 5 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/character/DeathListener.java
  47. 3 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/character/SkillUseListener.java
  48. 6 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanCreationListener.java
  49. 9 11
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanMembershipListener.java
  50. 5 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanWarListener.java
  51. 9 18
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanWarehouseListener.java
  52. 5 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/events/FortSiegeListener.java
  53. 7 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/events/SiegeListener.java
  54. 3 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/events/TvTListener.java
  55. 5 7
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/AugmentListener.java
  56. 6 13
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/DropListener.java
  57. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/EquipmentListener.java
  58. 5 7
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/HennaListener.java
  59. 12 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/ItemTracker.java
  60. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/NewItemListener.java
  61. 3 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/PlayerDespawnListener.java
  62. 6 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/PlayerLevelListener.java
  63. 6 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/ProfessionChangeListener.java
  64. 5 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/TransformListener.java
  65. 3 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/talk/ChatFilterListener.java
  66. 3 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/talk/ChatListener.java
  67. 52 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/package-info.java (revision 0)

+ 32 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/ItemTable.java

@@ -47,6 +47,7 @@ import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
 import com.l2jserver.gameserver.model.items.type.L2ArmorType;
 import com.l2jserver.gameserver.model.items.type.L2ArmorType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemCreateEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.NewItemListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.NewItemListener;
 import com.l2jserver.gameserver.util.GMAudit;
 import com.l2jserver.gameserver.util.GMAudit;
 
 
@@ -272,13 +273,8 @@ public class ItemTable
 	 */
 	 */
 	public L2ItemInstance createItem(String process, int itemId, long count, L2PcInstance actor, Object reference)
 	public L2ItemInstance createItem(String process, int itemId, long count, L2PcInstance actor, Object reference)
 	{
 	{
-		for (NewItemListener listener : newItemListeners)
-		{
-			if (listener.containsItemId(itemId))
-			{
-				if (!listener.onCreate(itemId, actor))
-					return null;
-			}
+		if(!fireNewItemListeners(process,itemId,count,actor,reference)){
+			return null;
 		}
 		}
 		// Create and Init the L2ItemInstance corresponding to the Item Identifier
 		// Create and Init the L2ItemInstance corresponding to the Item Identifier
 		L2ItemInstance item = new L2ItemInstance(IdFactory.getInstance().getNextId(), itemId);
 		L2ItemInstance item = new L2ItemInstance(IdFactory.getInstance().getNextId(), itemId);
@@ -493,6 +489,35 @@ public class ItemTable
 	}
 	}
 	
 	
 	// Listeners
 	// Listeners
+	
+	/**
+	 * Fires all the new item listeners, if any
+	 * @param process
+	 * @param itemId
+	 * @param count
+	 * @param actor
+	 * @param reference
+	 * @return
+	 */
+	private boolean fireNewItemListeners(String process, int itemId, long count, L2PcInstance actor, Object reference){
+		if(!newItemListeners.isEmpty() && actor != null){
+			ItemCreateEvent event = new ItemCreateEvent();
+			event.setItemId(itemId);
+			event.setPlayer(actor);
+			event.setCount(count);
+			event.setProcess(process);
+			event.setReference(reference);
+			for (NewItemListener listener : newItemListeners)
+			{
+				if (listener.containsItemId(itemId))
+				{
+					if (!listener.onCreate(event))
+						return false;
+				}
+			}
+		}
+		return true;
+	}
 	/**
 	/**
 	 * Adds a new item listener
 	 * Adds a new item listener
 	 * @param listener
 	 * @param listener

+ 171 - 47
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Clan.java

@@ -64,6 +64,13 @@ import com.l2jserver.gameserver.network.serverpackets.SkillCoolTime;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanCreationEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanJoinEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLeaderChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLeaveEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLevelUpEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanCreationListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanCreationListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanMembershipListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanMembershipListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanWarListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanWarListener;
@@ -207,10 +214,7 @@ public class L2Clan
 		_clanId = clanId;
 		_clanId = clanId;
 		_name = clanName;
 		_name = clanName;
 		initializePrivs();
 		initializePrivs();
-		for (ClanCreationListener listener : clanCreationListeners)
-		{
-			listener.onClanCreate(this);
-		}
+		fireClanCreationListeners();
 	}
 	}
 	
 	
 	/**
 	/**
@@ -271,13 +275,8 @@ public class L2Clan
 		
 		
 		L2PcInstance exLeader = getLeader().getPlayerInstance();
 		L2PcInstance exLeader = getLeader().getPlayerInstance();
 		L2PcInstance newLeader = member.getPlayerInstance();
 		L2PcInstance newLeader = member.getPlayerInstance();
-		
-		for (ClanMembershipListener listener : clanMembershipListeners)
-		{
-			if (!listener.onLeaderChange(this, newLeader, exLeader))
-			{
-				return;
-			}
+		if(!fireClanLeaderChangeListeners(newLeader,exLeader)){
+			return;
 		}
 		}
 		
 		
 		SiegeManager.getInstance().removeSiegeSkills(exLeader);
 		SiegeManager.getInstance().removeSiegeSkills(exLeader);
@@ -369,12 +368,8 @@ public class L2Clan
 	 */
 	 */
 	public void addClanMember(L2PcInstance player)
 	public void addClanMember(L2PcInstance player)
 	{
 	{
-		for (ClanMembershipListener listener : clanMembershipListeners)
-		{
-			if (!listener.onJoin(player, this))
-			{
-				return;
-			}
+		if(!fireClanJoinListeners(player)){
+			return;
 		}
 		}
 		
 		
 		final L2ClanMember member = new L2ClanMember(this, player);
 		final L2ClanMember member = new L2ClanMember(this, player);
@@ -434,12 +429,8 @@ public class L2Clan
 	 */
 	 */
 	public void removeClanMember(int objectId, long clanJoinExpiryTime)
 	public void removeClanMember(int objectId, long clanJoinExpiryTime)
 	{
 	{
-		for (ClanMembershipListener listener : clanMembershipListeners)
-		{
-			if (!listener.onLeave(objectId, this))
-			{
-				return;
-			}
+		if(!fireClanLeaveListeners(objectId)){
+			return;
 		}
 		}
 		
 		
 		final L2ClanMember exMember = _members.remove(objectId);
 		final L2ClanMember exMember = _members.remove(objectId);
@@ -1505,12 +1496,8 @@ public class L2Clan
 	
 	
 	public void setEnemyClan(L2Clan clan)
 	public void setEnemyClan(L2Clan clan)
 	{
 	{
-		for (ClanWarListener listener : clanWarListeners)
-		{
-			if (!listener.onWarStart(this, clan))
-			{
-				return;
-			}
+		if(!fireClanWarStartListeners(clan)){
+			return;
 		}
 		}
 		Integer id = clan.getClanId();
 		Integer id = clan.getClanId();
 		_atWarWith.add(id);
 		_atWarWith.add(id);
@@ -1518,12 +1505,8 @@ public class L2Clan
 	
 	
 	public void setEnemyClan(Integer clan)
 	public void setEnemyClan(Integer clan)
 	{
 	{
-		for (ClanWarListener listener : clanWarListeners)
-		{
-			if (!listener.onWarStart(this, ClanTable.getInstance().getClan(clan)))
-			{
-				return;
-			}
+		if(!fireClanWarStartListeners(ClanTable.getInstance().getClan(clan))){
+			return;
 		}
 		}
 		_atWarWith.add(clan);
 		_atWarWith.add(clan);
 	}
 	}
@@ -1541,12 +1524,8 @@ public class L2Clan
 	
 	
 	public void deleteEnemyClan(L2Clan clan)
 	public void deleteEnemyClan(L2Clan clan)
 	{
 	{
-		for (ClanWarListener listener : clanWarListeners)
-		{
-			if (!listener.onWarEnd(this, clan))
-			{
-				return;
-			}
+		if(!fireClanWarEndListeners(clan)){
+			return;
 		}
 		}
 		Integer id = clan.getClanId();
 		Integer id = clan.getClanId();
 		_atWarWith.remove(id);
 		_atWarWith.remove(id);
@@ -2459,12 +2438,8 @@ public class L2Clan
 		
 		
 		boolean increaseClanLevel = false;
 		boolean increaseClanLevel = false;
 		
 		
-		for (ClanCreationListener listener : clanCreationListeners)
-		{
-			if (!listener.onClanLevelUp(this, getLevel()))
-			{
-				return false;
-			}
+		if(!fireClanLevelUpListeners()){
+			return false;
 		}
 		}
 		
 		
 		switch (getLevel())
 		switch (getLevel())
@@ -2941,6 +2916,155 @@ public class L2Clan
 	}
 	}
 	
 	
 	// Listeners
 	// Listeners
+	/**
+	 * Fires the clan creation listeners, if any.
+	 */
+	private void fireClanCreationListeners(){
+		if(!clanCreationListeners.isEmpty()){
+			ClanCreationEvent event = new ClanCreationEvent();
+			event.setClan(this);
+			for (ClanCreationListener listener : clanCreationListeners)
+			{
+				listener.onClanCreate(event);
+			}
+		}
+	}
+	
+	/**
+	 * Fires all the ClanMemberShipListener.onLeaderChange() methods, if any.
+	 * Prevents the clan leader change if it returns false;
+	 * @param newLeader
+	 * @param exLeader
+	 * @return
+	 */
+	private boolean fireClanLeaderChangeListeners(L2PcInstance newLeader, L2PcInstance exLeader){
+		if(!clanMembershipListeners.isEmpty() && newLeader != null && exLeader != null){
+			ClanLeaderChangeEvent event = new ClanLeaderChangeEvent();
+			event.setClan(this);
+			event.setNewLeader(newLeader);
+			event.setOldLeader(exLeader);
+			for (ClanMembershipListener listener : clanMembershipListeners)
+			{
+				if (!listener.onLeaderChange(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanMembershipListener.onJoin() methods, if any<br>
+	 * Returns true/false -> allow the player to join or not
+	 * @param player
+	 * @return
+	 */
+	private boolean fireClanJoinListeners(L2PcInstance player){
+		if(!clanMembershipListeners.isEmpty() && player != null){
+			ClanJoinEvent event = new ClanJoinEvent();
+			event.setClan(this);
+			event.setPlayer(player);
+			for (ClanMembershipListener listener : clanMembershipListeners)
+			{
+				if (!listener.onJoin(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanMembershipListener.onLeave() methods, if any<br>
+	 * Returns true/false -> the player can leave the clan or not
+	 * @param objectId - the clan member's objectId
+	 * @return
+	 */
+	private boolean fireClanLeaveListeners(int objectId){
+		if(!clanMembershipListeners.isEmpty()){
+			ClanLeaveEvent event = new ClanLeaveEvent();
+			event.setPlayerId(objectId);
+			event.setClan(this);
+			for (ClanMembershipListener listener : clanMembershipListeners)
+			{
+				if (!listener.onLeave(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanWarListener.onWarStart() methods<br>
+	 * Returns true if the clan war is allowed
+	 * @param clan -> the new enemy clan
+	 * @return
+	 */
+	private boolean fireClanWarStartListeners(L2Clan clan){
+		if(!clanWarListeners.isEmpty() && clan != null){
+			ClanWarEvent event = new ClanWarEvent();
+			event.setClan1(this);
+			event.setClan2(clan);
+			event.setStage(EventStage.START);
+			for (ClanWarListener listener : clanWarListeners)
+			{
+				if (!listener.onWarStart(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanWarListener.onWarEnd() methods<br>
+	 * Returns true if the clan war end is allowed
+	 * @param clan -> the enemy clan
+	 * @return
+	 */
+	private boolean fireClanWarEndListeners(L2Clan clan){
+		if(!clanWarListeners.isEmpty() && clan != null){
+			ClanWarEvent event = new ClanWarEvent();
+			event.setClan1(this);
+			event.setClan2(clan);
+			event.setStage(EventStage.END);
+			for (ClanWarListener listener : clanWarListeners)
+			{
+				if (!listener.onWarEnd(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanCreationListener.onClanLevelUp() methods, if any<br>
+	 * Blocks the level up if it returns false
+	 * @return
+	 */
+	private boolean fireClanLevelUpListeners(){
+		if(!clanCreationListeners.isEmpty()){
+			ClanLevelUpEvent event = new ClanLevelUpEvent();
+			event.setClan(this);
+			event.setOldLevel(_level);
+			for (ClanCreationListener listener : clanCreationListeners)
+			{
+				if (!listener.onClanLevelUp(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
 	/**
 	/**
 	 * Adds a clan creation listener
 	 * Adds a clan creation listener
 	 * @param listener
 	 * @param listener

+ 146 - 70
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -116,6 +116,9 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
 import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
 import com.l2jserver.gameserver.pathfinding.PathFinding;
 import com.l2jserver.gameserver.pathfinding.PathFinding;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AttackEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.DeathEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.SkillUseEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.AttackListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.AttackListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.DeathListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.DeathListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.SkillUseListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.SkillUseListener;
@@ -793,19 +796,9 @@ public abstract class L2Character extends L2Object
 		if (isAttackingDisabled())
 		if (isAttackingDisabled())
 			return;
 			return;
 		
 		
-		for (AttackListener listener : attackListeners)
+		if(!fireAttackListeners(target))
 		{
 		{
-			if (!listener.onAttack(target))
-			{
-				return;
-			}
-		}
-		for (AttackListener listener : target.getAttackListeners())
-		{
-			if (!listener.isAttacked(this))
-			{
-				return;
-			}
+			return;
 		}
 		}
 		if (Config.DEBUG)
 		if (Config.DEBUG)
 			_log.fine(getName() + " doAttack: target=" + target);
 			_log.fine(getName() + " doAttack: target=" + target);
@@ -1788,10 +1781,12 @@ public abstract class L2Character extends L2Object
 		}
 		}
 		beginCast(skill, simultaneously, target, targets);
 		beginCast(skill, simultaneously, target, targets);
 	}
 	}
-	
+		
 	private void beginCast(L2Skill skill, boolean simultaneously, L2Character target, L2Object[] targets)
 	private void beginCast(L2Skill skill, boolean simultaneously, L2Character target, L2Object[] targets)
 	{
 	{
-		
+		if(!fireSkillCastListeners(skill,simultaneously,target,targets)){
+			return;
+		}
 		if (target == null)
 		if (target == null)
 		{
 		{
 			if (simultaneously)
 			if (simultaneously)
@@ -1805,32 +1800,6 @@ public abstract class L2Character extends L2Object
 			}
 			}
 			return;
 			return;
 		}
 		}
-		for(SkillUseListener listener : skillUseListeners)
-		{
-			int skillId = skill.getId();
-			if(listener.getSkillId() == -1 || skillId == listener.getSkillId())
-			{
-				if(!listener.onSkillUse(skill, this, targets))
-				{
-					return;
-				}
-			}
-		}
-		for(SkillUseListener listener : globalSkillUseListeners)
-		{
-			int npcId = listener.getNpcId();
-			int skillId = listener.getSkillId();
-			boolean skillOk = skillId == -1 || skillId == skill.getId();
-			boolean charOk = (npcId == -1 && this instanceof L2NpcInstance) || (npcId == -2 && this instanceof L2PcInstance) || 
-				npcId == -3 || (this instanceof L2NpcInstance && ((L2NpcInstance)this).getNpcId() == npcId);
-			if(skillOk && charOk)
-			{
-				if(!listener.onSkillUse(skill, this, targets))
-				{
-					return;
-				}
-			}
-		}
 		if (skill.getSkillType() == L2SkillType.RESURRECT)
 		if (skill.getSkillType() == L2SkillType.RESURRECT)
 		{
 		{
 			if (isResurrectionBlocked() || target.isResurrectionBlocked())
 			if (isResurrectionBlocked() || target.isResurrectionBlocked())
@@ -2351,36 +2320,8 @@ public abstract class L2Character extends L2Object
 			setCurrentHp(0);
 			setCurrentHp(0);
 			setIsDead(true);
 			setIsDead(true);
 		}
 		}
-		
-		for (DeathListener listener : deathListeners)
-		{
-			if (!listener.onDeath(this, killer))
-			{
-				return false;
-			}
-		}
-		
-		if (killer != null)
-		{
-			for (DeathListener listener : killer.getDeathListeners())
-			{
-				if (!listener.onKill(this, killer))
-				{
-					return false;
-				}
-			}
-		}
-		
-		for (DeathListener listener : globalDeathListeners)
-		{
-			if (killer instanceof L2PcInstance || this instanceof L2PcInstance)
-			{
-				if (!listener.onDeath(this, killer))
-				{
-					return false;
-				}
-				
-			}
+		if(!fireDeathListeners(killer)){
+			return false;
 		}
 		}
 		
 		
 		// Set target to null and cancel Attack or Cast
 		// Set target to null and cancel Attack or Cast
@@ -7703,6 +7644,137 @@ public abstract class L2Character extends L2Object
 	}
 	}
 	
 	
 	// LISTENERS
 	// LISTENERS
+	
+	/**
+	 * Fires the attack listeners, if any.
+	 * Returns false if the attack is to be blocked.
+	 * @param target
+	 * @return
+	 */
+	private boolean fireAttackListeners(L2Character target){
+		if(target != null && (!attackListeners.isEmpty() || !target.getAttackListeners().isEmpty())){
+			AttackEvent event = new AttackEvent();
+			event.setTarget(target);
+			event.setAttacker(this);
+			for (AttackListener listener : attackListeners)
+			{
+				if (!listener.onAttack(event))
+				{
+					return false;
+				}
+			}
+			for (AttackListener listener : target.getAttackListeners())
+			{
+				if (!listener.isAttacked(event))
+				{
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires the skill cast listeners, if any.
+	 * Returns false if the attack is to be blocked.
+	 * @param skill
+	 * @param simultaneously
+	 * @param target
+	 * @param targets
+	 * @return
+	 */
+	private boolean fireSkillCastListeners(L2Skill skill, boolean simultaneously, L2Character target, L2Object[] targets){
+		if(skill != null && (target != null || targets.length != 0) && (!skillUseListeners.isEmpty() || !globalSkillUseListeners.isEmpty())){
+			int arraySize = (target == null ? 0 : 1) + (targets == null ? 0 : targets.length);
+			L2Object[] t = new L2Object[arraySize];
+			int i = 0;
+			if(target != null){
+				t[0] = target;
+				i ++;
+			}
+			if(targets != null){
+				for(int f=0; f<targets.length; f++){
+					t[f+i] = targets[f]; 
+				}
+			}
+			if(targets.length > 0){
+				SkillUseEvent event = new SkillUseEvent();
+				event.setCaster(this);
+				event.setSkill(skill);
+				event.setTargets(t);
+				for(SkillUseListener listener : skillUseListeners)
+				{
+					int skillId = skill.getId();
+					if(listener.getSkillId() == -1 || skillId == listener.getSkillId())
+					{
+						if(!listener.onSkillUse(event))
+						{
+							return false;
+						}
+					}
+				}
+				for(SkillUseListener listener : globalSkillUseListeners)
+				{
+					int npcId = listener.getNpcId();
+					int skillId = listener.getSkillId();
+					boolean skillOk = skillId == -1 || skillId == skill.getId();
+					boolean charOk = (npcId == -1 && this instanceof L2NpcInstance) || (npcId == -2 && this instanceof L2PcInstance) || 
+						npcId == -3 || (this instanceof L2NpcInstance && ((L2NpcInstance)this).getNpcId() == npcId);
+					if(skillOk && charOk)
+					{
+						if(!listener.onSkillUse(event))
+						{
+							return false;
+						}
+					}
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires the death listeners, if any.<br>
+	 * If it returns false, the doDie method will return false (and the L2Character wont die)<br>
+	 * The method is public so that L2Playable can access it.
+	 * @param killer
+	 * @return
+	 */
+	public boolean fireDeathListeners(L2Character killer){
+		if(killer != null && (!deathListeners.isEmpty() || !globalDeathListeners.isEmpty() || !killer.getDeathListeners().isEmpty())){
+			DeathEvent event = new DeathEvent();
+			event.setKiller(killer);
+			event.setVictim(this);
+			for (DeathListener listener : deathListeners)
+			{
+				if (!listener.onDeath(event))
+				{
+					return false;
+				}
+			}
+			for (DeathListener listener : killer.getDeathListeners())
+			{
+				if (!listener.onKill(event))
+				{
+					return false;
+				}
+			}
+			for (DeathListener listener : globalDeathListeners)
+			{
+				if (killer instanceof L2PcInstance || this instanceof L2PcInstance)
+				{
+					if (!listener.onDeath(event))
+					{
+						return false;
+					}
+					
+				}
+			}
+		}
+		return true;
+	}
+
+	
 	/**
 	/**
 	 * Adds an attack listener
 	 * Adds an attack listener
 	 * @param listener
 	 * @param listener
@@ -7776,6 +7848,10 @@ public abstract class L2Character extends L2Object
 		}
 		}
 	}
 	}
 	
 	
+	public static List<DeathListener> getGlobalDeathListeners(){
+		return globalDeathListeners;
+	}
+	
 	/**
 	/**
 	 * Removes a global death listener
 	 * Removes a global death listener
 	 * @param listener
 	 * @param listener

+ 9 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Playable.java

@@ -92,7 +92,7 @@ public abstract class L2Playable extends L2Character
 	
 	
 	@Override
 	@Override
 	public boolean doDie(L2Character killer)
 	public boolean doDie(L2Character killer)
-	{
+	{		
 		// killing is only possible one time
 		// killing is only possible one time
 		synchronized (this)
 		synchronized (this)
 		{
 		{
@@ -103,6 +103,14 @@ public abstract class L2Playable extends L2Character
 			setIsDead(true);
 			setIsDead(true);
 		}
 		}
 		
 		
+		/**
+		 * This needs to stay here because it overrides L2Character.doDie() and does 
+		 * not call for super.doDie()
+		 */
+		if(!super.fireDeathListeners(killer)){
+			return false;
+		}
+		
 		// Set target to null and cancel Attack or Cast
 		// Set target to null and cancel Attack or Cast
 		setTarget(null);
 		setTarget(null);
 		
 		

+ 109 - 45
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -269,6 +269,10 @@ import com.l2jserver.gameserver.network.serverpackets.TradeDone;
 import com.l2jserver.gameserver.network.serverpackets.TradeOtherDone;
 import com.l2jserver.gameserver.network.serverpackets.TradeOtherDone;
 import com.l2jserver.gameserver.network.serverpackets.TradeStart;
 import com.l2jserver.gameserver.network.serverpackets.TradeStart;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
+import com.l2jserver.gameserver.scripting.scriptengine.events.EquipmentEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.HennaEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ProfessionChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.TransformEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.EquipmentListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.EquipmentListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.HennaListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.HennaListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerDespawnListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerDespawnListener;
@@ -2498,18 +2502,12 @@ public final class L2PcInstance extends L2Playable
 			checkSShotsMatch(item, old);
 			checkSShotsMatch(item, old);
 		}
 		}
 		
 		
+		if(!fireEquipmentListeners(isEquiped,item))
+		{
+			return;
+		}
 		if (isEquiped)
 		if (isEquiped)
 		{
 		{
-			for(EquipmentListener listener : equipmentListeners)
-			{
-				if(!listener.onEquip(item, false))
-					return;
-			}
-			for(EquipmentListener listener : globalEquipmentListeners)
-			{
-				if(!listener.onEquip(item, false))
-					return;
-			}
 			if (item.getEnchantLevel() > 0)
 			if (item.getEnchantLevel() > 0)
 			{
 			{
 				sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
 				sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
@@ -2532,16 +2530,6 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		else
 		else
 		{
 		{
-			for(EquipmentListener listener : equipmentListeners)
-			{
-				if(!listener.onEquip(item, true))
-					return;
-			}
-			for(EquipmentListener listener : globalEquipmentListeners)
-			{
-				if(!listener.onEquip(item, true))
-					return;
-			}
 			items = getInventory().equipItemAndRecord(item);
 			items = getInventory().equipItemAndRecord(item);
 			
 			
 			if (item.isEquipped())
 			if (item.isEquipped())
@@ -5073,11 +5061,10 @@ public final class L2PcInstance extends L2Playable
 			sendPacket(msg);
 			sendPacket(msg);
 			return;
 			return;
 		}
 		}
-		for(TransformListener listener : transformListeners)
-		{
-			if(!listener.onTransform(transformation))
-				return;
+		if(!fireTransformListeners(transformation,true)){
+			return;
 		}
 		}
+
 		setQueuedSkill(null, false, false);
 		setQueuedSkill(null, false, false);
 		if(isMounted())
 		if(isMounted())
 		{
 		{
@@ -5099,10 +5086,8 @@ public final class L2PcInstance extends L2Playable
 	{
 	{
 		if (_transformation != null)
 		if (_transformation != null)
 		{
 		{
-			for(TransformListener listener : transformListeners)
-			{
-				if(!listener.onUntransform(_transformation))
-					return;
+			if(!fireTransformListeners(_transformation,false)){
+				return;
 			}
 			}
 			setQueuedSkill(null, false, false);
 			setQueuedSkill(null, false, false);
 			setTransformAllowedSkills(new int[]{});
 			setTransformAllowedSkills(new int[]{});
@@ -8612,10 +8597,8 @@ public final class L2PcInstance extends L2Playable
 	 */
 	 */
 	public boolean removeHenna(int slot)
 	public boolean removeHenna(int slot)
 	{
 	{
-		for(HennaListener listener : hennaListeners)
-		{
-			if(!listener.onRemoveHenna(this, getHenna(slot+1)))
-				return false;
+		if(!fireHennaListeners(getHenna(slot+1),false)){
+			return false;
 		}
 		}
 		if (slot < 1 || slot > 3)
 		if (slot < 1 || slot > 3)
 			return false;
 			return false;
@@ -8682,10 +8665,8 @@ public final class L2PcInstance extends L2Playable
 	 */
 	 */
 	public boolean addHenna(L2HennaInstance henna)
 	public boolean addHenna(L2HennaInstance henna)
 	{
 	{
-		for(HennaListener listener : hennaListeners)
-		{
-			if(!listener.onAddHenna(this, henna))
-				return false;
+		if(!fireHennaListeners(henna,true)){
+			return false;
 		}
 		}
 		for (int i = 0; i < 3; i++)
 		for (int i = 0; i < 3; i++)
 		{
 		{
@@ -11030,15 +11011,7 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		// Set the template of the L2PcInstance
 		// Set the template of the L2PcInstance
 		setTemplate(t);
 		setTemplate(t);
-		
-		for (ProfessionChangeListener listener : professionChangeListeners)
-		{
-			listener.professionChanged(this, isSubClassActive(), t);
-		}
-		for (ProfessionChangeListener listener : globalProfessionChangeListeners)
-		{
-			listener.professionChanged(this, isSubClassActive(), t);
-		}
+		fireProfessionChangeListeners(t);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -15570,6 +15543,97 @@ public final class L2PcInstance extends L2Playable
 	}
 	}
 	
 	
 	// LISTENERS
 	// LISTENERS
+	/**
+	 * Fires all the equipment listeners, if any.<br>
+	 * Action is cancelled if it returns false.
+	 * @param isEquiped 
+	 * @param item
+	 * @return
+	 */
+	private boolean fireEquipmentListeners(boolean isEquiped, L2ItemInstance item){
+		if(item != null){
+			EquipmentEvent event = new EquipmentEvent();
+			event.setEquipped(!isEquiped);
+			event.setItem(item);
+			for(EquipmentListener listener : equipmentListeners)
+			{
+				if(!listener.onEquip(event))
+					return false;
+			}
+			for(EquipmentListener listener : globalEquipmentListeners)
+			{
+				if(!listener.onEquip(event))
+					return false;
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the transformation listeners, if any.<br>
+	 * If it returns false, the action is cancelled.<br>
+	 * @param transformation
+	 * @param isTransforming
+	 * @return
+	 */
+	private boolean fireTransformListeners(L2Transformation transformation, boolean isTransforming){
+		if(transformation != null && !transformListeners.isEmpty()){
+			TransformEvent event = new TransformEvent();
+			event.setTransformation(transformation);
+			event.setTransforming(isTransforming);
+			for(TransformListener listener : transformListeners)
+			{
+				if(!listener.onTransform(event))
+					return false;
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the henna listeners, if any.<br>
+	 * The action is cancelled if it returns false
+	 * @param henna
+	 * @param isAdding
+	 * @return
+	 */
+	private boolean fireHennaListeners(L2HennaInstance henna, boolean isAdding){
+		if(henna != null && !hennaListeners.isEmpty()){
+			HennaEvent event = new HennaEvent();
+			event.setAdd(isAdding);
+			event.setHenna(henna);
+			event.setPlayer(this);
+			for(HennaListener listener : hennaListeners)
+			{
+				if(!listener.onRemoveHenna(event))
+					return false;
+			}
+		}
+		return true;	
+	}
+	
+	/**
+	 * Fires all the profession change listeners
+	 * @param t
+	 */
+	private void fireProfessionChangeListeners(L2PcTemplate t){
+		if(!professionChangeListeners.isEmpty() || !globalProfessionChangeListeners.isEmpty()){
+			ProfessionChangeEvent event = null;
+			event = new ProfessionChangeEvent();
+			event.setPlayer(this);
+			event.setSubClass(isSubClassActive());
+			event.setTemplate(t);
+			for (ProfessionChangeListener listener : professionChangeListeners)
+			{
+				listener.professionChanged(event);
+			}
+			for (ProfessionChangeListener listener : globalProfessionChangeListeners)
+			{
+				listener.professionChanged(event);
+			}
+		}
+	}
+	
 	/**
 	/**
 	 * Adds a despawn listener
 	 * Adds a despawn listener
 	 * @param listener
 	 * @param listener

+ 23 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java

@@ -35,6 +35,7 @@ import com.l2jserver.gameserver.network.serverpackets.SocialAction;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
+import com.l2jserver.gameserver.scripting.scriptengine.events.PlayerLevelChangeEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerLevelListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerLevelListener;
 
 
 public class PcStat extends PlayableStat
 public class PcStat extends PlayableStat
@@ -215,15 +216,7 @@ public class PcStat extends PlayableStat
 	{
 	{
 		if (getLevel() + value > ExperienceTable.getInstance().getMaxLevel() - 1)
 		if (getLevel() + value > ExperienceTable.getInstance().getMaxLevel() - 1)
 			return false;
 			return false;
-		
-		for (PlayerLevelListener listener : levelListeners)
-		{
-			listener.levelChanged(getActiveChar(), getLevel(), getLevel() + value);
-		}
-		for (PlayerLevelListener listener : globalLevelListeners)
-		{
-			listener.levelChanged(getActiveChar(), getLevel(), getLevel() + value);
-		}
+		fireLevelChangeListeners(value);
 		
 		
 		boolean levelIncreased = super.addLevel(value);
 		boolean levelIncreased = super.addLevel(value);
 		if (levelIncreased)
 		if (levelIncreased)
@@ -718,6 +711,27 @@ public class PcStat extends PlayableStat
 	/**
 	/**
 	 * Listeners
 	 * Listeners
 	 */
 	 */
+	/**
+	 * Fires all the level change listeners, if any.
+	 * @param value
+	 */
+	private void fireLevelChangeListeners(byte value){
+		if(!levelListeners.isEmpty() || !globalLevelListeners.isEmpty()){
+			PlayerLevelChangeEvent event = new PlayerLevelChangeEvent();
+			event.setPlayer(getActiveChar());
+			event.setOldLevel(getLevel());
+			event.setNewLevel(getLevel() + value);
+			for (PlayerLevelListener listener : levelListeners)
+			{
+				listener.levelChanged(event);
+			}
+			for (PlayerLevelListener listener : globalLevelListeners)
+			{
+				listener.levelChanged(event);
+			}
+		}
+	}
+	
 	/**
 	/**
 	 * Adds a global player level listener
 	 * Adds a global player level listener
 	 * @param listener
 	 * @param listener

+ 41 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java

@@ -50,6 +50,8 @@ import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.scripting.scriptengine.events.FortSiegeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.FortSiegeListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.FortSiegeListener;
 
 
 public class FortSiege implements Siegable
 public class FortSiege implements Siegable
@@ -279,10 +281,7 @@ public class FortSiege implements Siegable
 				getFort().setVisibleFlag(true);
 				getFort().setVisibleFlag(true);
 			
 			
 			_log.info("Siege of " + getFort().getName() + " fort finished.");
 			_log.info("Siege of " + getFort().getName() + " fort finished.");
-			for (FortSiegeListener listener : fortSiegeListeners)
-			{
-				listener.onEnd(this);
-			}
+			fireFortSiegeEventListeners(EventStage.END);
 		}
 		}
 	}
 	}
 	
 	
@@ -294,12 +293,8 @@ public class FortSiege implements Siegable
 	{
 	{
 		if (!getIsInProgress())
 		if (!getIsInProgress())
 		{
 		{
-			for (FortSiegeListener listener : fortSiegeListeners)
-			{
-				if (!listener.onStart(this))
-				{
-					return;
-				}
+			if(!fireFortSiegeEventListeners(EventStage.START)){
+				return;
 			}
 			}
 			if (_siegeStartTask != null) // used admin command "admin_startfortsiege"
 			if (_siegeStartTask != null) // used admin command "admin_startfortsiege"
 			{
 			{
@@ -1252,6 +1247,42 @@ public class FortSiege implements Siegable
 	public void updateSiege() { }
 	public void updateSiege() { }
 	
 	
 	// Listeners
 	// Listeners
+	/**
+	 * Fires all the FortSiegeListener.onStart() or onEnd() methods<br>
+	 * depending on the EventStage<br>
+	 * @param stage
+	 * @return if onStart() returns false, the siege is cancelled
+	 */
+	private boolean fireFortSiegeEventListeners(EventStage stage){
+		if(!fortSiegeListeners.isEmpty()){
+			FortSiegeEvent event = new FortSiegeEvent();
+			event.setSiege(this);
+			event.setStage(stage);
+			switch(stage){
+				case START:
+				{
+					for (FortSiegeListener listener : fortSiegeListeners)
+					{
+						if (!listener.onStart(event))
+						{
+							return false;
+						}
+					}
+					break;
+				}
+				case END:
+				{
+					for (FortSiegeListener listener : fortSiegeListeners)
+					{
+						listener.onEnd(event);
+					}
+					break;
+				}
+			}
+		}
+		return true;
+	}
+	
 	/**
 	/**
 	 * Adds a fort siege listener
 	 * Adds a fort siege listener
 	 * @param listener
 	 * @param listener

+ 50 - 15
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java

@@ -55,6 +55,8 @@ import com.l2jserver.gameserver.network.serverpackets.RelationChanged;
 import com.l2jserver.gameserver.network.serverpackets.SiegeInfo;
 import com.l2jserver.gameserver.network.serverpackets.SiegeInfo;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
+import com.l2jserver.gameserver.scripting.scriptengine.events.SiegeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.SiegeListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.SiegeListener;
 
 
 public class Siege implements Siegable
 public class Siege implements Siegable
@@ -305,10 +307,7 @@ public class Siege implements Siegable
 			getCastle().getZone().setIsActive(false);
 			getCastle().getZone().setIsActive(false);
 			getCastle().getZone().updateZoneStatusForCharactersInside();
 			getCastle().getZone().updateZoneStatusForCharactersInside();
 			getCastle().getZone().setSiegeInstance(null);
 			getCastle().getZone().setSiegeInstance(null);
-			for(SiegeListener listener : siegeListeners)
-			{
-				listener.onEnd(this);
-			}
+			fireSiegeListeners(EventStage.END);
 		}
 		}
 	}
 	}
 	
 	
@@ -427,10 +426,7 @@ public class Siege implements Siegable
 				spawnControlTower(getCastle().getCastleId());
 				spawnControlTower(getCastle().getCastleId());
 				spawnFlameTower(getCastle().getCastleId());
 				spawnFlameTower(getCastle().getCastleId());
 				updatePlayerSiegeStateFlags(false);
 				updatePlayerSiegeStateFlags(false);
-				for(SiegeListener listener : siegeListeners)
-				{
-					listener.onControlChange(this);
-				}
+				fireSiegeListeners(EventStage.CONTROL_CHANGE);
 			}
 			}
 		}
 		}
 	}
 	}
@@ -443,13 +439,8 @@ public class Siege implements Siegable
 	{
 	{
 		if (!getIsInProgress())
 		if (!getIsInProgress())
 		{
 		{
-			for(SiegeListener listener : siegeListeners)
-			{
-				if(!listener.onStart(this))
-				{
-					return;
-				}
-			}
+			if(!fireSiegeListeners(EventStage.START))
+				return;
 			_firstOwnerClanId = getCastle().getOwnerId();
 			_firstOwnerClanId = getCastle().getOwnerId();
 			
 			
 			if (getAttackerClans().isEmpty())
 			if (getAttackerClans().isEmpty())
@@ -1685,6 +1676,50 @@ public class Siege implements Siegable
 	public void updateSiege() { }
 	public void updateSiege() { }
 	
 	
 	// Listeners
 	// Listeners
+	/**
+	 * Fires the appropriate SiegeListener<br>
+	 * If it returns false on EventStage.start, the siege is cancelled
+	 * @param stage
+	 * @return
+	 */
+	private boolean fireSiegeListeners(EventStage stage){
+		if(!siegeListeners.isEmpty()){
+			SiegeEvent event = new SiegeEvent();
+			event.setSiege(this);
+			event.setStage(stage);
+			switch(stage){
+				case START:
+				{
+					for(SiegeListener listener : siegeListeners)
+					{
+						if(!listener.onStart(event))
+						{
+							return false;
+						}
+					}
+					break;
+				}
+				case END:
+				{
+					for(SiegeListener listener : siegeListeners)
+					{
+						listener.onEnd(event);
+					}
+					break;
+				}
+				case CONTROL_CHANGE:
+				{
+					for(SiegeListener listener : siegeListeners)
+					{
+						listener.onControlChange(event);
+					}
+					break;
+				}
+			}
+		}
+		return true;
+	}
+	
 	/**
 	/**
 	 * Adds a siege listener
 	 * Adds a siege listener
 	 * @param listener
 	 * @param listener

+ 60 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/TvTEvent.java

@@ -51,6 +51,8 @@ import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.scripting.scriptengine.events.TvtKillEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.TvTListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.TvTListener;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.StringUtil;
 import com.l2jserver.util.StringUtil;
@@ -148,10 +150,7 @@ public class TvTEvent
 		}
 		}
 		
 		
 		setState(EventState.PARTICIPATING);
 		setState(EventState.PARTICIPATING);
-		for(TvTListener listener : tvtListeners)
-		{
-			listener.onRegistrationStart();
-		}
+		fireTvtEventListeners(EventStage.REGISTRATION_BEGIN);
 		return true;
 		return true;
 	}
 	}
 	
 	
@@ -297,10 +296,7 @@ public class TvTEvent
 				}
 				}
 			}
 			}
 		}
 		}
-		for(TvTListener listener : tvtListeners)
-		{
-			listener.onBegin();
-		}
+		fireTvtEventListeners(EventStage.START);
 		
 		
 		return true;
 		return true;
 	}
 	}
@@ -345,10 +341,7 @@ public class TvTEvent
 		// Get team which has more points
 		// Get team which has more points
 		TvTEventTeam team = _teams[_teams[0].getPoints() > _teams[1].getPoints() ? 0 : 1];
 		TvTEventTeam team = _teams[_teams[0].getPoints() > _teams[1].getPoints() ? 0 : 1];
 		rewardTeam(team);
 		rewardTeam(team);
-		for(TvTListener listener : tvtListeners)
-		{
-			listener.onEnd();
-		}
+		fireTvtEventListeners(EventStage.END);
 		return "TvT Event: Event finish. Team " + team.getName() + " won with " + team.getPoints() + " kills.";
 		return "TvT Event: Event finish. Team " + team.getName() + " won with " + team.getPoints() + " kills.";
 	}
 	}
 	
 	
@@ -913,10 +906,7 @@ public class TvTEvent
 					playerInstance.sendPacket(cs);
 					playerInstance.sendPacket(cs);
 				}
 				}
 			}
 			}
-			for(TvTListener listener : tvtListeners)
-			{
-				listener.onKill(killedPlayerInstance, killerPlayerInstance, killerTeam);
-			}
+			fireTvtKillListeners(killerPlayerInstance,killedPlayerInstance,killerTeam);
 		}
 		}
 	}
 	}
 	
 	
@@ -1219,6 +1209,60 @@ public class TvTEvent
 	}
 	}
 	
 	
 	// Listeners
 	// Listeners
+	/**
+	 * Fires all the TvTListener.onKill() methods, if any
+	 * @param killer
+	 * @param victim
+	 * @param killerTeam
+	 */
+	private static void fireTvtKillListeners(L2PcInstance killer, L2PcInstance victim, TvTEventTeam killerTeam){
+		if(!tvtListeners.isEmpty() && killer != null && victim != null && killerTeam != null){
+			TvtKillEvent event = new TvtKillEvent();
+			event.setKiller(killer);
+			event.setVictim(victim);
+			event.setKillerTeam(killerTeam);
+			for(TvTListener listener : tvtListeners)
+			{
+				listener.onKill(event);
+			}
+		}
+	}
+	
+	/**
+	 * Fires the appropriate TvtEventListeners, if any
+	 * @param stage
+	 */
+	private static void fireTvtEventListeners(EventStage stage){
+		if(!tvtListeners.isEmpty()){
+			switch(stage){
+				case REGISTRATION_BEGIN:
+				{
+					for(TvTListener listener : tvtListeners)
+					{
+						listener.onRegistrationStart();
+					}
+					break;
+				}
+				case START:
+				{
+					for(TvTListener listener : tvtListeners)
+					{
+						listener.onBegin();
+					}
+					break;
+				}
+				case END:
+				{
+					for(TvTListener listener : tvtListeners)
+					{
+						listener.onEnd();
+					}
+					break;
+				}
+			}
+		}
+	}
+	
 	/**
 	/**
 	 * Adds a TvT listener
 	 * Adds a TvT listener
 	 * @param listener
 	 * @param listener

+ 88 - 21
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/ClanWarehouse.java

@@ -21,6 +21,9 @@ import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseAddItemEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseDeleteItemEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseTransferEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanWarehouseListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanWarehouseListener;
 
 
 public final class ClanWarehouse extends Warehouse
 public final class ClanWarehouse extends Warehouse
@@ -82,12 +85,9 @@ public final class ClanWarehouse extends Warehouse
 	public L2ItemInstance addItem(String process, int itemId, long count, L2PcInstance actor, Object reference)
 	public L2ItemInstance addItem(String process, int itemId, long count, L2PcInstance actor, Object reference)
 	{
 	{
 		L2ItemInstance item = getItemByItemId(itemId);
 		L2ItemInstance item = getItemByItemId(itemId);
-		for (ClanWarehouseListener listener : clanWarehouseListeners)
+		if(!fireClanWarehouseAddItemListeners(process,item,actor,count))
 		{
 		{
-			if (!listener.onAddItem(process, item, actor))
-			{
-				return null;
-			}
+			return null;
 		}
 		}
 		return super.addItem(process, itemId, count, actor, reference);
 		return super.addItem(process, itemId, count, actor, reference);
 	}
 	}
@@ -95,12 +95,9 @@ public final class ClanWarehouse extends Warehouse
 	@Override
 	@Override
 	public L2ItemInstance addItem(String process, L2ItemInstance item, L2PcInstance actor, Object reference)
 	public L2ItemInstance addItem(String process, L2ItemInstance item, L2PcInstance actor, Object reference)
 	{
 	{
-		for (ClanWarehouseListener listener : clanWarehouseListeners)
+		if(!fireClanWarehouseAddItemListeners(process,item,actor,item.getCount()))
 		{
 		{
-			if (!listener.onAddItem(process, item, actor))
-			{
-				return null;
-			}
+			return null;
 		}
 		}
 		return super.addItem(process, item, actor, reference);
 		return super.addItem(process, item, actor, reference);
 	}
 	}
@@ -108,12 +105,8 @@ public final class ClanWarehouse extends Warehouse
 	@Override
 	@Override
 	public L2ItemInstance destroyItem(String process, L2ItemInstance item, long count, L2PcInstance actor, Object reference)
 	public L2ItemInstance destroyItem(String process, L2ItemInstance item, long count, L2PcInstance actor, Object reference)
 	{
 	{
-		for (ClanWarehouseListener listener : clanWarehouseListeners)
-		{
-			if (!listener.onDeleteItem(process, item, count, actor))
-			{
-				return null;
-			}
+		if(!fireClanWarehouseDeleteItemListeners(process,item,actor,count)){
+			return null;
 		}
 		}
 		return super.destroyItem(process, item, count, actor, reference);
 		return super.destroyItem(process, item, count, actor, reference);
 	}
 	}
@@ -122,17 +115,91 @@ public final class ClanWarehouse extends Warehouse
 	public L2ItemInstance transferItem(String process, int objectId, long count, ItemContainer target, L2PcInstance actor, Object reference)
 	public L2ItemInstance transferItem(String process, int objectId, long count, ItemContainer target, L2PcInstance actor, Object reference)
 	{
 	{
 		L2ItemInstance sourceitem = getItemByObjectId(objectId);
 		L2ItemInstance sourceitem = getItemByObjectId(objectId);
-		for (ClanWarehouseListener listener : clanWarehouseListeners)
+		if(!fireClanWarehouseTransferListeners(process,sourceitem,count,target,actor))
 		{
 		{
-			if (!listener.onTransferItem(process, sourceitem, count, target, actor))
-			{
-				return null;
-			}
+			return null;
 		}
 		}
 		return super.transferItem(process, objectId, count, target, actor, reference);
 		return super.transferItem(process, objectId, count, target, actor, reference);
 	}
 	}
 	
 	
 	// Listeners
 	// Listeners
+	/**
+	 * Fires all the ClanWarehouse add item listeners, if any.<br>
+	 * Action is cancelled if it returns false
+	 * @param process
+	 * @param item
+	 * @param actor
+	 * @param count 
+	 * @return
+	 */
+	private boolean fireClanWarehouseAddItemListeners(String process, L2ItemInstance item, L2PcInstance actor, long count){
+		if(!clanWarehouseListeners.isEmpty() && actor != null && item != null){
+			ClanWarehouseAddItemEvent event = new ClanWarehouseAddItemEvent();
+			event.setActor(actor);
+			event.setItem(item);
+			event.setCount(count);
+			event.setProcess(process);
+			for(ClanWarehouseListener listener : clanWarehouseListeners){
+				if(!listener.onAddItem(event)){
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanWarehouse delete item listeners, if any.<br>
+	 * Action is cancelled if it returns false
+	 * @param process
+	 * @param item
+	 * @param actor
+	 * @param count 
+	 * @return
+	 */
+	private boolean fireClanWarehouseDeleteItemListeners(String process, L2ItemInstance item, L2PcInstance actor, long count){
+		if(!clanWarehouseListeners.isEmpty() && actor != null && item != null){
+			ClanWarehouseDeleteItemEvent event = new ClanWarehouseDeleteItemEvent();
+			event.setActor(actor);
+			event.setCount(count);
+			event.setItem(item);
+			event.setProcess(process);
+			for(ClanWarehouseListener listener : clanWarehouseListeners){
+				if(!listener.onDeleteItem(event)){
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the ClanWarehouse transfer listeners, if any.<br>
+	 * Action is cancelled if it returns false
+	 * @param process
+	 * @param item
+	 * @param count 
+	 * @param target 
+	 * @param actor
+	 * @return
+	 */
+	private boolean fireClanWarehouseTransferListeners(String process, L2ItemInstance item, long count, ItemContainer target, L2PcInstance actor){
+		if(!clanWarehouseListeners.isEmpty() && actor != null && item != null && target != null){
+			ClanWarehouseTransferEvent event = new ClanWarehouseTransferEvent();
+			event.setActor(actor);
+			event.setCount(count);
+			event.setItem(item);
+			event.setProcess(process);
+			event.setTarget(target);
+			for(ClanWarehouseListener listener : clanWarehouseListeners){
+				if(!listener.onTransferItem(event)){
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
 	/**
 	/**
 	 * Adds a clan warehouse listener
 	 * Adds a clan warehouse listener
 	 * @param listener
 	 * @param listener

+ 93 - 42
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java

@@ -36,6 +36,10 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
 import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
 import com.l2jserver.gameserver.network.serverpackets.ItemList;
 import com.l2jserver.gameserver.network.serverpackets.ItemList;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AddToInventoryEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDestroyEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDropEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemTransferEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.ItemTracker;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.ItemTracker;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 
 
@@ -466,13 +470,7 @@ public class PcInventory extends Inventory
 		if (item != null && item.getItemId() == ANCIENT_ADENA_ID && !item.equals(_ancientAdena))
 		if (item != null && item.getItemId() == ANCIENT_ADENA_ID && !item.equals(_ancientAdena))
 			_ancientAdena = item;
 			_ancientAdena = item;
 		
 		
-		for (ItemTracker tracker : itemTrackers)
-		{
-			if (tracker.containsItemId(item.getItemId()))
-			{
-				tracker.onAddToInventory(item, actor);
-			}
-		}
+		fireTrackerEvents(TrackerEvent.ADD_TO_INVENTORY,actor,item,null);
 		return item;
 		return item;
 	}
 	}
 	
 	
@@ -512,13 +510,7 @@ public class PcInventory extends Inventory
 			su.addAttribute(StatusUpdate.CUR_LOAD, actor.getCurrentLoad());
 			su.addAttribute(StatusUpdate.CUR_LOAD, actor.getCurrentLoad());
 			actor.sendPacket(su);
 			actor.sendPacket(su);
 			
 			
-			for (ItemTracker tracker : itemTrackers)
-			{
-				if (tracker.containsItemId(item.getItemId()))
-				{
-					tracker.onAddToInventory(item, actor);
-				}
-			}
+			fireTrackerEvents(TrackerEvent.ADD_TO_INVENTORY,actor,item,null);
 		}
 		}
 		
 		
 		
 		
@@ -546,13 +538,7 @@ public class PcInventory extends Inventory
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
 			_ancientAdena = null;
 			_ancientAdena = null;
 		
 		
-		for (ItemTracker tracker : itemTrackers)
-		{
-			if (tracker.containsItemId(item.getItemId()))
-			{
-				tracker.onTransfer(item, actor, target);
-			}
-		}
+		fireTrackerEvents(TrackerEvent.TRANSFER,actor,item,target);
 		return item;
 		return item;
 	}
 	}
 	
 	
@@ -589,13 +575,7 @@ public class PcInventory extends Inventory
 		if (_ancientAdena != null && _ancientAdena.getCount() <= 0)
 		if (_ancientAdena != null && _ancientAdena.getCount() <= 0)
 			_ancientAdena = null;
 			_ancientAdena = null;
 		
 		
-		for (ItemTracker tracker : itemTrackers)
-		{
-			if (tracker.containsItemId(item.getItemId()))
-			{
-				tracker.onDestroy(item, actor);
-			}
-		}
+		fireTrackerEvents(TrackerEvent.DESTROY,actor,item,null);
 
 
 		return item;
 		return item;
 	}
 	}
@@ -659,13 +639,7 @@ public class PcInventory extends Inventory
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
 			_ancientAdena = null;
 			_ancientAdena = null;
 		
 		
-		for (ItemTracker tracker : itemTrackers)
-		{
-			if (tracker.containsItemId(item.getItemId()))
-			{
-				tracker.onDrop(item, actor);
-			}
-		}
+		fireTrackerEvents(TrackerEvent.DROP,actor,item,null);
 		return item;
 		return item;
 	}
 	}
 	
 	
@@ -689,13 +663,7 @@ public class PcInventory extends Inventory
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
 		if (_ancientAdena != null && (_ancientAdena.getCount() <= 0 || _ancientAdena.getOwnerId() != getOwnerId()))
 			_ancientAdena = null;
 			_ancientAdena = null;
 		
 		
-		for (ItemTracker tracker : itemTrackers)
-		{
-			if (tracker.containsItemId(item.getItemId()))
-			{
-				tracker.onDrop(item, actor);
-			}
-		}
+		fireTrackerEvents(TrackerEvent.DROP,actor,item,null);
 		return item;
 		return item;
 	}
 	}
 	
 	
@@ -997,6 +965,89 @@ public class PcInventory extends Inventory
 	}
 	}
 	
 	
 	// LISTENERS
 	// LISTENERS
+	private static enum TrackerEvent{
+		DROP,
+		ADD_TO_INVENTORY,
+		DESTROY,
+		TRANSFER
+	}
+	
+	/**
+	 * Fires the appropriate item tracker events, if any
+	 * @param tEvent
+	 * @param actor
+	 * @param item
+	 * @param target
+	 */
+	private void fireTrackerEvents(TrackerEvent tEvent, L2PcInstance actor, L2ItemInstance item, ItemContainer target){
+		if(item != null && actor != null && !itemTrackers.isEmpty()){
+			switch(tEvent){
+				case ADD_TO_INVENTORY:
+				{
+					AddToInventoryEvent event = new AddToInventoryEvent();
+					event.setItem(item);
+					event.setPlayer(actor);
+					for (ItemTracker tracker : itemTrackers)
+					{
+						if (tracker.containsItemId(item.getItemId()))
+						{
+							tracker.onAddToInventory(event);
+						}
+					}
+					return;
+				}
+				case DROP:
+				{
+					ItemDropEvent event = new ItemDropEvent();
+					event.setItem(item);
+					event.setDropper(actor);
+					event.setX(actor.getX());
+					event.setY(actor.getY());
+					event.setZ(actor.getZ());
+					for (ItemTracker tracker : itemTrackers)
+					{
+						if (tracker.containsItemId(item.getItemId()))
+						{
+							tracker.onDrop(event);
+						}
+					}
+					return;
+				}
+				case DESTROY:
+				{
+					ItemDestroyEvent event = new ItemDestroyEvent();
+					event.setItem(item);
+					event.setPlayer(actor);
+					for (ItemTracker tracker : itemTrackers)
+					{
+						if (tracker.containsItemId(item.getItemId()))
+						{
+							tracker.onDestroy(event);
+						}
+					}
+					return;
+				}
+				case TRANSFER:
+				{
+					if(target != null){
+						ItemTransferEvent event = new ItemTransferEvent();
+						event.setItem(item);
+						event.setPlayer(actor);
+						event.setTarget(target);
+						for (ItemTracker tracker : itemTrackers)
+						{
+							if (tracker.containsItemId(item.getItemId()))
+							{
+								tracker.onTransfer(event);
+							}
+						}
+					}
+					return;
+				}
+			}
+		}
+	}
+	
 	/**
 	/**
 	 * Adds an item tracker
 	 * Adds an item tracker
 	 * @param tracker
 	 * @param tracker

+ 79 - 20
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java

@@ -63,6 +63,9 @@ import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SpawnItem;
 import com.l2jserver.gameserver.network.serverpackets.SpawnItem;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AugmentEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDropEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemPickupEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.AugmentListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.AugmentListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.DropListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.DropListener;
 import com.l2jserver.gameserver.util.GMAudit;
 import com.l2jserver.gameserver.util.GMAudit;
@@ -248,10 +251,8 @@ public final class L2ItemInstance extends L2Object
 	 */
 	 */
 	public final void pickupMe(L2Character player)
 	public final void pickupMe(L2Character player)
 	{
 	{
-		for (DropListener listener : dropListeners)
-		{
-			if (!listener.onPickup(this, (L2PcInstance) player, getPosition().getX(), getPosition().getY(), getPosition().getZ()))
-				return;
+		if(!firePickupListeners(player.getActingPlayer())){
+			return;
 		}
 		}
 		assert getPosition().getWorldRegion() != null;
 		assert getPosition().getWorldRegion() != null;
 		
 		
@@ -890,10 +891,8 @@ public final class L2ItemInstance extends L2Object
 		// there shall be no previous augmentation..
 		// there shall be no previous augmentation..
 		if (_augmentation != null)
 		if (_augmentation != null)
 			return false;
 			return false;
-		for (AugmentListener listener : augmentListeners)
-		{
-			if (!listener.onAugment(this, _augmentation))
-				return false;
+		if(!fireAugmentListeners(true,augmentation)){
+			return false;
 		}
 		}
 		_augmentation = augmentation;
 		_augmentation = augmentation;
 		updateItemAttributes(null);
 		updateItemAttributes(null);
@@ -907,10 +906,8 @@ public final class L2ItemInstance extends L2Object
 	{
 	{
 		if (_augmentation == null)
 		if (_augmentation == null)
 			return;
 			return;
-		for (AugmentListener listener : augmentListeners)
-		{
-			if (!listener.onRemoveAugment(this, _augmentation))
-				return;
+		if(!fireAugmentListeners(true,_augmentation)){
+			return;
 		}
 		}
 		_augmentation = null;
 		_augmentation = null;
 		
 		
@@ -1622,14 +1619,9 @@ public final class L2ItemInstance extends L2Object
 	
 	
 	public final void dropMe(L2Character dropper, int x, int y, int z)
 	public final void dropMe(L2Character dropper, int x, int y, int z)
 	{
 	{
-		if((dropper != null) && dropper.isPlayer())
-		{
-			for (DropListener listener : dropListeners)
-			{
-				if (!listener.onDrop(this, dropper.getActingPlayer(), x, y, z))
-					return;
-			}
-		}		
+		if(!fireDropListeners(dropper.getActingPlayer(),x,y,z)){
+			return;
+		}
 		ThreadPoolManager.getInstance().executeTask(new ItemDropTask(this, dropper, x, y, z));
 		ThreadPoolManager.getInstance().executeTask(new ItemDropTask(this, dropper, x, y, z));
 	}
 	}
 	
 	
@@ -2070,6 +2062,73 @@ public final class L2ItemInstance extends L2Object
 	}
 	}
 	
 	
 	// LISTENERS
 	// LISTENERS
+	/**
+	 * Fires all the DropListener.onPickup() methods, if any
+	 * @param actor
+	 * @return false if the item cannot be picked up by the given player
+	 */
+	private boolean firePickupListeners(L2PcInstance actor){
+		if(!dropListeners.isEmpty() && actor != null){
+			ItemPickupEvent event = new ItemPickupEvent();
+			event.setItem(this);
+			event.setPicker(actor);
+			event.setX(getPosition().getX());
+			event.setY(getPosition().getY());
+			event.setZ(getPosition().getZ());
+			for (DropListener listener : dropListeners)
+			{
+				if (!listener.onPickup(event))
+					return false;
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Fires all the AugmentListener.onAugment() methods, if any
+	 * @param isAugment
+	 * @param augmentation 
+	 * @return false if the operation is not allowed
+	 */
+	private boolean fireAugmentListeners(boolean isAugment, L2Augmentation augmentation){
+		if(!augmentListeners.isEmpty() && augmentation != null){
+			AugmentEvent event = new AugmentEvent();
+			event.setAugmentation(augmentation);
+			event.setIsAugment(isAugment);
+			event.setItem(this);
+			for (AugmentListener listener : augmentListeners)
+			{
+				if(isAugment){
+					if (!listener.onAugment(event))
+						return false;
+				}
+				else{
+					if(!listener.onRemoveAugment(event)){
+						return false;
+					}
+				}
+			}
+		}
+		return true;
+	}
+	
+	private boolean fireDropListeners(L2PcInstance dropper, int x, int y, int z){
+		if(!dropListeners.isEmpty() && dropper != null && dropper.isPlayer()){
+			ItemDropEvent event = new ItemDropEvent();
+			event.setDropper(dropper);
+			event.setItem(this);
+			event.setX(x);
+			event.setY(y);
+			event.setZ(z);
+			for (DropListener listener : dropListeners)
+			{
+				if (!listener.onDrop(event))
+					return false;
+			}
+		}
+		return true;
+	}
+	
 	/**
 	/**
 	 * Adds an augmentation listener
 	 * Adds an augmentation listener
 	 * @param listener
 	 * @param listener

+ 32 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java

@@ -14,10 +14,13 @@
  */
  */
 package com.l2jserver.gameserver.network.clientpackets;
 package com.l2jserver.gameserver.network.clientpackets;
 
 
+import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 import java.util.logging.Logger;
 
 
+import javolution.util.FastList;
+
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.SevenSignsFestival;
 import com.l2jserver.gameserver.SevenSignsFestival;
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
@@ -29,6 +32,7 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo;
 import com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo;
 import com.l2jserver.gameserver.network.serverpackets.RestartResponse;
 import com.l2jserver.gameserver.network.serverpackets.RestartResponse;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerDespawnListener;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 
 
 /**
 /**
@@ -40,6 +44,7 @@ public final class RequestRestart extends L2GameClientPacket
 {
 {
 	private static final String _C__57_REQUESTRESTART = "[C] 57 RequestRestart";
 	private static final String _C__57_REQUESTRESTART = "[C] 57 RequestRestart";
 	protected static final Logger _logAccounting = Logger.getLogger("accounting");
 	protected static final Logger _logAccounting = Logger.getLogger("accounting");
+	private static List<PlayerDespawnListener> despawnListeners = new FastList<>();
 	
 	
 	@Override
 	@Override
 	protected void readImpl()
 	protected void readImpl()
@@ -102,6 +107,11 @@ public final class RequestRestart extends L2GameClientPacket
 			if (playerParty != null)
 			if (playerParty != null)
 				player.getParty().broadcastToPartyMembers(SystemMessage.sendString(player.getName() + " has been removed from the upcoming festival."));
 				player.getParty().broadcastToPartyMembers(SystemMessage.sendString(player.getName() + " has been removed from the upcoming festival."));
 		}
 		}
+
+		for(PlayerDespawnListener listener : despawnListeners){
+			listener.onDespawn(player);
+		}
+
 		// Remove player from Boss Zone
 		// Remove player from Boss Zone
 		player.removeFromBossZone();
 		player.removeFromBossZone();
 		
 		
@@ -135,4 +145,26 @@ public final class RequestRestart extends L2GameClientPacket
 	{
 	{
 		return _C__57_REQUESTRESTART;
 		return _C__57_REQUESTRESTART;
 	}
 	}
+	
+	// Listeners
+	/**
+	 * Adds a despawn listener which will get triggered when a player despawns
+	 * @param listener
+	 */
+	public static void addDespawnListener(PlayerDespawnListener listener)
+	{
+		if (!despawnListeners.contains(listener))
+		{
+			despawnListeners.add(listener);
+		}
+	}
+	
+	/**
+	 * Removes a despawn listener
+	 * @param listener
+	 */
+	public static void removeDespawnListener(PlayerDespawnListener listener)
+	{
+		despawnListeners.remove(listener);
+	}
 }
 }

+ 45 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/Say2.java

@@ -29,6 +29,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ChatEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatFilterListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatFilterListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
@@ -235,21 +236,14 @@ public final class Say2 extends L2GameClientPacket
 		if (_text.indexOf(8) >= 0)
 		if (_text.indexOf(8) >= 0)
 			if (!parseAndPublishItem(activeChar))
 			if (!parseAndPublishItem(activeChar))
 				return;
 				return;
-		
-		for (ChatListener listener : chatListeners)
-		{
-			listener.onTalk(_text, activeChar, _target, ChatListener.getTargetType(CHAT_NAMES[_type]));
-		}
+		fireChatListeners(activeChar);
 		
 		
 		// Say Filter implementation
 		// Say Filter implementation
 		if (Config.USE_SAY_FILTER)
 		if (Config.USE_SAY_FILTER)
 			checkText();
 			checkText();
 		
 		
 		// Custom chat filter
 		// Custom chat filter
-		for (ChatFilterListener listener : chatFilterListeners)
-		{
-			_text = listener.onTalk(_text, activeChar, ChatListener.getTargetType(CHAT_NAMES[_type]));
-		}
+		fireChatFilters(activeChar);
 		
 		
 		IChatHandler handler = ChatHandler.getInstance().getHandler(_type);
 		IChatHandler handler = ChatHandler.getInstance().getHandler(_type);
 		if (handler != null)
 		if (handler != null)
@@ -327,6 +321,48 @@ public final class Say2 extends L2GameClientPacket
 	}
 	}
 	
 	
 	// Listeners
 	// Listeners
+	/**
+	 * Fires all the chat listeners, if any
+	 * @param activeChar
+	 */
+	private void fireChatListeners(L2PcInstance activeChar){
+		if(!chatListeners.isEmpty()){
+			ChatEvent event = null;
+			event = new ChatEvent();
+			event.setOrigin(activeChar);
+			event.setTarget(_target);
+			event.setTargetType(ChatListener.getTargetType(CHAT_NAMES[_type]));
+			event.setText(_text);
+			for (ChatListener listener : chatListeners)
+			{
+				listener.onTalk(event);
+			}
+		}
+	}
+	
+	/**
+	 * Fires the custom chat filter, if any<br>
+	 * This type of listener should be registered only once 
+	 * since if there are many of them they might override each 
+	 * other!
+	 * @param activeChar
+	 */
+	private void fireChatFilters(L2PcInstance activeChar){
+		if(!chatFilterListeners.isEmpty()){
+			ChatEvent event = null;
+			event = new ChatEvent();
+			event.setOrigin(activeChar);
+			event.setTarget(_target);
+			event.setTargetType(ChatListener.getTargetType(CHAT_NAMES[_type]));
+			event.setText(_text);
+			for (ChatFilterListener listener : chatFilterListeners)
+			{
+				_text = listener.onTalk(event);
+			}
+		}
+		
+	}
+	
 	/**
 	/**
 	 * Adds a chat listener
 	 * Adds a chat listener
 	 * @param listener
 	 * @param listener

+ 57 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/AddToInventoryEvent.java

@@ -0,0 +1,57 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class AddToInventoryEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private L2PcInstance player;
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+}

+ 56 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/AttackEvent.java

@@ -0,0 +1,56 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class AttackEvent implements L2Event
+{
+	private L2Character attacker;
+	private L2Character target;
+	/**
+	 * @return the attacker
+	 */
+	public L2Character getAttacker()
+	{
+		return attacker;
+	}
+	/**
+	 * @param attacker the attacker to set
+	 */
+	public void setAttacker(L2Character attacker)
+	{
+		this.attacker = attacker;
+	}
+	/**
+	 * @return the target
+	 */
+	public L2Character getTarget()
+	{
+		return target;
+	}
+	/**
+	 * @param target the target to set
+	 */
+	public void setTarget(L2Character target)
+	{
+		this.target = target;
+	}
+}

+ 73 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/AugmentEvent.java

@@ -0,0 +1,73 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Augmentation;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class AugmentEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private L2Augmentation augmentation;
+	private boolean isAugment; // true = is being augmented // false = augment is being removed
+	
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the augmentation
+	 */
+	public L2Augmentation getAugmentation()
+	{
+		return augmentation;
+	}
+	/**
+	 * @param augmentation the augmentation to set
+	 */
+	public void setAugmentation(L2Augmentation augmentation)
+	{
+		this.augmentation = augmentation;
+	}
+	/**
+	 * @return the isAugment
+	 */
+	public boolean isAugment()
+	{
+		return isAugment;
+	}
+	/**
+	 * @param isAugment the isAugment to set
+	 */
+	public void setIsAugment(boolean isAugment)
+	{
+		this.isAugment = isAugment;
+	}
+}

+ 87 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ChatEvent.java

@@ -0,0 +1,87 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener.ChatTargetType;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ChatEvent implements L2Event
+{
+	private String text;
+	private L2PcInstance origin;
+	private String target;
+	private ChatTargetType targetType;
+	/**
+	 * @return the text
+	 */
+	public String getText()
+	{
+		return text;
+	}
+	/**
+	 * @param text the text to set
+	 */
+	public void setText(String text)
+	{
+		this.text = text;
+	}
+	/**
+	 * @return the origin
+	 */
+	public L2PcInstance getOrigin()
+	{
+		return origin;
+	}
+	/**
+	 * @param origin the origin to set
+	 */
+	public void setOrigin(L2PcInstance origin)
+	{
+		this.origin = origin;
+	}
+	/**
+	 * @return the target
+	 */
+	public String getTarget()
+	{
+		return target;
+	}
+	/**
+	 * @param target the target to set
+	 */
+	public void setTarget(String target)
+	{
+		this.target = target;
+	}
+	/**
+	 * @return the targetType
+	 */
+	public ChatTargetType getTargetType()
+	{
+		return targetType;
+	}
+	/**
+	 * @param targetType the targetType to set
+	 */
+	public void setTargetType(ChatTargetType targetType)
+	{
+		this.targetType = targetType;
+	}
+}

+ 43 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanCreationEvent.java

@@ -0,0 +1,43 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanCreationEvent implements L2Event
+{
+	private L2Clan clan;
+
+	/**
+	 * @return the clan
+	 */
+	public L2Clan getClan()
+	{
+		return clan;
+	}
+
+	/**
+	 * @param clan the clan to set
+	 */
+	public void setClan(L2Clan clan)
+	{
+		this.clan = clan;
+	}
+}

+ 57 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanJoinEvent.java

@@ -0,0 +1,57 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanJoinEvent implements L2Event
+{
+	private L2PcInstance player;
+	private L2Clan clan;
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+	/**
+	 * @return the clan
+	 */
+	public L2Clan getClan()
+	{
+		return clan;
+	}
+	/**
+	 * @param clan the clan to set
+	 */
+	public void setClan(L2Clan clan)
+	{
+		this.clan = clan;
+	}
+}

+ 72 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanLeaderChangeEvent.java

@@ -0,0 +1,72 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanLeaderChangeEvent implements L2Event
+{
+	private L2Clan clan;
+	private L2PcInstance newLeader;
+	private L2PcInstance oldLeader;
+	/**
+	 * @return the clan
+	 */
+	public L2Clan getClan()
+	{
+		return clan;
+	}
+	/**
+	 * @param clan the clan to set
+	 */
+	public void setClan(L2Clan clan)
+	{
+		this.clan = clan;
+	}
+	/**
+	 * @return the newLeader
+	 */
+	public L2PcInstance getNewLeader()
+	{
+		return newLeader;
+	}
+	/**
+	 * @param newLeader the newLeader to set
+	 */
+	public void setNewLeader(L2PcInstance newLeader)
+	{
+		this.newLeader = newLeader;
+	}
+	/**
+	 * @return the oldLeader
+	 */
+	public L2PcInstance getOldLeader()
+	{
+		return oldLeader;
+	}
+	/**
+	 * @param oldLeader the oldLeader to set
+	 */
+	public void setOldLeader(L2PcInstance oldLeader)
+	{
+		this.oldLeader = oldLeader;
+	}
+}

+ 56 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanLeaveEvent.java

@@ -0,0 +1,56 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanLeaveEvent implements L2Event
+{
+	private int playerId;
+	private L2Clan clan;
+	/**
+	 * @return the playerId
+	 */
+	public int getPlayerId()
+	{
+		return playerId;
+	}
+	/**
+	 * @param playerId the playerId to set
+	 */
+	public void setPlayerId(int playerId)
+	{
+		this.playerId = playerId;
+	}
+	/**
+	 * @return the clan
+	 */
+	public L2Clan getClan()
+	{
+		return clan;
+	}
+	/**
+	 * @param clan the clan to set
+	 */
+	public void setClan(L2Clan clan)
+	{
+		this.clan = clan;
+	}
+}

+ 56 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanLevelUpEvent.java

@@ -0,0 +1,56 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanLevelUpEvent implements L2Event
+{
+	private L2Clan clan;
+	private int oldLevel;
+	/**
+	 * @return the clan
+	 */
+	public L2Clan getClan()
+	{
+		return clan;
+	}
+	/**
+	 * @param clan the clan to set
+	 */
+	public void setClan(L2Clan clan)
+	{
+		this.clan = clan;
+	}
+	/**
+	 * @return the oldLevel
+	 */
+	public int getOldLevel()
+	{
+		return oldLevel;
+	}
+	/**
+	 * @param oldLevel the oldLevel to set
+	 */
+	public void setOldLevel(int oldLevel)
+	{
+		this.oldLevel = oldLevel;
+	}
+}

+ 73 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarEvent.java

@@ -0,0 +1,73 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanWarEvent implements L2Event
+{
+	private L2Clan clan1;
+	private L2Clan clan2;
+	private EventStage stage;
+	
+	/**
+	 * @return the clan1
+	 */
+	public L2Clan getClan1()
+	{
+		return clan1;
+	}
+	/**
+	 * @param clan1 the clan1 to set
+	 */
+	public void setClan1(L2Clan clan1)
+	{
+		this.clan1 = clan1;
+	}
+	/**
+	 * @return the clan2
+	 */
+	public L2Clan getClan2()
+	{
+		return clan2;
+	}
+	/**
+	 * @param clan2 the clan2 to set
+	 */
+	public void setClan2(L2Clan clan2)
+	{
+		this.clan2 = clan2;
+	}
+	/**
+	 * @return the stage
+	 */
+	public EventStage getStage()
+	{
+		return stage;
+	}
+	/**
+	 * @param stage the stage to set
+	 */
+	public void setStage(EventStage stage)
+	{
+		this.stage = stage;
+	}
+}

+ 89 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarehouseAddItemEvent.java

@@ -0,0 +1,89 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanWarehouseAddItemEvent implements L2Event
+{
+	private String process;
+	private L2ItemInstance item;
+	private L2PcInstance actor;
+	private long count;
+	
+	/**
+	 * @return the process
+	 */
+	public String getProcess()
+	{
+		return process;
+	}
+	/**
+	 * @param process the process to set
+	 */
+	public void setProcess(String process)
+	{
+		this.process = process;
+	}
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the actor
+	 */
+	public L2PcInstance getActor()
+	{
+		return actor;
+	}
+	/**
+	 * @param actor the actor to set
+	 */
+	public void setActor(L2PcInstance actor)
+	{
+		this.actor = actor;
+	}
+	/**
+	 * @return the count
+	 */
+	public long getCount()
+	{
+		return count;
+	}
+	/**
+	 * @param count the count to set
+	 */
+	public void setCount(long count)
+	{
+		this.count = count;
+	}
+
+}

+ 88 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarehouseDeleteItemEvent.java

@@ -0,0 +1,88 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanWarehouseDeleteItemEvent implements L2Event
+{
+	private String process;
+	private L2ItemInstance item;
+	private L2PcInstance actor;
+	private long count;
+	/**
+	 * @return the process
+	 */
+	public String getProcess()
+	{
+		return process;
+	}
+	/**
+	 * @param process the process to set
+	 */
+	public void setProcess(String process)
+	{
+		this.process = process;
+	}
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the actor
+	 */
+	public L2PcInstance getActor()
+	{
+		return actor;
+	}
+	/**
+	 * @param actor the actor to set
+	 */
+	public void setActor(L2PcInstance actor)
+	{
+		this.actor = actor;
+	}
+	/**
+	 * @return the count
+	 */
+	public long getCount()
+	{
+		return count;
+	}
+	/**
+	 * @param count the count to set
+	 */
+	public void setCount(long count)
+	{
+		this.count = count;
+	}
+
+}

+ 103 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ClanWarehouseTransferEvent.java

@@ -0,0 +1,103 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ClanWarehouseTransferEvent implements L2Event
+{
+	private String process;
+	private L2ItemInstance item;
+	private L2PcInstance actor;
+	private long count;
+	private ItemContainer target;
+	/**
+	 * @return the process
+	 */
+	public String getProcess()
+	{
+		return process;
+	}
+	/**
+	 * @param process the process to set
+	 */
+	public void setProcess(String process)
+	{
+		this.process = process;
+	}
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the actor
+	 */
+	public L2PcInstance getActor()
+	{
+		return actor;
+	}
+	/**
+	 * @param actor the actor to set
+	 */
+	public void setActor(L2PcInstance actor)
+	{
+		this.actor = actor;
+	}
+	/**
+	 * @return the count
+	 */
+	public long getCount()
+	{
+		return count;
+	}
+	/**
+	 * @param count the count to set
+	 */
+	public void setCount(long count)
+	{
+		this.count = count;
+	}
+	/**
+	 * @return the target
+	 */
+	public ItemContainer getTarget()
+	{
+		return target;
+	}
+	/**
+	 * @param target the target to set
+	 */
+	public void setTarget(ItemContainer target)
+	{
+		this.target = target;
+	}
+}

+ 56 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/DeathEvent.java

@@ -0,0 +1,56 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class DeathEvent implements L2Event
+{
+	private L2Character victim;
+	private L2Character killer;
+	/**
+	 * @return the victim
+	 */
+	public L2Character getVictim()
+	{
+		return victim;
+	}
+	/**
+	 * @param victim the victim to set
+	 */
+	public void setVictim(L2Character victim)
+	{
+		this.victim = victim;
+	}
+	/**
+	 * @return the killer
+	 */
+	public L2Character getKiller()
+	{
+		return killer;
+	}
+	/**
+	 * @param killer the killer to set
+	 */
+	public void setKiller(L2Character killer)
+	{
+		this.killer = killer;
+	}
+}

+ 56 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/EquipmentEvent.java

@@ -0,0 +1,56 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class EquipmentEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private boolean isEquipped;
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the isEquipped
+	 */
+	public boolean isEquipped()
+	{
+		return isEquipped;
+	}
+	/**
+	 * @param isEquipped the isEquipped to set
+	 */
+	public void setEquipped(boolean isEquipped)
+	{
+		this.isEquipped = isEquipped;
+	}
+}

+ 61 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/FortSiegeEvent.java

@@ -0,0 +1,61 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.entity.FortSiege;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
+
+/**
+ * @author TheOne
+ *
+ */
+public class FortSiegeEvent implements L2Event
+{
+	private FortSiege siege;
+	private EventStage stage;
+
+	/**
+	 * @return the siege
+	 */
+	public FortSiege getSiege()
+	{
+		return siege;
+	}
+
+	/**
+	 * @param siege the siege to set
+	 */
+	public void setSiege(FortSiege siege)
+	{
+		this.siege = siege;
+	}
+
+	/**
+	 * @return the stage
+	 */
+	public EventStage getStage()
+	{
+		return stage;
+	}
+
+	/**
+	 * @param stage the stage to set
+	 */
+	public void setStage(EventStage stage)
+	{
+		this.stage = stage;
+	}
+}

+ 73 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/HennaEvent.java

@@ -0,0 +1,73 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2HennaInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class HennaEvent implements L2Event
+{
+	private L2PcInstance player;
+	private L2HennaInstance henna;
+	private boolean add;
+	
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+	/**
+	 * @return the henna
+	 */
+	public L2HennaInstance getHenna()
+	{
+		return henna;
+	}
+	/**
+	 * @param henna the henna to set
+	 */
+	public void setHenna(L2HennaInstance henna)
+	{
+		this.henna = henna;
+	}
+	/**
+	 * @return the add
+	 */
+	public boolean isAdd()
+	{
+		return add;
+	}
+	/**
+	 * @param add the add to set
+	 */
+	public void setAdd(boolean add)
+	{
+		this.add = add;
+	}
+}

+ 101 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemCreateEvent.java

@@ -0,0 +1,101 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ItemCreateEvent implements L2Event
+{
+	private L2PcInstance player;
+	private int itemId;
+	private String process;
+	private Object reference;
+	private long count;
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+	/**
+	 * @return the itemId
+	 */
+	public int getItemId()
+	{
+		return itemId;
+	}
+	/**
+	 * @param itemId the itemId to set
+	 */
+	public void setItemId(int itemId)
+	{
+		this.itemId = itemId;
+	}
+	/**
+	 * @return the process
+	 */
+	public String getProcess()
+	{
+		return process;
+	}
+	/**
+	 * @param process the process to set
+	 */
+	public void setProcess(String process)
+	{
+		this.process = process;
+	}
+	/**
+	 * @return the reference
+	 */
+	public Object getReference()
+	{
+		return reference;
+	}
+	/**
+	 * @param reference the reference to set
+	 */
+	public void setReference(Object reference)
+	{
+		this.reference = reference;
+	}
+	/**
+	 * @return the count
+	 */
+	public long getCount()
+	{
+		return count;
+	}
+	/**
+	 * @param count the count to set
+	 */
+	public void setCount(long count)
+	{
+		this.count = count;
+	}
+}

+ 60 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemDestroyEvent.java

@@ -0,0 +1,60 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ItemDestroyEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private L2PcInstance player;
+	
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+
+	
+}

+ 103 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemDropEvent.java

@@ -0,0 +1,103 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ItemDropEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private L2PcInstance dropper;
+	private int x;
+	private int y;
+	private int z;
+	
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the dropper
+	 */
+	public L2PcInstance getDropper()
+	{
+		return dropper;
+	}
+	/**
+	 * @param dropper the dropper to set
+	 */
+	public void setDropper(L2PcInstance dropper)
+	{
+		this.dropper = dropper;
+	}
+	/**
+	 * @return the x
+	 */
+	public int getX()
+	{
+		return x;
+	}
+	/**
+	 * @param x the x to set
+	 */
+	public void setX(int x)
+	{
+		this.x = x;
+	}
+	/**
+	 * @return the y
+	 */
+	public int getY()
+	{
+		return y;
+	}
+	/**
+	 * @param y the y to set
+	 */
+	public void setY(int y)
+	{
+		this.y = y;
+	}
+	/**
+	 * @return the z
+	 */
+	public int getZ()
+	{
+		return z;
+	}
+	/**
+	 * @param z the z to set
+	 */
+	public void setZ(int z)
+	{
+		this.z = z;
+	}
+}

+ 102 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemPickupEvent.java

@@ -0,0 +1,102 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ItemPickupEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private L2PcInstance picker;
+	private int x;
+	private int y;
+	private int z;
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the picker
+	 */
+	public L2PcInstance getPicker()
+	{
+		return picker;
+	}
+	/**
+	 * @param picker the picker to set
+	 */
+	public void setPicker(L2PcInstance picker)
+	{
+		this.picker = picker;
+	}
+	/**
+	 * @return the x
+	 */
+	public int getX()
+	{
+		return x;
+	}
+	/**
+	 * @param x the x to set
+	 */
+	public void setX(int x)
+	{
+		this.x = x;
+	}
+	/**
+	 * @return the y
+	 */
+	public int getY()
+	{
+		return y;
+	}
+	/**
+	 * @param y the y to set
+	 */
+	public void setY(int y)
+	{
+		this.y = y;
+	}
+	/**
+	 * @return the z
+	 */
+	public int getZ()
+	{
+		return z;
+	}
+	/**
+	 * @param z the z to set
+	 */
+	public void setZ(int z)
+	{
+		this.z = z;
+	}
+}

+ 73 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ItemTransferEvent.java

@@ -0,0 +1,73 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ItemTransferEvent implements L2Event
+{
+	private L2ItemInstance item;
+	private L2PcInstance player;
+	private ItemContainer target;
+	/**
+	 * @return the item
+	 */
+	public L2ItemInstance getItem()
+	{
+		return item;
+	}
+	/**
+	 * @param item the item to set
+	 */
+	public void setItem(L2ItemInstance item)
+	{
+		this.item = item;
+	}
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+	/**
+	 * @return the target
+	 */
+	public ItemContainer getTarget()
+	{
+		return target;
+	}
+	/**
+	 * @param target the target to set
+	 */
+	public void setTarget(ItemContainer target)
+	{
+		this.target = target;
+	}
+}

+ 71 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/PlayerLevelChangeEvent.java

@@ -0,0 +1,71 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class PlayerLevelChangeEvent implements L2Event
+{
+	private L2PcInstance player;
+	private int oldLevel;
+	private int newLevel;
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+	/**
+	 * @return the oldLevel
+	 */
+	public int getOldLevel()
+	{
+		return oldLevel;
+	}
+	/**
+	 * @param oldLevel the oldLevel to set
+	 */
+	public void setOldLevel(int oldLevel)
+	{
+		this.oldLevel = oldLevel;
+	}
+	/**
+	 * @return the newLevel
+	 */
+	public int getNewLevel()
+	{
+		return newLevel;
+	}
+	/**
+	 * @param newLevel the newLevel to set
+	 */
+	public void setNewLevel(int newLevel)
+	{
+		this.newLevel = newLevel;
+	}
+}

+ 72 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/ProfessionChangeEvent.java

@@ -0,0 +1,72 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.templates.L2PcTemplate;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class ProfessionChangeEvent implements L2Event
+{
+	private L2PcInstance player;
+	private boolean isSubClass;
+	private L2PcTemplate template;
+	/**
+	 * @return the player
+	 */
+	public L2PcInstance getPlayer()
+	{
+		return player;
+	}
+	/**
+	 * @param player the player to set
+	 */
+	public void setPlayer(L2PcInstance player)
+	{
+		this.player = player;
+	}
+	/**
+	 * @return the isSubClass
+	 */
+	public boolean isSubClass()
+	{
+		return isSubClass;
+	}
+	/**
+	 * @param isSubClass the isSubClass to set
+	 */
+	public void setSubClass(boolean isSubClass)
+	{
+		this.isSubClass = isSubClass;
+	}
+	/**
+	 * @return the template
+	 */
+	public L2PcTemplate getTemplate()
+	{
+		return template;
+	}
+	/**
+	 * @param template the template to set
+	 */
+	public void setTemplate(L2PcTemplate template)
+	{
+		this.template = template;
+	}
+}

+ 61 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/SiegeEvent.java

@@ -0,0 +1,61 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.entity.Siege;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
+
+/**
+ * @author TheOne
+ *
+ */
+public class SiegeEvent implements L2Event
+{
+	private Siege siege;
+	private EventStage stage;
+
+	/**
+	 * @return the siege
+	 */
+	public Siege getSiege()
+	{
+		return siege;
+	}
+
+	/**
+	 * @param siege the siege to set
+	 */
+	public void setSiege(Siege siege)
+	{
+		this.siege = siege;
+	}
+
+	/**
+	 * @return the stage
+	 */
+	public EventStage getStage()
+	{
+		return stage;
+	}
+
+	/**
+	 * @param stage the stage to set
+	 */
+	public void setStage(EventStage stage)
+	{
+		this.stage = stage;
+	}
+}

+ 73 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/SkillUseEvent.java

@@ -0,0 +1,73 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class SkillUseEvent implements L2Event
+{
+	private L2Character caster;
+	private L2Skill skill;
+	private L2Object[] targets;
+	/**
+	 * @return the caster
+	 */
+	public L2Character getCaster()
+	{
+		return caster;
+	}
+	/**
+	 * @param caster the caster to set
+	 */
+	public void setCaster(L2Character caster)
+	{
+		this.caster = caster;
+	}
+	/**
+	 * @return the targets
+	 */
+	public L2Object[] getTargets()
+	{
+		return targets;
+	}
+	/**
+	 * @param targets the targets to set
+	 */
+	public void setTargets(L2Object[] targets)
+	{
+		this.targets = targets;
+	}
+	/**
+	 * @return the skill
+	 */
+	public L2Skill getSkill()
+	{
+		return skill;
+	}
+	/**
+	 * @param skill the skill to set
+	 */
+	public void setSkill(L2Skill skill)
+	{
+		this.skill = skill;
+	}
+}

+ 60 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/TransformEvent.java

@@ -0,0 +1,60 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.L2Transformation;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class TransformEvent implements L2Event
+{
+	private L2Transformation transformation;
+	private boolean transforming; // false = untransforming
+
+	/**
+	 * @return the transformation
+	 */
+	public L2Transformation getTransformation()
+	{
+		return transformation;
+	}
+
+	/**
+	 * @param transformation the transformation to set
+	 */
+	public void setTransformation(L2Transformation transformation)
+	{
+		this.transformation = transformation;
+	}
+
+	/**
+	 * @return the transforming
+	 */
+	public boolean isTransforming()
+	{
+		return transforming;
+	}
+
+	/**
+	 * @param transforming the transforming to set
+	 */
+	public void setTransforming(boolean transforming)
+	{
+		this.transforming = transforming;
+	}
+}

+ 72 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/TvtKillEvent.java

@@ -0,0 +1,72 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.TvTEventTeam;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
+
+/**
+ * @author TheOne
+ *
+ */
+public class TvtKillEvent implements L2Event
+{
+	private L2PcInstance killer;
+	private L2PcInstance victim;
+	private TvTEventTeam killerTeam;
+	/**
+	 * @return the killer
+	 */
+	public L2PcInstance getKiller()
+	{
+		return killer;
+	}
+	/**
+	 * @param killer the killer to set
+	 */
+	public void setKiller(L2PcInstance killer)
+	{
+		this.killer = killer;
+	}
+	/**
+	 * @return the victim
+	 */
+	public L2PcInstance getVictim()
+	{
+		return victim;
+	}
+	/**
+	 * @param victim the victim to set
+	 */
+	public void setVictim(L2PcInstance victim)
+	{
+		this.victim = victim;
+	}
+	/**
+	 * @return the killerTeam
+	 */
+	public TvTEventTeam getKillerTeam()
+	{
+		return killerTeam;
+	}
+	/**
+	 * @param killerTeam the killerTeam to set
+	 */
+	public void setKillerTeam(TvTEventTeam killerTeam)
+	{
+		this.killerTeam = killerTeam;
+	}
+}

+ 24 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/events/impl/L2Event.java

@@ -0,0 +1,24 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine.events.impl;
+
+/**
+ * Convenience interface for all events
+ * @author TheOne
+ */
+public interface L2Event
+{
+	
+}

+ 189 - 218
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/impl/L2Script.java

@@ -19,21 +19,39 @@ import java.util.List;
 
 
 import javolution.util.FastList;
 import javolution.util.FastList;
 
 
-import com.l2jserver.gameserver.model.L2Augmentation;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2Transformation;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2PcTemplate;
-import com.l2jserver.gameserver.model.entity.FortSiege;
-import com.l2jserver.gameserver.model.entity.Siege;
-import com.l2jserver.gameserver.model.entity.TvTEventTeam;
-import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
-import com.l2jserver.gameserver.model.items.instance.L2HennaInstance;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AddToInventoryEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AttackEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AugmentEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ChatEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanCreationEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanJoinEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLeaderChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLeaveEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLevelUpEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseAddItemEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseDeleteItemEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseTransferEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.DeathEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.EquipmentEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.FortSiegeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.HennaEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemCreateEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDestroyEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDropEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemPickupEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemTransferEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.PlayerLevelChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ProfessionChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.SiegeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.SkillUseEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.TransformEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.TvtKillEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.impl.L2Event;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.AttackListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.AttackListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.DeathListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.DeathListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.SkillUseListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.character.SkillUseListener;
@@ -57,7 +75,6 @@ import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.Professi
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.TransformListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.TransformListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatFilterListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatFilterListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener;
-import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener.ChatTargetType;
 
 
 /**
 /**
  * L2Script is an extension of Quest.java which makes use of the L2J listeners.<br>
  * L2Script is an extension of Quest.java which makes use of the L2J listeners.<br>
@@ -131,24 +148,22 @@ public abstract class L2Script extends Quest
 	
 	
 	/**
 	/**
 	 * Used locally to call onDeath()
 	 * Used locally to call onDeath()
-	 * @param killer
-	 * @param victim
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	private boolean notifyDeath(L2Character killer, L2Character victim)
+	private boolean notifyDeath(DeathEvent event)
 	{
 	{
-		return onDeath(killer, victim);
+		return onDeath(event);
 	}
 	}
 	
 	
 	/**
 	/**
 	 * Used locally to call onAttack(L2Character,L2Character)
 	 * Used locally to call onAttack(L2Character,L2Character)
-	 * @param target
-	 * @param attacker
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	private boolean notifyAttack(L2Character target, L2Character attacker)
+	private boolean notifyAttack(AttackEvent event)
 	{
 	{
-		return onAttack(target, attacker);
+		return onAttack(event);
 	}
 	}
 	
 	
 	// Register for event notification
 	// Register for event notification
@@ -164,15 +179,15 @@ public abstract class L2Script extends Quest
 		DeathListener listener = new DeathListener(character)
 		DeathListener listener = new DeathListener(character)
 		{
 		{
 			@Override
 			@Override
-			public boolean onKill(L2Character target, L2Character killer)
+			public boolean onKill(DeathEvent event)
 			{
 			{
-				return notifyDeath(killer, target);
+				return notifyDeath(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onDeath(L2Character target, L2Character killer)
+			public boolean onDeath(DeathEvent event)
 			{
 			{
-				return notifyDeath(killer, target);
+				return notifyDeath(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -251,15 +266,15 @@ public abstract class L2Script extends Quest
 			AttackListener listener = new AttackListener(character)
 			AttackListener listener = new AttackListener(character)
 			{
 			{
 				@Override
 				@Override
-				public boolean onAttack(L2Character target)
+				public boolean onAttack(AttackEvent event)
 				{
 				{
-					return notifyAttack(target, character);
+					return notifyAttack(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public boolean isAttacked(L2Character attacker)
+				public boolean isAttacked(AttackEvent event)
 				{
 				{
-					return notifyAttack(character, attacker);
+					return notifyAttack(event);
 				}
 				}
 			};
 			};
 			_listeners.add(listener);
 			_listeners.add(listener);
@@ -296,9 +311,9 @@ public abstract class L2Script extends Quest
 		SkillUseListener listener = new SkillUseListener(npcId, skillId)
 		SkillUseListener listener = new SkillUseListener(npcId, skillId)
 		{
 		{
 			@Override
 			@Override
-			public boolean onSkillUse(L2Skill skill, L2Character character, L2Object[] targets)
+			public boolean onSkillUse(SkillUseEvent event)
 			{
 			{
-				return onUseSkill(skill, character, targets);
+				return onUseSkill(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -316,9 +331,9 @@ public abstract class L2Script extends Quest
 			SkillUseListener listener = new SkillUseListener(character, skillId)
 			SkillUseListener listener = new SkillUseListener(character, skillId)
 			{
 			{
 				@Override
 				@Override
-				public boolean onSkillUse(L2Skill skill, L2Character character, L2Object[] targets)
+				public boolean onSkillUse(SkillUseEvent event)
 				{
 				{
-					return onUseSkill(skill, character, targets);
+					return onUseSkill(event);
 				}
 				}
 			};
 			};
 			_listeners.add(listener);
 			_listeners.add(listener);
@@ -370,15 +385,15 @@ public abstract class L2Script extends Quest
 		ClanCreationListener listener = new ClanCreationListener()
 		ClanCreationListener listener = new ClanCreationListener()
 		{
 		{
 			@Override
 			@Override
-			public void onClanCreate(L2Clan clan)
+			public void onClanCreate(ClanCreationEvent event)
 			{
 			{
-				onClanCreated(clan);
+				onClanCreated(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onClanLevelUp(L2Clan clan, int oldLevel)
+			public boolean onClanLevelUp(ClanLevelUpEvent event)
 			{
 			{
-				return onClanLeveledUp(clan, oldLevel);
+				return onClanLeveledUp(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -408,21 +423,21 @@ public abstract class L2Script extends Quest
 		ClanMembershipListener listener = new ClanMembershipListener()
 		ClanMembershipListener listener = new ClanMembershipListener()
 		{
 		{
 			@Override
 			@Override
-			public boolean onJoin(L2PcInstance player, L2Clan clan)
+			public boolean onJoin(ClanJoinEvent event)
 			{
 			{
-				return onClanJoin(player, clan);
+				return onClanJoin(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onLeaderChange(L2Clan clan, L2PcInstance newLeader, L2PcInstance oldLeader)
+			public boolean onLeaderChange(ClanLeaderChangeEvent event)
 			{
 			{
-				return onClanLeaderChange(player, clan);
+				return onClanLeaderChange(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onLeave(int playerObjId, L2Clan clan)
+			public boolean onLeave(ClanLeaveEvent event)
 			{
 			{
-				return onClanLeave(playerObjId, clan);
+				return onClanLeave(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -455,21 +470,21 @@ public abstract class L2Script extends Quest
 			ClanWarehouseListener listener = new ClanWarehouseListener(clan)
 			ClanWarehouseListener listener = new ClanWarehouseListener(clan)
 			{
 			{
 				@Override
 				@Override
-				public boolean onAddItem(String process, L2ItemInstance item, L2PcInstance actor)
+				public boolean onAddItem(ClanWarehouseAddItemEvent event)
 				{
 				{
-					return onClanWarehouseAddItem(process, item, actor);
+					return onClanWarehouseAddItem(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public boolean onDeleteItem(String process, L2ItemInstance item, long count, L2PcInstance actor)
+				public boolean onDeleteItem(ClanWarehouseDeleteItemEvent event)
 				{
 				{
-					return onClanWarehouseDeleteItem(process, item, count, actor);
+					return onClanWarehouseDeleteItem(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public boolean onTransferItem(String process, L2ItemInstance item, long count, ItemContainer target, L2PcInstance actor)
+				public boolean onTransferItem(ClanWarehouseTransferEvent event)
 				{
 				{
-					return onClanWarehouseTransferItem(process, item, count, target, actor);
+					return onClanWarehouseTransferItem(event);
 				}
 				}
 			};
 			};
 			_listeners.add(listener);
 			_listeners.add(listener);
@@ -504,15 +519,17 @@ public abstract class L2Script extends Quest
 		ClanWarListener listener = new ClanWarListener()
 		ClanWarListener listener = new ClanWarListener()
 		{
 		{
 			@Override
 			@Override
-			public boolean onWarStart(L2Clan clan1, L2Clan clan2)
+			public boolean onWarStart(ClanWarEvent event)
 			{
 			{
-				return onClanWarEvent(clan1, clan2, EventStage.start);
+				event.setStage(EventStage.START);
+				return onClanWarEvent(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onWarEnd(L2Clan clan1, L2Clan clan2)
+			public boolean onWarEnd(ClanWarEvent event)
 			{
 			{
-				return onClanWarEvent(clan1, clan2, EventStage.end);
+				event.setStage(EventStage.END);
+				return onClanWarEvent(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -542,15 +559,17 @@ public abstract class L2Script extends Quest
 		FortSiegeListener listener = new FortSiegeListener()
 		FortSiegeListener listener = new FortSiegeListener()
 		{
 		{
 			@Override
 			@Override
-			public boolean onStart(FortSiege fortSiege)
+			public boolean onStart(FortSiegeEvent event)
 			{
 			{
-				return onFortSiegeEvent(fortSiege, EventStage.start);
+				event.setStage(EventStage.START);
+				return onFortSiegeEvent(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public void onEnd(FortSiege fortSiege)
+			public void onEnd(FortSiegeEvent event)
 			{
 			{
-				onFortSiegeEvent(fortSiege, EventStage.end);
+				event.setStage(EventStage.END);
+				onFortSiegeEvent(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -580,21 +599,23 @@ public abstract class L2Script extends Quest
 		SiegeListener listener = new SiegeListener()
 		SiegeListener listener = new SiegeListener()
 		{
 		{
 			@Override
 			@Override
-			public boolean onStart(Siege siege)
+			public boolean onStart(SiegeEvent event)
 			{
 			{
-				return onSiegeEvent(siege, EventStage.start);
+				event.setStage(EventStage.START);
+				return onSiegeEvent(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public void onEnd(Siege siege)
+			public void onEnd(SiegeEvent event)
 			{
 			{
-				onSiegeEvent(siege, EventStage.end);
+				event.setStage(EventStage.END);
+				onSiegeEvent(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public void onControlChange(Siege siege)
+			public void onControlChange(SiegeEvent event)
 			{
 			{
-				onCastleControlChange(siege);
+				onCastleControlChange(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -631,25 +652,25 @@ public abstract class L2Script extends Quest
 			@Override
 			@Override
 			public void onBegin()
 			public void onBegin()
 			{
 			{
-				onTvtEvent(EventStage.start);
+				onTvtEvent(EventStage.START);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public void onKill(L2PcInstance killed, L2PcInstance killer, TvTEventTeam killerTeam)
+			public void onKill(TvtKillEvent event)
 			{
 			{
-				onTvtKill(killed, killer, killerTeam);
+				onTvtKill(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
 			public void onEnd()
 			public void onEnd()
 			{
 			{
-				onTvtEvent(EventStage.end);
+				onTvtEvent(EventStage.END);
 			}
 			}
 			
 			
 			@Override
 			@Override
 			public void onRegistrationStart()
 			public void onRegistrationStart()
 			{
 			{
-				onTvtEvent(EventStage.registration_begin);
+				onTvtEvent(EventStage.REGISTRATION_BEGIN);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -679,15 +700,15 @@ public abstract class L2Script extends Quest
 		AugmentListener listener = new AugmentListener()
 		AugmentListener listener = new AugmentListener()
 		{
 		{
 			@Override
 			@Override
-			public boolean onAugment(L2ItemInstance item, L2Augmentation augmentation)
+			public boolean onAugment(AugmentEvent event)
 			{
 			{
-				return onItemAugment(item, augmentation, true);
+				return onItemAugment(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onRemoveAugment(L2ItemInstance item, L2Augmentation augmentation)
+			public boolean onRemoveAugment(AugmentEvent event)
 			{
 			{
-				return onItemAugment(item, augmentation, false);
+				return onItemAugment(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -718,15 +739,15 @@ public abstract class L2Script extends Quest
 		{
 		{
 			
 			
 			@Override
 			@Override
-			public boolean onDrop(L2ItemInstance item, L2PcInstance dropper, int x, int y, int z)
+			public boolean onDrop(ItemDropEvent event)
 			{
 			{
-				return onItemDrop(item, dropper, x, y, z);
+				return onItemDrop(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onPickup(L2ItemInstance item, L2PcInstance picker, int x, int y, int z)
+			public boolean onPickup(ItemPickupEvent event)
 			{
 			{
-				return onItemPickup(item, picker, x, y, z);
+				return onItemPickup(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -758,9 +779,9 @@ public abstract class L2Script extends Quest
 		PlayerLevelListener listener = new PlayerLevelListener(player)
 		PlayerLevelListener listener = new PlayerLevelListener(player)
 		{
 		{
 			@Override
 			@Override
-			public void levelChanged(L2PcInstance player, int oldLevel, int newLevel)
+			public void levelChanged(PlayerLevelChangeEvent event)
 			{
 			{
-				onPlayerLevelChange(player, oldLevel, newLevel);
+				onPlayerLevelChange(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -794,9 +815,9 @@ public abstract class L2Script extends Quest
 		ProfessionChangeListener listener = new ProfessionChangeListener(player)
 		ProfessionChangeListener listener = new ProfessionChangeListener(player)
 		{
 		{
 			@Override
 			@Override
-			public void professionChanged(L2PcInstance player, boolean isSubClass, L2PcTemplate template)
+			public void professionChanged(ProfessionChangeEvent event)
 			{
 			{
-				onProfessionChange(player, isSubClass, template);
+				onProfessionChange(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -830,9 +851,9 @@ public abstract class L2Script extends Quest
 		EquipmentListener listener = new EquipmentListener(player)
 		EquipmentListener listener = new EquipmentListener(player)
 		{
 		{
 			@Override
 			@Override
-			public boolean onEquip(L2ItemInstance item, boolean isEquipped)
+			public boolean onEquip(EquipmentEvent event)
 			{
 			{
-				return onItemEquip(player, item, isEquipped);
+				return onItemEquip(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -864,15 +885,15 @@ public abstract class L2Script extends Quest
 		HennaListener listener = new HennaListener()
 		HennaListener listener = new HennaListener()
 		{
 		{
 			@Override
 			@Override
-			public boolean onAddHenna(L2PcInstance player, L2HennaInstance henna)
+			public boolean onAddHenna(HennaEvent event)
 			{
 			{
-				return onHennaModify(player, henna, true);
+				return onHennaModify(event);
 			}
 			}
 			
 			
 			@Override
 			@Override
-			public boolean onRemoveHenna(L2PcInstance player, L2HennaInstance henna)
+			public boolean onRemoveHenna(HennaEvent event)
 			{
 			{
-				return onHennaModify(player, henna, false);
+				return onHennaModify(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -906,27 +927,27 @@ public abstract class L2Script extends Quest
 			ItemTracker listener = new ItemTracker(itemIds)
 			ItemTracker listener = new ItemTracker(itemIds)
 			{
 			{
 				@Override
 				@Override
-				public void onDrop(L2ItemInstance item, L2PcInstance player)
+				public void onDrop(ItemDropEvent event)
 				{
 				{
-					onItemTrackerEvent(item, player, null, ItemTrackerEvent.drop);
+					onItemTrackerEvent(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public void onAddToInventory(L2ItemInstance item, L2PcInstance player)
+				public void onAddToInventory(AddToInventoryEvent event)
 				{
 				{
-					onItemTrackerEvent(item, player, null, ItemTrackerEvent.add_to_inventory);
+					onItemTrackerEvent(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public void onDestroy(L2ItemInstance item, L2PcInstance player)
+				public void onDestroy(ItemDestroyEvent event)
 				{
 				{
-					onItemTrackerEvent(item, player, null, ItemTrackerEvent.destroy);
+					onItemTrackerEvent(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public void onTransfer(L2ItemInstance item, L2PcInstance player, ItemContainer target)
+				public void onTransfer(ItemTransferEvent event)
 				{
 				{
-					onItemTrackerEvent(item, player, target, ItemTrackerEvent.transfer);
+					onItemTrackerEvent(event);
 				}
 				}
 			};
 			};
 			_listeners.add(listener);
 			_listeners.add(listener);
@@ -961,9 +982,9 @@ public abstract class L2Script extends Quest
 			{
 			{
 				
 				
 				@Override
 				@Override
-				public boolean onCreate(int itemId, L2PcInstance player)
+				public boolean onCreate(ItemCreateEvent event)
 				{
 				{
-					return onItemCreate(itemId, player);
+					return onItemCreate(event);
 				}
 				}
 			};
 			};
 			_listeners.add(listener);
 			_listeners.add(listener);
@@ -997,15 +1018,16 @@ public abstract class L2Script extends Quest
 			TransformListener listener = new TransformListener(player)
 			TransformListener listener = new TransformListener(player)
 			{
 			{
 				@Override
 				@Override
-				public boolean onTransform(L2Transformation transformation)
+				public boolean onTransform(TransformEvent event)
 				{
 				{
-					return onPlayerTransform(player, transformation, true);
+					event.setTransforming(true);
+					return onPlayerTransform(event);
 				}
 				}
 				
 				
 				@Override
 				@Override
-				public boolean onUntransform(L2Transformation transformation)
+				public boolean onUntransform(TransformEvent event)
 				{
 				{
-					return onPlayerTransform(player, transformation, false);
+					return onPlayerTransform(event);
 				}
 				}
 			};
 			};
 			_listeners.add(listener);
 			_listeners.add(listener);
@@ -1040,9 +1062,9 @@ public abstract class L2Script extends Quest
 		ChatFilterListener listener = new ChatFilterListener()
 		ChatFilterListener listener = new ChatFilterListener()
 		{
 		{
 			@Override
 			@Override
-			public String onTalk(String text, L2PcInstance origin, ChatTargetType targetType)
+			public String onTalk(ChatEvent event)
 			{
 			{
-				return filterChat(text, origin, targetType);
+				return filterChat(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -1072,9 +1094,9 @@ public abstract class L2Script extends Quest
 		ChatListener listener = new ChatListener()
 		ChatListener listener = new ChatListener()
 		{
 		{
 			@Override
 			@Override
-			public void onTalk(String text, L2PcInstance origin, String target, ChatTargetType targetType)
+			public void onTalk(ChatEvent event)
 			{
 			{
-				onPlayerTalk(text, origin, target, targetType);
+				onPlayerTalk(event);
 			}
 			}
 		};
 		};
 		_listeners.add(listener);
 		_listeners.add(listener);
@@ -1117,22 +1139,20 @@ public abstract class L2Script extends Quest
 	
 	
 	/**
 	/**
 	 * Fired when a L2Character registered with addAttackNotify is either attacked or attacks another L2Character
 	 * Fired when a L2Character registered with addAttackNotify is either attacked or attacks another L2Character
-	 * @param target
-	 * @param attacker
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onAttack(L2Character target, L2Character attacker)
+	public boolean onAttack(AttackEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
 	
 	
 	/**
 	/**
 	 * Fired when a L2Character registered with addNotifyDeath is either killed or kills another L2Character
 	 * Fired when a L2Character registered with addNotifyDeath is either killed or kills another L2Character
-	 * @param killer
-	 * @param victim
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onDeath(L2Character killer, L2Character victim)
+	public boolean onDeath(DeathEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1140,21 +1160,19 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a SKillUseListener gets triggered.<br>
 	 * Fired when a SKillUseListener gets triggered.<br>
 	 * Register using addSkillUseNotify()
 	 * Register using addSkillUseNotify()
-	 * @param skill
-	 * @param caster
-	 * @param targets
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onUseSkill(L2Skill skill, L2Character caster, L2Object[] targets)
+	public boolean onUseSkill(SkillUseEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
 	
 	
 	/**
 	/**
 	 * Fired when a clan is created Register the listener using addClanCreationLevelUpNotify()
 	 * Fired when a clan is created Register the listener using addClanCreationLevelUpNotify()
-	 * @param clan
+	 * @param event
 	 */
 	 */
-	public void onClanCreated(L2Clan clan)
+	public void onClanCreated(ClanCreationEvent event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1162,11 +1180,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a clan levels up<br>
 	 * Fired when a clan levels up<br>
 	 * Register the listener using addClanCreationLevelUpListener()
 	 * Register the listener using addClanCreationLevelUpListener()
-	 * @param clan
-	 * @param oldLevel
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanLeveledUp(L2Clan clan, int oldLevel)
+	public boolean onClanLeveledUp(ClanLevelUpEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1174,11 +1191,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player joins a clan<br>
 	 * Fired when a player joins a clan<br>
 	 * Register the listener with addClanJoinLeaveNotify()<br>
 	 * Register the listener with addClanJoinLeaveNotify()<br>
-	 * @param player
-	 * @param clan
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanJoin(L2PcInstance player, L2Clan clan)
+	public boolean onClanJoin(ClanJoinEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1186,11 +1202,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player leaves a clan<br>
 	 * Fired when a player leaves a clan<br>
 	 * Register the listener with addClanJoinLeaveNotify()<br>
 	 * Register the listener with addClanJoinLeaveNotify()<br>
-	 * @param playerObjId
-	 * @param clan
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanLeave(int playerObjId, L2Clan clan)
+	public boolean onClanLeave(ClanLeaveEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1198,11 +1213,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a clan leader is changed for another<br>
 	 * Fired when a clan leader is changed for another<br>
 	 * Register the listener with addClanJoinLeaveNotify()<br>
 	 * Register the listener with addClanJoinLeaveNotify()<br>
-	 * @param player
-	 * @param clan
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanLeaderChange(L2PcInstance player, L2Clan clan)
+	public boolean onClanLeaderChange(ClanLeaderChangeEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1210,12 +1224,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is added to a clan warehouse<br>
 	 * Fired when an item is added to a clan warehouse<br>
 	 * Register the listener with addClanWarehouseNotify(L2Clan)
 	 * Register the listener with addClanWarehouseNotify(L2Clan)
-	 * @param process
-	 * @param item
-	 * @param actor
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanWarehouseAddItem(String process, L2ItemInstance item, L2PcInstance actor)
+	public boolean onClanWarehouseAddItem(ClanWarehouseAddItemEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1223,13 +1235,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is deleted from a clan warehouse<br>
 	 * Fired when an item is deleted from a clan warehouse<br>
 	 * Register the listener with addClanWarehouseNotify(L2Clan)
 	 * Register the listener with addClanWarehouseNotify(L2Clan)
-	 * @param process
-	 * @param item
-	 * @param count
-	 * @param actor
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanWarehouseDeleteItem(String process, L2ItemInstance item, long count, L2PcInstance actor)
+	public boolean onClanWarehouseDeleteItem(ClanWarehouseDeleteItemEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1237,14 +1246,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is transfered from/to a clan warehouse<br>
 	 * Fired when an item is transfered from/to a clan warehouse<br>
 	 * Register the listener with addClanWarehouseNotify(L2Clan)
 	 * Register the listener with addClanWarehouseNotify(L2Clan)
-	 * @param process
-	 * @param item
-	 * @param count
-	 * @param target
-	 * @param actor
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanWarehouseTransferItem(String process, L2ItemInstance item, long count, ItemContainer target, L2PcInstance actor)
+	public boolean onClanWarehouseTransferItem(ClanWarehouseTransferEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1252,12 +1257,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a clan war starts or ends<br>
 	 * Fired when a clan war starts or ends<br>
 	 * Register the listener witn addClanWarNotify()
 	 * Register the listener witn addClanWarNotify()
-	 * @param clan1
-	 * @param clan2
-	 * @param stage
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onClanWarEvent(L2Clan clan1, L2Clan clan2, EventStage stage)
+	public boolean onClanWarEvent(ClanWarEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1265,11 +1268,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a fort siege starts or ends<br>
 	 * Fired when a fort siege starts or ends<br>
 	 * Register using addFortSiegeNotify()
 	 * Register using addFortSiegeNotify()
-	 * @param fortSiege
-	 * @param stage
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onFortSiegeEvent(FortSiege fortSiege, EventStage stage)
+	public boolean onFortSiegeEvent(FortSiegeEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1277,11 +1279,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a castle siege starts or ends<br>
 	 * Fired when a castle siege starts or ends<br>
 	 * Register using addSiegeNotify()
 	 * Register using addSiegeNotify()
-	 * @param siege
-	 * @param stage
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onSiegeEvent(Siege siege, EventStage stage)
+	public boolean onSiegeEvent(SiegeEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1289,9 +1290,9 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when the control of a castle changes during a siege<br>
 	 * Fired when the control of a castle changes during a siege<br>
 	 * Register using addSiegeNotify()
 	 * Register using addSiegeNotify()
-	 * @param siege
+	 * @param event
 	 */
 	 */
-	public void onCastleControlChange(Siege siege)
+	public void onCastleControlChange(SiegeEvent event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1309,11 +1310,9 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Notifies that a player was killed during TvT<br>
 	 * Notifies that a player was killed during TvT<br>
 	 * Register using addTvtNotify()
 	 * Register using addTvtNotify()
-	 * @param killed
-	 * @param killer
-	 * @param killerTeam
+	 * @param event
 	 */
 	 */
-	public void onTvtKill(L2PcInstance killed, L2PcInstance killer, TvTEventTeam killerTeam)
+	public void onTvtKill(TvtKillEvent event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1321,12 +1320,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * triggered when an item is augmented or when the augmentation is removed<br>
 	 * triggered when an item is augmented or when the augmentation is removed<br>
 	 * Register using addItemAugmentNotify()
 	 * Register using addItemAugmentNotify()
-	 * @param item
-	 * @param augmentation
-	 * @param augment -> false = remove augment
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onItemAugment(L2ItemInstance item, L2Augmentation augmentation, boolean augment)
+	public boolean onItemAugment(AugmentEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1334,14 +1331,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is dropped by a player<br>
 	 * Fired when an item is dropped by a player<br>
 	 * Register using addItemDropPickupNotify()
 	 * Register using addItemDropPickupNotify()
-	 * @param item
-	 * @param dropper
-	 * @param x
-	 * @param y
-	 * @param z
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onItemDrop(L2ItemInstance item, L2PcInstance dropper, int x, int y, int z)
+	public boolean onItemDrop(ItemDropEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1349,14 +1342,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is picked up by a player<br>
 	 * Fired when an item is picked up by a player<br>
 	 * Register using addItemDropPickupNotify()
 	 * Register using addItemDropPickupNotify()
-	 * @param item
-	 * @param dropper
-	 * @param x
-	 * @param y
-	 * @param z
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onItemPickup(L2ItemInstance item, L2PcInstance dropper, int x, int y, int z)
+	public boolean onItemPickup(ItemPickupEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1364,12 +1353,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is equipped or unequipped<br>
 	 * Fired when an item is equipped or unequipped<br>
 	 * Register using addEquipmentNotify()
 	 * Register using addEquipmentNotify()
-	 * @param player
-	 * @param item
-	 * @param isEquipped
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onItemEquip(L2PcInstance player, L2ItemInstance item, boolean isEquipped)
+	public boolean onItemEquip(EquipmentEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1377,11 +1364,9 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player's level changes<br>
 	 * Fired when a player's level changes<br>
 	 * Register using addPlayerLevelNotify(player)
 	 * Register using addPlayerLevelNotify(player)
-	 * @param player
-	 * @param oldLevel
-	 * @param newLevel
+	 * @param event
 	 */
 	 */
-	public void onPlayerLevelChange(L2PcInstance player, int oldLevel, int newLevel)
+	public void onPlayerLevelChange(PlayerLevelChangeEvent event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1389,11 +1374,9 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player changes profession<br>
 	 * Fired when a player changes profession<br>
 	 * Register using addProfessionChangeNotify(player)
 	 * Register using addProfessionChangeNotify(player)
-	 * @param player
-	 * @param isSubClass
-	 * @param template
+	 * @param event
 	 */
 	 */
-	public void onProfessionChange(L2PcInstance player, boolean isSubClass, L2PcTemplate template)
+	public void onProfessionChange(ProfessionChangeEvent event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1401,12 +1384,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player's henna changes (add/remove)<br>
 	 * Fired when a player's henna changes (add/remove)<br>
 	 * Register using addHennaNotify()
 	 * Register using addHennaNotify()
-	 * @param player
-	 * @param henna
-	 * @param add -> false = remove
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onHennaModify(L2PcInstance player, L2HennaInstance henna, boolean add)
+	public boolean onHennaModify(HennaEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1414,12 +1395,9 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item on the item tracker list has an event<br>
 	 * Fired when an item on the item tracker list has an event<br>
 	 * Register using addItemTracker(itemIds)
 	 * Register using addItemTracker(itemIds)
-	 * @param item
-	 * @param player
-	 * @param target
 	 * @param event
 	 * @param event
 	 */
 	 */
-	public void onItemTrackerEvent(L2ItemInstance item, L2PcInstance player, ItemContainer target, ItemTrackerEvent event)
+	public void onItemTrackerEvent(L2Event event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1427,11 +1405,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when an item is created<br>
 	 * Fired when an item is created<br>
 	 * Register using addNewItemNotify(itemIds)
 	 * Register using addNewItemNotify(itemIds)
-	 * @param itemId
-	 * @param player
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onItemCreate(int itemId, L2PcInstance player)
+	public boolean onItemCreate(ItemCreateEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1439,12 +1416,10 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player transforms/untransforms<br>
 	 * Fired when a player transforms/untransforms<br>
 	 * Register using addTransformNotify(player)
 	 * Register using addTransformNotify(player)
-	 * @param player
-	 * @param transformation
-	 * @param isTransforming -> false = untransform
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean onPlayerTransform(L2PcInstance player, L2Transformation transformation, boolean isTransforming)
+	public boolean onPlayerTransform(TransformEvent event)
 	{
 	{
 		return true;
 		return true;
 	}
 	}
@@ -1453,12 +1428,10 @@ public abstract class L2Script extends Quest
 	 * Allows for custom chat filtering<br>
 	 * Allows for custom chat filtering<br>
 	 * Fired each time a player writes something in any form of chat<br>
 	 * Fired each time a player writes something in any form of chat<br>
 	 * Register using addPlayerChatFilter()
 	 * Register using addPlayerChatFilter()
-	 * @param text
-	 * @param origin
-	 * @param targetType
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public String filterChat(String text, L2PcInstance origin, ChatTargetType targetType)
+	public String filterChat(ChatEvent event)
 	{
 	{
 		return "";
 		return "";
 	}
 	}
@@ -1466,12 +1439,9 @@ public abstract class L2Script extends Quest
 	/**
 	/**
 	 * Fired when a player writes some text in chat<br>
 	 * Fired when a player writes some text in chat<br>
 	 * Register using addPlayerTalkNotify()
 	 * Register using addPlayerTalkNotify()
-	 * @param text
-	 * @param origin
-	 * @param target
-	 * @param targetType
+	 * @param event
 	 */
 	 */
-	public void onPlayerTalk(String text, L2PcInstance origin, String target, ChatTargetType targetType)
+	public void onPlayerTalk(ChatEvent event)
 	{
 	{
 		
 		
 	}
 	}
@@ -1480,17 +1450,18 @@ public abstract class L2Script extends Quest
 	
 	
 	public enum EventStage
 	public enum EventStage
 	{
 	{
-		start,
-		end,
-		event_stopped,
-		registration_begin
+		START,
+		END,
+		EVENT_STOPPED,
+		REGISTRATION_BEGIN,
+		CONTROL_CHANGE
 	}
 	}
 	
 	
 	public enum ItemTrackerEvent
 	public enum ItemTrackerEvent
 	{
 	{
-		drop,
-		add_to_inventory,
-		destroy,
-		transfer
+		DROP,
+		ADD_TO_INVENTORY,
+		DESTROY,
+		TRANSFER
 	}
 	}
 }
 }

+ 5 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/character/AttackListener.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.character;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.character;
 
 
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AttackEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -38,17 +39,17 @@ public abstract class AttackListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * The player just attacked another character
 	 * The player just attacked another character
-	 * @param target
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onAttack(L2Character target);
+	public abstract boolean onAttack(AttackEvent event);
 	
 	
 	/**
 	/**
 	 * The player was just attacked by another character
 	 * The player was just attacked by another character
-	 * @param attacker
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean isAttacked(L2Character attacker);
+	public abstract boolean isAttacked(AttackEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 5 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/character/DeathListener.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.character;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.character;
 
 
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.scripting.scriptengine.events.DeathEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -44,20 +45,18 @@ public abstract class DeathListener extends L2JListener
 	/**
 	/**
 	 * The character just killed the target<br>
 	 * The character just killed the target<br>
 	 * If you use this listener as global, use: onDeathGlobal()
 	 * If you use this listener as global, use: onDeathGlobal()
-	 * @param target
-	 * @param killer
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onKill(L2Character target, L2Character killer);
+	public abstract boolean onKill(DeathEvent event);
 	
 	
 	/**
 	/**
 	 * The character was just killed by the target<br>
 	 * The character was just killed by the target<br>
 	 * If you use this listener as global, use: onDeathGlobal()
 	 * If you use this listener as global, use: onDeathGlobal()
-	 * @param target
-	 * @param killer
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onDeath(L2Character target, L2Character killer);
+	public abstract boolean onDeath(DeathEvent event);
 	
 	
 	/**
 	/**
 	 * Returns the character
 	 * Returns the character

+ 3 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/character/SkillUseListener.java

@@ -14,9 +14,8 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.character;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.character;
 
 
-import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.scripting.scriptengine.events.SkillUseEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -56,12 +55,10 @@ public abstract class SkillUseListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * A L2Character just cast a skill
 	 * A L2Character just cast a skill
-	 * @param skill
-	 * @param character
-	 * @param targets
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onSkillUse(L2Skill skill, L2Character character, L2Object[] targets);
+	public abstract boolean onSkillUse(SkillUseEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 6 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanCreationListener.java

@@ -15,6 +15,8 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 
 
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanCreationEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLevelUpEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -30,17 +32,16 @@ public abstract class ClanCreationListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Fired when a clan is created
 	 * Fired when a clan is created
-	 * @param clan
+	 * @param event 
 	 */
 	 */
-	public abstract void onClanCreate(L2Clan clan);
+	public abstract void onClanCreate(ClanCreationEvent event);
 	
 	
 	/**
 	/**
 	 * Fired when a clan levels up
 	 * Fired when a clan levels up
-	 * @param clan
-	 * @param oldLevel
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onClanLevelUp(L2Clan clan, int oldLevel);
+	public abstract boolean onClanLevelUp(ClanLevelUpEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 9 - 11
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanMembershipListener.java

@@ -15,7 +15,9 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 
 
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanJoinEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLeaderChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanLeaveEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -31,28 +33,24 @@ public abstract class ClanMembershipListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * A player just joined the clan
 	 * A player just joined the clan
-	 * @param player
-	 * @param clan
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onJoin(L2PcInstance player, L2Clan clan);
+	public abstract boolean onJoin(ClanJoinEvent event);
 	
 	
 	/**
 	/**
 	 * A player just left the clan
 	 * A player just left the clan
-	 * @param playerObjId
-	 * @param clan
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onLeave(int playerObjId, L2Clan clan);
+	public abstract boolean onLeave(ClanLeaveEvent event);
 	
 	
 	/**
 	/**
 	 * Fired when the clan leader changes
 	 * Fired when the clan leader changes
-	 * @param clan
-	 * @param newLeader
-	 * @param oldLeader
+	 * @param event
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onLeaderChange(L2Clan clan, L2PcInstance newLeader, L2PcInstance oldLeader);
+	public abstract boolean onLeaderChange(ClanLeaderChangeEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 5 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanWarListener.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 
 
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -30,19 +31,17 @@ public abstract class ClanWarListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Clan war just started
 	 * Clan war just started
-	 * @param clan1
-	 * @param clan2
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onWarStart(L2Clan clan1, L2Clan clan2);
+	public abstract boolean onWarStart(ClanWarEvent event);
 	
 	
 	/**
 	/**
 	 * Clan war just ended
 	 * Clan war just ended
-	 * @param clan1
-	 * @param clan2
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onWarEnd(L2Clan clan1, L2Clan clan2);
+	public abstract boolean onWarEnd(ClanWarEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 9 - 18
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/clan/ClanWarehouseListener.java

@@ -15,10 +15,10 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.clan;
 
 
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2Clan;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseAddItemEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseDeleteItemEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseTransferEvent;
 import com.l2jserver.gameserver.model.itemcontainer.ClanWarehouse;
 import com.l2jserver.gameserver.model.itemcontainer.ClanWarehouse;
-import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -36,33 +36,24 @@ public abstract class ClanWarehouseListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * An item was just added
 	 * An item was just added
-	 * @param process
-	 * @param item
-	 * @param actor
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onAddItem(String process, L2ItemInstance item, L2PcInstance actor);
+	public abstract boolean onAddItem(ClanWarehouseAddItemEvent event);
 	
 	
 	/**
 	/**
 	 * An item was just deleted
 	 * An item was just deleted
-	 * @param process
-	 * @param item
-	 * @param count
-	 * @param actor
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onDeleteItem(String process, L2ItemInstance item, long count, L2PcInstance actor);
+	public abstract boolean onDeleteItem(ClanWarehouseDeleteItemEvent event);
 	
 	
 	/**
 	/**
 	 * An item was just transfered
 	 * An item was just transfered
-	 * @param process
-	 * @param item
-	 * @param count
-	 * @param target
-	 * @param actor
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onTransferItem(String process, L2ItemInstance item, long count, ItemContainer target, L2PcInstance actor);
+	public abstract boolean onTransferItem(ClanWarehouseTransferEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 5 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/events/FortSiegeListener.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.events;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.events;
 
 
 import com.l2jserver.gameserver.model.entity.FortSiege;
 import com.l2jserver.gameserver.model.entity.FortSiege;
+import com.l2jserver.gameserver.scripting.scriptengine.events.FortSiegeEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -29,16 +30,16 @@ public abstract class FortSiegeListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Fired when a fort siege starts
 	 * Fired when a fort siege starts
-	 * @param fortSiege
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onStart(FortSiege fortSiege);
+	public abstract boolean onStart(FortSiegeEvent event);
 	
 	
 	/**
 	/**
 	 * Fired when a fort siege ends
 	 * Fired when a fort siege ends
-	 * @param fortSiege
+	 * @param event 
 	 */
 	 */
-	public abstract void onEnd(FortSiege fortSiege);
+	public abstract void onEnd(FortSiegeEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 7 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/events/SiegeListener.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.events;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.events;
 
 
 import com.l2jserver.gameserver.model.entity.Siege;
 import com.l2jserver.gameserver.model.entity.Siege;
+import com.l2jserver.gameserver.scripting.scriptengine.events.SiegeEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -29,22 +30,22 @@ public abstract class SiegeListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Fired when a siege starts
 	 * Fired when a siege starts
-	 * @param siege
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onStart(Siege siege);
+	public abstract boolean onStart(SiegeEvent event);
 	
 	
 	/**
 	/**
 	 * Fired when a siege ends
 	 * Fired when a siege ends
-	 * @param siege
+	 * @param event 
 	 */
 	 */
-	public abstract void onEnd(Siege siege);
+	public abstract void onEnd(SiegeEvent event);
 	
 	
 	/**
 	/**
 	 * Fired when the control of the castle change hands during the siege
 	 * Fired when the control of the castle change hands during the siege
-	 * @param siege
+	 * @param event 
 	 */
 	 */
-	public abstract void onControlChange(Siege siege);
+	public abstract void onControlChange(SiegeEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 3 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/events/TvTListener.java

@@ -14,9 +14,8 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.events;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.events;
 
 
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.entity.TvTEventTeam;
+import com.l2jserver.gameserver.scripting.scriptengine.events.TvtKillEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -37,11 +36,9 @@ public abstract class TvTListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * A player has been killed
 	 * A player has been killed
-	 * @param killed
-	 * @param killer
-	 * @param killerTeam
+	 * @param event 
 	 */
 	 */
-	public abstract void onKill(L2PcInstance killed, L2PcInstance killer, TvTEventTeam killerTeam);
+	public abstract void onKill(TvtKillEvent event);
 	
 	
 	/**
 	/**
 	 * Fired when a TvT event ends
 	 * Fired when a TvT event ends

+ 5 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/AugmentListener.java

@@ -14,8 +14,8 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
-import com.l2jserver.gameserver.model.L2Augmentation;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AugmentEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -31,19 +31,17 @@ public abstract class AugmentListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Triggered when a L2ItemInstance is augmented
 	 * Triggered when a L2ItemInstance is augmented
-	 * @param item
-	 * @param augmentation
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onAugment(L2ItemInstance item, L2Augmentation augmentation);
+	public abstract boolean onAugment(AugmentEvent event);
 	
 	
 	/**
 	/**
 	 * Triggered when a L2ItemInstance's augmentation is removed
 	 * Triggered when a L2ItemInstance's augmentation is removed
-	 * @param item
-	 * @param augmentation
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onRemoveAugment(L2ItemInstance item, L2Augmentation augmentation);
+	public abstract boolean onRemoveAugment(AugmentEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 6 - 13
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/DropListener.java

@@ -14,8 +14,9 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDropEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemPickupEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -31,25 +32,17 @@ public abstract class DropListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * The item was dropped
 	 * The item was dropped
-	 * @param item
-	 * @param dropper
-	 * @param x
-	 * @param y
-	 * @param z
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onDrop(L2ItemInstance item, L2PcInstance dropper, int x, int y, int z);
+	public abstract boolean onDrop(ItemDropEvent event);
 	
 	
 	/**
 	/**
 	 * The item was picked up
 	 * The item was picked up
-	 * @param item
-	 * @param picker
-	 * @param x
-	 * @param y
-	 * @param z
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onPickup(L2ItemInstance item, L2PcInstance picker, int x, int y, int z);
+	public abstract boolean onPickup(ItemPickupEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/EquipmentListener.java

@@ -15,7 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.EquipmentEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -44,11 +44,10 @@ public abstract class EquipmentListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * The item has just been equipped or unequipped
 	 * The item has just been equipped or unequipped
-	 * @param item
-	 * @param isEquipped
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onEquip(L2ItemInstance item, boolean isEquipped);
+	public abstract boolean onEquip(EquipmentEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 5 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/HennaListener.java

@@ -15,7 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.items.instance.L2HennaInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.HennaEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -30,19 +30,17 @@ public abstract class HennaListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * The given henna has just been added to the player
 	 * The given henna has just been added to the player
-	 * @param player
-	 * @param henna
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onAddHenna(L2PcInstance player, L2HennaInstance henna);
+	public abstract boolean onAddHenna(HennaEvent event);
 	
 	
 	/**
 	/**
 	 * The given henna has just been removed from the player
 	 * The given henna has just been removed from the player
-	 * @param player
-	 * @param henna
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onRemoveHenna(L2PcInstance player, L2HennaInstance henna);
+	public abstract boolean onRemoveHenna(HennaEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 12 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/ItemTracker.java

@@ -16,10 +16,11 @@ package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
 import java.util.List;
 import java.util.List;
 
 
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.itemcontainer.ItemContainer;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.AddToInventoryEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDestroyEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemDropEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemTransferEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -40,32 +41,27 @@ public abstract class ItemTracker extends L2JListener
 	
 	
 	/**
 	/**
 	 * The item has been dropped
 	 * The item has been dropped
-	 * @param item
-	 * @param player
+	 * @param event 
 	 */
 	 */
-	public abstract void onDrop(L2ItemInstance item, L2PcInstance player);
+	public abstract void onDrop(ItemDropEvent event);
 	
 	
 	/**
 	/**
 	 * The item has been added to the inventory
 	 * The item has been added to the inventory
-	 * @param item
-	 * @param player
+	 * @param event 
 	 */
 	 */
-	public abstract void onAddToInventory(L2ItemInstance item, L2PcInstance player);
+	public abstract void onAddToInventory(AddToInventoryEvent event);
 	
 	
 	/**
 	/**
 	 * Notifies when the item is destroyed
 	 * Notifies when the item is destroyed
-	 * @param item
-	 * @param player
+	 * @param event 
 	 */
 	 */
-	public abstract void onDestroy(L2ItemInstance item, L2PcInstance player);
+	public abstract void onDestroy(ItemDestroyEvent event);
 	
 	
 	/**
 	/**
 	 * Notifies when the item is transfered or traded
 	 * Notifies when the item is transfered or traded
-	 * @param item
-	 * @param player
-	 * @param target
+	 * @param event 
 	 */
 	 */
-	public abstract void onTransfer(L2ItemInstance item, L2PcInstance player, ItemContainer target);
+	public abstract void onTransfer(ItemTransferEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/NewItemListener.java

@@ -17,7 +17,7 @@ package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 import java.util.List;
 import java.util.List;
 
 
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ItemCreateEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -36,11 +36,10 @@ public abstract class NewItemListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * An item corresponding to the itemIds list was just created
 	 * An item corresponding to the itemIds list was just created
-	 * @param itemId
-	 * @param player
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onCreate(int itemId, L2PcInstance player);
+	public abstract boolean onCreate(ItemCreateEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 3 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/PlayerDespawnListener.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.clientpackets.RequestRestart;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -33,11 +34,13 @@ public abstract class PlayerDespawnListener extends L2JListener
 	public void register()
 	public void register()
 	{
 	{
 		L2PcInstance.addDespawnListener(this);
 		L2PcInstance.addDespawnListener(this);
+		RequestRestart.addDespawnListener(this);
 	}
 	}
 	
 	
 	@Override
 	@Override
 	public void unregister()
 	public void unregister()
 	{
 	{
 		L2PcInstance.removeDespawnListener(this);
 		L2PcInstance.removeDespawnListener(this);
+		RequestRestart.removeDespawnListener(this);
 	}
 	}
 }
 }

+ 6 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/PlayerLevelListener.java

@@ -16,6 +16,7 @@ package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.stat.PcStat;
 import com.l2jserver.gameserver.model.actor.stat.PcStat;
+import com.l2jserver.gameserver.scripting.scriptengine.events.PlayerLevelChangeEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -36,7 +37,11 @@ public abstract class PlayerLevelListener extends L2JListener
 		register();
 		register();
 	}
 	}
 	
 	
-	public abstract void levelChanged(L2PcInstance player, int oldLevel, int newLevel);
+	/**
+	 * The player's level has changed
+	 * @param event
+	 */
+	public abstract void levelChanged(PlayerLevelChangeEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 6 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/ProfessionChangeListener.java

@@ -15,7 +15,7 @@
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.templates.L2PcTemplate;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ProfessionChangeEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -36,7 +36,11 @@ public abstract class ProfessionChangeListener extends L2JListener
 		register();
 		register();
 	}
 	}
 	
 	
-	public abstract void professionChanged(L2PcInstance player, boolean isSubClass, L2PcTemplate template);
+	/**
+	 * Player's profession has changed
+	 * @param event
+	 */
+	public abstract void professionChanged(ProfessionChangeEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 5 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/player/TransformListener.java

@@ -14,8 +14,8 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.player;
 
 
-import com.l2jserver.gameserver.model.L2Transformation;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.scripting.scriptengine.events.TransformEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -36,17 +36,17 @@ public abstract class TransformListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * The player just transformed
 	 * The player just transformed
-	 * @param transformation
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onTransform(L2Transformation transformation);
+	public abstract boolean onTransform(TransformEvent event);
 	
 	
 	/**
 	/**
 	 * The player just untransformed
 	 * The player just untransformed
-	 * @param transformation
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract boolean onUntransform(L2Transformation transformation);
+	public abstract boolean onUntransform(TransformEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 3 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/talk/ChatFilterListener.java

@@ -14,10 +14,9 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.talk;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.talk;
 
 
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ChatEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
-import com.l2jserver.gameserver.scripting.scriptengine.listeners.talk.ChatListener.ChatTargetType;
 
 
 /**
 /**
  * Listener to intercept player chat.<br>
  * Listener to intercept player chat.<br>
@@ -34,12 +33,10 @@ public abstract class ChatFilterListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Allows for filtering the text
 	 * Allows for filtering the text
-	 * @param text
-	 * @param origin
-	 * @param targetType
+	 * @param event 
 	 * @return
 	 * @return
 	 */
 	 */
-	public abstract String onTalk(String text, L2PcInstance origin, ChatTargetType targetType);
+	public abstract String onTalk(ChatEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 3 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/listeners/talk/ChatListener.java

@@ -14,8 +14,8 @@
  */
  */
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.talk;
 package com.l2jserver.gameserver.scripting.scriptengine.listeners.talk;
 
 
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ChatEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 import com.l2jserver.gameserver.scripting.scriptengine.impl.L2JListener;
 
 
 /**
 /**
@@ -33,12 +33,9 @@ public abstract class ChatListener extends L2JListener
 	
 	
 	/**
 	/**
 	 * Notifies that the given text was sent from player1(origin) to a given target.<br>
 	 * Notifies that the given text was sent from player1(origin) to a given target.<br>
-	 * @param text
-	 * @param origin
-	 * @param target
-	 * @param targetType
+	 * @param event 
 	 */
 	 */
-	public abstract void onTalk(String text, L2PcInstance origin, String target, ChatTargetType targetType);
+	public abstract void onTalk(ChatEvent event);
 	
 	
 	@Override
 	@Override
 	public void register()
 	public void register()

+ 52 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/scripting/scriptengine/package-info.java (revision 0)

@@ -0,0 +1,52 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.scripting.scriptengine;
+
+/**
+ * Implementation of L2J's script engine.<br>
+ * <br>
+ * PLEASE READ, THIS IS IMPORTANT INFORMATION!<br>
+ * <br>
+ * Do NOT instantiate L2JListener directly! Use its children!<br>
+ * <br>
+ * This package contains a ton of listeners to facilitate the creation and maintenance of datapack and core scripts.<br>
+ * These listeners can handle most of the player's actions, interactions, etc...<br <br>
+ * The use of abstract class instead of interface is because it was necessary to code some hard-coded functions/variables to make it easier and more straight-forward to understand and use for developers with less experience.<br>
+ * <br>
+ * The listeners are automatically registered once they are instantiated. This means that you do not need to call the object.addListener() method, it is done automatically for you! However, you will need to use the unregister() method if you wish to unregister it.<br>
+ * <br>
+ * NOTE: You can use the boolean return of the listeners as a "code blocker". Which means that if your method returns "false" the method that triggered the listener will stop. (i.e.: you can stop something from happening using this)<br>
+ * <br>
+ * Example of use of one of these classes:
+ * ChatListener listener = new ChatListener(){
+                               @Override
+                               public String filter(String text, L2PcInstance origin, ChatTargetType targetType)
+                               {
+                                       String modifiedText = text
+                                       if(!origin.isGM())
+                                       {
+                                               modifiedText = someFilterMethod(modifiedText);
+                                       }
+                                       return modifiedText;
+                               }
+                              
+                               @Override
+                               public boolean onTalk(String text, L2PcInstance origin, String target, ChatTargetType targetType)
+                               {
+                                       // DO SOMETHING...
+                               }
+                       };
+ * @author TheOne
+ */