diff --git a/Dalamud/Game/ClientState/Objects/Types/Character.cs b/Dalamud/Game/ClientState/Objects/Types/Character.cs index c4c91f5b0..72f6a9950 100644 --- a/Dalamud/Game/ClientState/Objects/Types/Character.cs +++ b/Dalamud/Game/ClientState/Objects/Types/Character.cs @@ -98,6 +98,13 @@ public interface ICharacter : IGameObject /// Gets the current mount for this character. Will be null if the character doesn't have a mount. /// public ExcelResolver? CurrentMount { get; } + + /// + /// Gets the current minion summoned for this character. Will be null if the character doesn't have a minion. + /// This method *will* return information about a spawned (but invisible) minion, e.g. if the character is riding a + /// mount. + /// + public ExcelResolver? CurrentMinion { get; } } /// @@ -183,13 +190,27 @@ internal unsafe class Character : GameObject, ICharacter { get { - if (this.Struct->IsNotMounted()) return null; // safety i guess? + if (this.Struct->IsNotMounted()) return null; // just for safety. var mountId = this.Struct->Mount.MountId; return mountId == 0 ? null : new ExcelResolver(mountId); } } + /// + public ExcelResolver? CurrentMinion + { + get + { + if (this.Struct->CompanionObject != null) + return new ExcelResolver(this.Struct->CompanionObject->BaseId); + + // this is only present if a minion is summoned but hidden (e.g. the player's on a mount). + var hiddenCompanionId = this.Struct->CompanionData.CompanionId; + return hiddenCompanionId == 0 ? null : new ExcelResolver(hiddenCompanionId); + } + } + /// /// Gets the underlying structure. ///