From b5b9e6d8e175380cb2857ac2506c18fb6faeb13a Mon Sep 17 00:00:00 2001 From: goat Date: Sun, 29 Mar 2020 23:44:16 +0900 Subject: [PATCH] feat: CompanyTag field on PlayerCharacter --- Dalamud/Game/ClientState/Actors/Types/PlayerCharacter.cs | 6 ++++++ Dalamud/Game/ClientState/Structs/Actor.cs | 8 ++++++-- Dalamud/Interface/DalamudDataWindow.cs | 5 ++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Dalamud/Game/ClientState/Actors/Types/PlayerCharacter.cs b/Dalamud/Game/ClientState/Actors/Types/PlayerCharacter.cs index b1c9238a1..818c828a7 100644 --- a/Dalamud/Game/ClientState/Actors/Types/PlayerCharacter.cs +++ b/Dalamud/Game/ClientState/Actors/Types/PlayerCharacter.cs @@ -1,4 +1,5 @@ using Dalamud.Game.ClientState.Actors.Resolvers; +using SharpDX.Text; namespace Dalamud.Game.ClientState.Actors.Types { /// @@ -21,5 +22,10 @@ namespace Dalamud.Game.ClientState.Actors.Types { /// The home world of the character. /// public World HomeWorld => new World(this.actorStruct.HomeWorld, this.dalamud); + + /// + /// The Free Company tag of this player. + /// + public string CompanyTag => Encoding.UTF8.GetString(this.actorStruct.CompanyTag).Substring(2).Replace("\0", ""); } } diff --git a/Dalamud/Game/ClientState/Structs/Actor.cs b/Dalamud/Game/ClientState/Structs/Actor.cs index b53405006..d3089f8dd 100644 --- a/Dalamud/Game/ClientState/Structs/Actor.cs +++ b/Dalamud/Game/ClientState/Structs/Actor.cs @@ -21,8 +21,12 @@ namespace Dalamud.Game.ClientState.Structs [FieldOffset(141)] public byte SubKind; [FieldOffset(142)] public bool IsFriendly; [FieldOffset(160)] public Position3 Position; - [FieldOffset(6276)] public byte CurrentWorld; - [FieldOffset(6278)] public byte HomeWorld; + + // This field can't be correctly aligned, so we have to cut it manually. + [FieldOffset(0x17d0)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public byte[] CompanyTag; + + [FieldOffset(0x1884)] public byte CurrentWorld; + [FieldOffset(0x1886)] public byte HomeWorld; [FieldOffset(6328)] public int CurrentHp; [FieldOffset(6332)] public int MaxHp; [FieldOffset(6336)] public int CurrentMp; diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs index a872f2442..b98b4e242 100644 --- a/Dalamud/Interface/DalamudDataWindow.cs +++ b/Dalamud/Interface/DalamudDataWindow.cs @@ -95,7 +95,10 @@ namespace Dalamud.Interface if (actor is Chara chara) stateString += $" Level: {chara.Level} ClassJob: {chara.ClassJob.GameData.Name} CHP: {chara.CurrentHp} MHP: {chara.MaxHp} CMP: {chara.CurrentMp} MMP: {chara.MaxMp}\n"; - ; + + if (actor is PlayerCharacter pc) + stateString += + $" HomeWorld: {pc.HomeWorld.GameData.Name} CurrentWorld: {pc.CurrentWorld.GameData.Name} FC: {pc.CompanyTag}\n"; } }