mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Added two callbacks to the Director; onTalked and onCommand. Split the command and event starts and keep track of them separately.
This commit is contained in:
		| @@ -102,6 +102,7 @@ | ||||
|     <Compile Include="actors\chara\ParameterSave.cs" /> | ||||
|     <Compile Include="actors\chara\player\PlayerWork.cs" /> | ||||
|     <Compile Include="dataobjects\DBWorld.cs" /> | ||||
|     <Compile Include="dataobjects\Event.cs" /> | ||||
|     <Compile Include="dataobjects\InventoryItem.cs" /> | ||||
|     <Compile Include="dataobjects\ConnectedPlayer.cs" /> | ||||
|     <Compile Include="dataobjects\Item.cs" /> | ||||
| @@ -244,6 +245,7 @@ | ||||
|     <Compile Include="packets\send\supportdesk\FaqListResponsePacket.cs" /> | ||||
|     <Compile Include="packets\send\supportdesk\GMTicketPacket.cs" /> | ||||
|     <Compile Include="packets\send\supportdesk\GMTicketSentResponsePacket.cs" /> | ||||
|     <Compile Include="packets\send\_0x10Packet.cs" /> | ||||
|     <Compile Include="packets\send\_0x02Packet.cs" /> | ||||
|     <Compile Include="packets\send\_0xE2Packet.cs" /> | ||||
|     <Compile Include="packets\SubPacket.cs" /> | ||||
|   | ||||
| @@ -249,19 +249,27 @@ namespace FFXIVClassic_Lobby_Server | ||||
|                                 break; | ||||
|                             } | ||||
|                             */ | ||||
|                             player.getActor().eventCurrentOwner = eventStart.scriptOwnerActorID; | ||||
|                             player.getActor().eventCurrentStarter = eventStart.triggerName; | ||||
|  | ||||
|                             //Is it a static actor? If not look in the player's instance | ||||
|                             Actor ownerActor = Server.getStaticActors(player.getActor().eventCurrentOwner); | ||||
|                             Actor ownerActor = Server.getStaticActors(eventStart.scriptOwnerActorID); | ||||
|                             if (ownerActor != null && ownerActor is Command) | ||||
|                             { | ||||
|                                 player.getActor().currentCommand = eventStart.scriptOwnerActorID; | ||||
|                                 player.getActor().currentCommandName = eventStart.triggerName; | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 player.getActor().currentEventOwner = eventStart.scriptOwnerActorID; | ||||
|                                 player.getActor().currentEventName = eventStart.triggerName; | ||||
|                             } | ||||
|  | ||||
|                             if (ownerActor == null) | ||||
|                             { | ||||
|                                 //Is it a instance actor? | ||||
|                                 ownerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().eventCurrentOwner); | ||||
|                                 ownerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().currentEventOwner); | ||||
|                                 if (ownerActor == null) | ||||
|                                 { | ||||
|                                     //Is it a Director? | ||||
|                                     if (player.getActor().currentDirector != null && player.getActor().eventCurrentOwner == player.getActor().currentDirector.actorId) | ||||
|                                     if (player.getActor().currentDirector != null && player.getActor().currentEventOwner == player.getActor().currentDirector.actorId) | ||||
|                                         ownerActor = player.getActor().currentDirector; | ||||
|                                     else | ||||
|                                     { | ||||
| @@ -285,12 +293,12 @@ namespace FFXIVClassic_Lobby_Server | ||||
|                             Log.debug(String.Format("\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().eventCurrentOwner); | ||||
|                             Actor updateOwnerActor = Server.getStaticActors(player.getActor().currentEventOwner); | ||||
|                             if (updateOwnerActor == null) | ||||
|                             { | ||||
|                                 updateOwnerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().eventCurrentOwner); | ||||
|                                 updateOwnerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().currentEventOwner); | ||||
|  | ||||
|                                 if (player.getActor().currentDirector != null && player.getActor().eventCurrentOwner == player.getActor().currentDirector.actorId) | ||||
|                                 if (player.getActor().currentDirector != null && player.getActor().currentEventOwner == player.getActor().currentDirector.actorId) | ||||
|                                     updateOwnerActor = player.getActor().currentDirector; | ||||
|  | ||||
|                                 if (updateOwnerActor == null) | ||||
|   | ||||
| @@ -418,16 +418,22 @@ namespace FFXIVClassic_Lobby_Server | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public void doWarp(ConnectedPlayer client, string zone, string privateArea, string sx, string sy, string sz) | ||||
|         public void doWarp(ConnectedPlayer client, string zone, string privateArea, string sx, string sy, string sz, string spawnType) | ||||
|         { | ||||
|             uint zoneId; | ||||
|             float x,y,z; | ||||
|             byte sType;  | ||||
|  | ||||
|             if (zone.ToLower().StartsWith("0x")) | ||||
|                 zoneId = Convert.ToUInt32(zone, 16); | ||||
|             else | ||||
|                 zoneId = Convert.ToUInt32(zone); | ||||
|  | ||||
|             if (spawnType.ToLower().StartsWith("0x")) | ||||
|                 sType = Convert.ToByte(spawnType, 16); | ||||
|             else | ||||
|                 sType = Convert.ToByte(spawnType); | ||||
|  | ||||
|             if (mWorldManager.GetZone(zoneId) == null) | ||||
|             { | ||||
|                 if (client != null) | ||||
| @@ -440,12 +446,20 @@ namespace FFXIVClassic_Lobby_Server | ||||
|             z = Single.Parse(sz); | ||||
|  | ||||
|             if (client != null) | ||||
|                 mWorldManager.DoZoneChange(client.getActor(), zoneId, privateArea, 0x2, x, y, z, 0.0f); | ||||
|             { | ||||
|                 if (zoneId == client.getActor().zoneId) | ||||
|                     mWorldManager.DoPlayerMoveInZone(client.getActor(), x, y, z, 0.0f, sType); | ||||
|                 else | ||||
|                     mWorldManager.DoZoneChange(client.getActor(), zoneId, privateArea, sType, x, y, z, 0.0f); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 foreach (KeyValuePair<uint, ConnectedPlayer> entry in mConnectedPlayerList) | ||||
|                 { | ||||
|                     mWorldManager.DoZoneChange(entry.Value.getActor(), zoneId, privateArea, 0x2, x, y, z, 0.0f); | ||||
|                     if (zoneId == entry.Value.getActor().zoneId) | ||||
|                         mWorldManager.DoPlayerMoveInZone(entry.Value.getActor(), x, y, z, 0.0f, 0x0); | ||||
|                     else | ||||
|                         mWorldManager.DoZoneChange(entry.Value.getActor(), zoneId, privateArea, 0x2, x, y, z, 0.0f); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -826,10 +840,10 @@ namespace FFXIVClassic_Lobby_Server | ||||
|                 { | ||||
|                     if (split.Length == 2)                     | ||||
|                         doWarp(client, split[1]); | ||||
|                     else if (split.Length == 5) | ||||
|                         doWarp(client, split[1], null, split[2], split[3], split[4]); | ||||
|                     else if (split.Length == 6) | ||||
|                         doWarp(client, split[1], split[2], split[3], split[4], split[5]); | ||||
|                         doWarp(client, split[1], null, split[2], split[3], split[4], split[5]); | ||||
|                     else if (split.Length == 7) | ||||
|                         doWarp(client, split[1], split[2], split[3], split[4], split[5], split[6]); | ||||
|                     return true; | ||||
|                 } | ||||
|                 else if (split[0].Equals("property")) | ||||
|   | ||||
| @@ -417,11 +417,11 @@ namespace FFXIVClassic_Map_Server | ||||
|             if (ze.zoneId != player.zoneId) | ||||
|                 return; | ||||
|  | ||||
|             DoPlayerMoveInZone(player, ze.spawnType, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation); | ||||
|             DoPlayerMoveInZone(player, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation, ze.spawnType); | ||||
|         } | ||||
|  | ||||
|         //Moves actor within the zone | ||||
|         public void DoPlayerMoveInZone(Player player, byte spawnType, float spawnX, float spawnY, float spawnZ, float spawnRotation) | ||||
|         public void DoPlayerMoveInZone(Player player, float spawnX, float spawnY, float spawnZ, float spawnRotation, byte spawnType = 0xF) | ||||
|         {             | ||||
|             //Remove player from currentZone if transfer else it's login | ||||
|             if (player.zone != null) | ||||
| @@ -437,7 +437,7 @@ namespace FFXIVClassic_Map_Server | ||||
|  | ||||
|                 //Send packets | ||||
|                 player.playerSession.queuePacket(_0xE2Packet.buildPacket(player.actorId, 0x0), true, false); | ||||
|                 player.playerSession.queuePacket(player.createSpawnTeleportPacket(player.actorId, 0x0f), true, false); | ||||
|                 player.playerSession.queuePacket(player.createSpawnTeleportPacket(player.actorId, spawnType), true, false); | ||||
|                 player.sendInstanceUpdate(); | ||||
|  | ||||
|             }             | ||||
| @@ -455,6 +455,9 @@ namespace FFXIVClassic_Map_Server | ||||
|  | ||||
|             //Set the current zone and add player | ||||
|             player.zone = zone; | ||||
|  | ||||
|             LuaEngine.onBeginLogin(player); | ||||
|              | ||||
|             zone.addActorToZone(player); | ||||
|              | ||||
|             //Send packets             | ||||
|   | ||||
| @@ -84,6 +84,15 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|                                      45000, 47000, 50000, 53000, 56000, 59000, 62000, 65000, 68000, 71000,       //Level <= 40 | ||||
|                                      74000, 78000, 81000, 85000, 89000, 92000, 96000, 100000, 100000, 110000};   //Level <= 50 | ||||
|  | ||||
|         //Event Related | ||||
|         public uint currentEventOwner = 0; | ||||
|         public string currentEventName = ""; | ||||
|  | ||||
|         public uint currentCommand = 0; | ||||
|         public string currentCommandName = ""; | ||||
|          | ||||
|         public uint eventMenuId = 0; | ||||
|  | ||||
|         //Player Info | ||||
|         public uint[] timers = new uint[20]; | ||||
|         public ushort currentJob; | ||||
| @@ -108,12 +117,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         public bool hasGoobbue; | ||||
|         public byte chocoboAppearance; | ||||
|         public string chocoboName; | ||||
|         public byte mountState = 0; | ||||
|  | ||||
|         //Event Related | ||||
|         public uint eventCurrentOwner = 0; | ||||
|         public string eventCurrentStarter = ""; | ||||
|         public uint eventMenuId = 0; | ||||
|         public byte mountState = 0;         | ||||
|  | ||||
|         public uint achievementPoints; | ||||
|  | ||||
| @@ -125,7 +129,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; | ||||
|  | ||||
|         public PlayerWork playerWork = new PlayerWork(); | ||||
|  | ||||
| @@ -256,7 +260,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             if (isMyPlayer(playerActorId)) | ||||
|             { | ||||
|                 if (currentDirector != null) | ||||
|                     lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, true, currentDirector, 0, false, timers, true); | ||||
|                     lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, true, currentDirector, true, 0, false, timers, true); | ||||
|                 else | ||||
|                     lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, true, 0, false, timers, true); | ||||
|             } | ||||
| @@ -472,12 +476,15 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|  | ||||
|         public void sendZoneInPackets(WorldManager world, ushort spawnType) | ||||
|         { | ||||
|             queuePacket(SetMapPacket.buildPacket(actorId, zone.regionId, zone.actorId)); | ||||
|             queuePacket(SetActorIsZoningPacket.buildPacket(actorId, actorId, false)); | ||||
|             queuePacket(_0x10Packet.buildPacket(actorId, 0xFF)); | ||||
|             queuePacket(SetMusicPacket.buildPacket(actorId, zone.bgmDay, 0x01)); | ||||
|             queuePacket(SetWeatherPacket.buildPacket(actorId, SetWeatherPacket.WEATHER_CLEAR)); | ||||
|              | ||||
|             queuePacket(SetMapPacket.buildPacket(actorId, zone.regionId, zone.actorId)); | ||||
|  | ||||
|             queuePacket(getSpawnPackets(actorId, spawnType));             | ||||
|             //getSpawnPackets(actorId, spawnType).debugPrintPacket(); | ||||
|             getSpawnPackets(actorId, spawnType).debugPrintPacket(); | ||||
|  | ||||
|             #region grouptest | ||||
|             //Retainers | ||||
| @@ -511,6 +518,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|  | ||||
|             playerSession.queuePacket(getInitPackets(actorId)); | ||||
|  | ||||
|  | ||||
|             BasePacket areaMasterSpawn = zone.getSpawnPackets(actorId); | ||||
|             BasePacket debugSpawn = world.GetDebugActor().getSpawnPackets(actorId); | ||||
|             BasePacket worldMasterSpawn = world.GetActor().getSpawnPackets(actorId); | ||||
| @@ -523,8 +531,8 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             playerSession.queuePacket(debugSpawn); | ||||
|             if (directorSpawn != null) | ||||
|             { | ||||
|                 directorSpawn.debugPrintPacket(); | ||||
|                 currentDirector.getInitPackets(actorId).debugPrintPacket(); | ||||
|                 //directorSpawn.debugPrintPacket(); | ||||
|                // currentDirector.getInitPackets(actorId).debugPrintPacket(); | ||||
|                 queuePacket(directorSpawn); | ||||
|                 queuePacket(currentDirector.getInitPackets(actorId)); | ||||
|                 //queuePacket(currentDirector.getSetEventStatusPackets(actorId)); | ||||
| @@ -982,6 +990,17 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         public bool hasQuest(string name) | ||||
|         { | ||||
|             for (int i = 0; i < questScenario.Length; i++) | ||||
|             { | ||||
|                 if (questScenario[i] != null && questScenario[i].actorName.ToLower().Equals(name.ToLower())) | ||||
|                     return true; | ||||
|             } | ||||
|  | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         public bool hasQuest(uint id) | ||||
|         { | ||||
|             for (int i = 0; i < questScenario.Length; i++) | ||||
| @@ -1004,23 +1023,27 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             return -1; | ||||
|         } | ||||
|  | ||||
|         public void setDirector(string directorType) | ||||
|         public void setDirector(string directorType, bool sendPackets) | ||||
|         { | ||||
|             if (directorType.Equals("openingDirector")) | ||||
|             { | ||||
|                 currentDirector = new OpeningDirector(0x46080012); | ||||
|                 currentDirector = new OpeningDirector(this, 0x46080012); | ||||
|             } | ||||
|             else if (directorType.Equals("QuestDirectorMan0l001")) | ||||
|             { | ||||
|                 currentDirector = new QuestDirectorMan0l001(0x46080012); | ||||
|                 currentDirector = new QuestDirectorMan0l001(this, 0x46080012); | ||||
|             } | ||||
|  | ||||
|             if (sendPackets) | ||||
|             { | ||||
|                 queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); | ||||
|                 queuePacket(currentDirector.getSpawnPackets(actorId)); | ||||
|                 queuePacket(currentDirector.getInitPackets(actorId)); | ||||
|                 //queuePacket(currentDirector.getSetEventStatusPackets(actorId)); | ||||
|                 //currentDirector.getSpawnPackets(actorId).debugPrintPacket(); | ||||
|                 //currentDirector.getInitPackets(actorId).debugPrintPacket(); | ||||
|             } | ||||
|  | ||||
|            // queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); | ||||
|            // queuePacket(currentDirector.getSpawnPackets(actorId)); | ||||
|            // queuePacket(currentDirector.getInitPackets(actorId)); | ||||
|            // queuePacket(currentDirector.getSetEventStatusPackets(actorId)); | ||||
|            // currentDirector.getSpawnPackets(actorId).debugPrintPacket(); | ||||
|            // currentDirector.getInitPackets(actorId).debugPrintPacket(); | ||||
|         } | ||||
|  | ||||
|         public Director getDirector() | ||||
| @@ -1068,22 +1091,32 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         public void runEventFunction(string functionName, params object[] parameters) | ||||
|         { | ||||
|             List<LuaParam> lParams = LuaUtils.createLuaParamList(parameters); | ||||
|             SubPacket spacket = RunEventFunctionPacket.buildPacket(actorId, eventCurrentOwner, eventCurrentStarter, functionName, lParams); | ||||
|             SubPacket spacket = RunEventFunctionPacket.buildPacket(actorId, currentEventOwner, currentEventName, functionName, lParams); | ||||
|             spacket.debugPrintSubPacket(); | ||||
|             queuePacket(spacket); | ||||
|         } | ||||
|  | ||||
|         public void endEvent() | ||||
|         { | ||||
|             SubPacket p = EndEventPacket.buildPacket(actorId, eventCurrentOwner, eventCurrentStarter); | ||||
|             SubPacket p = EndEventPacket.buildPacket(actorId, currentEventOwner, currentEventName); | ||||
|             p.debugPrintSubPacket(); | ||||
|             queuePacket(p); | ||||
|  | ||||
|             eventCurrentOwner = 0; | ||||
|             eventCurrentStarter = ""; | ||||
|             currentEventOwner = 0; | ||||
|             currentEventName = ""; | ||||
|             eventMenuId = 0; | ||||
|         } | ||||
|  | ||||
|         public void endCommand() | ||||
|         { | ||||
|             SubPacket p = EndEventPacket.buildPacket(actorId, currentCommand, currentCommandName); | ||||
|             p.debugPrintSubPacket(); | ||||
|             queuePacket(p); | ||||
|  | ||||
|             currentCommand = 0; | ||||
|             currentCommandName = ""; | ||||
|         } | ||||
|  | ||||
|         public void setCurrentMenuId(uint id) | ||||
|         { | ||||
|             eventMenuId = id; | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| using FFXIVClassic_Lobby_Server.packets; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
| using FFXIVClassic_Map_Server.packets.send.actor; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| @@ -10,10 +11,12 @@ using System.Threading.Tasks; | ||||
| namespace FFXIVClassic_Map_Server.actors.director | ||||
| { | ||||
|     class Director : Actor | ||||
|     {             | ||||
|         public Director(uint id) : base(id) | ||||
|         { | ||||
|     { | ||||
|         Player owner; | ||||
|  | ||||
|         public Director(Player owner, uint id) : base(id) | ||||
|         { | ||||
|             this.owner = owner; | ||||
|         } | ||||
|  | ||||
|         public virtual BasePacket getSpawnPackets(uint playerActorId, uint spawnType) | ||||
| @@ -37,5 +40,15 @@ namespace FFXIVClassic_Map_Server.actors.director | ||||
|             return BasePacket.createPacket(initProperties.buildPacket(playerActorId, actorId), true, false); | ||||
|         } | ||||
|  | ||||
|         public void onTalked(Npc npc) | ||||
|         { | ||||
|             LuaEngine.doDirectorOnTalked(this, owner, npc); | ||||
|         } | ||||
|  | ||||
|         public void onCommand(Command command) | ||||
|         { | ||||
|             LuaEngine.doDirectorOnCommand(this, owner, command); | ||||
|         } | ||||
|  | ||||
|     }     | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using FFXIVClassic_Lobby_Server.packets; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
| using FFXIVClassic_Map_Server.packets.send.actor; | ||||
| using System; | ||||
| @@ -11,7 +12,7 @@ namespace FFXIVClassic_Map_Server.actors.director | ||||
| { | ||||
|     class OpeningDirector : Director | ||||
|     { | ||||
|         public OpeningDirector(uint id) : base(id) | ||||
|         public OpeningDirector(Player player, uint id) : base(player, id) | ||||
|         { | ||||
|             this.displayNameId = 0; | ||||
|             this.customDisplayName = "openingDire"; | ||||
|   | ||||
| @@ -15,8 +15,8 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|     { | ||||
|         private uint weatherId; | ||||
|  | ||||
|         public WeatherDirector(uint weatherId) | ||||
|             : base(0x5FF80003) | ||||
|         public WeatherDirector(Player player, uint weatherId) | ||||
|             : base(player, 0x5FF80003) | ||||
|         { | ||||
|             this.weatherId = weatherId; | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using FFXIVClassic_Lobby_Server.packets; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
| using FFXIVClassic_Map_Server.packets.send.actor; | ||||
| using System; | ||||
| @@ -11,7 +12,8 @@ namespace FFXIVClassic_Map_Server.actors.director | ||||
| { | ||||
|     class QuestDirectorMan0l001 : Director | ||||
|     { | ||||
|         public QuestDirectorMan0l001(uint id) : base(id) | ||||
|         public QuestDirectorMan0l001(Player player, uint id) | ||||
|             : base(player, id) | ||||
|         { | ||||
|             this.displayNameId = 0; | ||||
|             this.customDisplayName = "questDirect_ocn0Btl02_01"; | ||||
|   | ||||
| @@ -45,11 +45,21 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|                 return null; | ||||
|         } | ||||
|  | ||||
|         public void ClearQuestData() | ||||
|         { | ||||
|             questData.Clear(); | ||||
|         } | ||||
|  | ||||
|         public uint GetQuestId() | ||||
|         { | ||||
|             return actorId; | ||||
|         } | ||||
|  | ||||
|         public void ClearQuestFlags() | ||||
|         { | ||||
|             questFlags = 0; | ||||
|         } | ||||
|  | ||||
|         public void SetQuestFlag(int bitIndex, bool value) | ||||
|         { | ||||
|             if (bitIndex >= 32) | ||||
|   | ||||
| @@ -176,6 +176,21 @@ namespace FFXIVClassic_Map_Server.lua | ||||
|             }             | ||||
|         } | ||||
|  | ||||
|         public static void onBeginLogin(Player player) | ||||
|         { | ||||
|             if (File.Exists(FILEPATH_PLAYER)) | ||||
|             { | ||||
|                 Script script = loadScript(FILEPATH_PLAYER); | ||||
|  | ||||
|                 if (script == null) | ||||
|                     return; | ||||
|  | ||||
|                 //Run Script | ||||
|                 if (!script.Globals.Get("onBeginLogin").IsNil()) | ||||
|                     script.Call(script.Globals["onBeginLogin"], player); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static void onLogin(Player player) | ||||
|         { | ||||
|             if (File.Exists(FILEPATH_PLAYER)) | ||||
| @@ -186,8 +201,8 @@ namespace FFXIVClassic_Map_Server.lua | ||||
|                     return; | ||||
|  | ||||
|                 //Run Script | ||||
|                 if (!script.Globals.Get("onZoneIn").IsNil()) | ||||
|                     script.Call(script.Globals["onZoneIn"], player); | ||||
|                 if (!script.Globals.Get("onLogin").IsNil()) | ||||
|                     script.Call(script.Globals["onLogin"], player); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -215,10 +230,52 @@ namespace FFXIVClassic_Map_Server.lua | ||||
|         private static void SendError(Player player, string message) | ||||
|         { | ||||
|             List<SubPacket> sendError = new List<SubPacket>(); | ||||
|             sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); | ||||
|             sendError.Add(EndEventPacket.buildPacket(player.actorId, player.currentEventOwner, player.currentEventName)); | ||||
|             player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message); | ||||
|             player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         internal static void doDirectorOnTalked(Director director, Player player, Npc npc) | ||||
|         { | ||||
|             string luaPath = String.Format(FILEPATH_DIRECTORS, director.getName()); | ||||
|  | ||||
|             if (File.Exists(luaPath)) | ||||
|             { | ||||
|                 Script script = loadScript(luaPath); | ||||
|  | ||||
|                 if (script == null) | ||||
|                     return; | ||||
|  | ||||
|                 //Run Script | ||||
|                 if (!script.Globals.Get("onTalked").IsNil()) | ||||
|                     script.Call(script.Globals["onTalked"], player, npc); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.getName())); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         internal static void doDirectorOnCommand(Director director, Player player, Command command) | ||||
|         { | ||||
|             string luaPath = String.Format(FILEPATH_DIRECTORS, director.getName()); | ||||
|  | ||||
|             if (File.Exists(luaPath)) | ||||
|             { | ||||
|                 Script script = loadScript(luaPath); | ||||
|  | ||||
|                 if (script == null) | ||||
|                     return; | ||||
|  | ||||
|                 //Run Script | ||||
|                 if (!script.Globals.Get("onCommand").IsNil()) | ||||
|                     script.Call(script.Globals["onCommand"], player, command); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.getName())); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										31
									
								
								FFXIVClassic Map Server/packets/send/_0x10Packet.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								FFXIVClassic Map Server/packets/send/_0x10Packet.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| using FFXIVClassic_Lobby_Server.packets; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.packets.send | ||||
| { | ||||
|     class _0x10Packet | ||||
|     { | ||||
|         public const ushort OPCODE = 0x0010; | ||||
|         public const uint PACKET_SIZE = 0x28; | ||||
|  | ||||
|         public static SubPacket buildPacket(uint playerActorId, int val) | ||||
|         { | ||||
|             byte[] data = new byte[PACKET_SIZE - 0x20]; | ||||
|  | ||||
|             using (MemoryStream mem = new MemoryStream(data)) | ||||
|             { | ||||
|                 using (BinaryWriter binWriter = new BinaryWriter(mem)) | ||||
|                 { | ||||
|                     binWriter.Write((UInt32)val); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return new SubPacket(OPCODE, playerActorId, playerActorId, data); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user