diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 9a8ffaf0..1c27dec5 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -63,7 +63,7 @@ namespace FFXIVClassic_Lobby_Server byte[] reply1Data = { 0x01, 0x00, 0x00, 0x00, 0x28, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x07, 0x00, 0x00, 0x0, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7F, 0xFD, 0xFF, 0xFF, - 0x43, 0xEC, 0x00, 0xE0, 0x00, 0x0, 0x00, 0x0 + 0xE5, 0x6E, 0x01, 0xE0, 0x00, 0x0, 0x00, 0x0 }; BasePacket reply1 = new BasePacket(reply1Data); @@ -289,6 +289,10 @@ namespace FFXIVClassic_Lobby_Server if (updateOwnerActor == null) { updateOwnerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().eventCurrentOwner); + + if (player.getActor().currentDirector != null && player.getActor().eventCurrentOwner == player.getActor().currentDirector.actorId) + updateOwnerActor = player.getActor().currentDirector; + if (updateOwnerActor == null) break; } diff --git a/FFXIVClassic Map Server/actors/Actor.cs b/FFXIVClassic Map Server/actors/Actor.cs index ac5fc8a0..eab0e1fa 100644 --- a/FFXIVClassic Map Server/actors/Actor.cs +++ b/FFXIVClassic Map Server/actors/Actor.cs @@ -178,37 +178,37 @@ namespace FFXIVClassic_Map_Server.Actors if (eventConditions.talkEventConditions != null) { foreach (EventList.TalkEventCondition condition in eventConditions.talkEventConditions) - subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, 1, 1, condition.conditionName)); + subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, true, 1, condition.conditionName)); } if (eventConditions.noticeEventConditions != null) { foreach (EventList.NoticeEventCondition condition in eventConditions.noticeEventConditions) - subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, 1, 1, condition.conditionName)); + subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, true, 1, condition.conditionName)); } if (eventConditions.emoteEventConditions != null) { foreach (EventList.EmoteEventCondition condition in eventConditions.emoteEventConditions) - subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, 1, 3, condition.conditionName)); + subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, true, 3, condition.conditionName)); } if (eventConditions.pushWithCircleEventConditions != null) { foreach (EventList.PushCircleEventCondition condition in eventConditions.pushWithCircleEventConditions) - subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, 1, 2, condition.conditionName)); + subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, true, 2, condition.conditionName)); } if (eventConditions.pushWithFanEventConditions != null) { foreach (EventList.PushFanEventCondition condition in eventConditions.pushWithFanEventConditions) - subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, 1, 2, condition.conditionName)); + subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, true, 2, condition.conditionName)); } if (eventConditions.pushWithBoxEventConditions != null) { foreach (EventList.PushBoxEventCondition condition in eventConditions.pushWithBoxEventConditions) - subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, 1, 2, condition.conditionName)); + subpackets.Add(SetEventStatus.buildPacket(playerActorId, actorId, true, 2, condition.conditionName)); } return BasePacket.createPacket(subpackets, true, false); diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 611209ae..6cd22cfc 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -9,6 +9,7 @@ using FFXIVClassic_Map_Server.dataobjects.chara; using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send; using FFXIVClassic_Map_Server.packets.send.actor; +using FFXIVClassic_Map_Server.packets.send.actor.events; using FFXIVClassic_Map_Server.packets.send.actor.inventory; using FFXIVClassic_Map_Server.packets.send.Actor.inventory; using FFXIVClassic_Map_Server.packets.send.events; @@ -124,7 +125,7 @@ namespace FFXIVClassic_Map_Server.Actors public Quest[] questScenario = new Quest[16]; public Quest[] questGuildleve = new Quest[8]; - public Director currentDirector = new OpeningDirector(0x46080012); + public Director currentDirector;// = new OpeningDirector(0x46080012); public PlayerWork playerWork = new PlayerWork(); @@ -254,7 +255,10 @@ namespace FFXIVClassic_Map_Server.Actors List lParams; if (isMyPlayer(playerActorId)) { - lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, true, 0, false, timers, true); + if (currentDirector != null) + lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, true, currentDirector, 0, false, timers, true); + else + lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, true, 0, false, timers, true); } else lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, false, false, true); @@ -480,13 +484,12 @@ namespace FFXIVClassic_Map_Server.Actors } public void sendZoneInPackets(WorldManager world, ushort spawnType) - { + { queuePacket(SetMapPacket.buildPacket(actorId, zone.regionId, zone.actorId)); queuePacket(SetMusicPacket.buildPacket(actorId, zone.bgmDay, 0x01)); queuePacket(SetWeatherPacket.buildPacket(actorId, SetWeatherPacket.WEATHER_CLEAR)); - queuePacket(getSpawnPackets(actorId, spawnType)); - + queuePacket(getSpawnPackets(actorId, spawnType)); //getSpawnPackets(actorId, spawnType).debugPrintPacket(); #region grouptest @@ -561,8 +564,6 @@ namespace FFXIVClassic_Map_Server.Actors //playerSession.queuePacket(reply10); // playerSession.queuePacket(reply11); #endregion - - kickEvent(currentDirector, "noticeEvent", "noticeEvent"); } private void sendRemoveInventoryPackets(List slots) @@ -587,32 +588,6 @@ namespace FFXIVClassic_Map_Server.Actors } - /* - private void sendEquipmentPackets(List indexes) - { - int currentIndex = 0; - - InventorySetBeginPacket.buildPacket(actorId, MAXSIZE_INVENTORY_EQUIPMENT, InventorySetBeginPacket.CODE_EQUIPMENT); - - while (true) - { - if (indexes.Count - currentIndex >= 64) - queuePacket(EquipmentListX64Packet.buildPacket(actorId, indexes, ref currentIndex)); - else if (indexes.Count - currentIndex >= 32) - queuePacket(EquipmentListX32Packet.buildPacket(actorId, indexes, ref currentIndex)); - else if (indexes.Count - currentIndex >= 16) - queuePacket(EquipmentListX16Packet.buildPacket(actorId, indexes, ref currentIndex)); - else if (indexes.Count - currentIndex >= 8) - queuePacket(EquipmentListX08Packet.buildPacket(actorId, indexes, ref currentIndex)); - else if (indexes.Count - currentIndex == 1) - queuePacket(EquipmentListX01Packet.buildPacket(actorId, indexes[currentIndex])); - else - break; - } - - InventorySetEndPacket.buildPacket(actorId); - } - */ public bool isMyPlayer(uint otherActorId) { return actorId == otherActorId; @@ -1066,6 +1041,11 @@ namespace FFXIVClassic_Map_Server.Actors queuePacket(spacket); } + public void setEventStatus(Actor actor, string conditionName, bool enabled, byte unknown) + { + queuePacket(SetEventStatus.buildPacket(actorId, actor.actorId, enabled, unknown, conditionName)); + } + public void runEventFunction(string functionName, params object[] parameters) { List lParams = LuaUtils.createLuaParamList(parameters); @@ -1077,6 +1057,7 @@ namespace FFXIVClassic_Map_Server.Actors public void endEvent() { SubPacket p = EndEventPacket.buildPacket(actorId, eventCurrentOwner, eventCurrentStarter); + p.debugPrintSubPacket(); queuePacket(p); eventCurrentOwner = 0; diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs index 286542da..a9d18ee5 100644 --- a/FFXIVClassic Map Server/lua/LuaEngine.cs +++ b/FFXIVClassic Map Server/lua/LuaEngine.cs @@ -93,7 +93,9 @@ namespace FFXIVClassic_Map_Server.lua objects.Add(player); objects.Add(target); objects.Add(eventStart.triggerName); - objects.AddRange(LuaUtils.createLuaParamObjectList(eventStart.luaParams)); + + if (eventStart.luaParams != null) + objects.AddRange(LuaUtils.createLuaParamObjectList(eventStart.luaParams)); //Run Script DynValue result = script.Call(script.Globals["onEventStarted"], objects.ToArray()); @@ -110,12 +112,14 @@ namespace FFXIVClassic_Map_Server.lua public static void doActorOnEventUpdated(Player player, Actor target, EventUpdatePacket eventUpdate) { - string luaPath; + string luaPath; if (target is Command) luaPath = String.Format(FILEPATH_COMMANDS, target.getName()); + else if (target is Director) + luaPath = String.Format(FILEPATH_DIRECTORS, target.getName()); else - luaPath = String.Format(FILEPATH_NPCS, target.zoneId, target.getName()); + luaPath = String.Format(FILEPATH_NPCS, target.zoneId, target.getName()); if (File.Exists(luaPath)) { diff --git a/FFXIVClassic Map Server/packets/send/Actor/events/SetEventStatus.cs b/FFXIVClassic Map Server/packets/send/Actor/events/SetEventStatus.cs index 1c566fca..0f854ea8 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/events/SetEventStatus.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/events/SetEventStatus.cs @@ -13,7 +13,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor.events public const ushort OPCODE = 0x0136; public const uint PACKET_SIZE = 0x48; - public static SubPacket buildPacket(uint playerActorID, uint sourceActorID, uint unknown1, byte unknown2, string conditionName) + public static SubPacket buildPacket(uint playerActorID, uint sourceActorID, bool enabled, byte unknown2, string conditionName) { byte[] data = new byte[PACKET_SIZE - 0x20]; @@ -21,7 +21,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor.events { using (BinaryWriter binWriter = new BinaryWriter(mem)) { - binWriter.Write((UInt32)unknown1); + binWriter.Write((UInt32)(enabled ? 1 : 0)); binWriter.Write((Byte)unknown2); binWriter.Write(Encoding.ASCII.GetBytes(conditionName), 0, Encoding.ASCII.GetByteCount(conditionName) >= 0x24 ? 0x24 : Encoding.ASCII.GetByteCount(conditionName)); } diff --git a/FFXIVClassic Map Server/packets/send/events/KickEventPacket.cs b/FFXIVClassic Map Server/packets/send/events/KickEventPacket.cs index 3bbef23b..3fbdc1af 100644 --- a/FFXIVClassic Map Server/packets/send/events/KickEventPacket.cs +++ b/FFXIVClassic Map Server/packets/send/events/KickEventPacket.cs @@ -25,9 +25,13 @@ namespace FFXIVClassic_Map_Server.packets.send.events binWriter.Write((UInt32)playerActorId); binWriter.Write((UInt32)targetActorId); binWriter.Write((Byte)0x5); + binWriter.Write((Byte)0x87); + binWriter.Write((Byte)0xDC); + binWriter.Write((Byte)0x75); + binWriter.Write((UInt32)0x30400000); binWriter.Write(Encoding.ASCII.GetBytes(conditionName), 0, Encoding.ASCII.GetByteCount(conditionName) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(conditionName)); - binWriter.Seek(0x29, SeekOrigin.Begin); + binWriter.Seek(0x30, SeekOrigin.Begin); LuaUtils.writeLuaParams(binWriter, luaParams); }