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));
+ }
+ }
+}