diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index 82c11aa6..6ac87dc2 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -147,6 +147,8 @@
+
+
diff --git a/FFXIVClassic Map Server/actors/chara/CharaWork.cs b/FFXIVClassic Map Server/actors/chara/CharaWork.cs
index 3e3a99f1..611bc753 100644
--- a/FFXIVClassic Map Server/actors/chara/CharaWork.cs
+++ b/FFXIVClassic Map Server/actors/chara/CharaWork.cs
@@ -8,12 +8,12 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
{
class CharaWork
{
- public ParameterSave parameterSave = new ParameterSave();
- public ParameterTemp parameterTemp = new ParameterTemp();
- public BattleSave battleSave = new BattleSave();
- public BattleTemp battleTemp = new BattleTemp();
- public EventSave eventSave = new EventSave();
- public EventTemp eventTemp = new EventTemp();
+ public ParameterSave parameterSave = new ParameterSave();
+ public ParameterTemp parameterTemp = new ParameterTemp();
+ public BattleSave battleSave = new BattleSave();
+ public BattleTemp battleTemp = new BattleTemp();
+ public EventSave eventSave = new EventSave();
+ public EventTemp eventTemp = new EventTemp();
public byte[] property = new byte[32];
diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs
index ccb84a8d..65be3f66 100644
--- a/FFXIVClassic Map Server/actors/chara/Character.cs
+++ b/FFXIVClassic Map Server/actors/chara/Character.cs
@@ -42,7 +42,8 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
public uint currentTarget = 0xC0000000;
public uint currentLockedTarget = 0xC0000000;
- public uint currentState = SetActorStatePacket.STATE_PASSIVE;
+ public uint currentMainState = SetActorStatePacket.MAIN_STATE_PASSIVE;
+ public uint currentSubState = SetActorStatePacket.SUB_STATE_PLAYER;
public CharaWork charaWork = new CharaWork();
public PlayerWork playerWork = new PlayerWork();
@@ -59,7 +60,7 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
public SubPacket createStatePacket(uint playerActorID)
{
- return SetActorStatePacket.buildPacket(actorId, playerActorID, currentState);
+ return SetActorStatePacket.buildPacket(actorId, playerActorID, currentMainState, currentSubState);
}
public BasePacket createActorSpawnPackets(uint playerActorID)
diff --git a/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs b/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs
index cc284eed..bd3e5516 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/SetActorStatePacket.cs
@@ -9,20 +9,31 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
{
class SetActorStatePacket
{
- public const ushort OPCODE = 0x0134;
+ public const int MAIN_STATE_PASSIVE = 0;
+ public const int MAIN_STATE_DEAD = 1;
+ public const int MAIN_STATE_ACTIVE = 2;
+ public const int MAIN_STATE_DEAD2 = 3;
+
+ public const int MAIN_STATE_SITTING_OBJECT = 11;
+ public const int MAIN_STATE_SITTING_FLOOR = 13;
+
+ public const int MAIN_STATE_MOUNTED = 15;
+
+ public const int MAIN_STATE_UNKNOWN1 = 0x0E;
+ public const int MAIN_STATE_UNKNOWN2 = 0x1E;
+ public const int MAIN_STATE_UNKNOWN3 = 0x1F;
+ public const int MAIN_STATE_UNKNOWN4 = 0x20;
+
+ //What is this for?
+ public const int SUB_STATE_PLAYER = 0xBF;
+ public const int SUB_STATE_MONSTER = 0x03;
+
+ public const ushort OPCODE = 0x134;
public const uint PACKET_SIZE = 0x28;
- public const int STATE_NONE = 0x0000;
- public const int STATE_DEAD = 0x0303;
- public const int STATE_PASSIVE = 0xBF00;
- public const int STATE_ACTIVE = 0xBF02;
-
- public static SubPacket buildPacket(uint playerActorID, uint targetID, uint state)
- {
- ulong combined = 0;
-
- combined |= state;
-
+ public static SubPacket buildPacket(uint playerActorID, uint targetID, uint mainState, uint subState)
+ {
+ uint combined = (mainState & 0xFF) | ((subState & 0xFF) << 8);
return new SubPacket(OPCODE, playerActorID, targetID, BitConverter.GetBytes(combined));
}
}
diff --git a/FFXIVClassic Map Server/packets/send/player/SetCurrentMountChocoboPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetCurrentMountChocoboPacket.cs
new file mode 100644
index 00000000..aa59d7ed
--- /dev/null
+++ b/FFXIVClassic Map Server/packets/send/player/SetCurrentMountChocoboPacket.cs
@@ -0,0 +1,39 @@
+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 SetCurrentMountChocoboPacket
+ {
+ public const int CHOCOBO_NORMAL = 0;
+
+ public const int CHOCOBO_LIMSA1 = 0x1;
+ public const int CHOCOBO_LIMSA2 = 0x2;
+ public const int CHOCOBO_LIMSA3 = 0x3;
+ public const int CHOCOBO_LIMSA4 = 0x4;
+
+ public const int CHOCOBO_GRIDANIA1 = 0x1F;
+ public const int CHOCOBO_GRIDANIA2 = 0x20;
+ public const int CHOCOBO_GRIDANIA3 = 0x21;
+ public const int CHOCOBO_GRIDANIA4 = 0x22;
+
+ public const int CHOCOBO_ULDAH1 = 0x3D;
+ public const int CHOCOBO_ULDAH2 = 0x3E;
+ public const int CHOCOBO_ULDAH3 = 0x3F;
+ public const int CHOCOBO_ULDAH4 = 0x40;
+
+ public const ushort OPCODE = 0x0197;
+ public const uint PACKET_SIZE = 0x28;
+
+ public static SubPacket buildPacket(uint playerActorID, int appearanceId)
+ {
+ byte[] data = new byte[PACKET_SIZE - 0x20];
+ data[5] = (byte)(appearanceId & 0xFF);
+ return new SubPacket(OPCODE, playerActorID, playerActorID, data);
+ }
+ }
+}
diff --git a/FFXIVClassic Map Server/packets/send/player/SetCurrentMountGoobbuePacket.cs b/FFXIVClassic Map Server/packets/send/player/SetCurrentMountGoobbuePacket.cs
new file mode 100644
index 00000000..2ba84994
--- /dev/null
+++ b/FFXIVClassic Map Server/packets/send/player/SetCurrentMountGoobbuePacket.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 SetCurrentMountGoobbuePacket
+ {
+
+ public const ushort OPCODE = 0x01a0;
+ public const uint PACKET_SIZE = 0x28;
+
+ public static SubPacket buildPacket(uint playerActorID, int appearanceId)
+ {
+ byte[] data = new byte[PACKET_SIZE - 0x20];
+ data[0] = (byte)(appearanceId & 0xFF);
+ return new SubPacket(OPCODE, playerActorID, playerActorID, data);
+ }
+ }
+}