diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 39f9274..49f195d 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("ACManager")] [assembly: AssemblyProduct("ACManager")] -[assembly: AssemblyCopyright("Copyright © ACManager 2020")] +[assembly: AssemblyCopyright("Copyright © ACManager 2021")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.0.1.73")] -[assembly: AssemblyFileVersion("3.0.1.73")] +[assembly: AssemblyVersion("3.1.0")] +[assembly: AssemblyFileVersion("3.1.0")] diff --git a/Settings/BotSettings.cs b/Settings/BotSettings.cs index fe8a1f1..61066f5 100644 --- a/Settings/BotSettings.cs +++ b/Settings/BotSettings.cs @@ -82,6 +82,9 @@ public class BotSettings [XmlElement(IsNullable = false)] public bool Level7Self; + [XmlElement(IsNullable = false)] + public int SkillOverride; + public List GemSettings = new List(); public List Advertisements = new List(); diff --git a/StateMachine/Machine.cs b/StateMachine/Machine.cs index bddf559..3804376 100644 --- a/StateMachine/Machine.cs +++ b/StateMachine/Machine.cs @@ -249,6 +249,11 @@ internal class Machine /// public SpellTable SpellTable { get; set; } + /// + /// Manual override of magic skills for determining skill checks. + /// + public int SkillOverride { get; set; } = 0; + /// /// Create the state machine in the StoppedState and begin processing commands on intervals (every time a frame is rendered). /// diff --git a/StateMachine/States/Casting.cs b/StateMachine/States/Casting.cs index 7fb14fc..d85b7d0 100644 --- a/StateMachine/States/Casting.cs +++ b/StateMachine/States/Casting.cs @@ -183,7 +183,19 @@ public void Process(Machine machine) { if (CastBanes) { - machine.Core.Actions.CastSpell(machine.SpellsToCast[0].Id, machine.CurrentRequest.RequesterGuid); + if (SkillCheck(machine, machine.SpellsToCast[0])) + { + machine.Core.Actions.CastSpell(machine.SpellsToCast[0].Id, machine.CurrentRequest.RequesterGuid); + } + else + { + Spell fallbackSpell = GetFallbackSpell(machine.SpellTable, machine.SpellsToCast[0]); + machine.SpellsToCast.RemoveAt(0); + if (fallbackSpell != null) + { + machine.SpellsToCast.Insert(0, fallbackSpell); + } + } } else { @@ -192,12 +204,24 @@ public void Process(Machine machine) } else { - machine.Core.Actions.CastSpell(machine.SpellsToCast[0].Id, machine.CurrentRequest.RequesterGuid); + if (SkillCheck(machine, machine.SpellsToCast[0])) + { + machine.Core.Actions.CastSpell(machine.SpellsToCast[0].Id, machine.CurrentRequest.RequesterGuid); + } + else + { + Spell fallbackSpell = GetFallbackSpell(machine.SpellTable, machine.SpellsToCast[0]); + machine.SpellsToCast.RemoveAt(0); + if (fallbackSpell != null) + { + machine.SpellsToCast.Insert(0, fallbackSpell); + } + } } } else { - Spell fallbackSpell = FallbackSpellCheck(machine.SpellTable, machine.SpellsToCast[0]); + Spell fallbackSpell = GetFallbackSpell(machine.SpellTable, machine.SpellsToCast[0]); machine.SpellsToCast.RemoveAt(0); if (fallbackSpell != null) { @@ -212,7 +236,7 @@ public void Process(Machine machine) } else { - Spell fallbackSpell = FallbackSpellCheck(machine.SpellTable, machine.SpellsToCast[0]); + Spell fallbackSpell = GetFallbackSpell(machine.SpellTable, machine.SpellsToCast[0]); machine.SpellsToCast.RemoveAt(0); if (fallbackSpell != null) { @@ -264,7 +288,7 @@ private bool ContainsBanes(List spells) return false; } - private Spell FallbackSpellCheck(SpellTable spellTable, Spell spell) + private Spell GetFallbackSpell(SpellTable spellTable, Spell spell) { List spellFamily = new List(); for (int i = 1; i < spellTable.Length; i++) @@ -293,5 +317,22 @@ private Spell FallbackSpellCheck(SpellTable spellTable, Spell spell) } return fallback; } + + private bool SkillCheck(Machine machine, Spell spell) + { + switch (spell.School.Id) + { + case 2: + return machine.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.LifeMagic] + machine.SkillOverride >= spell.Difficulty + 20; + case 3: + return machine.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.ItemEnchantment] + machine.SkillOverride >= spell.Difficulty + 20; + case 4: + return machine.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.CreatureEnchantment] + machine.SkillOverride >= spell.Difficulty + 20; + default: + // Void or War + return false; + } + + } } } diff --git a/StateMachine/States/SelfBuffing.cs b/StateMachine/States/SelfBuffing.cs index 605b4aa..11ca62b 100644 --- a/StateMachine/States/SelfBuffing.cs +++ b/StateMachine/States/SelfBuffing.cs @@ -78,15 +78,15 @@ public void Process(Machine machine) { if (machine.ComponentChecker.HaveComponents(machine.SpellsToCast[0].Id)) { - //if (machine.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.CreatureEnchantment] < 400 && !AddedPreBuffs && !machine.Level7Self) - //{ - // AddedPreBuffs = true; - // machine.SpellsToCast.Insert(0, machine.SpellTable.GetById(2067)); // focus 7 - // machine.SpellsToCast.Insert(0, machine.SpellTable.GetById(2091)); // self 7 - // machine.SpellsToCast.Insert(0, machine.SpellTable.GetById(2215)); // creature 7 - //} - //else - //{ + if (machine.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.CreatureEnchantment] < 400 && !AddedPreBuffs && !machine.Level7Self) + { + AddedPreBuffs = true; + machine.SpellsToCast.Insert(0, machine.SpellTable.GetById(2067)); // focus 7 + machine.SpellsToCast.Insert(0, machine.SpellTable.GetById(2091)); // self 7 + machine.SpellsToCast.Insert(0, machine.SpellTable.GetById(2215)); // creature 7 + } + else + { if (machine.Level7Self && machine.SpellsToCast[0].Difficulty > 300) { Spell fallbackSpell = FallbackBuffCheck(machine.SpellTable, machine.SpellsToCast[0]); @@ -99,8 +99,8 @@ public void Process(Machine machine) else { machine.Core.Actions.CastSpell(machine.SpellsToCast[0].Id, 0); - } - //} + } + } } else { diff --git a/StateMachine/States/Stopped.cs b/StateMachine/States/Stopped.cs index 8d40010..5d6ca65 100644 --- a/StateMachine/States/Stopped.cs +++ b/StateMachine/States/Stopped.cs @@ -44,6 +44,7 @@ public void Exit(Machine machine) machine.BuffingCharacter = machine.Utility.BotSettings.BuffingCharacter; machine.StayBuffed = machine.Utility.BotSettings.StayBuffed; machine.Level7Self = machine.Utility.BotSettings.Level7Self; + machine.SkillOverride = machine.Utility.BotSettings.SkillOverride; Debug.ToChat("Started successfully."); machine.ChatManager.Broadcast($"/me is running ACManager {machine.Utility.Version} found at https://github.com/patri0t86/ACManager. Whisper 'help' to get started."); diff --git a/Views/Tabs/ConfigTab.cs b/Views/Tabs/ConfigTab.cs index 8c2d6b8..2ec2bde 100644 --- a/Views/Tabs/ConfigTab.cs +++ b/Views/Tabs/ConfigTab.cs @@ -26,6 +26,7 @@ internal class ConfigTab : IDisposable private HudCombo BuffingCharacterChoice { get; set; } private HudCheckBox StayBuffed { get; set; } private HudCheckBox Level7Self { get; set; } + private HudTextBox SkillOverride { get; set; } private HudStaticText Version { get; set; } private bool disposedValue; @@ -87,6 +88,9 @@ public ConfigTab(BotManagerView botManagerView) Level7Self = Parent.View != null ? (HudCheckBox)Parent.View["Level7Self"] : new HudCheckBox(); Level7Self.Change += Level7Self_Change; + SkillOverride = Parent.View != null ? (HudTextBox)Parent.View["SkillOverride"] : new HudTextBox(); + SkillOverride.Change += SkillOverride_Change; + Version = Parent.View != null ? (HudStaticText)Parent.View["Version"] : new HudStaticText(); Version.Text = $"V{Parent.Machine.Utility.Version}"; @@ -113,6 +117,7 @@ private void LoadSettings() LocationSetpoint.Text = !Parent.Machine.Utility.BotSettings.DesiredLandBlock.Equals(0) ? $"{Parent.Machine.Utility.BotSettings.DesiredLandBlock.ToString("X").Substring(0, 4)} - X: { Math.Round(Parent.Machine.Utility.BotSettings.DesiredBotLocationX, 2)} Y: {Math.Round(Parent.Machine.Utility.BotSettings.DesiredBotLocationY, 2)}" : "No location set"; StayBuffed.Checked = Parent.Machine.Utility.BotSettings.StayBuffed; Level7Self.Checked = Parent.Machine.Utility.BotSettings.Level7Self; + SkillOverride.Text = Parent.Machine.Utility.BotSettings.SkillOverride.ToString(); if (string.IsNullOrEmpty(Parent.Machine.Utility.BotSettings.BuffingCharacter)) { @@ -401,6 +406,28 @@ private void Level7Self_Change(object sender, EventArgs e) } } + private void SkillOverride_Change(object sender, EventArgs e) + { + try + { + if (int.TryParse(SkillOverride.Text, out int result)) + { + Parent.Machine.SkillOverride = Parent.Machine.Utility.BotSettings.SkillOverride = result; + } + else + { + Parent.Machine.SkillOverride = Parent.Machine.Utility.BotSettings.SkillOverride = 0; + SkillOverride.Text = 0.ToString(); + } + Parent.Machine.Utility.SaveBotSettings(); + Debug.ToChat($"Your magic casting abilities are now modified by {Parent.Machine.Utility.BotSettings.SkillOverride} when calculating skill."); + } + catch (Exception ex) + { + Debug.LogException(ex); + } + } + private void PopulateCharacterChoice() { BuffingCharacterChoice.AddItem("None", null); @@ -432,6 +459,7 @@ protected virtual void Dispose(bool disposing) BuffingCharacterChoice.Change -= BuffingCharacterChoice_Change; StayBuffed.Change -= StayBuffed_Change; Level7Self.Change -= Level7Self_Change; + SkillOverride.Change -= SkillOverride_Change; } disposedValue = true; } diff --git a/Views/botManagerView.xml b/Views/botManagerView.xml index 670dbc9..aa18261 100644 --- a/Views/botManagerView.xml +++ b/Views/botManagerView.xml @@ -13,10 +13,10 @@ - + - + @@ -33,6 +33,10 @@ + + + +