From 7a5dcd3a8353026802bc4e2afd341179a1aeb161 Mon Sep 17 00:00:00 2001 From: Dragon Date: Thu, 24 Jun 2021 18:14:48 +0300 Subject: [PATCH 1/4] Add StatusFlags to Chara --- .../Game/ClientState/Actors/StatusFlags.cs | 51 +++++++++++++++++++ .../Game/ClientState/Actors/Types/Chara.cs | 5 ++ Dalamud/Game/ClientState/Structs/Actor.cs | 7 +++ 3 files changed, 63 insertions(+) create mode 100644 Dalamud/Game/ClientState/Actors/StatusFlags.cs diff --git a/Dalamud/Game/ClientState/Actors/StatusFlags.cs b/Dalamud/Game/ClientState/Actors/StatusFlags.cs new file mode 100644 index 000000000..ea9ef840a --- /dev/null +++ b/Dalamud/Game/ClientState/Actors/StatusFlags.cs @@ -0,0 +1,51 @@ +using System; + +namespace Dalamud.Game.ClientState.Actors +{ + /// + /// Enum describing possible status flags. + /// + [Flags] + public enum StatusFlags : byte + { + /// + /// No status flags set. + /// + None = 0, + + /// + /// Hostile actor. + /// + Hostile = 1, + + /// + /// Actor in combat. + /// + InCombat = 2, + + /// + /// Actor weapon is out. + /// + WeaponOut = 4, + + /// + /// Actor is a party member. + /// + PartyMember = 16, + + /// + /// Actor is a alliance member. + /// + AllianceMember = 32, + + /// + /// Actor is in friend list. + /// + Friend = 64, + + /// + /// Actor is casting. + /// + IsCasting = 128, + } +} diff --git a/Dalamud/Game/ClientState/Actors/Types/Chara.cs b/Dalamud/Game/ClientState/Actors/Types/Chara.cs index 01e4ba243..73875d80c 100644 --- a/Dalamud/Game/ClientState/Actors/Types/Chara.cs +++ b/Dalamud/Game/ClientState/Actors/Types/Chara.cs @@ -76,5 +76,10 @@ namespace Dalamud.Game.ClientState.Actors.Types /// Indexed by . /// public byte[] Customize => this.ActorStruct.Customize; + + /// + /// Gets status Effects. + /// + public StatusFlags StatusFlags => this.ActorStruct.StatusFlags; } } diff --git a/Dalamud/Game/ClientState/Structs/Actor.cs b/Dalamud/Game/ClientState/Structs/Actor.cs index e765a8c4c..6f882f6f9 100644 --- a/Dalamud/Game/ClientState/Structs/Actor.cs +++ b/Dalamud/Game/ClientState/Structs/Actor.cs @@ -231,6 +231,12 @@ namespace Dalamud.Game.ClientState.Structs [FieldOffset(ActorOffsets.TotalCastTime)] public float TotalCastTime; + /// + /// Actor status flags. + /// + [FieldOffset(ActorOffsets.StatusFlags)] + public StatusFlags StatusFlags; + /// /// The array of status effects that the actor is currently affected by. /// @@ -284,6 +290,7 @@ namespace Dalamud.Game.ClientState.Structs public const int CurrentCastTargetActorId = 0x1B90; public const int CurrentCastTime = 0x1BB4; public const int TotalCastTime = 0x1BB8; + public const int StatusFlags = 0x19A0; public const int UIStatusEffects = 0x19F8; } } From 35d0f6dbad82d815dfb9535431b5bf6049a03db4 Mon Sep 17 00:00:00 2001 From: Dragon Date: Thu, 24 Jun 2021 21:49:48 +0300 Subject: [PATCH 2/4] Add missing offhand to StatusFlags enum --- Dalamud/Game/ClientState/Actors/StatusFlags.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Dalamud/Game/ClientState/Actors/StatusFlags.cs b/Dalamud/Game/ClientState/Actors/StatusFlags.cs index ea9ef840a..bb3864cf5 100644 --- a/Dalamud/Game/ClientState/Actors/StatusFlags.cs +++ b/Dalamud/Game/ClientState/Actors/StatusFlags.cs @@ -28,6 +28,11 @@ namespace Dalamud.Game.ClientState.Actors /// WeaponOut = 4, + /// + /// Actor offhand is out. + /// + OffhandOut = 8, + /// /// Actor is a party member. /// From 96910a30708413236c85b4abd2dd2297664ed087 Mon Sep 17 00:00:00 2001 From: Dragon Date: Thu, 24 Jun 2021 21:50:34 +0300 Subject: [PATCH 3/4] Add StatusFlags to data window actor table --- Dalamud/Interface/DalamudDataWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs index e34e68dae..00936db2c 100644 --- a/Dalamud/Interface/DalamudDataWindow.cs +++ b/Dalamud/Interface/DalamudDataWindow.cs @@ -696,7 +696,7 @@ namespace Dalamud.Interface if (actor is Chara chara) { actorString += - $" Level: {chara.Level} ClassJob: {(this.resolveGameData ? chara.ClassJob.GameData.Name : chara.ClassJob.Id.ToString())} CHP: {chara.CurrentHp} MHP: {chara.MaxHp} CMP: {chara.CurrentMp} MMP: {chara.MaxMp}\n Customize: {BitConverter.ToString(chara.Customize).Replace("-", " ")}\n"; + $" Level: {chara.Level} ClassJob: {(this.resolveGameData ? chara.ClassJob.GameData.Name : chara.ClassJob.Id.ToString())} CHP: {chara.CurrentHp} MHP: {chara.MaxHp} CMP: {chara.CurrentMp} MMP: {chara.MaxMp}\n Customize: {BitConverter.ToString(chara.Customize).Replace("-", " ")} StatusFlags: {chara.StatusFlags}"; } if (actor is PlayerCharacter pc) From 71a575d47a781cf667d9fe13adb8730b6540933e Mon Sep 17 00:00:00 2001 From: Dragon Date: Thu, 24 Jun 2021 21:51:45 +0300 Subject: [PATCH 4/4] Fix missing newline --- Dalamud/Interface/DalamudDataWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs index 00936db2c..45ba6a6ad 100644 --- a/Dalamud/Interface/DalamudDataWindow.cs +++ b/Dalamud/Interface/DalamudDataWindow.cs @@ -696,7 +696,7 @@ namespace Dalamud.Interface if (actor is Chara chara) { actorString += - $" Level: {chara.Level} ClassJob: {(this.resolveGameData ? chara.ClassJob.GameData.Name : chara.ClassJob.Id.ToString())} CHP: {chara.CurrentHp} MHP: {chara.MaxHp} CMP: {chara.CurrentMp} MMP: {chara.MaxMp}\n Customize: {BitConverter.ToString(chara.Customize).Replace("-", " ")} StatusFlags: {chara.StatusFlags}"; + $" Level: {chara.Level} ClassJob: {(this.resolveGameData ? chara.ClassJob.GameData.Name : chara.ClassJob.Id.ToString())} CHP: {chara.CurrentHp} MHP: {chara.MaxHp} CMP: {chara.CurrentMp} MMP: {chara.MaxMp}\n Customize: {BitConverter.ToString(chara.Customize).Replace("-", " ")} StatusFlags: {chara.StatusFlags}\n"; } if (actor is PlayerCharacter pc)