From 327dfc656bc3906951897d1aab75fd180594d9d9 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 6 Oct 2015 23:08:40 -0400 Subject: [PATCH] Implement the actor initial position packet and set state packet. --- .../FFXIVClassic Map Server.csproj | 5 +++-- FFXIVClassic Map Server/PacketProcessor.cs | 7 +++++- FFXIVClassic Map Server/dataobjects/Actor.cs | 10 +++++++++ .../send/Actor/SetActorPositionPacket.cs | 22 ++++++++++++++----- .../packets/send/Actor/SetActorStatePacket.cs | 6 +++-- 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 4b216574..b1e8727c 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -84,11 +84,13 @@ + + + - @@ -102,7 +104,6 @@ - diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 79976bae..7b806917 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -181,6 +181,7 @@ namespace FFXIVClassic_Lobby_Server BasePacket reply5 = new BasePacket("./packets/login/login5.bin"); BasePacket reply6 = new BasePacket("./packets/login/login6_data.bin"); + BasePacket reply62 = new BasePacket("./packets/login/login6_2.bin"); BasePacket reply7 = new BasePacket("./packets/login/login7_data.bin"); BasePacket reply8 = new BasePacket("./packets/login/login8_data.bin"); BasePacket reply9 = new BasePacket("./packets/login/login9_zonesetup.bin"); @@ -204,9 +205,13 @@ namespace FFXIVClassic_Lobby_Server client.queuePacket(BasePacket.createPacket(SetMapPacket.buildPacket(player.actorID, 0xD1), true, false)); client.queuePacket(BasePacket.createPacket(_0x2Packet.buildPacket(player.actorID), true, false)); + client.queuePacket(reply5); client.queuePacket(reply6); - + + client.queuePacket(BasePacket.createPacket(player.getActor().createSpeedPacket(player.actorID), true, false)); + client.queuePacket(BasePacket.createPacket(player.getActor().createStatePacket(player.actorID), true, false)); + client.queuePacket(BasePacket.createPacket(player.getActor().createNamePacket(player.actorID), true, false)); client.queuePacket(BasePacket.createPacket(player.getActor().createAppearancePacket(player.actorID), true, false)); diff --git a/FFXIVClassic Map Server/dataobjects/Actor.cs b/FFXIVClassic Map Server/dataobjects/Actor.cs index f349aabc..e54b8e4a 100644 --- a/FFXIVClassic Map Server/dataobjects/Actor.cs +++ b/FFXIVClassic Map Server/dataobjects/Actor.cs @@ -92,5 +92,15 @@ namespace FFXIVClassic_Map_Server.dataobjects return setappearance.buildPacket(playerActorID, actorID); } + public SubPacket createStatePacket(uint playerActorID) + { + return SetActorStatePacket.buildPacket(playerActorID, actorID, SetActorStatePacket.STATE_PASSIVE); + } + + public SubPacket createSpeedPacket(uint playerActorID) + { + return SetActorSpeedPacket.buildPacket(playerActorID, actorID); + } + } } diff --git a/FFXIVClassic Map Server/packets/send/Actor/SetActorPositionPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorPositionPacket.cs index c2a1e290..95e86e8f 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/SetActorPositionPacket.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorPositionPacket.cs @@ -13,7 +13,16 @@ namespace FFXIVClassic_Map_Server.packets.send.actor public const ushort OPCODE = 0x00CE; public const uint PACKET_SIZE = 0x48; - public static SubPacket buildPacket(uint playerActorID, uint actorID) + public const uint SPAWNTYPE_NORMAL = 1; + public const uint SPAWNTYPE_WARP1 = 2; + public const uint SPAWNTYPE_WARP2 = 3; + + public const float INNPOS_X = 157.550003f; + public const float INNPOS_Y = 000.000000f; + public const float INNPOS_Z = 165.050003f; + public const float INNPOS_ROT = -1.530000f; + + public static SubPacket buildPacket(uint playerActorID, uint actorID, float x, float y, float z, float rotation) { byte[] data = new byte[PACKET_SIZE-0x20]; @@ -21,13 +30,16 @@ namespace FFXIVClassic_Map_Server.packets.send.actor { using (BinaryWriter binWriter = new BinaryWriter(mem)) { - + binWriter.Write((Int32)0); + binWriter.Write((Int32)0); + binWriter.Write((Single)x); + binWriter.Write((Single)y); + binWriter.Write((Single)z); + binWriter.Write((Single)rotation); } - data = mem.GetBuffer(); } - SubPacket packet = new SubPacket(OPCODE, playerActorID, actorID, data); - return packet; + return new SubPacket(OPCODE, playerActorID, actorID, data); } } diff --git a/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs index f82baa00..cc284eed 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs @@ -19,9 +19,11 @@ namespace FFXIVClassic_Map_Server.packets.send.actor public static SubPacket buildPacket(uint playerActorID, uint targetID, uint state) { - byte[] data = new byte[PACKET_SIZE - 0x20]; + ulong combined = 0; - return new SubPacket(OPCODE, playerActorID, targetID, data); + combined |= state; + + return new SubPacket(OPCODE, playerActorID, targetID, BitConverter.GetBytes(combined)); } } }