diff --git a/BasicFlaskRoutine.csproj b/BasicFlaskRoutine.csproj index a842779..fd3cdbd 100644 --- a/BasicFlaskRoutine.csproj +++ b/BasicFlaskRoutine.csproj @@ -40,23 +40,23 @@ False - ..\..\..\..\PoEHelper\ExileCore.dll + ..\..\..\..\PoeHelper\ExileCore.dll False - ..\..\..\..\PoEHelper\ImGui.NET.dll + ..\..\..\..\PoeHelper\ImGui.NET.dll False - ..\..\..\..\PoEHelper\Newtonsoft.Json.dll + ..\..\..\..\PoeHelper\Newtonsoft.Json.dll False - ..\..\..\..\PoEHelper\SharpDX.dll + ..\..\..\..\PoeHelper\SharpDX.dll False - ..\..\..\..\PoEHelper\SharpDX.Mathematics.dll + ..\..\..\..\PoeHelper\SharpDX.Mathematics.dll False diff --git a/BasicFlaskRoutine/BasicFlaskRoutine.cs b/BasicFlaskRoutine/BasicFlaskRoutine.cs index b2c4e81..5537a17 100644 --- a/BasicFlaskRoutine/BasicFlaskRoutine.cs +++ b/BasicFlaskRoutine/BasicFlaskRoutine.cs @@ -22,7 +22,6 @@ public class BasicFlaskRoutine : BaseTreeRoutinePlugin - { - UpdateCoroutineWaitRender(); - }; + Settings.TicksPerSecond.OnValueChanged += (sender, b) => { UpdateCoroutineWaitRender(); }; return true; } private void InitCoroutine() { - TreeCoroutine = new Coroutine(() => TickTree(Tree), new WaitTime(1000 / Settings.TicksPerSecond), this, "BasicFlaskRoutine Tree"); + TreeCoroutine = new Coroutine(() => TickTree(Tree), new WaitTime(1000 / Settings.TicksPerSecond), this, + "BasicFlaskRoutine Tree"); Core.ParallelRunner.Run(TreeCoroutine); } @@ -114,8 +109,9 @@ private void UpdatePlayerMovingStopwatch() PlayerMovingStopwatch.Reset(); return; } - if (player.Address != 0 && player.isMoving - || (player.isAttacking && isTravelingSkill(player.CurrentAction.Skill)) ) + + if (player.Address != 0 && player.isMoving + || (player.isAttacking && isTravelingSkill(player.CurrentAction.Skill))) { if (!PlayerMovingStopwatch.IsRunning) PlayerMovingStopwatch.Start(); @@ -133,31 +129,34 @@ private bool isTravelingSkill(ActorSkill skill) private Composite CreateTree() { - return new Decorator(x => TreeHelper.CanTick() && !PlayerHelper.isPlayerDead() && - (!Cache.InHideout || Settings.EnableInHideout) && PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() { "grace_period" }), - new PrioritySelector - ( - new Decorator(x => Settings.AutoFlask, + return new Decorator(x => TreeHelper.CanTick() && !PlayerHelper.isPlayerDead() && + (!Cache.InHideout || Settings.EnableInHideout) && + PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() {"grace_period"}), + new PrioritySelector + ( + new Decorator(x => Settings.AutoFlask, new PrioritySelector( CreateInstantHPPotionComposite(), CreateHPPotionComposite(), CreateInstantManaPotionComposite(), CreateManaPotionComposite() - ) - ), - CreateAilmentPotionComposite(), - CreateDefensivePotionComposite(), - CreateSpeedPotionComposite(), - CreateOffensivePotionComposite() - ) - ); + ) + ), + CreateAilmentPotionComposite(), + CreateDefensivePotionComposite(), + CreateSpeedPotionComposite(), + CreateOffensivePotionComposite() + ) + ); } private Composite CreateInstantHPPotionComposite() { - return new Decorator((x => !Settings.BossingMode && PlayerHelper.isHealthBelowPercentage(Settings.InstantHPPotion) - || (Settings.AllocatedSupremeDecadence && PlayerHelper.isEnergyShieldBelowPercentage(Settings.InstantESPotion)) - ), + return new Decorator((x => + !Settings.BossingMode && PlayerHelper.isHealthBelowPercentage(Settings.InstantHPPotion) + || (Settings.AllocatedSupremeDecadence && + PlayerHelper.isEnergyShieldBelowPercentage(Settings.InstantESPotion)) + ), new PrioritySelector( CreateUseFlaskAction(FlaskActions.Life, true, true), CreateUseFlaskAction(FlaskActions.Hybrid, true, true), @@ -165,19 +164,19 @@ private Composite CreateInstantHPPotionComposite() CreateUseFlaskAction(FlaskActions.Hybrid) ) ); - } private Composite CreateHPPotionComposite() { return new Decorator((x => !Settings.BossingMode && PlayerHelper.isHealthBelowPercentage(Settings.HPPotion) - || (Settings.AllocatedSupremeDecadence && PlayerHelper.isEnergyShieldBelowPercentage(Settings.ESPotion)) - ), - new Decorator((x => PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() { "flask_effect_life" })), - new PrioritySelector( - CreateUseFlaskAction(FlaskActions.Life, false), - CreateUseFlaskAction(FlaskActions.Hybrid, false) - ) + || (Settings.AllocatedSupremeDecadence && + PlayerHelper.isEnergyShieldBelowPercentage(Settings.ESPotion)) + ), + new Decorator((x => PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() {"flask_effect_life"})), + new PrioritySelector( + CreateUseFlaskAction(FlaskActions.Life, false), + CreateUseFlaskAction(FlaskActions.Hybrid, false) + ) ) ); } @@ -194,8 +193,12 @@ private Composite CreateInstantManaPotionComposite() private Composite CreateManaPotionComposite() { - return new Decorator((x => PlayerHelper.isManaBelowPercentage(Settings.ManaPotion) || PlayerHelper.isManaBelowValue(Settings.MinManaFlask)), - new Decorator((x => PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() { "flask_effect_mana", "flask_effect_mana_not_removed_when_full" })), + return new Decorator( + (x => PlayerHelper.isManaBelowPercentage(Settings.ManaPotion) || + PlayerHelper.isManaBelowValue(Settings.MinManaFlask)), + new Decorator( + (x => PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() + {"flask_effect_mana", "flask_effect_mana_not_removed_when_full"})), new PrioritySelector( CreateUseFlaskAction(FlaskActions.Mana, false), CreateUseFlaskAction(FlaskActions.Hybrid, false) @@ -207,23 +210,29 @@ private Composite CreateManaPotionComposite() private Composite CreateSpeedPotionComposite() { return new Decorator((x => Settings.SpeedFlaskEnable - && (Settings.MinMsPlayerMoving <= PlayerMovingStopwatch.ElapsedMilliseconds - || Settings.UseWhileCycloning - && IsCycloning() - && (Settings.CycloningMonsterCount == 0 - || HasEnoughNearbyMonsters(Settings.CycloningMonsterCount, - Settings.CycloningMonsterDistance, - Settings.CycloningCountNormalMonsters, - Settings.CycloningCountRareMonsters, - Settings.CycloningCountMagicMonsters, - Settings.CycloningCountUniqueMonsters, - Settings.CycloningIgnoreFullHealthUniqueMonsters))) - && (PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() { "flask_bonus_movement_speed", "flask_utility_sprint","flask_utility_phase"}) - || (!Settings.SilverFlaskEnable - || PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() { "flask_utility_haste" })))), + && (Settings.MinMsPlayerMoving <= PlayerMovingStopwatch.ElapsedMilliseconds + || Settings.UseWhileCycloning + && IsCycloning() + && (Settings.CycloningMonsterCount == 0 + || HasEnoughNearbyMonsters(Settings.CycloningMonsterCount, + Settings.CycloningMonsterDistance, + Settings.CycloningCountNormalMonsters, + Settings.CycloningCountRareMonsters, + Settings.CycloningCountMagicMonsters, + Settings.CycloningCountUniqueMonsters, + Settings.CycloningIgnoreFullHealthUniqueMonsters))) + && (PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() + { + "flask_bonus_movement_speed", "flask_utility_sprint", + "flask_utility_phase" + }) + || (!Settings.SilverFlaskEnable + || PlayerHelper.playerDoesNotHaveAnyOfBuffs(new List() + {"flask_utility_haste"})))), new PrioritySelector( new Decorator((x => Settings.QuicksilverFlaskEnable), CreateUseFlaskAction(FlaskActions.Speedrun)), - new Decorator((x => Settings.SilverFlaskEnable), CreateUseFlaskAction(FlaskActions.OFFENSE_AND_SPEEDRUN)) + new Decorator((x => Settings.SilverFlaskEnable), + CreateUseFlaskAction(FlaskActions.OFFENSE_AND_SPEEDRUN)) ) ); } @@ -231,11 +240,23 @@ private Composite CreateSpeedPotionComposite() private Composite CreateDefensivePotionComposite() { return new Decorator((x => Settings.DefensiveFlaskEnable && !Settings.BossingMode && - (PlayerHelper.isHealthBelowPercentage(Settings.HPPercentDefensive) || PlayerHelper.isEnergyShieldBelowPercentage(Settings.ESPercentDefensive) || - Settings.DefensiveMonsterCount > 0 && HasEnoughNearbyMonsters(Settings.DefensiveMonsterCount, Settings.DefensiveMonsterDistance, Settings.DefensiveCountNormalMonsters, Settings.DefensiveCountRareMonsters, Settings.DefensiveCountMagicMonsters, Settings.DefensiveCountUniqueMonsters, Settings.DefensiveIgnoreFullHealthUniqueMonsters))), + (PlayerHelper.isHealthBelowPercentage(Settings.HPPercentDefensive) || + PlayerHelper.isEnergyShieldBelowPercentage(Settings.ESPercentDefensive) || + Settings.DefensiveMonsterCount > 0 && HasEnoughNearbyMonsters( + Settings.DefensiveMonsterCount, Settings.DefensiveMonsterDistance, + Settings.DefensiveCountNormalMonsters, Settings.DefensiveCountRareMonsters, + Settings.DefensiveCountMagicMonsters, Settings.DefensiveCountUniqueMonsters, + Settings.DefensiveIgnoreFullHealthUniqueMonsters))), new PrioritySelector( CreateUseFlaskAction(FlaskActions.Defense), - new Decorator((x => Settings.OffensiveAsDefensiveEnable), CreateUseFlaskAction(new List { FlaskActions.OFFENSE_AND_SPEEDRUN, FlaskActions.Defense }, ignoreFlasksWithAction: (() => Settings.DisableLifeSecUse ? new List() { FlaskActions.Life, FlaskActions.Mana, FlaskActions.Hybrid } : null))) + new Decorator((x => Settings.OffensiveAsDefensiveEnable), + CreateUseFlaskAction( + new List {FlaskActions.OFFENSE_AND_SPEEDRUN, FlaskActions.Defense}, + ignoreFlasksWithAction: (() => + Settings.DisableLifeSecUse + ? new List() + {FlaskActions.Life, FlaskActions.Mana, FlaskActions.Hybrid} + : null))) ) ); } @@ -243,9 +264,20 @@ private Composite CreateDefensivePotionComposite() private Composite CreateOffensivePotionComposite() { return new PrioritySelector( - new Decorator((x => Settings.OffensiveFlaskEnable && !Settings.BossingMode && - (PlayerHelper.isHealthBelowPercentage(Settings.HPPercentOffensive) || PlayerHelper.isEnergyShieldBelowPercentage(Settings.ESPercentOffensive) || Settings.OffensiveMonsterCount > 0 && HasEnoughNearbyMonsters(Settings.OffensiveMonsterCount, Settings.OffensiveMonsterDistance, Settings.OffensiveCountNormalMonsters, Settings.OffensiveCountRareMonsters, Settings.OffensiveCountMagicMonsters, Settings.OffensiveCountUniqueMonsters, Settings.OffensiveIgnoreFullHealthUniqueMonsters))), - CreateUseFlaskAction(new List { FlaskActions.Offense, FlaskActions.OFFENSE_AND_SPEEDRUN }, ignoreFlasksWithAction: (() => Settings.DisableLifeSecUse ? new List() { FlaskActions.Life, FlaskActions.Mana, FlaskActions.Hybrid} : null))) + new Decorator((x => Settings.OffensiveFlaskEnable && !Settings.BossingMode && + (PlayerHelper.isHealthBelowPercentage(Settings.HPPercentOffensive) || + PlayerHelper.isEnergyShieldBelowPercentage(Settings.ESPercentOffensive) || + Settings.OffensiveMonsterCount > 0 && HasEnoughNearbyMonsters( + Settings.OffensiveMonsterCount, Settings.OffensiveMonsterDistance, + Settings.OffensiveCountNormalMonsters, Settings.OffensiveCountRareMonsters, + Settings.OffensiveCountMagicMonsters, Settings.OffensiveCountUniqueMonsters, + Settings.OffensiveIgnoreFullHealthUniqueMonsters))), + CreateUseFlaskAction( + new List {FlaskActions.Offense, FlaskActions.OFFENSE_AND_SPEEDRUN}, + ignoreFlasksWithAction: (() => + Settings.DisableLifeSecUse + ? new List() {FlaskActions.Life, FlaskActions.Mana, FlaskActions.Hybrid} + : null))) ); } @@ -253,27 +285,47 @@ private Composite CreateAilmentPotionComposite() { return new Decorator(x => Settings.RemAilment && !Settings.BossingMode, new PrioritySelector( - new Decorator(x => Settings.RemBleed, CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Bleeding, CreateUseFlaskAction(FlaskActions.BleedImmune, isCleansing:true))), - new Decorator(x => Settings.RemBurning, CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Burning, CreateUseFlaskAction(FlaskActions.IgniteImmune, isCleansing: true))), - CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Corruption, CreateUseFlaskAction(FlaskActions.BleedImmune, isCleansing: true), (() => Settings.CorruptCount)), - new Decorator(x => Settings.RemFrozen, CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Frozen, CreateUseFlaskAction(FlaskActions.FreezeImmune, isCleansing: true))), - new Decorator(x => Settings.RemPoison, CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Poisoned, CreateUseFlaskAction(FlaskActions.PoisonImmune, isCleansing: true))), - new Decorator(x => Settings.RemShocked, CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Shocked, CreateUseFlaskAction(FlaskActions.ShockImmune, isCleansing: true))), - new Decorator(x => Settings.RemCurse, CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.WeakenedSlowed, CreateUseFlaskAction(FlaskActions.CurseImmune, isCleansing: true))) - ) - ); + new Decorator(x => Settings.RemBleed, + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Bleeding, + CreateUseFlaskAction(FlaskActions.BleedImmune, isCleansing: true))), + new Decorator(x => Settings.RemBurning, + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Burning, + CreateUseFlaskAction(FlaskActions.IgniteImmune, isCleansing: true))), + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Corruption, + CreateUseFlaskAction(FlaskActions.BleedImmune, isCleansing: true), + (() => Settings.CorruptCount)), + new Decorator(x => Settings.RemFrozen, + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Frozen, + CreateUseFlaskAction(FlaskActions.FreezeImmune, isCleansing: true))), + new Decorator(x => Settings.RemPoison, + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Poisoned, + CreateUseFlaskAction(FlaskActions.PoisonImmune, isCleansing: true))), + new Decorator(x => Settings.RemShocked, + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.Shocked, + CreateUseFlaskAction(FlaskActions.ShockImmune, isCleansing: true))), + new Decorator(x => Settings.RemCurse, + CreateCurableDebuffDecorator(Cache.DebuffPanelConfig.WeakenedSlowed, + CreateUseFlaskAction(FlaskActions.CurseImmune, isCleansing: true))) + ) + ); } - private Composite CreateUseFlaskAction(FlaskActions flaskAction, Boolean? instant = null, Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, Boolean isCleansing = false) + private Composite CreateUseFlaskAction(FlaskActions flaskAction, Boolean? instant = null, + Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, + Boolean isCleansing = false) { - return CreateUseFlaskAction(new List { flaskAction }, instant, ignoreBuffs, ignoreFlasksWithAction, isCleansing); + return CreateUseFlaskAction(new List {flaskAction}, instant, ignoreBuffs, + ignoreFlasksWithAction, isCleansing); } - private Composite CreateUseFlaskAction(List flaskActions, Boolean? instant = null, Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, Boolean isCleansing = false) + private Composite CreateUseFlaskAction(List flaskActions, Boolean? instant = null, + Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, + Boolean isCleansing = false) { return new UseHotkeyAction(KeyboardHelper, x => { - var foundFlask = FindFlaskMatchingAnyAction(flaskActions, instant, ignoreBuffs, ignoreFlasksWithAction, isCleansing); + var foundFlask = FindFlaskMatchingAnyAction(flaskActions, instant, ignoreBuffs, ignoreFlasksWithAction, + isCleansing); if (foundFlask == null) { @@ -284,7 +336,8 @@ private Composite CreateUseFlaskAction(List flaskActions, Boolean? }); } - private Boolean HasEnoughNearbyMonsters(int minimumMonsterCount, int maxDistance, bool countNormal, bool countRare, bool countMagic, bool countUnique, bool ignoreUniqueIfFullHealth) + private Boolean HasEnoughNearbyMonsters(int minimumMonsterCount, int maxDistance, bool countNormal, + bool countRare, bool countMagic, bool countUnique, bool ignoreUniqueIfFullHealth) { var mobCount = 0; var maxDistanceSquare = maxDistance * maxDistance; @@ -339,29 +392,41 @@ private Boolean HasEnoughNearbyMonsters(int minimumMonsterCount, int maxDistance { if (Settings.Debug) { - Log("NearbyMonstersCondition returning true because " + mobCount + " mobs valid monsters were found nearby.", 2); + Log( + "NearbyMonstersCondition returning true because " + mobCount + + " mobs valid monsters were found nearby.", 2); } + return true; } } - } else if (Settings.Debug) + } + else if (Settings.Debug) { Log("NearbyMonstersCondition returning false because mob list was invalid.", 2); } if (Settings.Debug) { - Log("NearbyMonstersCondition returning false because " + mobCount + " mobs valid monsters were found nearby.", 2); + Log( + "NearbyMonstersCondition returning false because " + mobCount + + " mobs valid monsters were found nearby.", 2); } + return false; } - private PlayerFlask FindFlaskMatchingAnyAction(FlaskActions flaskAction, Boolean? instant = null, Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, Boolean isCleansing = false) + private PlayerFlask FindFlaskMatchingAnyAction(FlaskActions flaskAction, Boolean? instant = null, + Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, + Boolean isCleansing = false) { - return FindFlaskMatchingAnyAction(new List { flaskAction }, instant, ignoreBuffs, ignoreFlasksWithAction, isCleansing); + return FindFlaskMatchingAnyAction(new List {flaskAction}, instant, ignoreBuffs, + ignoreFlasksWithAction, isCleansing); } - private PlayerFlask FindFlaskMatchingAnyAction(List flaskActions, Boolean? instant = null, Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, Boolean isCleansing = false) + private PlayerFlask FindFlaskMatchingAnyAction(List flaskActions, Boolean? instant = null, + Boolean ignoreBuffs = false, Func> ignoreFlasksWithAction = null, + Boolean isCleansing = false) { var allFlasks = FlaskHelper.GetAllFlaskInfo(); @@ -383,20 +448,23 @@ private PlayerFlask FindFlaskMatchingAnyAction(List flaskActions, { foreach (var flask in allFlasks) { - LogMessage($"{Name}: Flask: {flask.Name} Slot: {flask.Index} Instant: {flask.InstantType} Action1: {flask.Action1} Action2: {flask.Action2}", 5); + LogMessage( + $"{Name}: Flask: {flask.Name} Slot: {flask.Index} Instant: {flask.InstantType} Action1: {flask.Action1} Action2: {flask.Action2}", + 5); } } List ignoreFlaskActions = ignoreFlasksWithAction == null ? null : ignoreFlasksWithAction(); var flaskList = allFlasks - .Where(x => + .Where(x => Settings.FlaskSettings[x.Index].Enabled && FlaskHasAvailableAction(flaskActions, ignoreFlaskActions, x) && FlaskHelper.CanUsePotion(x, Settings.FlaskSettings[x.Index].ReservedUses, isCleansing) && FlaskMatchesInstant(x, instant) && (ignoreBuffs || MissingFlaskBuff(x)) - ).OrderByDescending(x => flaskActions.Contains(x.Action1)).ThenByDescending(x => x.TotalUses - Settings.FlaskSettings[x.Index].ReservedUses).ToList(); + ).OrderByDescending(x => flaskActions.Contains(x.Action1)) + .ThenByDescending(x => x.TotalUses - Settings.FlaskSettings[x.Index].ReservedUses).ToList(); if (flaskList == null || !flaskList.Any()) { @@ -406,56 +474,68 @@ private PlayerFlask FindFlaskMatchingAnyAction(List flaskActions, } if (Settings.Debug) - LogMessage(Name + ": Flask(s) found for action: " + flaskActions[0] + " Flask Count: " + flaskList.Count(), 1); + LogMessage( + Name + ": Flask(s) found for action: " + flaskActions[0] + " Flask Count: " + flaskList.Count(), 1); return flaskList.FirstOrDefault(); } - private bool FlaskHasAvailableAction(List flaskActions, List ignoreFlaskActions, PlayerFlask flask) + private bool FlaskHasAvailableAction(List flaskActions, List ignoreFlaskActions, + PlayerFlask flask) { return flaskActions.Any(x => x == flask.Action1 || x == flask.Action2) - && (ignoreFlaskActions == null || !ignoreFlaskActions.Any(x => x == flask.Action1 || x == flask.Action2)); + && (ignoreFlaskActions == null || + !ignoreFlaskActions.Any(x => x == flask.Action1 || x == flask.Action2)); } private bool FlaskMatchesInstant(PlayerFlask playerFlask, Boolean? instant) { - return instant == null - || instant == false && CanUseFlaskAsRegen(playerFlask) - || instant == true && CanUseFlaskAsInstant(playerFlask); + return instant == null + || instant == false && CanUseFlaskAsRegen(playerFlask) + || instant == true && CanUseFlaskAsInstant(playerFlask); } private bool CanUseFlaskAsInstant(PlayerFlask playerFlask) { // If the flask is instant, no special logic needed return playerFlask.InstantType == FlaskInstantType.Partial - || playerFlask.InstantType == FlaskInstantType.Full - || (playerFlask.InstantType == FlaskInstantType.LowLife && (PlayerHelper.isHealthBelowPercentage(50) - || Settings.AllocatedSupremeDecadence && IsReallyLowLife())); + || playerFlask.InstantType == FlaskInstantType.Full + || (playerFlask.InstantType == FlaskInstantType.LowLife && (PlayerHelper.isHealthBelowPercentage(50) + || Settings.AllocatedSupremeDecadence && + IsReallyLowLife())); } private bool CanUseFlaskAsRegen(PlayerFlask playerFlask) { return playerFlask.InstantType == FlaskInstantType.None - || playerFlask.InstantType == FlaskInstantType.Partial && !Settings.ForceBubblingAsInstantOnly - || playerFlask.InstantType == FlaskInstantType.LowLife && !Settings.ForcePanickedAsInstantOnly; + || playerFlask.InstantType == FlaskInstantType.Partial && !Settings.ForceBubblingAsInstantOnly + || playerFlask.InstantType == FlaskInstantType.LowLife && !Settings.ForcePanickedAsInstantOnly; } private bool MissingFlaskBuff(PlayerFlask playerFlask) { - return !PlayerHelper.playerHasBuffs(new List { playerFlask.BuffString1 }) || !PlayerHelper.playerHasBuffs(new List { playerFlask.BuffString2 }); + return !PlayerHelper.playerHasBuffs(new List {playerFlask.BuffString1}) || + !PlayerHelper.playerHasBuffs(new List {playerFlask.BuffString2}); } private bool IsCycloning() { - try { - var buffs = GameController.Game.IngameState.Data.LocalPlayer.GetComponent().BuffsList; + try + { + var buffs = GameController.Game.IngameState.Data.LocalPlayer + .GetComponent().BuffsList; foreach (var buff in buffs) if (buff.Name.ToLower().Equals("cyclone_channelled_stage")) - return float.IsInfinity(buff.Timer);} - catch { + return float.IsInfinity(buff.Timer); + } + catch + { if (Settings.Debug) - LogError("BasicFlaskRoutine: Using Speed Flasks while Cycloning is enabled, but cannot get player buffs. Try to update PoeHUD.", 5);} + LogError( + "BasicFlaskRoutine: Using Speed Flasks while Cycloning is enabled, but cannot get player buffs. Try to update PoeHUD.", + 5); + } return false; } @@ -467,11 +547,13 @@ private bool IsReallyLowLife() return (playerLife.CurHP / playerLife.MaxHP) * 100 < 50; } - private Decorator CreateCurableDebuffDecorator(Dictionary dictionary, Composite child, Func minCharges = null) + private Decorator CreateCurableDebuffDecorator(Dictionary dictionary, Composite child, + Func minCharges = null) { return new Decorator((x => { - var buffs = GameController.Game.IngameState.Data.LocalPlayer.GetComponent().BuffsList; + var buffs = GameController.Game.IngameState.Data.LocalPlayer + .GetComponent().BuffsList; if (buffs == null) return false; foreach (var buff in buffs) { @@ -485,6 +567,7 @@ private Decorator CreateCurableDebuffDecorator(Dictionary dictionar return (filterId == 0 || filterId != 1) && (minCharges == null || buff.Charges >= minCharges()); } } + return false; }), child); } @@ -496,9 +579,13 @@ public override void Render() if (Settings.BossingModeToggle && Settings.BossingModeHotkey.PressedOnce()) { Settings.BossingMode = !Settings.BossingMode; - if (Settings.BossingMode) LogMessage("BossingMode Activated! No automatic flasking until disabled.", 5, Color.Red); + if (Settings.BossingMode) + LogMessage("BossingMode Activated! No automatic flasking until disabled.", 5, Color.Red); else LogMessage("BossingMode deactivated.", 5); } + + var color = Settings.BossingMode ? Color.Green : Color.Red; + Graphics.DrawText("BOSSING MODE", new Vector2(100, 100), color, 32); } public override void DrawSettings() @@ -512,13 +599,16 @@ public override void DrawSettings() Settings.EnableInHideout.Value = ImGuiExtension.Checkbox("Enable in Hideout", Settings.EnableInHideout); ImGui.Separator(); Settings.TicksPerSecond.Value = ImGuiExtension.IntSlider("Ticks Per Second", Settings.TicksPerSecond); - ImGuiExtension.ToolTipWithText("(?)", "Determines how many times the plugin checks flasks every second.\nLower for less resources, raise for faster response (but higher chance to chug potions)."); + ImGuiExtension.ToolTipWithText("(?)", + "Determines how many times the plugin checks flasks every second.\nLower for less resources, raise for faster response (but higher chance to chug potions)."); ImGui.Separator(); Settings.Debug.Value = ImGuiExtension.Checkbox("Debug Mode", Settings.Debug); ImGui.Separator(); - Settings.BossingModeToggle.Value = ImGuiExtension.Checkbox("Disable Defensive and Offensive Flasking", Settings.BossingModeToggle); + Settings.BossingModeToggle.Value = ImGuiExtension.Checkbox("Disable Defensive and Offensive Flasking", + Settings.BossingModeToggle); ImGui.Separator(); - Settings.BossingModeHotkey.Value = ImGuiExtension.HotkeySelector("BossingModeHotkey", Settings.BossingModeHotkey.Value); + Settings.BossingModeHotkey.Value = + ImGuiExtension.HotkeySelector("BossingModeHotkey", Settings.BossingModeHotkey.Value); ImGui.TreePop(); } @@ -563,10 +653,12 @@ public override void DrawSettings() Settings.InstantHPPotion.Value = ImGuiExtension.IntSlider("Min Life % Auto Instant HP Flask", Settings.InstantHPPotion); Settings.AllocatedSupremeDecadence.Value = - ImGuiExtension.Checkbox("Enable use Life/Hybrid Flasks to restore Energy Shield", Settings.AllocatedSupremeDecadence); - ImGuiExtension.ToolTipWithText("(?)", "When enabled, Life-recovery flasks will also be used to recovery Energy Shield." + - "\nWarning: Life/Hybrid Flasks without Remove Ailments affix will not be used when on full life " + - "\n (example: ~20 points non-Reserved Life is always equal full life) because it is game mechanics."); + ImGuiExtension.Checkbox("Enable use Life/Hybrid Flasks to restore Energy Shield", + Settings.AllocatedSupremeDecadence); + ImGuiExtension.ToolTipWithText("(?)", + "When enabled, Life-recovery flasks will also be used to recovery Energy Shield." + + "\nWarning: Life/Hybrid Flasks without Remove Ailments affix will not be used when on full life " + + "\n (example: ~20 points non-Reserved Life is always equal full life) because it is game mechanics."); Settings.ESPotion.Value = ImGuiExtension.IntSlider("Min Energy Shield % Auto HP Flask", Settings.ESPotion); Settings.InstantESPotion.Value = @@ -639,7 +731,8 @@ public override void DrawSettings() Settings.CycloningCountUniqueMonsters.Value = ImGuiExtension.Checkbox("Unique Monsters", Settings.CycloningCountUniqueMonsters); Settings.CycloningIgnoreFullHealthUniqueMonsters.Value = - ImGuiExtension.Checkbox("Ignore Full Health Unique Monsters", Settings.CycloningIgnoreFullHealthUniqueMonsters); + ImGuiExtension.Checkbox("Ignore Full Health Unique Monsters", + Settings.CycloningIgnoreFullHealthUniqueMonsters); ImGui.TreePop(); } @@ -671,7 +764,8 @@ public override void DrawSettings() Settings.DefensiveCountUniqueMonsters.Value = ImGuiExtension.Checkbox("Unique Monsters", Settings.DefensiveCountUniqueMonsters); Settings.DefensiveIgnoreFullHealthUniqueMonsters.Value = - ImGuiExtension.Checkbox("Ignore Full Health Unique Monsters", Settings.DefensiveIgnoreFullHealthUniqueMonsters); + ImGuiExtension.Checkbox("Ignore Full Health Unique Monsters", + Settings.DefensiveIgnoreFullHealthUniqueMonsters); ImGui.TreePop(); } @@ -699,7 +793,8 @@ public override void DrawSettings() Settings.OffensiveCountUniqueMonsters.Value = ImGuiExtension.Checkbox("Unique Monsters", Settings.OffensiveCountUniqueMonsters); Settings.OffensiveIgnoreFullHealthUniqueMonsters.Value = - ImGuiExtension.Checkbox("Ignore Full Health Unique Monsters", Settings.OffensiveIgnoreFullHealthUniqueMonsters); + ImGuiExtension.Checkbox("Ignore Full Health Unique Monsters", + Settings.OffensiveIgnoreFullHealthUniqueMonsters); ImGui.TreePop(); }