From f0ec2125ac9ff980dfb0ac6ef25f453ac06ae715 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Mon, 9 May 2016 22:19:57 -0400 Subject: [PATCH] Found out the second weather packet value is a transition time. --- FFXIVClassic Map Server/CommandProcessor.cs | 8 +-- .../actors/chara/player/Player.cs | 6 ++- .../actors/director/WeatherDirector.cs | 6 ++- FFXIVClassic Map Server/lua/LuaPlayer.cs | 4 +- .../packets/send/SetWeatherPacket.cs | 54 +++++++++---------- 5 files changed, 42 insertions(+), 36 deletions(-) diff --git a/FFXIVClassic Map Server/CommandProcessor.cs b/FFXIVClassic Map Server/CommandProcessor.cs index 9699dca8..0a1606be 100644 --- a/FFXIVClassic Map Server/CommandProcessor.cs +++ b/FFXIVClassic Map Server/CommandProcessor.cs @@ -455,13 +455,13 @@ namespace FFXIVClassic_Lobby_Server return; // catch any invalid warps here } - private void doWeather(ConnectedPlayer client, string weatherID) + private void doWeather(ConnectedPlayer client, string weatherID, string value) { - long weather = Convert.ToInt64(weatherID); + ushort weather = Convert.ToUInt16(weatherID); if (client != null) { - client.queuePacket(BasePacket.createPacket(SetWeatherPacket.buildPacket(client.actorID, weather, true), true, false)); + client.queuePacket(BasePacket.createPacket(SetWeatherPacket.buildPacket(client.actorID, weather, Convert.ToUInt16(value)), true, false)); } /* @@ -582,7 +582,7 @@ namespace FFXIVClassic_Lobby_Server { try { - doWeather(client, split[2]); + doWeather(client, split[2], split[3]); return true; } catch (Exception e) diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index b5c3cf3b..611fb69f 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -479,7 +479,7 @@ namespace FFXIVClassic_Map_Server.Actors 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, true)); + queuePacket(SetWeatherPacket.buildPacket(actorId, SetWeatherPacket.WEATHER_CLEAR, 1)); queuePacket(SetMapPacket.buildPacket(actorId, zone.regionId, zone.actorId)); @@ -522,6 +522,7 @@ namespace FFXIVClassic_Map_Server.Actors BasePacket areaMasterSpawn = zone.getSpawnPackets(actorId); BasePacket debugSpawn = world.GetDebugActor().getSpawnPackets(actorId); BasePacket worldMasterSpawn = world.GetActor().getSpawnPackets(actorId); + BasePacket weatherDirectorSpawn = new WeatherDirector(this, 8003).getSpawnPackets(actorId); BasePacket directorSpawn = null; if (currentDirector != null) @@ -550,6 +551,9 @@ namespace FFXIVClassic_Map_Server.Actors packet.debugPrintSubPacket(); queuePacket(packet); } + + playerSession.queuePacket(weatherDirectorSpawn); + /* #region hardcode BasePacket reply10 = new BasePacket("./packets/login/login10.bin"); //Item Storage, Inn Door created diff --git a/FFXIVClassic Map Server/actors/director/WeatherDirector.cs b/FFXIVClassic Map Server/actors/director/WeatherDirector.cs index f560a902..0aa0917a 100644 --- a/FFXIVClassic Map Server/actors/director/WeatherDirector.cs +++ b/FFXIVClassic Map Server/actors/director/WeatherDirector.cs @@ -21,9 +21,11 @@ namespace FFXIVClassic_Map_Server.Actors this.weatherId = weatherId; this.displayNameId = 0; - this.customDisplayName = String.Format("weatherDire_{0}", zone.zoneName, zone.actorId); - this.actorName = String.Format("weatherDire_{0}@{0:04x}", zone.zoneName, zone.actorId); + this.customDisplayName = String.Format("weatherDire_{0}_{1}", player.zone.zoneName, "07"); + + this.actorName = String.Format("weatherDire_{0}_{1}@{2:x3}{3:x2}", player.zone.zoneName, "04", player.zoneId, 0); + this.className = "Debug"; } diff --git a/FFXIVClassic Map Server/lua/LuaPlayer.cs b/FFXIVClassic Map Server/lua/LuaPlayer.cs index af077d81..7ff39c81 100644 --- a/FFXIVClassic Map Server/lua/LuaPlayer.cs +++ b/FFXIVClassic Map Server/lua/LuaPlayer.cs @@ -26,9 +26,9 @@ namespace FFXIVClassic_Map_Server.lua player.playerSession.queuePacket(SetMusicPacket.buildPacket(player.actorId, musicID, playMode), true, false); } - public void setWeather(uint weatherID) + public void setWeather(ushort weatherID) { - player.playerSession.queuePacket(SetWeatherPacket.buildPacket(player.actorId, weatherID, true), true, false); + player.playerSession.queuePacket(SetWeatherPacket.buildPacket(player.actorId, weatherID, 1), true, false); } public void getParameter(string paramName) diff --git a/FFXIVClassic Map Server/packets/send/SetWeatherPacket.cs b/FFXIVClassic Map Server/packets/send/SetWeatherPacket.cs index 070b8d42..63778379 100644 --- a/FFXIVClassic Map Server/packets/send/SetWeatherPacket.cs +++ b/FFXIVClassic Map Server/packets/send/SetWeatherPacket.cs @@ -9,40 +9,40 @@ namespace FFXIVClassic_Map_Server.packets.send { class SetWeatherPacket { - public const uint WEATHER_CLEAR = 8001; - public const uint WEATHER_FAIR = 8002; - public const uint WEATHER_CLOUDY = 8003; - public const uint WEATHER_FOGGY = 8004; - public const uint WEATHER_WINDY = 8005; - public const uint WEATHER_BLUSTERY = 8006; - public const uint WEATHER_RAINY = 8007; - public const uint WEATHER_SHOWERY = 8008; - public const uint WEATHER_THUNDERY = 8009; - public const uint WEATHER_STORMY = 8010; - public const uint WEATHER_DUSTY = 8011; - public const uint WEATHER_SANDY = 8012; - public const uint WEATHER_HOT = 8013; - public const uint WEATHER_BLISTERING = 8014; //Bowl Of Embers Weather - public const uint WEATHER_SNOWY = 8015; - public const uint WEATHER_WINTRY = 8016; - public const uint WEATHER_GLOOMY = 8017; + public const ushort WEATHER_CLEAR = 8001; + public const ushort WEATHER_FAIR = 8002; + public const ushort WEATHER_CLOUDY = 8003; + public const ushort WEATHER_FOGGY = 8004; + public const ushort WEATHER_WINDY = 8005; + public const ushort WEATHER_BLUSTERY = 8006; + public const ushort WEATHER_RAINY = 8007; + public const ushort WEATHER_SHOWERY = 8008; + public const ushort WEATHER_THUNDERY = 8009; + public const ushort WEATHER_STORMY = 8010; + public const ushort WEATHER_DUSTY = 8011; + public const ushort WEATHER_SANDY = 8012; + public const ushort WEATHER_HOT = 8013; + public const ushort WEATHER_BLISTERING = 8014; //Bowl Of Embers Weather + public const ushort WEATHER_SNOWY = 8015; + public const ushort WEATHER_WINTRY = 8016; + public const ushort WEATHER_GLOOMY = 8017; - public const uint WEATHER_SEASONAL = 8027; //Snow in Black Shroud, nothing elsewhere - public const uint WEATHER_PRIMAL = 8028; //Howling Eye and Thornmarch Weather - public const uint WEATHER_SEASONAL_FIREWORKS = 8029; //Plays fireworks between 20:00 - 21:00 ET - public const uint WEATHER_DALAMUD = 8030; - public const uint WEATHER_AURORA = 8031; - public const uint WEATHER_DALAMUD_THUNDER = 8032; + public const ushort WEATHER_SEASONAL = 8027; //Snow in Black Shroud, nothing elsewhere + public const ushort WEATHER_PRIMAL = 8028; //Howling Eye and Thornmarch Weather + public const ushort WEATHER_SEASONAL_FIREWORKS = 8029; //Plays fireworks between 20:00 - 21:00 ET + public const ushort WEATHER_DALAMUD = 8030; + public const ushort WEATHER_AURORA = 8031; + public const ushort WEATHER_DALAMUD_THUNDER = 8032; - public const uint WEATHER_DAY = 8065; //Force skybox to show Day + Fair regardless of current ET - public const uint WEATHER_TWILIGHT = 8066; //Force skybox to show Twilight + Clear regardless of current ET + public const ushort WEATHER_DAY = 8065; //Force skybox to show Day + Fair regardless of current ET + public const ushort WEATHER_TWILIGHT = 8066; //Force skybox to show Twilight + Clear regardless of current ET public const ushort OPCODE = 0x000D; public const uint PACKET_SIZE = 0x28; - public static SubPacket buildPacket(uint playerActorID, long weatherId, bool smoothTransition) + public static SubPacket buildPacket(uint playerActorID, ushort weatherId, ushort transitionTime) { - ulong combined = (uint)(weatherId | ((smoothTransition ? 1 : 0) << 16)); + ulong combined = (ulong)(weatherId | (transitionTime << 16)); return new SubPacket(OPCODE, 0, playerActorID, BitConverter.GetBytes(combined)); } }