mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	New style of scripting for better complex menus.
This commit is contained in:
		| @@ -273,8 +273,8 @@ namespace FFXIVClassic_Map_Server | ||||
|                                     } | ||||
|                                 }                                     | ||||
|                             } | ||||
|                              | ||||
|                             LuaEngine.DoActorOnEventStarted(player.GetActor(), ownerActor, eventStart); | ||||
|  | ||||
|                             player.GetActor().StartEvent(ownerActor, eventStart); | ||||
|  | ||||
|                             Program.Log.Debug("\n===Event START===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nEvent Starter: {4}\nParams: {5}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.val1, eventStart.val2, eventStart.triggerName, LuaUtils.DumpParams(eventStart.luaParams)); | ||||
|                             break; | ||||
| @@ -286,7 +286,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                             subpacket.DebugPrintSubPacket(); | ||||
|                             EventUpdatePacket eventUpdate = new EventUpdatePacket(subpacket.data); | ||||
|                             Program.Log.Debug("\n===Event UPDATE===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nStep: 0x{4:X}\nParams: {5}", eventUpdate.actorID, eventUpdate.scriptOwnerActorID, eventUpdate.val1, eventUpdate.val2, eventUpdate.step, LuaUtils.DumpParams(eventUpdate.luaParams)); | ||||
|  | ||||
|                             /* | ||||
|                             //Is it a static actor? If not look in the player's instance | ||||
|                             Actor updateOwnerActor = Server.GetStaticActors(player.GetActor().currentEventOwner); | ||||
|                             if (updateOwnerActor == null) | ||||
| @@ -299,8 +299,10 @@ namespace FFXIVClassic_Map_Server | ||||
|                                 if (updateOwnerActor == null) | ||||
|                                     break; | ||||
|                             } | ||||
|                             */ | ||||
|                             player.GetActor().UpdateEvent(eventUpdate); | ||||
|  | ||||
|                             LuaEngine.DoActorOnEventUpdated(player.GetActor(), updateOwnerActor, eventUpdate); | ||||
|                             //LuaEngine.DoActorOnEventUpdated(player.GetActor(), updateOwnerActor, eventUpdate); | ||||
|                              | ||||
|                             break; | ||||
|                         case 0x012F: | ||||
|   | ||||
| @@ -181,6 +181,11 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             return BasePacket.CreatePacket(propPacketUtil.Done(), true, false); | ||||
|         } | ||||
|  | ||||
|         public string GetUniqueId() | ||||
|         { | ||||
|             return uniqueIdentifier; | ||||
|         } | ||||
|  | ||||
|         public uint GetActorClassId() | ||||
|         { | ||||
|             return actorClassId; | ||||
| @@ -322,7 +327,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             return lparams;           | ||||
|         } | ||||
|  | ||||
|         public void DoEventStart(Player player, EventStartPacket eventStart) | ||||
|         public Coroutine GetEventStartCoroutine(Player player) | ||||
|         { | ||||
|             Script parent = null, child = null; | ||||
|  | ||||
| @@ -331,31 +336,23 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             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) | ||||
|             if (parent == null && child == null) | ||||
|             { | ||||
|                 LuaEngine.SendError(player, String.Format("ERROR: Could not find script for actor {0}.", GetName())); | ||||
|                 return; | ||||
|                 return null; | ||||
|             } | ||||
|  | ||||
|             //Have to do this to combine LuaParams | ||||
|             List<Object> objects = new List<Object>(); | ||||
|             objects.Add(player); | ||||
|             objects.Add(this); | ||||
|             objects.Add(eventStart.triggerName); | ||||
|  | ||||
|             if (eventStart.luaParams != null) | ||||
|                 objects.AddRange(LuaUtils.CreateLuaParamObjectList(eventStart.luaParams)); | ||||
|  | ||||
|             //Run Script | ||||
|             DynValue result; | ||||
|             Coroutine coroutine;             | ||||
|  | ||||
|             if (child != null && !child.Globals.Get("onEventStarted").IsNil()) | ||||
|                 result = child.Call(child.Globals["onEventStarted"], objects.ToArray()); | ||||
|                 coroutine = child.CreateCoroutine(child.Globals["onEventStarted"]).Coroutine; | ||||
|             else if (!parent.Globals.Get("onEventStarted").IsNil()) | ||||
|                 result = parent.Call(parent.Globals["onEventStarted"], objects.ToArray()); | ||||
|                 coroutine = parent.CreateCoroutine(parent.Globals["onEventStarted"]).Coroutine; | ||||
|             else | ||||
|                 return; | ||||
|                 return null; | ||||
|  | ||||
|             return coroutine; | ||||
|         } | ||||
|  | ||||
|         public void DoEventUpdate(Player player, EventUpdatePacket eventUpdate) | ||||
|   | ||||
| @@ -15,6 +15,8 @@ using FFXIVClassic_Map_Server.packets.send.player; | ||||
| using FFXIVClassic_Map_Server.utils; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using MoonSharp.Interpreter; | ||||
| using FFXIVClassic_Map_Server.packets.receive.events; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.Actors | ||||
| { | ||||
| @@ -82,8 +84,8 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|  | ||||
|         public uint currentCommand = 0; | ||||
|         public string currentCommandName = ""; | ||||
|          | ||||
|         public uint eventMenuId = 0; | ||||
|  | ||||
|         public Coroutine currentEventRunning; | ||||
|  | ||||
|         //Player Info | ||||
|         public uint[] timers = new uint[20]; | ||||
| @@ -1118,6 +1120,35 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             QueuePacket(spacket); | ||||
|         } | ||||
|  | ||||
|         public void StartEvent(Actor owner, EventStartPacket start) | ||||
|         { | ||||
|             //Have to do this to combine LuaParams | ||||
|             List<Object> objects = new List<Object>(); | ||||
|             objects.Add(this); | ||||
|             objects.Add(owner); | ||||
|             objects.Add(start.triggerName); | ||||
|  | ||||
|             if (start.luaParams != null) | ||||
|                 objects.AddRange(LuaUtils.CreateLuaParamObjectList(start.luaParams)); | ||||
|  | ||||
|             if (owner is Npc) | ||||
|             { | ||||
|                 currentEventRunning = ((Npc)owner).GetEventStartCoroutine(this); | ||||
|                 currentEventRunning.Resume(objects.ToArray()); | ||||
|             } | ||||
|             else | ||||
|                 LuaEngine.DoActorOnEventStarted(this, owner, start); | ||||
|         } | ||||
|  | ||||
|         public void UpdateEvent(EventUpdatePacket update) | ||||
|         { | ||||
|             if (currentEventRunning == null) | ||||
|                 return; | ||||
|  | ||||
|             if (currentEventRunning.State == CoroutineState.Suspended) | ||||
|                 currentEventRunning.Resume(LuaUtils.CreateLuaParamObjectList(update.luaParams)); | ||||
|         } | ||||
|  | ||||
|         public void KickEvent(Actor actor, string conditionName, params object[] parameters) | ||||
|         { | ||||
|             if (actor == null) | ||||
| @@ -1150,7 +1181,6 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|  | ||||
|             currentEventOwner = 0; | ||||
|             currentEventName = ""; | ||||
|             eventMenuId = 0; | ||||
|         } | ||||
|  | ||||
|         public void EndCommand() | ||||
| @@ -1163,16 +1193,6 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             currentCommandName = ""; | ||||
|         } | ||||
|  | ||||
|         public void SetCurrentMenuId(uint id) | ||||
|         { | ||||
|             eventMenuId = id; | ||||
|         } | ||||
|  | ||||
|         public uint GetCurrentMenuId() | ||||
|         { | ||||
|             return eventMenuId; | ||||
|         } | ||||
|  | ||||
|         public void SendInstanceUpdate() | ||||
|         { | ||||
|             | ||||
|   | ||||
| @@ -47,7 +47,7 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         | ||||
|  | ||||
|         public bool IsClientConnectionsReady() | ||||
|         { | ||||
|             return (zoneConnection != null && chatConnection != null); | ||||
| @@ -57,7 +57,7 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|         { | ||||
|             zoneConnection.Disconnect(); | ||||
|             chatConnection.Disconnect(); | ||||
|         }       | ||||
|         } | ||||
|  | ||||
|         public bool IsDisconnected() | ||||
|         { | ||||
| @@ -71,7 +71,7 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|  | ||||
|         public void QueuePacket(SubPacket subPacket, bool isAuthed, bool isEncrypted) | ||||
|         { | ||||
|                 zoneConnection.QueuePacket(subPacket, isAuthed, isEncrypted); | ||||
|             zoneConnection.QueuePacket(subPacket, isAuthed, isEncrypted); | ||||
|         } | ||||
|  | ||||
|         public Player GetActor() | ||||
| @@ -97,7 +97,7 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|         } | ||||
|  | ||||
|         public void UpdatePlayerActorPosition(float x, float y, float z, float rot, ushort moveState) | ||||
|         {             | ||||
|         { | ||||
|             playerActor.oldPositionX = playerActor.positionX; | ||||
|             playerActor.oldPositionY = playerActor.positionY; | ||||
|             playerActor.oldPositionZ = playerActor.positionZ; | ||||
| @@ -110,11 +110,11 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|             playerActor.moveState = moveState; | ||||
|  | ||||
|             GetActor().zone.UpdateActorPosition(GetActor()); | ||||
|               | ||||
|         }             | ||||
|          | ||||
|  | ||||
|         } | ||||
|  | ||||
|         public void UpdateInstance(List<Actor> list) | ||||
|         {             | ||||
|         { | ||||
|             List<BasePacket> basePackets = new List<BasePacket>(); | ||||
|             List<SubPacket> RemoveActorSubpackets = new List<SubPacket>(); | ||||
|             List<SubPacket> posUpdateSubpackets = new List<SubPacket>(); | ||||
| @@ -125,7 +125,7 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|                 if (!list.Contains(actorInstanceList[i])) | ||||
|                 { | ||||
|                     GetActor().QueuePacket(RemoveActorPacket.BuildPacket(playerActor.actorId, actorInstanceList[i].actorId)); | ||||
|                     actorInstanceList.RemoveAt(i);                     | ||||
|                     actorInstanceList.RemoveAt(i); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @@ -145,7 +145,7 @@ namespace FFXIVClassic_Map_Server.dataobjects | ||||
|                 { | ||||
|                     GetActor().QueuePacket(actor.GetSpawnPackets(playerActor.actorId, 1)); | ||||
|                     GetActor().QueuePacket(actor.GetInitPackets(playerActor.actorId)); | ||||
|                     GetActor().QueuePacket(actor.GetSetEventStatusPackets(playerActor.actorId));                    | ||||
|                     GetActor().QueuePacket(actor.GetSetEventStatusPackets(playerActor.actorId)); | ||||
|                     actorInstanceList.Add(actor); | ||||
|  | ||||
|                     if (actor is Npc) | ||||
|   | ||||
| @@ -57,13 +57,7 @@ namespace FFXIVClassic_Map_Server.lua | ||||
|         }        | ||||
|  | ||||
|         public static void DoActorOnEventStarted(Player player, Actor target, EventStartPacket eventStart) | ||||
|         { | ||||
|             if (target is Npc) | ||||
|             { | ||||
|                 ((Npc)target).DoEventStart(player, eventStart); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|         {            | ||||
|             string luaPath; | ||||
|  | ||||
|             if (target is Command) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user