diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index 3c275fc0..8b0184f6 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -143,6 +143,7 @@
+
@@ -188,6 +189,7 @@
+
@@ -285,7 +287,7 @@
-
+
diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs
index ed297041..ded25460 100644
--- a/FFXIVClassic Map Server/PacketProcessor.cs
+++ b/FFXIVClassic Map Server/PacketProcessor.cs
@@ -210,6 +210,11 @@ namespace FFXIVClassic_Map_Server
case 0x00CE:
subpacket.DebugPrintSubPacket();
break;
+ //Countdown requested
+ case 0x00CF:
+ CountdownRequestPacket countdownPacket = new CountdownRequestPacket(subpacket.data);
+ session.GetActor().BroadcastCountdown(countdownPacket.countdownLength, countdownPacket.syncTime);
+ break;
//Event Result
case 0x012E:
subpacket.DebugPrintSubPacket();
diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs
index 7e865553..bb98227e 100644
--- a/FFXIVClassic Map Server/actors/chara/player/Player.cs
+++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs
@@ -1623,9 +1623,9 @@ namespace FFXIVClassic_Map_Server.Actors
currentEventRunning = null;
}
- public void BroadcastCountdown(byte countdownLength, uint startTime)
+ public void BroadcastCountdown(byte countdownLength, ulong syncTime)
{
- BroadcastPacket(StartCountdownPacket.BuildPacket(actorId, countdownLength, startTime, "Go!"), true);
+ BroadcastPacket(StartCountdownPacket.BuildPacket(actorId, countdownLength, syncTime, "Go!"), true);
}
public void SendInstanceUpdate()
diff --git a/FFXIVClassic Map Server/packets/receive/CountdownRequestPacket.cs b/FFXIVClassic Map Server/packets/receive/CountdownRequestPacket.cs
new file mode 100644
index 00000000..23701717
--- /dev/null
+++ b/FFXIVClassic Map Server/packets/receive/CountdownRequestPacket.cs
@@ -0,0 +1,30 @@
+using System;
+using System.IO;
+
+namespace FFXIVClassic_Map_Server.packets.receive
+{
+ class CountdownRequestPacket
+ {
+ public bool invalidPacket = false;
+ public byte countdownLength;
+ public ulong syncTime;
+
+ public CountdownRequestPacket(byte[] data)
+ {
+ using (MemoryStream mem = new MemoryStream(data))
+ {
+ using (BinaryReader binReader = new BinaryReader(mem))
+ {
+ try{
+ countdownLength = binReader.ReadByte();
+ binReader.BaseStream.Seek(8, SeekOrigin.Begin);
+ syncTime = binReader.ReadUInt64();
+ }
+ catch (Exception){
+ invalidPacket = true;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/FFXIVClassic Map Server/packets/send/Actor/StartCountdownPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/StartCountdownPacket.cs
index 7199f863..83f83c1a 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/StartCountdownPacket.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/StartCountdownPacket.cs
@@ -10,7 +10,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
public const ushort OPCODE = 0xE5;
public const uint PACKET_SIZE = 0x48;
- public static SubPacket BuildPacket(uint sourceActorId, byte countdownLength, uint startTime, string message)
+ public static SubPacket BuildPacket(uint sourceActorId, byte countdownLength, ulong syncTime, string message)
{
byte[] data = new byte[PACKET_SIZE - 0x20];
@@ -20,7 +20,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
{
binWriter.Write((Byte)countdownLength);
binWriter.Seek(8, SeekOrigin.Begin);
- binWriter.Write((UInt32)startTime);
+ binWriter.Write((UInt64)syncTime);
binWriter.Seek(18, SeekOrigin.Begin);
binWriter.Write(Encoding.ASCII.GetBytes(message), 0, Encoding.ASCII.GetByteCount(message) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(message));
}