diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index 08a41bec..99ceaa98 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -110,7 +110,6 @@
-
diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs
index 2b615e58..00608e38 100644
--- a/FFXIVClassic Map Server/actors/chara/player/Player.cs
+++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs
@@ -88,7 +88,10 @@ namespace FFXIVClassic_Map_Server.Actors
74000, 78000, 81000, 85000, 89000, 92000, 96000, 100000, 100000, 110000}; //Level <= 50
//Event Related
- private Stack runningEvents = new Stack();
+ public uint currentEventOwner = 0;
+ public string currentEventName = "";
+
+ public Coroutine currentEventRunning;
//Player Info
public uint destinationZone;
@@ -1675,24 +1678,19 @@ namespace FFXIVClassic_Map_Server.Actors
public void StartEvent(Actor owner, EventStartPacket start)
{
- GameEvent startedEvent = new GameEvent(start.triggerName, this, owner);
- runningEvents.Push(startedEvent);
- LuaEngine.GetInstance().EventStarted(startedEvent, start);
+ LuaEngine.GetInstance().EventStarted(this, owner, start);
}
public void UpdateEvent(EventUpdatePacket update)
{
- GameEvent updateEvent = runningEvents.Peek();
- LuaEngine.GetInstance().OnEventUpdate(updateEvent, update.luaParams);
- }
+ LuaEngine.GetInstance().OnEventUpdate(this, update.luaParams);
+ }
public void KickEvent(Actor actor, string conditionName, params object[] parameters)
{
if (actor == null)
return;
- runningEvents.Pop();
-
List lParams = LuaUtils.CreateLuaParamList(parameters);
SubPacket spacket = KickEventPacket.BuildPacket(actorId, actor.actorId, 0x75dc1705, conditionName, lParams);
spacket.DebugPrintSubPacket();
@@ -1704,8 +1702,6 @@ namespace FFXIVClassic_Map_Server.Actors
if (actor == null)
return;
- runningEvents.Pop();
-
List lParams = LuaUtils.CreateLuaParamList(parameters);
SubPacket spacket = KickEventPacket.BuildPacket(actorId, actor.actorId, unknown, conditionName, lParams);
spacket.DebugPrintSubPacket();
@@ -1715,22 +1711,25 @@ namespace FFXIVClassic_Map_Server.Actors
public void SetEventStatus(Actor actor, string conditionName, bool enabled, byte unknown)
{
QueuePacket(packets.send.actor.events.SetEventStatus.BuildPacket(actor.actorId, enabled, unknown, conditionName));
- }
+ }
public void RunEventFunction(string functionName, params object[] parameters)
{
List lParams = LuaUtils.CreateLuaParamList(parameters);
- SubPacket spacket = RunEventFunctionPacket.BuildPacket(actorId, runningEvents.Peek().GetOwnerActorId(), runningEvents.Peek().GetEventName(), functionName, lParams);
+ SubPacket spacket = RunEventFunctionPacket.BuildPacket(actorId, currentEventOwner, currentEventName, functionName, lParams);
spacket.DebugPrintSubPacket();
QueuePacket(spacket);
}
public void EndEvent()
{
- GameEvent endingEvent = runningEvents.Pop();
- SubPacket p = EndEventPacket.BuildPacket(actorId, endingEvent.GetOwnerActorId(), endingEvent.GetEventName());
+ SubPacket p = EndEventPacket.BuildPacket(actorId, currentEventOwner, currentEventName);
p.DebugPrintSubPacket();
QueuePacket(p);
+
+ currentEventOwner = 0;
+ currentEventName = "";
+ currentEventRunning = null;
}
public void SendInstanceUpdate()
diff --git a/FFXIVClassic Map Server/dataobjects/GameEvent.cs b/FFXIVClassic Map Server/dataobjects/GameEvent.cs
deleted file mode 100644
index f0815a83..00000000
--- a/FFXIVClassic Map Server/dataobjects/GameEvent.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using FFXIVClassic_Map_Server.Actors;
-using MoonSharp.Interpreter;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace FFXIVClassic_Map_Server.dataobjects
-{
- class GameEvent
- {
- private string eventName;
- private uint ownerActorId;
- private Player playerActor;
- private Actor ownerActor;
- private Coroutine coroutine;
- private uint hashCode;
-
- public GameEvent(String eventName, Player player, Actor owner)
- {
- this.eventName = eventName;
- this.playerActor = player;
- this.ownerActor = owner;
- this.ownerActorId = owner.actorId;
- hashCode = (uint)new Tuple(player.actorId, owner.actorId, eventName).GetHashCode();
- }
-
- public string GetEventName()
- {
- return eventName;
- }
-
- public uint GetOwnerActorId()
- {
- return ownerActorId;
- }
-
- public Player GetPlayerActor()
- {
- return playerActor;
- }
-
- public Actor GetOwnerActor()
- {
- return ownerActor;
- }
-
- public Coroutine GetCoroutine()
- {
- return coroutine;
- }
-
- public void SetCoroutine(Coroutine coroutine)
- {
- this.coroutine = coroutine;
- }
-
- public uint GetUniqueEventId()
- {
- return hashCode;
- }
-
- }
-}
diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs
index bdf3b515..0659bdde 100644
--- a/FFXIVClassic Map Server/lua/LuaEngine.cs
+++ b/FFXIVClassic Map Server/lua/LuaEngine.cs
@@ -36,6 +36,7 @@ namespace FFXIVClassic_Map_Server.lua
private Timer luaTimer;
+
private LuaEngine()
{
UserData.RegistrationPolicy = InteropRegistrationPolicy.Automatic;
@@ -101,31 +102,31 @@ namespace FFXIVClassic_Map_Server.lua
}
foreach (Coroutine key in mToAwake)
- {
+ {
DynValue value = key.Resume();
ResolveResume(null, key, value);
}
}
- public void OnEventUpdate(GameEvent gEvent, List args)
+ public void OnEventUpdate(Player player, List args)
{
- if (mSleepingOnPlayerEvent.ContainsKey(gEvent.GetUniqueEventId()))
+ if (mSleepingOnPlayerEvent.ContainsKey(player.actorId))
{
try
{
- Coroutine coroutine = mSleepingOnPlayerEvent[gEvent.GetUniqueEventId()];
- mSleepingOnPlayerEvent.Remove(gEvent.GetUniqueEventId());
+ Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId];
+ mSleepingOnPlayerEvent.Remove(player.actorId);
DynValue value = coroutine.Resume(LuaUtils.CreateLuaParamObjectList(args));
- ResolveResume(gEvent.GetPlayerActor(), coroutine, value);
+ ResolveResume(player, coroutine, value);
}
catch (ScriptRuntimeException e)
{
- LuaEngine.SendError(gEvent.GetPlayerActor(), String.Format("OnEventUpdated: {0}", e.DecoratedMessage));
- gEvent.GetPlayerActor().EndEvent();
+ LuaEngine.SendError(player, String.Format("OnEventUpdated: {0}", e.DecoratedMessage));
+ player.EndEvent();
}
}
else
- gEvent.GetPlayerActor().EndEvent();
+ player.EndEvent();
}
private static string GetScriptPath(Actor target)
@@ -214,7 +215,7 @@ namespace FFXIVClassic_Map_Server.lua
private void CallLuaFunctionNpc(Player player, Npc target, string funcName, bool optional, params object[] args)
{
- object[] args2 = new object[args.Length + (player == null ? 1:2)];
+ object[] args2 = new object[args.Length + (player == null ? 1 : 2)];
Array.Copy(args, 0, args2, (player == null ? 1 : 2), args.Length);
if (player != null)
{
@@ -265,7 +266,7 @@ namespace FFXIVClassic_Map_Server.lua
catch (ScriptRuntimeException e)
{
SendError(player, e.DecoratedMessage);
- }
+ }
}
}
@@ -290,9 +291,9 @@ namespace FFXIVClassic_Map_Server.lua
if (script != null)
{
if (!script.Globals.Get(funcName).IsNil())
- {
+ {
//Run Script
- DynValue result = script.Call(script.Globals[funcName], args2);
+ DynValue result = script.Call(script.Globals[funcName], args2);
List lparams = LuaUtils.CreateLuaParamList(result);
return lparams;
}
@@ -322,7 +323,7 @@ namespace FFXIVClassic_Map_Server.lua
DynValue result = script.Call(script.Globals[funcName], args);
List lparams = LuaUtils.CreateLuaParamList(result);
return lparams;
- }
+ }
}
return null;
}
@@ -361,36 +362,36 @@ namespace FFXIVClassic_Map_Server.lua
{
if (!(target is Area) && !optional)
SendError(player, String.Format("Could not find script for actor {0}.", target.GetName()));
- }
+ }
}
- public void EventStarted(GameEvent gEvent, EventStartPacket eventStart)
+ public void EventStarted(Player player, Actor target, EventStartPacket eventStart)
{
List lparams = eventStart.luaParams;
lparams.Insert(0, new LuaParam(2, eventStart.triggerName));
-
- if (mSleepingOnPlayerEvent.ContainsKey(gEvent.GetUniqueEventId()))
+ if (mSleepingOnPlayerEvent.ContainsKey(player.actorId))
{
- Coroutine coroutine = mSleepingOnPlayerEvent[gEvent.GetUniqueEventId()];
- mSleepingOnPlayerEvent.Remove(gEvent.GetUniqueEventId());
+ Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId];
+ mSleepingOnPlayerEvent.Remove(player.actorId);
- try{
+ try
+ {
DynValue value = coroutine.Resume();
- ResolveResume(null, coroutine, value);
+ ResolveResume(null, coroutine, value);
}
catch (ScriptRuntimeException e)
{
- LuaEngine.SendError(gEvent.GetPlayerActor(), String.Format("OnEventStarted: {0}", e.DecoratedMessage));
- gEvent.GetPlayerActor().EndEvent();
- }
+ LuaEngine.SendError(player, String.Format("OnEventStarted: {0}", e.DecoratedMessage));
+ player.EndEvent();
+ }
}
else
{
- if (gEvent.GetOwnerActor() is Director)
- ((Director)gEvent.GetOwnerActor()).OnEventStart(gEvent.GetPlayerActor(), LuaUtils.CreateLuaParamObjectList(lparams));
+ if (target is Director)
+ ((Director)target).OnEventStart(player, LuaUtils.CreateLuaParamObjectList(lparams));
else
- CallLuaFunction(gEvent.GetPlayerActor(), gEvent.GetOwnerActor(), "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams));
- }
+ CallLuaFunction(player, target, "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams));
+ }
}
public DynValue ResolveResume(Player player, Coroutine coroutine, DynValue value)
@@ -399,8 +400,8 @@ namespace FFXIVClassic_Map_Server.lua
return value;
if (player != null && value.String != null && value.String.Equals("_WAIT_EVENT"))
- {
- GetInstance().AddWaitEventCoroutine(player, coroutine);
+ {
+ GetInstance().AddWaitEventCoroutine(player, coroutine);
}
else if (value.Tuple != null && value.Tuple.Length >= 1 && value.Tuple[0].String != null)
{
@@ -428,7 +429,7 @@ namespace FFXIVClassic_Map_Server.lua
{
bool playerNull = player == null;
if (playerNull && param.Length >= 3)
- player = Server.GetWorldManager().GetPCInWorld(param[1] + " " + param[2]);
+ player = Server.GetWorldManager().GetPCInWorld(param[1] + " " + param[2]);
// load from scripts/commands/gm/ directory
var path = String.Format("./scripts/commands/gm/{0}.lua", cmd.ToLower());
@@ -611,9 +612,8 @@ namespace FFXIVClassic_Map_Server.lua
return;
List SendError = new List();
player.SendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message);
- player.EndEvent();
+ player.QueuePacket(EndEventPacket.BuildPacket(player.actorId, player.currentEventOwner, player.currentEventName));
}
-
+
}
}
-
\ No newline at end of file