diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index f5673e7c..dcd48884 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -126,10 +126,7 @@
-
-
-
diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs
index 90330659..5a175e6d 100644
--- a/FFXIVClassic Map Server/PacketProcessor.cs
+++ b/FFXIVClassic Map Server/PacketProcessor.cs
@@ -119,16 +119,16 @@ namespace FFXIVClassic_Map_Server
case 0x0006:
LangaugeCodePacket langCode = new LangaugeCodePacket(subpacket.data);
session = mServer.AddSession(subpacket.header.targetId);
- LuaEngine.OnBeginLogin(session.GetActor());
+
+ LuaEngine.GetInstance().CallLuaFunction(session.GetActor(), session.GetActor(), "onBeginLogin");
Server.GetWorldManager().DoZoneIn(session.GetActor(), true, 0x1);
- LuaEngine.OnLogin(session.GetActor());
+ LuaEngine.GetInstance().CallLuaFunction(session.GetActor(), session.GetActor(), "onLogin");
session.languageCode = langCode.languageCode;
break;
//Unknown - Happens a lot at login, then once every time player zones
case 0x0007:
- subpacket.DebugPrintSubPacket();
- ZoneInCompletePacket zoneInCompletePacket = new ZoneInCompletePacket(subpacket.data);
- LuaEngine.OnZoneInDone(session.GetActor());
+ //subpacket.DebugPrintSubPacket();
+ ZoneInCompletePacket zoneInCompletePacket = new ZoneInCompletePacket(subpacket.data);
break;
//Update Position
case 0x00CA:
diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs
index b7ac9fa2..d39bcce0 100644
--- a/FFXIVClassic Map Server/Server.cs
+++ b/FFXIVClassic Map Server/Server.cs
@@ -23,8 +23,7 @@ namespace FFXIVClassic_Map_Server
private Socket mServerSocket;
private Dictionary mSessionList = new Dictionary();
- private LuaEngine mLuaEngine = new LuaEngine();
-
+
private static CommandProcessor mCommandProcessor = new CommandProcessor();
private static ZoneConnection mWorldConnection = new ZoneConnection();
private static WorldManager mWorldManager;
diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs
index 2a1951d6..43fb8c8a 100644
--- a/FFXIVClassic Map Server/WorldManager.cs
+++ b/FFXIVClassic Map Server/WorldManager.cs
@@ -447,12 +447,12 @@ namespace FFXIVClassic_Map_Server
player.SendMessage(0x20, "", "Doing Seamless Zone Change");
- LuaEngine.OnZoneIn(player);
+ LuaEngine.GetInstance().CallLuaFunction(player, newZone, "onZoneIn");
}
//Adds a second zone to pull actors from. Used for an improved seamless zone change.
public void MergeZones(Player player, uint mergedZoneId)
- {
+ {
//Add player to new zone and update
Zone mergedZone = GetZone(mergedZoneId);
@@ -467,7 +467,7 @@ namespace FFXIVClassic_Map_Server
player.SendMessage(0x20, "", "Merging Zones");
- LuaEngine.OnZoneIn(player);
+ LuaEngine.GetInstance().CallLuaFunction(player, mergedZone, "onZoneIn");
}
//Checks all seamless bounding boxes in region to see if player needs to merge or zonechange
@@ -602,7 +602,7 @@ namespace FFXIVClassic_Map_Server
if (newArea is PrivateArea)
player.SendGameMessage(GetActor(), 34108, 0x20);
- LuaEngine.OnZoneIn(player);
+ LuaEngine.GetInstance().CallLuaFunction(player, newArea, "onZoneIn");
}
//Moves actor within zone to spawn position
@@ -680,7 +680,7 @@ namespace FFXIVClassic_Map_Server
player.playerSession.LockUpdates(false);
- LuaEngine.OnZoneIn(player);
+ LuaEngine.GetInstance().CallLuaFunction(player, playerArea, "onZoneIn");
}
public void ReloadZone(uint zoneId)
diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs
index fac897d6..9f0fbede 100644
--- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs
+++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs
@@ -88,7 +88,7 @@ namespace FFXIVClassic_Map_Server.Actors
List lParams;
Player player = Server.GetWorldManager().GetPCInWorld(playerActorId);
- lParams = DoActorInit(player);
+ lParams = LuaEngine.GetInstance().CallLuaFunctionForReturn(player, this, "init");
if (uniqueIdentifier.Equals("1"))
{
@@ -372,159 +372,14 @@ namespace FFXIVClassic_Map_Server.Actors
this.eventConditions = conditions;
}
- public List DoActorInit(Player player)
+ public void DoOnActorSpawn(Player player)
{
- LuaScript parent = null, child = null;
-
- if (File.Exists("./scripts/base/" + classPath + ".lua"))
- parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
-
- if (zone is PrivateArea)
- {
- if (File.Exists(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier)))
- child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier));
- }
- else
- {
- if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
- child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
- }
-
- if (parent == null && child == null)
- {
- LuaEngine.SendError(player, String.Format("ERROR: Could not find script for actor {0}.", GetName()));
- return null;
- }
-
- DynValue result;
-
- if (child != null && child.Globals["init"] != null)
- result = child.Call(child.Globals["init"], this);
- else if (parent != null && parent.Globals["init"] != null)
- result = parent.Call(parent.Globals["init"], this);
- else
- return null;
-
- List lparams = LuaUtils.CreateLuaParamList(result);
- return lparams;
- }
-
- public Coroutine GetEventStartCoroutine(Player player)
- {
- LuaScript parent = null, child = null;
-
- if (File.Exists("./scripts/base/" + classPath + ".lua"))
- parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
- if (zone is PrivateArea)
- {
- if (File.Exists(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier)))
- child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier));
- }
- else
- {
- if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
- child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
- }
-
- if (parent == null && child == null)
- {
- LuaEngine.SendError(player, String.Format("ERROR: Could not find script for actor {0}.", GetName()));
- return null;
- }
-
- //Run Script
- Coroutine coroutine;
-
- if (child != null && !child.Globals.Get("onEventStarted").IsNil())
- coroutine = child.CreateCoroutine(child.Globals["onEventStarted"]).Coroutine;
- else if (parent.Globals.Get("onEventStarted") != null && !parent.Globals.Get("onEventStarted").IsNil())
- coroutine = parent.CreateCoroutine(parent.Globals["onEventStarted"]).Coroutine;
- else
- return null;
-
- return coroutine;
- }
-
- public void DoEventUpdate(Player player, EventUpdatePacket eventUpdate)
- {
- LuaScript parent = null, child = null;
-
- if (File.Exists("./scripts/base/" + classPath + ".lua"))
- parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
- if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
- child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
-
- if (parent == null && child == null)
- {
- //LuaEngine.SendError(player, String.Format("ERROR: Could not find script for actor {0}.", GetName()));
- return;
- }
-
- //Have to do this to combine LuaParams
- List