rendered paste bodyIndex: 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<Object> args = new ArrayList<Object>();
+ args.add(getObjectId()); // self
+ AIScriptManager.getInstance().callFunc(getAiClass(),"onEventSpawned",args);
+
super.OnSpawn();
try
{
@@ -199,11 +205,21 @@
public void notifyMinionDied(L2MinionInstance minion)
{
+ ArrayList<Object> args = new ArrayList<Object>();
+ args.add(getObjectId()); // self
+ args.add(minion.getObjectId());
+ AIScriptManager.getInstance().callFunc(getAiClass(),"onEventMinionDied",args);
+
minionList.removeSpawnedMinion(minion);
}
public void notifyMinionSpawned(L2MinionInstance minion)
{
+ ArrayList<Object> args = new ArrayList<Object>();
+ 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 <multisell|skill|npc>");
+ activeChar.sendMessage("Usage: //reload <multisell|skill|npc|ai>");
}
}
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<Object> args = new ArrayList<Object>();
+ 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<Object> args = new ArrayList<Object>();
+ 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<Object> args = new ArrayList<Object>();
+ 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 @@
<include name="bsh-2.0.jar"/>
<include name="jython.jar"/>
<include name="javolution.jar"/>
+ <include name="FScript.jar"/>
</fileset>
</path>
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 @@
<classpathentry kind="lib" path="lib/mysql-connector-java-3.1.10-bin.jar"/>
<classpathentry kind="lib" path="lib/javolution.jar"/>
<classpathentry kind="lib" path="lib/sqljdbc.jar"/>
+ <classpathentry kind="lib" path="lib/FScript.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>