From 5dff4cbdd33fcfb07cc010191f6ab0fda4e5105e Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Thu, 6 Jul 2017 21:59:12 -0400 Subject: [PATCH] Fixed bug with Broadcast Packet. Was adding player to the instance list while it shouldn't have been, and designed BroadcastPacket assuming so. Cleaned it all up and fixed, so now emote work after warp. Fixed Chocobo packets so correct appearance will show when player is spawned while riding gobbue. --- FFXIVClassic Map Server/WorldManager.cs | 2 +- .../actors/chara/player/Player.cs | 26 +++++++++++++------ .../dataobjects/Session.cs | 1 - data/scripts/commands/ChocoboRideCommand.lua | 2 -- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index 62a6b531..cd0560ba 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -613,7 +613,7 @@ namespace FFXIVClassic_Map_Server //Send packets player.playerSession.QueuePacket(DeleteAllActorsPacket.BuildPacket(player.actorId)); - player.playerSession.QueuePacket(_0xE2Packet.BuildPacket(player.actorId, 0x10)); + player.playerSession.QueuePacket(_0xE2Packet.BuildPacket(player.actorId, 0x2)); player.SendZoneInPackets(this, spawnType); player.playerSession.ClearInstance(); player.SendInstanceUpdate(); diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 11230686..fed88f12 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -344,6 +344,11 @@ namespace FFXIVClassic_Map_Server.Actors subpackets.Add(Database.GetAchievementsPacket(this)); } + if (mountState == 1) + subpackets.Add(SetCurrentMountChocoboPacket.BuildPacket(actorId, chocoboAppearance)); + else if (mountState == 2) + subpackets.Add(SetCurrentMountGoobbuePacket.BuildPacket(actorId, 1)); + return subpackets; } @@ -621,13 +626,19 @@ namespace FFXIVClassic_Map_Server.Actors public void BroadcastPacket(SubPacket packet, bool sendToSelf) { + if (sendToSelf) + { + SubPacket clonedPacket = new SubPacket(packet, actorId); + QueuePacket(clonedPacket); + } + foreach (Actor a in playerSession.actorInstanceList) { if (a is Player) { Player p = (Player)a; - if (p.Equals(this) && !sendToSelf) + if (p.Equals(this)) continue; SubPacket clonedPacket = new SubPacket(packet, a.actorId); @@ -744,19 +755,18 @@ namespace FFXIVClassic_Map_Server.Actors QueuePacket(SetMusicPacket.BuildPacket(actorId, musicId, 1)); } - public void SendChocoboAppearance() + public void SendMountAppearance() { - BroadcastPacket(SetCurrentMountChocoboPacket.BuildPacket(actorId, chocoboAppearance), true); - } - - public void SendGoobbueAppearance() - { - BroadcastPacket(SetCurrentMountGoobbuePacket.BuildPacket(actorId, 1), true); + if (mountState == 1) + BroadcastPacket(SetCurrentMountChocoboPacket.BuildPacket(actorId, chocoboAppearance), true); + else if (mountState == 2) + BroadcastPacket(SetCurrentMountGoobbuePacket.BuildPacket(actorId, 1), true); } public void SetMountState(byte mountState) { this.mountState = mountState; + SendMountAppearance(); } public byte GetMountState() diff --git a/FFXIVClassic Map Server/dataobjects/Session.cs b/FFXIVClassic Map Server/dataobjects/Session.cs index e1b3ab49..e83fcce5 100644 --- a/FFXIVClassic Map Server/dataobjects/Session.cs +++ b/FFXIVClassic Map Server/dataobjects/Session.cs @@ -28,7 +28,6 @@ namespace FFXIVClassic_Map_Server.dataobjects { this.id = sessionId; playerActor = new Player(this, sessionId); - actorInstanceList.Add(playerActor); } public void QueuePacket(List packets) diff --git a/data/scripts/commands/ChocoboRideCommand.lua b/data/scripts/commands/ChocoboRideCommand.lua index 2fb5dcfe..8163f408 100644 --- a/data/scripts/commands/ChocoboRideCommand.lua +++ b/data/scripts/commands/ChocoboRideCommand.lua @@ -14,12 +14,10 @@ function onEventStarted(player, actor, triggerName, isGoobbue) if (isGoobbue ~= true) then player:ChangeMusic(83); - player:SendChocoboAppearance(); player:SendGameMessage(player, worldMaster, 26001, 0x20); player:SetMountState(1); else player:ChangeMusic(98); - player:SendGoobbueAppearance(); player:SendGameMessage(player, worldMaster, 26019, 0x20); player:SetMountState(2); end