Index: C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/actor/instance/L2MonsterInstance.java =================================================================== --- C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/actor/instance/L2MonsterInstance.java (revision 1363) +++ C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/actor/instance/L2MonsterInstance.java (working copy) @@ -18,6 +18,7 @@ */ package net.sf.l2j.gameserver.model.actor.instance; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; @@ -28,6 +29,7 @@ import net.sf.l2j.gameserver.model.L2Attackable; import net.sf.l2j.gameserver.model.L2Character; import net.sf.l2j.gameserver.model.actor.monster.MonsterKnownList; +import net.sf.l2j.gameserver.script.fscript.AIScriptManager; import net.sf.l2j.gameserver.templates.L2NpcTemplate; import net.sf.l2j.gameserver.util.MinionList; @@ -100,6 +102,10 @@ public void OnSpawn() { + ArrayList args = new ArrayList(); + args.add(getObjectId()); // self + AIScriptManager.getInstance().callFunc(getAiClass(),"onEventSpawned",args); + super.OnSpawn(); try { @@ -199,11 +205,21 @@ public void notifyMinionDied(L2MinionInstance minion) { + ArrayList args = new ArrayList(); + args.add(getObjectId()); // self + args.add(minion.getObjectId()); + AIScriptManager.getInstance().callFunc(getAiClass(),"onEventMinionDied",args); + minionList.removeSpawnedMinion(minion); } public void notifyMinionSpawned(L2MinionInstance minion) { + ArrayList args = new ArrayList(); + args.add(getObjectId()); // self + args.add(minion.getObjectId()); + AIScriptManager.getInstance().callFunc(getAiClass(),"onEventMinionSpawned",args); + minionList.addSpawnedMinion(minion); } Index: C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java =================================================================== --- C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (revision 1363) +++ C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (working copy) @@ -28,6 +28,7 @@ import net.sf.l2j.gameserver.model.L2Multisell; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.script.fscript.AIScriptManager; import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.serverpackets.PlaySound; import net.sf.l2j.gameserver.serverpackets.ServerBasePacket; @@ -200,10 +201,15 @@ NpcTable.getInstance().reloadAllNpc(); activeChar.sendMessage("npcs reloaded"); } + else if(type.equals("ai")) + { + AIScriptManager.getInstance().init(); + activeChar.sendMessage("AI reloaded"); + } } catch(Exception e) { - activeChar.sendMessage("Usage: //reload "); + activeChar.sendMessage("Usage: //reload "); } } Index: C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/GameServer.java (revision 1363) +++ C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/GameServer.java (working copy) @@ -34,6 +34,7 @@ import net.sf.l2j.gameserver.handler.SkillHandler; import net.sf.l2j.gameserver.handler.UserCommandHandler; import net.sf.l2j.gameserver.handler.VoicedCommandHandler; +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAI; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAdmin; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAnnouncements; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminBan; @@ -66,9 +67,9 @@ import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminRepairChar; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminRes; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminRideWyvern; -import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSiege; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminShop; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminShutdown; +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSiege; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSkill; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSpawn; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget; @@ -132,8 +133,8 @@ import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.quest.Quest; import net.sf.l2j.gameserver.script.faenor.FaenorScriptEngine; +import net.sf.l2j.gameserver.taskmanager.TaskManager; import net.sf.l2j.status.Status; -import net.sf.l2j.gameserver.taskmanager.TaskManager; /** * This class ... @@ -376,6 +377,7 @@ _adminCommandHandler.registerAdminCommandHandler(new AdminLogin()); _adminCommandHandler.registerAdminCommandHandler(new AdminCache()); _adminCommandHandler.registerAdminCommandHandler(new AdminZone()); + _adminCommandHandler.registerAdminCommandHandler(new AdminAI()); //_adminCommandHandler.registerAdminCommandHandler(new AdminRadar()); _log.config("AdminCommandHandler: Loaded " + _adminCommandHandler.size() + " handlers."); Index: C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/ai/L2AttackableAI.java =================================================================== --- C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/ai/L2AttackableAI.java (revision 1363) +++ C:/eclipse/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/ai/L2AttackableAI.java (working copy) @@ -22,6 +22,7 @@ import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; +import java.util.ArrayList; import java.util.Collection; import java.util.Random; import java.util.concurrent.Future; @@ -44,6 +45,7 @@ import net.sf.l2j.gameserver.model.actor.instance.L2MonsterInstance; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.script.fscript.AIScriptManager; /** @@ -258,6 +260,11 @@ */ protected void onIntentionAttack(L2Character target) { + ArrayList args = new ArrayList(); + args.add(_accessor.getActor().getObjectId()); // self + args.add(target.getObjectId()); // attack target + AIScriptManager.getInstance().callFunc(_accessor.getActor().getAiClass(),"onIntentionAttack",args); + // Calculate the attack timeout _attack_timeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks(); @@ -376,7 +383,7 @@ if (_actor instanceof L2GuardInstance) { // Order to the L2GuardInstance to return to its home location because there's no target to attack - ((L2GuardInstance)_actor).returnHome(); + //((L2GuardInstance)_actor).returnHome(); } // If this is a festival monster, then it remains in the same location. @@ -695,6 +702,11 @@ */ protected void onEvtAttacked(L2Character attacker) { + ArrayList args = new ArrayList(); + args.add(_accessor.getActor().getObjectId()); // self + args.add(attacker.getObjectId()); // attacker + AIScriptManager.getInstance().callFunc(_accessor.getActor().getAiClass(),"onEventAttacked",args); + // Calculate the attack timeout _attack_timeout = MAX_ATTACK_TIMEOUT + GameTimeController.getGameTicks(); @@ -737,6 +749,13 @@ { L2Attackable me = (L2Attackable)_actor; + ArrayList args = new ArrayList(); + args.add(_accessor.getActor().getObjectId()); // self + args.add(target.getObjectId()); // potential victim :) + args.add(aggro); // aggression rate + AIScriptManager.getInstance().callFunc(_accessor.getActor().getAiClass(),"onEventAggression",args); + + // Add the target to the actor _aggroList or update hate if already present me.addDamageHate(target, 0, aggro); Index: C:/eclipse/workspace/L2_GameServer_c4/build.xml =================================================================== --- C:/eclipse/workspace/L2_GameServer_c4/build.xml (revision 1363) +++ C:/eclipse/workspace/L2_GameServer_c4/build.xml (working copy) @@ -41,6 +41,7 @@ + Index: C:/eclipse/workspace/L2_GameServer_c4/.classpath =================================================================== --- C:/eclipse/workspace/L2_GameServer_c4/.classpath (revision 1363) +++ C:/eclipse/workspace/L2_GameServer_c4/.classpath (working copy) @@ -11,5 +11,6 @@ +