From 50659afc8204c655e6fceae5c72a397bcadc0fe2 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sat, 28 Nov 2015 10:00:18 -0500 Subject: [PATCH] Fixed actor state property packet not sending in string correctly. Added test command for it. Fixed bug in MurmurHash algo. --- FFXIVClassic Map Server/Program.cs | 8 +++--- FFXIVClassic Map Server/Server.cs | 27 ++++++++++++++++++- FFXIVClassic Map Server/common/Utils.cs | 9 +++---- .../send/Actor/SetActorPropetyPacket.cs | 4 +-- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/FFXIVClassic Map Server/Program.cs b/FFXIVClassic Map Server/Program.cs index aaf6d0a1..bc361ee4 100644 --- a/FFXIVClassic Map Server/Program.cs +++ b/FFXIVClassic Map Server/Program.cs @@ -20,7 +20,6 @@ namespace FFXIVClassic_Lobby_Server TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out); Debug.Listeners.Add(myWriter); #endif - bool startServer = true; Console.ForegroundColor = ConsoleColor.Cyan; @@ -87,8 +86,11 @@ namespace FFXIVClassic_Lobby_Server Log.error("Could not load packet"); } } - } - Thread.Sleep(1000); + else if (split[0].Equals("property")) + { + server.testCodePacket(Utils.MurmurHash2(split[1], 0), Convert.ToUInt32(split[2], 16), split[3]); + } + } } } diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs index e658c834..5f7e8b87 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -10,6 +10,7 @@ using FFXIVClassic_Lobby_Server.common; using FFXIVClassic_Map_Server.dataobjects; using FFXIVClassic_Lobby_Server.packets; using System.IO; +using FFXIVClassic_Map_Server.packets.send.actor; namespace FFXIVClassic_Lobby_Server { @@ -204,7 +205,14 @@ namespace FFXIVClassic_Lobby_Server if (buffer.Length < offset + packetSize) return null; - newPacket = new BasePacket(buffer, ref offset); + try + { + newPacket = new BasePacket(buffer, ref offset); + } + catch (OverflowException) + { + return null; + } return newPacket; } @@ -215,5 +223,22 @@ namespace FFXIVClassic_Lobby_Server { mProcessor.sendPacket(path, conn); } + + public void testCodePacket(uint id, uint value, string target) + { + SetActorPropetyPacket changeProperty = new SetActorPropetyPacket(); + changeProperty.addInt(id, value); + changeProperty.setTarget(target); + + foreach (KeyValuePair entry in mConnectedPlayerList) + { + SubPacket changePropertyPacket = changeProperty.buildPacket((entry.Value.actorID), (entry.Value.actorID)); + BasePacket packet = BasePacket.createPacket(changePropertyPacket, true, false); + packet.debugPrintPacket(); + entry.Value.getConnection1().queuePacket(packet); + entry.Value.getConnection2().queuePacket(packet); + } + } + } } diff --git a/FFXIVClassic Map Server/common/Utils.cs b/FFXIVClassic Map Server/common/Utils.cs index 132c39f8..0ce7a84e 100644 --- a/FFXIVClassic Map Server/common/Utils.cs +++ b/FFXIVClassic Map Server/common/Utils.cs @@ -96,15 +96,14 @@ namespace FFXIVClassic_Lobby_Server.common } // Handle the last few bytes of the input array - switch (len) { case 3: - h ^= (uint)data[2] << 16; goto case 2; + h ^= (uint)data[0] << 16; goto case 2; case 2: - h ^= (uint)data[0] << 8; goto case 1; - case 1: - h ^= data[1]; + h ^= (uint)data[len-2] << 8; goto case 1; + case 1: + h ^= data[len-1]; h *= m; break; }; diff --git a/FFXIVClassic Map Server/packets/send/Actor/SetActorPropetyPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorPropetyPacket.cs index 2bc86444..82ec2c54 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/SetActorPropetyPacket.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorPropetyPacket.cs @@ -138,8 +138,8 @@ namespace FFXIVClassic_Map_Server.packets.send.actor public void setTarget(string target) { binWriter.Write((byte)(0x82 + target.Length)); - binWriter.Write(target); - runningByteTotal += (ushort)(1 + target.Length); + binWriter.Write(Encoding.ASCII.GetBytes(target)); + runningByteTotal += (ushort)(1 + Encoding.ASCII.GetByteCount(target)); }