diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 5250028a..6cd4c4bb 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -80,6 +80,7 @@ + @@ -92,20 +93,25 @@ - + + + + + + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 2c0e02dd..17b88432 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -309,7 +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)); + client.queuePacket(BasePacket.createPacket(SetActorTargetAnimatedPacket.buildPacket(player.actorID, player.actorID, setTarget.actorID), true, false)); break; //Lock Target case 0x00CC: @@ -329,12 +329,7 @@ namespace FFXIVClassic_Lobby_Server break; case 0x012F: subpacket.debugPrintSubPacket(); - BasePacket scriptReply = new BasePacket("./packets/charawork2"); - BasePacket scriptReply2 = new BasePacket("./packets/charawork3"); - BasePacket scriptReply3 = new BasePacket("./packets/charawork4"); - client.queuePacket(scriptReply); - client.queuePacket(scriptReply2); - client.queuePacket(scriptReply3); + break; default: Log.debug(String.Format("Unknown command 0x{0:X} received.", subpacket.header.opcode)); diff --git a/FFXIVClassic Map Server/packets/send/Actor/DeleteAllActorsPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/DeleteAllActorsPacket.cs new file mode 100644 index 00000000..3544ef84 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/Actor/DeleteAllActorsPacket.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 DeleteAllActorsPacket + { + public const ushort OPCODE = 0x0007; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID) + { + return new SubPacket(OPCODE, playerActorID, playerActorID, new byte[8]); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/Actor/SetActorTargetAnimatedPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorTargetAnimatedPacket.cs new file mode 100644 index 00000000..4ab2227e --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorTargetAnimatedPacket.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 SetActorTargetAnimatedPacket + { + public const ushort OPCODE = 0x00D3; + 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/Actor/SetActorTarget.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorTargetPacket.cs similarity index 94% rename from FFXIVClassic Map Server/packets/send/Actor/SetActorTarget.cs rename to FFXIVClassic Map Server/packets/send/Actor/SetActorTargetPacket.cs index 6d86b3f4..425cdc9f 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/SetActorTarget.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorTargetPacket.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace FFXIVClassic_Map_Server.packets.send.actor { - class SetActorTarget + class SetActorTargetPacket { public const ushort OPCODE = 0x00DB; public const uint PACKET_SIZE = 0x28; diff --git a/FFXIVClassic Map Server/packets/send/LogoutPacket.cs b/FFXIVClassic Map Server/packets/send/LogoutPacket.cs new file mode 100644 index 00000000..553bf127 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/LogoutPacket.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 +{ + class LogoutPacket + { + public const ushort OPCODE = 0x000E; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID) + { + return new SubPacket(OPCODE, playerActorID, playerActorID, new byte[8]); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/QuitPacket.cs b/FFXIVClassic Map Server/packets/send/QuitPacket.cs new file mode 100644 index 00000000..8099b683 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/QuitPacket.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 +{ + class QuitPacket + { + public const ushort OPCODE = 0x0011; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID) + { + return new SubPacket(OPCODE, playerActorID, playerActorID, new byte[8]); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/AchievementEarnedPacket.cs b/FFXIVClassic Map Server/packets/send/player/AchievementEarnedPacket.cs new file mode 100644 index 00000000..4b04676e --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/AchievementEarnedPacket.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 AchievementEarnedPacket + { + public const ushort OPCODE = 0x019E; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID, uint achievementID) + { + return new SubPacket(OPCODE, playerActorID, playerActorID, BitConverter.GetBytes((UInt64)achievementID)); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetAchievementPointsPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetAchievementPointsPacket.cs new file mode 100644 index 00000000..59b462b8 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/SetAchievementPointsPacket.cs @@ -0,0 +1,21 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.player +{ + class SetAchievementPointsPacket + { + public const ushort OPCODE = 0x019C; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID, uint numAchievementPoints) + { + return new SubPacket(OPCODE, playerActorID, playerActorID, BitConverter.GetBytes((UInt64) numAchievementPoints)); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs index 25c4156f..174580f4 100644 --- a/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs +++ b/FFXIVClassic Map Server/packets/send/player/SetLatestAchievementsPacket.cs @@ -1,6 +1,7 @@ using FFXIVClassic_Lobby_Server.packets; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,15 +10,28 @@ 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) + public const ushort OPCODE = 0x019B; + public const uint PACKET_SIZE = 0x40; + + public static SubPacket buildPacket(uint playerActorID, uint[] latestAchievementIDs) { - return null; + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + for (int i = 0; i < 5; i++) + { + //Had less than 5 + if (i > latestAchievementIDs.Length) + break; + binWriter.Write((UInt32)latestAchievementIDs[i]); + } + } + } + + return new SubPacket(OPCODE, playerActorID, playerActorID, data); } } } diff --git a/FFXIVClassic Map Server/packets/send/player/SetPlayerDreamPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetPlayerDreamPacket.cs new file mode 100644 index 00000000..6cb4fe77 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/player/SetPlayerDreamPacket.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 SetPlayerDreamPacket + { + public const ushort OPCODE = 0x01A7; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID, uint dreamID) + { + return new SubPacket(OPCODE, playerActorID, playerActorID, BitConverter.GetBytes((uint)dreamID)); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs b/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs index a019c97e..8a5b10ae 100644 --- a/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs +++ b/FFXIVClassic Map Server/packets/send/player/SetPlayerTitlePacket.cs @@ -14,7 +14,7 @@ namespace FFXIVClassic_Map_Server.packets.send.player public static SubPacket buildPacket(uint playerActorID, uint targetActorID, uint titleID) { - return new SubPacket(OPCODE, playerActorID, targetActorID, BitConverter.GetBytes((ulong)titleID)); + return new SubPacket(OPCODE, playerActorID, targetActorID, BitConverter.GetBytes((UInt64)titleID)); } } }