From 3bcb87fdc68afd567c54d00b01f94981712cbe62 Mon Sep 17 00:00:00 2001 From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com> Date: Sat, 21 Sep 2024 01:37:25 -0500 Subject: [PATCH] Update Chocobo code and update ScholarRotation checks Refactored `HasCompanion` and `GetCompanion` in `DataCenter` to include null checks for `Player.BattleChara` and `CharacterManager.Instance()`. Updated `ObjectHelper` to use a pointer for Chocobo companion and added braces for readability. Enhanced `ScholarRotation` methods to check for `Dissipation` status in `ActionCheck` delegate. --- RotationSolver.Basic/DataCenter.cs | 27 ++++++++++++++----- RotationSolver.Basic/Helpers/ObjectHelper.cs | 8 +++--- .../Rotations/Basic/ScholarRotation.cs | 10 +++---- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/RotationSolver.Basic/DataCenter.cs b/RotationSolver.Basic/DataCenter.cs index 999f64272..da5d3dc2c 100644 --- a/RotationSolver.Basic/DataCenter.cs +++ b/RotationSolver.Basic/DataCenter.cs @@ -531,15 +531,30 @@ public static bool HasPet } } - public static unsafe bool HasCompanion => (IntPtr)Player.BattleChara != IntPtr.Zero - && (IntPtr)CharacterManager.Instance()->LookupBuddyByOwnerObject( - Player.BattleChara) != IntPtr.Zero; + public static unsafe bool HasCompanion + { + get + { + var playerBattleChara = Player.BattleChara; + if (playerBattleChara == null) return false; + + var characterManager = CharacterManager.Instance(); + if (characterManager == null) return false; + + var companion = characterManager->LookupBuddyByOwnerObject(playerBattleChara); + return (IntPtr)companion != IntPtr.Zero; + } + } public static unsafe BattleChara* GetCompanion() { - if(HasCompanion) - return CharacterManager.Instance()->LookupBuddyByOwnerObject(Player.BattleChara); - return null; + var playerBattleChara = Player.BattleChara; + if (playerBattleChara == null) return null; + + var characterManager = CharacterManager.Instance(); + if (characterManager == null) return null; + + return characterManager->LookupBuddyByOwnerObject(playerBattleChara); } #region HP diff --git a/RotationSolver.Basic/Helpers/ObjectHelper.cs b/RotationSolver.Basic/Helpers/ObjectHelper.cs index ee237fbc3..ecd814462 100644 --- a/RotationSolver.Basic/Helpers/ObjectHelper.cs +++ b/RotationSolver.Basic/Helpers/ObjectHelper.cs @@ -166,12 +166,14 @@ internal static bool IsParty(this IGameObject gameObject) if (Svc.Party.Any(p => p.GameObject?.GameObjectId == gameObject.GameObjectId)) return true; if (gameObject.SubKind == 9) return true; - //Add Player Chocobo Companion to Party List + // Add Player Chocobo Companion to Party List unsafe { - BattleChara? CompanionChocobo = *DataCenter.GetCompanion(); - if (CompanionChocobo != null) + BattleChara* companionChocobo = DataCenter.GetCompanion(); + if (companionChocobo != null) + { return true; + } } if (Service.Config.FriendlyBattleNpcHeal && gameObject.GetNameplateKind() == NameplateKind.FriendlyBattleNPC) return true; diff --git a/RotationSolver.Basic/Rotations/Basic/ScholarRotation.cs b/RotationSolver.Basic/Rotations/Basic/ScholarRotation.cs index 90aa268ac..c27db5a61 100644 --- a/RotationSolver.Basic/Rotations/Basic/ScholarRotation.cs +++ b/RotationSolver.Basic/Rotations/Basic/ScholarRotation.cs @@ -61,7 +61,7 @@ static partial void ModifyResurrectionPvE(ref ActionSetting setting) static partial void ModifyWhisperingDawnPvE_16537(ref ActionSetting setting) { - setting.ActionCheck = () => DataCenter.HasPet; + setting.ActionCheck = () => DataCenter.HasPet && !Player.HasStatus(true, StatusID.Dissipation); setting.IsFriendly = true; setting.CreateConfig = () => new ActionConfig() { @@ -109,9 +109,9 @@ static partial void ModifyRuinIiPvE(ref ActionSetting setting) } - static partial void ModifyFeyIlluminationPvE(ref ActionSetting setting) + static partial void ModifyFeyIlluminationPvE_16538(ref ActionSetting setting) { - setting.ActionCheck = () => DataCenter.HasPet; + setting.ActionCheck = () => DataCenter.HasPet && !Player.HasStatus(true, StatusID.Dissipation); setting.CreateConfig = () => new ActionConfig() { AoeCount = 1, @@ -243,7 +243,7 @@ static partial void ModifyRecitationPvE(ref ActionSetting setting) static partial void ModifyFeyBlessingPvE(ref ActionSetting setting) { - setting.ActionCheck = () => SeraphTime <= 0 && DataCenter.HasPet; + setting.ActionCheck = () => SeraphTime <= 0 && DataCenter.HasPet && !Player.HasStatus(true, StatusID.Dissipation); setting.IsFriendly = true; } @@ -312,7 +312,7 @@ static partial void ModifyConcitationPvE(ref ActionSetting setting) static partial void ModifySeraphismPvE(ref ActionSetting setting) { - setting.ActionCheck = () => DataCenter.HasPet && InCombat; + setting.ActionCheck = () => DataCenter.HasPet && InCombat && !Player.HasStatus(true, StatusID.Dissipation); setting.IsFriendly = true; }