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