diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 24cd9ea4..5250028a 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -92,12 +92,19 @@ + + + + + + + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index bdb62d47..2c0e02dd 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -293,7 +293,7 @@ namespace FFXIVClassic_Lobby_Server client.queuePacket(reply8); client.queuePacket(reply9); client.queuePacket(reply10); - client.queuePacket(reply11); + //client.queuePacket(reply11); client.queuePacket(reply12); break; //Chat Received @@ -309,6 +309,7 @@ namespace FFXIVClassic_Lobby_Server case 0x00CD: SetTargetPacket setTarget = new SetTargetPacket(subpacket.data); player.setTarget(setTarget.actorID); + client.queuePacket(BasePacket.createPacket(SetActorTarget.buildPacket(player.actorID, player.actorID, setTarget.actorID), true, false)); break; //Lock Target case 0x00CC: @@ -350,7 +351,7 @@ namespace FFXIVClassic_Lobby_Server return; BasePacket packet = new BasePacket(path); - + foreach (KeyValuePair entry in mPlayers) { packet.replaceActorID(entry.Value.actorID); diff --git a/FFXIVClassic Map Server/bin/Debug/packets/d0packet b/FFXIVClassic Map Server/bin/Debug/packets/d0packet index ee17c877..3f76e783 100644 Binary files a/FFXIVClassic Map Server/bin/Debug/packets/d0packet and b/FFXIVClassic Map Server/bin/Debug/packets/d0packet differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/deleteplayer b/FFXIVClassic Map Server/bin/Debug/packets/deleteplayer new file mode 100644 index 00000000..6fbfdd6d Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/deleteplayer differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data.bin b/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data.bin index 06022415..fb73868d 100644 Binary files a/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data.bin and b/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data.bin differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data2.bin b/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data2.bin new file mode 100644 index 00000000..0af13afe Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/login/login7_data2.bin differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/login7_data.bin b/FFXIVClassic Map Server/bin/Debug/packets/login7_data.bin new file mode 100644 index 00000000..5efdb5cd Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/login7_data.bin differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/move_player b/FFXIVClassic Map Server/bin/Debug/packets/move_player new file mode 100644 index 00000000..433e2de6 Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/move_player differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/move_player2 b/FFXIVClassic Map Server/bin/Debug/packets/move_player2 new file mode 100644 index 00000000..6f057d94 Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/move_player2 differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/music.bin b/FFXIVClassic Map Server/bin/Debug/packets/music.bin index 77fa4332..56742acc 100644 Binary files a/FFXIVClassic Map Server/bin/Debug/packets/music.bin and b/FFXIVClassic Map Server/bin/Debug/packets/music.bin differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/test b/FFXIVClassic Map Server/bin/Debug/packets/test new file mode 100644 index 00000000..e7f841b8 Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/test differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/test_player b/FFXIVClassic Map Server/bin/Debug/packets/test_player new file mode 100644 index 00000000..a8d6db19 Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/test_player differ diff --git a/FFXIVClassic Map Server/bin/Debug/packets/test_player2 b/FFXIVClassic Map Server/bin/Debug/packets/test_player2 new file mode 100644 index 00000000..a729c2b7 Binary files /dev/null and b/FFXIVClassic Map Server/bin/Debug/packets/test_player2 differ diff --git a/FFXIVClassic Map Server/packets/send/Actor/MoveActorToPositionPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/MoveActorToPositionPacket.cs index a4e71fd4..a869e1ea 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/MoveActorToPositionPacket.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/MoveActorToPositionPacket.cs @@ -11,9 +11,9 @@ namespace FFXIVClassic_Map_Server.packets.send.actor class MoveActorToPositionPacket { public const ushort OPCODE = 0x00CF; - public const uint PACKET_SIZE = 0x48; + public const uint PACKET_SIZE = 0x50; - public static SubPacket buildPacket(uint playerActorID, uint actorID) + public static SubPacket buildPacket(uint playerActorID, uint targetActorID, float x, float y, float z, float rot, ushort moveState) { byte[] data = new byte[PACKET_SIZE - 0x20]; @@ -21,12 +21,16 @@ namespace FFXIVClassic_Map_Server.packets.send.actor { using (BinaryWriter binWriter = new BinaryWriter(mem)) { - + binWriter.BaseStream.Seek(0x8, SeekOrigin.Begin); + binWriter.Write((Single)x); + binWriter.Write((Single)y); + binWriter.Write((Single)z); + binWriter.Write((Single)rot); + binWriter.Write((ushort)moveState); } - data = mem.GetBuffer(); } - SubPacket packet = new SubPacket(OPCODE, playerActorID, actorID, data); + SubPacket packet = new SubPacket(OPCODE, playerActorID, targetActorID, data); return packet; } diff --git a/FFXIVClassic Map Server/packets/send/Actor/SetActorTarget.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorTarget.cs new file mode 100644 index 00000000..6d86b3f4 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorTarget.cs @@ -0,0 +1,20 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.actor +{ + class SetActorTarget + { + public const ushort OPCODE = 0x00DB; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID, uint targetActorID, uint targetID) + { + return new SubPacket(OPCODE, playerActorID, targetID, BitConverter.GetBytes((ulong)targetID)); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/CutsceneBookSetPacket.cs b/FFXIVClassic Map Server/packets/send/player/CutsceneBookSetPacket.cs new file mode 100644 index 00000000..b0cf66b9 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/CutsceneBookSetPacket.cs @@ -0,0 +1,167 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.player +{ + class CutsceneBookSetPacket + { + public const ushort OPCODE = 0x01A3; + public const uint PACKET_SIZE = 0150; + + private byte[] mainstoryFlags = new byte[7]; + private byte[] classFlags = new byte[2*17]; + + public static SubPacket buildPacket(uint playerActorID) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + byte currentOut = 0; + int byteIndex = 0; + int currentBit = 0; + + //Main Scenario + for (int i = 0; i < 60; i++) + { + currentOut = (byte) (1|(currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + //Classes + for (int i = 0; i < 340; i++) + { + currentOut = (byte)(1 | (currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + //GAP + for (int i = 0; i < 60; i++) + { + currentBit++; + if (currentBit >= 8) + { + currentBit = 0; + byteIndex++; + } + } + + //Side Quests + for (int i = 0; i < 372; i++) + { + currentOut = (byte)(1 | (currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + //GAP + for (int i = 0; i < 228; i++) + { + currentBit++; + if (currentBit >= 8) + { + currentBit = 0; + byteIndex++; + } + } + + //Jobs + for (int i = 0; i < 140; i++) + { + currentOut = (byte)(1 | (currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + //GAP + for (int i = 0; i < 61; i++) + { + currentBit++; + if (currentBit >= 8) + { + currentBit = 0; + byteIndex++; + } + } + + //Maelstrom + for (int i = 0; i < 200; i++) + { + currentOut = (byte)(1 | (currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + //Adders + for (int i = 0; i < 200; i++) + { + currentOut = (byte)(1 | (currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + //Flames + for (int i = 0; i < 200; i++) + { + currentOut = (byte)(1 | (currentOut << currentBit)); + currentBit++; + + if (currentBit >= 8) + { + currentBit = 0; + data[byteIndex] = currentOut; + byteIndex++; + currentOut = 0; + } + } + + return new SubPacket(OPCODE, playerActorID, playerActorID, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetChocoboNamePacket.cs b/FFXIVClassic Map Server/packets/send/player/SetChocoboNamePacket.cs new file mode 100644 index 00000000..3ef9833d --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/SetChocoboNamePacket.cs @@ -0,0 +1,22 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.player +{ + class SetChocoboNamePacket + { + public const ushort OPCODE = 0x0198; + public const uint PACKET_SIZE = 0x40; + + public static SubPacket buildPacket(uint playerActorID, uint targetActorID, string name) + { + if (Encoding.Unicode.GetByteCount(name) >= 0x20) + name = "ERR: Too Long"; + return new SubPacket(OPCODE, playerActorID, targetActorID, Encoding.Unicode.GetBytes(name)); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetGCInfoPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetGCInfoPacket.cs new file mode 100644 index 00000000..62d2c294 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/SetGCInfoPacket.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.player +{ + class SetGCInfoPacket + { + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs new file mode 100644 index 00000000..25c4156f --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs @@ -0,0 +1,23 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.player +{ + class SetLatestAchievementsPacket + { + public const ushort OPCODE = 0x01A3; + public const uint PACKET_SIZE = 0150; + + private byte[] mainstoryFlags = new byte[7]; + private byte[] classFlags = new byte[2*17]; + + public static SubPacket buildPacket(uint playerActorID) + { + return null; + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs b/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs new file mode 100644 index 00000000..a019c97e --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs @@ -0,0 +1,20 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.player +{ + class SetPlayerTitlePacket + { + public const ushort OPCODE = 0x019D; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID, uint targetActorID, uint titleID) + { + return new SubPacket(OPCODE, playerActorID, targetActorID, BitConverter.GetBytes((ulong)titleID)); + } + } +}