diff --git a/AmeisenBotX.Core/AmeisenBot.cs b/AmeisenBotX.Core/AmeisenBot.cs index 733eca27..3e7e8b02 100644 --- a/AmeisenBotX.Core/AmeisenBot.cs +++ b/AmeisenBotX.Core/AmeisenBot.cs @@ -103,101 +103,15 @@ public AmeisenBot(string botDataPath, string accountName, AmeisenBotConfig confi LoadCustomCombatClass(); } + // if a combatclass specified an ItemComparator + // use it instead of the default one if (CombatClass?.ItemComparator != null) { CharacterManager.ItemComparator = CombatClass.ItemComparator; } StateMachine = new AmeisenBotStateMachine(BotDataPath, WowProcess, Config, XMemory, OffsetList, ObjectManager, CharacterManager, HookManager, EventHookManager, BotCache, PathfindingHandler, MovemenEngine, MovementSettings, CombatClass, BattlegroundEngine); - StateMachine.OnStateMachineStateChanged += HandlePositionLoad; - } - - private void LoadCustomCombatClass() - { - AmeisenLogger.Instance.Log($"Loading custom CombatClass: {Config.CustomCombatClassFile}", LogLevel.Verbose); - if (Config.CustomCombatClassFile.Length == 0 - || !File.Exists(Config.CustomCombatClassFile)) - { - LoadDefaultCombatClass(); - } - else - { - try - { - CombatClass = CompileCustomCombatClass(); - OnCombatClassCompilationStatusChanged?.Invoke(true, string.Empty, string.Empty); - } - catch (Exception e) - { - OnCombatClassCompilationStatusChanged?.Invoke(false, e.GetType().Name, e.ToString()); - LoadDefaultCombatClass(); - } - } - } - - private ICombatClass CompileCustomCombatClass() - { - CompilerParameters parameters = new CompilerParameters - { - GenerateInMemory = true, - GenerateExecutable = false - }; - - foreach (string dependecy in Config.CustomCombatClassDependencies) - { - parameters.ReferencedAssemblies.Add(dependecy); - } - - using CSharpCodeProvider codeProvider = new CSharpCodeProvider(); - CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, File.ReadAllText(Config.CustomCombatClassFile)); - - if (results.Errors.HasErrors) - { - StringBuilder sb = new StringBuilder(); - - foreach (CompilerError error in results.Errors) - { - sb.AppendLine($"Error {error.ErrorNumber} Line: {error.Line}: {error.ErrorText}"); - } - - throw new InvalidOperationException(sb.ToString()); - } - - return (ICombatClass)results.CompiledAssembly.CreateInstance(typeof(ICombatClass).ToString()); - } - - private void LoadDefaultCombatClass() - { - AmeisenLogger.Instance.Log($"Loading built in CombatClass: {Config.BuiltInCombatClassName}", LogLevel.Verbose); - CombatClass = (Config.BuiltInCombatClassName.ToUpper()) switch - { - "WARRIORARMS" => new WarriorArms(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), - "DEATHKNIGHTBLOOD" => new DeathknightBlood(ObjectManager, CharacterManager, HookManager), - "DEATHKNIGHTUNHOLY" => new DeathknightUnholy(ObjectManager, CharacterManager, HookManager), - "DEATHKNIGHTFROST" => new DeathknightFrost(ObjectManager, CharacterManager, HookManager), - "WARRIORFURY" => new WarriorFury(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), - "PALADINHOLY" => new PaladinHoly(ObjectManager, CharacterManager, HookManager), - "PALADINRETRIBUTION" => new PaladinRetribution(ObjectManager, CharacterManager, HookManager), - "PALADINPROTECTION" => new PaladinProtection(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), - "MAGEARCANE" => new MageArcane(ObjectManager, CharacterManager, HookManager), - "MAGEFIRE" => new MageFire(ObjectManager, CharacterManager, HookManager), - "HUNTERBEASTMASTERY" => new HunterBeastmastery(ObjectManager, CharacterManager, HookManager), - "HUNTERMARKSMANSHIP" => new HunterMarksmanship(ObjectManager, CharacterManager, HookManager), - "HUNTERSURVIVAL" => new HunterSurvival(ObjectManager, CharacterManager, HookManager), - "PRIESTHOLY" => new PriestHoly(ObjectManager, CharacterManager, HookManager), - "PRIESTDISCIPLINE" => new PriestDiscipline(ObjectManager, CharacterManager, HookManager), - "PRIESTSHADOW" => new PriestShadow(ObjectManager, CharacterManager, HookManager), - "WARLOCKAFFLICTION" => new WarlockAffliction(ObjectManager, CharacterManager, HookManager), - "WARLOCKDEMONOLOGY" => new WarlockDemonology(ObjectManager, CharacterManager, HookManager), - "WARLOCKDESTRUCTION" => new WarlockDestruction(ObjectManager, CharacterManager, HookManager), - "DRUIDRESTORATION" => new DruidRestoration(ObjectManager, CharacterManager, HookManager), - "DRUIDBALANCE" => new DruidBalance(ObjectManager, CharacterManager, HookManager), - "ROGUEASSASSINATION" => new RogueAssassination(ObjectManager, CharacterManager, HookManager), - "ALTROGUEASSASSINATION" => new RogueAssassination2(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), - "SHAMANELEMENTAL" => new ShamanElemental(ObjectManager, CharacterManager, HookManager), - "SHAMANRESTORATION" => new ShamanRestoration(ObjectManager, CharacterManager, HookManager), - _ => null, - }; + StateMachine.OnStateMachineStateChanged += HandleLoadWowPosition; } public delegate void CombatClassCompilationStatus(bool succeeded, string heading, string message); @@ -206,21 +120,21 @@ private void LoadDefaultCombatClass() public string AccountName { get; } - public IAmeisenBotCache BotCache { get; set; } - - public BotPersonality BotPersonality { get; set; } + public BattlegroundEngine BattlegroundEngine { get; set; } - public CombatLogParser CombatLogParser { get; set; } + public IAmeisenBotCache BotCache { get; set; } public string BotDataPath { get; } + public BotPersonality BotPersonality { get; set; } + public CharacterManager CharacterManager { get; set; } public ICombatClass CombatClass { get; set; } - public AmeisenBotConfig Config { get; } + public CombatLogParser CombatLogParser { get; set; } - public MovementSettings MovementSettings { get; set; } + public AmeisenBotConfig Config { get; } public double CurrentExecutionMs { @@ -241,8 +155,12 @@ private set public HookManager HookManager { get; set; } + public bool IsRunning { get; private set; } + public IMovementEngine MovemenEngine { get; set; } - public BattlegroundEngine BattlegroundEngine { get; private set; } + + public MovementSettings MovementSettings { get; set; } + public ObjectManager ObjectManager { get; set; } public IOffsetList OffsetList { get; } @@ -259,7 +177,16 @@ private set private XMemory XMemory { get; } - public bool IsRunning { get; private set; } + public void Pause() + { + IsRunning = false; + } + + public void Resume() + { + IsRunning = true; + stateMachineTimerBusy = 0; + } public void Start() { @@ -307,9 +234,40 @@ private static void SetupLogging(string botDataPath, string accountName) AmeisenLogger.Instance.Start(); } - private void HandlePositionLoad() + private ICombatClass CompileCustomCombatClass() + { + CompilerParameters parameters = new CompilerParameters + { + GenerateInMemory = true, + GenerateExecutable = false + }; + + foreach (string dependecy in Config.CustomCombatClassDependencies) + { + parameters.ReferencedAssemblies.Add(dependecy); + } + + using CSharpCodeProvider codeProvider = new CSharpCodeProvider(); + CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, File.ReadAllText(Config.CustomCombatClassFile)); + + if (results.Errors.HasErrors) + { + StringBuilder sb = new StringBuilder(); + + foreach (CompilerError error in results.Errors) + { + sb.AppendLine($"Error {error.ErrorNumber} Line: {error.Line}: {error.ErrorText}"); + } + + throw new InvalidOperationException(sb.ToString()); + } + + return (ICombatClass)results.CompiledAssembly.CreateInstance(typeof(ICombatClass).ToString()); + } + + private void HandleLoadWowPosition() { - if (StateMachine.CurrentState.Key == AmeisenBotState.Login) + if (StateMachine.CurrentState.Key == BotState.Login) { if (Config.SaveWowWindowPosition) { @@ -342,6 +300,63 @@ private void LoadBotWindowPosition() } } + private void LoadCustomCombatClass() + { + AmeisenLogger.Instance.Log($"Loading custom CombatClass: {Config.CustomCombatClassFile}", LogLevel.Verbose); + if (Config.CustomCombatClassFile.Length == 0 + || !File.Exists(Config.CustomCombatClassFile)) + { + LoadDefaultCombatClass(); + } + else + { + try + { + CombatClass = CompileCustomCombatClass(); + OnCombatClassCompilationStatusChanged?.Invoke(true, string.Empty, string.Empty); + } + catch (Exception e) + { + OnCombatClassCompilationStatusChanged?.Invoke(false, e.GetType().Name, e.ToString()); + LoadDefaultCombatClass(); + } + } + } + + private void LoadDefaultCombatClass() + { + AmeisenLogger.Instance.Log($"Loading built in CombatClass: {Config.BuiltInCombatClassName}", LogLevel.Verbose); + CombatClass = (Config.BuiltInCombatClassName.ToUpper()) switch + { + "WARRIORARMS" => new WarriorArms(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), + "DEATHKNIGHTBLOOD" => new DeathknightBlood(ObjectManager, CharacterManager, HookManager), + "DEATHKNIGHTUNHOLY" => new DeathknightUnholy(ObjectManager, CharacterManager, HookManager), + "DEATHKNIGHTFROST" => new DeathknightFrost(ObjectManager, CharacterManager, HookManager), + "WARRIORFURY" => new WarriorFury(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), + "PALADINHOLY" => new PaladinHoly(ObjectManager, CharacterManager, HookManager), + "PALADINRETRIBUTION" => new PaladinRetribution(ObjectManager, CharacterManager, HookManager), + "PALADINPROTECTION" => new PaladinProtection(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), + "MAGEARCANE" => new MageArcane(ObjectManager, CharacterManager, HookManager), + "MAGEFIRE" => new MageFire(ObjectManager, CharacterManager, HookManager), + "HUNTERBEASTMASTERY" => new HunterBeastmastery(ObjectManager, CharacterManager, HookManager), + "HUNTERMARKSMANSHIP" => new HunterMarksmanship(ObjectManager, CharacterManager, HookManager), + "HUNTERSURVIVAL" => new HunterSurvival(ObjectManager, CharacterManager, HookManager), + "PRIESTHOLY" => new PriestHoly(ObjectManager, CharacterManager, HookManager), + "PRIESTDISCIPLINE" => new PriestDiscipline(ObjectManager, CharacterManager, HookManager), + "PRIESTSHADOW" => new PriestShadow(ObjectManager, CharacterManager, HookManager), + "WARLOCKAFFLICTION" => new WarlockAffliction(ObjectManager, CharacterManager, HookManager), + "WARLOCKDEMONOLOGY" => new WarlockDemonology(ObjectManager, CharacterManager, HookManager), + "WARLOCKDESTRUCTION" => new WarlockDestruction(ObjectManager, CharacterManager, HookManager), + "DRUIDRESTORATION" => new DruidRestoration(ObjectManager, CharacterManager, HookManager), + "DRUIDBALANCE" => new DruidBalance(ObjectManager, CharacterManager, HookManager), + "ROGUEASSASSINATION" => new RogueAssassination(ObjectManager, CharacterManager, HookManager), + "ALTROGUEASSASSINATION" => new RogueAssassination2(ObjectManager, CharacterManager, HookManager, PathfindingHandler, new DefaultMovementEngine(ObjectManager, MovementSettings)), + "SHAMANELEMENTAL" => new ShamanElemental(ObjectManager, CharacterManager, HookManager), + "SHAMANRESTORATION" => new ShamanRestoration(ObjectManager, CharacterManager, HookManager), + _ => null, + }; + } + private void LoadWowWindowPosition() { if (AccountName.Length > 0) @@ -370,6 +385,41 @@ private void OnBagChanged(long timestamp, List args) CharacterManager.Inventory.Update(); } + private void OnBattlegroundScoreUpdate(long timestamp, List args) + { + AmeisenLogger.Instance.Log($"Event OnBattlegroundScoreUpdate: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); + } + + private void OnBgAllianceMessage(long timestamp, List args) + { + AmeisenLogger.Instance.Log($"Event OnBgAllianceMessage: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); + + if (args.Count > 1) + { + ProcessBgMessage(args[0], args[1]); + } + } + + private void OnBgHordeMessage(long timestamp, List args) + { + AmeisenLogger.Instance.Log($"Event OnBgHordeMessage: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); + + if (args.Count > 1) + { + ProcessBgMessage(args[0], args[1]); + } + } + + private void OnBgNeutralMessage(long timestamp, List args) + { + AmeisenLogger.Instance.Log($"Event OnBgNeutralMessage: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); + + if (args.Count > 1) + { + ProcessBgMessage(args[0], args[1]); + } + } + private void OnConfirmBindOnPickup(long timestamp, List args) { AmeisenLogger.Instance.Log($"Event OnConfirmBindOnPickup: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); @@ -416,15 +466,15 @@ private void OnPartyInvitation(long timestamp, List args) HookManager.AcceptPartyInvite(); } - private void OnReadyCheck(long timestamp, List args) + private void OnPvpQueueShow(long timestamp, List args) { - AmeisenLogger.Instance.Log($"Event OnReadyCheck: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - HookManager.CofirmReadyCheck(true); + AmeisenLogger.Instance.Log($"Event OnPvpQueueShow: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); } - public void Pause() + private void OnReadyCheck(long timestamp, List args) { - IsRunning = false; + AmeisenLogger.Instance.Log($"Event OnReadyCheck: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); + HookManager.CofirmReadyCheck(true); } private void OnResurrectRequest(long timestamp, List args) @@ -433,18 +483,41 @@ private void OnResurrectRequest(long timestamp, List args) HookManager.AcceptResurrect(); } - public void Resume() - { - IsRunning = true; - stateMachineTimerBusy = 0; - } - private void OnSummonRequest(long timestamp, List args) { AmeisenLogger.Instance.Log($"Event OnSummonRequest: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); HookManager.AcceptSummon(); } + private void OnWorldStateUpdate(long timestamp, List args) + { + AmeisenLogger.Instance.Log($"Event OnWorldStateUpdate: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); + } + + private void ProcessBgMessage(string message, string arg1) + { + if (message.ToUpper().Contains("ALLIANCE FLAG WAS PICKED UP")) + { + BattlegroundEngine.AllianceFlagWasPickedUp(arg1); + } + else if (message.ToUpper().Contains("HORDE FLAG WAS PICKED UP")) + { + BattlegroundEngine.HordeFlagWasPickedUp(arg1); + } + else if (message.ToUpper().Contains("ALLIANCE FLAG WAS DROPPED") + || message.ToUpper().Contains("CAPTURED THE ALLIANCE FLAG") + || message.ToUpper().Contains("THE ALLIANCE FLAG IS NOW PLACED AT ITS BASE")) + { + BattlegroundEngine.AllianceFlagWasDropped(arg1); + } + else if (message.ToUpper().Contains("HORDE FLAG WAS DROPPED") + || message.ToUpper().Contains("CAPTURED THE HORDE FLAG") + || message.ToUpper().Contains("THE HORDE FLAG IS NOW PLACED AT ITS BASE")) + { + BattlegroundEngine.HordeFlagWasDropped(arg1); + } + } + private void SaveBotWindowPosition() { try @@ -515,86 +588,5 @@ private void SubscribeToWowEvents() EventHookManager.Subscribe("COMBAT_LOG_EVENT_UNFILTERED", CombatLogParser.Parse); } - - private void OnBgNeutralMessage(long timestamp, List args) - { - AmeisenLogger.Instance.Log($"Event OnBgNeutralMessage: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - - if (args.Count > 1) - { - ProcessBgMessage(args[0], args[1]); - } - } - - private void OnBgHordeMessage(long timestamp, List args) - { - AmeisenLogger.Instance.Log($"Event OnBgHordeMessage: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - - if (args.Count > 1) - { - ProcessBgMessage(args[0], args[1]); - } - } - - private void OnBgAllianceMessage(long timestamp, List args) - { - AmeisenLogger.Instance.Log($"Event OnBgAllianceMessage: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - - if (args.Count > 1) - { - ProcessBgMessage(args[0], args[1]); - } - } - - private void ProcessBgMessage(string message, string arg1) - { - if (message.ToUpper().Contains("ALLIANCE FLAG WAS PICKED UP")) - { - BattlegroundEngine.AllianceFlagWasPickedUp(arg1); - } - else if (message.ToUpper().Contains("HORDE FLAG WAS PICKED UP")) - { - BattlegroundEngine.HordeFlagWasPickedUp(arg1); - } - else if (message.ToUpper().Contains("ALLIANCE FLAG WAS DROPPED")) - { - BattlegroundEngine.AllianceFlagWasDropped(arg1); - } - else if (message.ToUpper().Contains("HORDE FLAG WAS DROPPED")) - { - BattlegroundEngine.HordeFlagWasDropped(arg1); - } - else if (message.ToUpper().Contains("CAPTURED THE ALLIANCE FLAG")) - { - BattlegroundEngine.AllianceFlagWasDropped(arg1); - } - else if (message.ToUpper().Contains("CAPTURED THE HORDE FLAG")) - { - BattlegroundEngine.HordeFlagWasDropped(arg1); - } - else if (message.ToUpper().Contains("THE ALLIANCE FLAG IS NOW PLACED At ITS BASE")) - { - BattlegroundEngine.AllianceFlagWasDropped(arg1); - } - else if (message.ToUpper().Contains("THE HORDE FLAG IS NOW PLACED At ITS BASE")) - { - BattlegroundEngine.HordeFlagWasDropped(arg1); - } - } - - private void OnPvpQueueShow(long timestamp, List args) - { - AmeisenLogger.Instance.Log($"Event OnPvpQueueShow: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - } - - private void OnWorldStateUpdate(long timestamp, List args) - { - AmeisenLogger.Instance.Log($"Event OnWorldStateUpdate: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - } - - private void OnBattlegroundScoreUpdate(long timestamp, List args) - { - AmeisenLogger.Instance.Log($"Event OnBattlegroundScoreUpdate: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/AmeisenBotConfig.cs b/AmeisenBotX.Core/AmeisenBotConfig.cs index 6f2c483d..6d534e4a 100644 --- a/AmeisenBotX.Core/AmeisenBotConfig.cs +++ b/AmeisenBotX.Core/AmeisenBotConfig.cs @@ -1,6 +1,5 @@ using AmeisenBotX.Memory.Win32; using System; -using System.Collections.Generic; using System.IO; namespace AmeisenBotX.Core @@ -75,4 +74,4 @@ public class AmeisenBotConfig public Rect WowWindowRect { get; set; } = new Rect() { Left = -1, Top = -1, Right = -1, Bottom = -1 }; } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/AmeisenBotX.Core.csproj b/AmeisenBotX.Core/AmeisenBotX.Core.csproj index 09b3d343..b96cffa7 100644 --- a/AmeisenBotX.Core/AmeisenBotX.Core.csproj +++ b/AmeisenBotX.Core/AmeisenBotX.Core.csproj @@ -56,15 +56,23 @@ - - - - - + + + + + + + + + + + + + - + @@ -139,9 +147,18 @@ + + + + + + + + + @@ -157,6 +174,8 @@ + + @@ -180,6 +199,7 @@ + @@ -187,8 +207,8 @@ - - + + @@ -225,6 +245,15 @@ - + + + + + + + + + + \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/BattlegroundEngine.cs b/AmeisenBotX.Core/Battleground/BattlegroundEngine.cs index 63dd075c..86ab95be 100644 --- a/AmeisenBotX.Core/Battleground/BattlegroundEngine.cs +++ b/AmeisenBotX.Core/Battleground/BattlegroundEngine.cs @@ -1,13 +1,11 @@ -using AmeisenBotX.Core.Battleground.Objectives; -using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Battleground.States; using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.Movement; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Battleground { @@ -18,54 +16,70 @@ public BattlegroundEngine(HookManager hookManager, ObjectManager objectManager, HookManager = hookManager; ObjectManager = objectManager; MovementEngine = movementEngine; - - ForceCombat = false; - CurrentObjectiveName = "None"; } - public string CurrentObjectiveName { get; private set; } - - public bool ForceCombat { get; set; } + public IBattlegroundProfile BattlegroundProfile { get; private set; } - private IBattlegroundProfile BattlegroundProfile { get; set; } + public KeyValuePair CurrentState { get; private set; } - private ObjectManager ObjectManager { get; set; } + public BattlegroundState LastState { get; private set; } private HookManager HookManager { get; set; } private IMovementEngine MovementEngine { get; set; } - private IBattlegroundObjective LastObjective { get; set; } + private ObjectManager ObjectManager { get; set; } + + public void AllianceFlagWasDropped(string playername) + { + if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) + { + ((WarsongGulchProfile)BattlegroundProfile).AllianceFlagWasDropped(playername); + } + } + + public void AllianceFlagWasPickedUp(string playername) + { + if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) + { + ((WarsongGulchProfile)BattlegroundProfile).AllianceFlagWasPickedUp(playername); + } + } public void Execute() { if (BattlegroundProfile == null) { TryLoadProfile(ObjectManager.MapId); + CurrentState = BattlegroundProfile.States.First(); + } + else + { + CurrentState.Value.Execute(); + } + } + + public void HordeFlagWasDropped(string playername) + { + if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) + { + ((WarsongGulchProfile)BattlegroundProfile).HordeFlagWasDropped(playername); } + } - if (BattlegroundProfile != null) + public void HordeFlagWasPickedUp(string playername) + { + if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) { - foreach (IBattlegroundObjective objective in BattlegroundProfile.Objectives.OrderByDescending(e => e.Priority)) - { - if (!objective.IsAvailable) - { - continue; - } - - if(CurrentObjectiveName != objective.GetType().Name) - { - LastObjective?.Exit(); - objective.Enter(); - } - - objective.Execute(); - CurrentObjectiveName = objective.GetType().Name; - return; - } + ((WarsongGulchProfile)BattlegroundProfile).HordeFlagWasPickedUp(playername); } } + public void Reset() + { + BattlegroundProfile = null; + } + public bool TryLoadProfile(int mapId) { switch (mapId) @@ -75,7 +89,7 @@ public bool TryLoadProfile(int mapId) return false; case 489: - BattlegroundProfile = new WarsongGulchProfile(ObjectManager.Player.IsAlliance(), HookManager, ObjectManager, MovementEngine, ForceCombat); + BattlegroundProfile = new WarsongGulchProfile(ObjectManager.Player.IsAlliance(), HookManager, ObjectManager, MovementEngine, this); return true; case 529: @@ -95,36 +109,27 @@ public bool TryLoadProfile(int mapId) } } - public void AllianceFlagWasPickedUp(string playername) + internal IEnumerable GetBattlegroundFlags() { - if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) - { - ((WarsongGulchProfile)BattlegroundProfile).AllianceFlagWasPickedUp(playername); - } - } + IEnumerable flagObjects = ObjectManager.WowObjects + .OfType() + .Where(e => e.GameobjectType == WowGameobjectType.Flagdrop || e.GameobjectType == WowGameobjectType.Flagstand); - public void HordeFlagWasPickedUp(string playername) - { - if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) - { - ((WarsongGulchProfile)BattlegroundProfile).HordeFlagWasPickedUp(playername); - } + return flagObjects; } - public void AllianceFlagWasDropped(string playername) + internal void SetState(BattlegroundState state) { - if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) + if (BattlegroundProfile == null || CurrentState.Key == state) { - ((WarsongGulchProfile)BattlegroundProfile).AllianceFlagWasDropped(playername); + // we are already in this state + return; } - } - public void HordeFlagWasDropped(string playername) - { - if (BattlegroundProfile.GetType() == typeof(WarsongGulchProfile)) - { - ((WarsongGulchProfile)BattlegroundProfile).HordeFlagWasDropped(playername); - } + LastState = CurrentState.Key; + CurrentState.Value.Exit(); + CurrentState = BattlegroundProfile.States.First(s => s.Key == state); + CurrentState.Value.Enter(); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/Enums/BattlegroundType.cs b/AmeisenBotX.Core/Battleground/Enums/BattlegroundType.cs index 5d4b3411..f79a3c7f 100644 --- a/AmeisenBotX.Core/Battleground/Enums/BattlegroundType.cs +++ b/AmeisenBotX.Core/Battleground/Enums/BattlegroundType.cs @@ -7,4 +7,4 @@ public enum BattlegroundType Invasion, Siege } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/Objectives/AttackEnemyPlayers.cs b/AmeisenBotX.Core/Battleground/Objectives/AttackEnemyPlayers.cs deleted file mode 100644 index 38f2344d..00000000 --- a/AmeisenBotX.Core/Battleground/Objectives/AttackEnemyPlayers.cs +++ /dev/null @@ -1,72 +0,0 @@ -using AmeisenBotX.Core.Data; -using AmeisenBotX.Core.Data.Objects.WowObject; -using AmeisenBotX.Core.Hook; -using AmeisenBotX.Core.Movement; -using AmeisenBotX.Core.Movement.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AmeisenBotX.Core.Battleground.Objectives -{ - class AttackEnemyPlayers : IBattlegroundObjective - { - public AttackEnemyPlayers(int priority, HookManager hookManager, ObjectManager objectManager, IMovementEngine movementEngine, ref bool forceCombat) - { - Priority = priority; - HookManager = hookManager; - ObjectManager = objectManager; - MovementEngine = movementEngine; - ForceCombat = forceCombat; - } - - public int Priority { get; private set; } - - public bool IsAvailable => ObjectManager.GetNearEnemies(50.0).Count() > 0; - - private HookManager HookManager { get; } - - private ObjectManager ObjectManager { get; } - - private IMovementEngine MovementEngine { get; } - - private bool ForceCombat { get; set; } - - public void Enter() - { - MovementEngine.Reset(); - } - - public void Execute() - { - IEnumerable nearEnemies = ObjectManager.GetNearEnemies(50.0); - - if (nearEnemies.Count() == 0) - { - return; - } - - WowPlayer selectedTarget = nearEnemies.OrderBy(e => e.HealthPercentage).FirstOrDefault(); - - if (ObjectManager.Player.Position.GetDistance(selectedTarget.Position) > 3) - { - MovementEngine.SetState(MovementEngineState.Moving, selectedTarget.Position); - MovementEngine.Execute(); - } - else - { - ForceCombat = true; - HookManager.TargetGuid(selectedTarget.Guid); - HookManager.StartAutoAttack(); - MovementEngine.Reset(); - } - } - - public void Exit() - { - MovementEngine.Reset(); - } - } -} diff --git a/AmeisenBotX.Core/Battleground/Objectives/CaptureFlagObjective.cs b/AmeisenBotX.Core/Battleground/Objectives/CaptureFlagObjective.cs deleted file mode 100644 index 5fc00a82..00000000 --- a/AmeisenBotX.Core/Battleground/Objectives/CaptureFlagObjective.cs +++ /dev/null @@ -1,74 +0,0 @@ -using AmeisenBotX.Core.Data; -using AmeisenBotX.Core.Data.Objects.WowObject; -using AmeisenBotX.Core.Hook; -using AmeisenBotX.Core.Movement; -using AmeisenBotX.Core.Movement.Enums; -using AmeisenBotX.Pathfinding.Objects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AmeisenBotX.Core.Battleground.Objectives -{ - public class CaptureFlagObjective : IBattlegroundObjective - { - public CaptureFlagObjective(int priority, Vector3 flagPosition, HookManager hookManager, ObjectManager objectManager, IMovementEngine movementEngine) - { - Priority = priority; - FlagPosition = flagPosition; - HookManager = hookManager; - ObjectManager = objectManager; - MovementEngine = movementEngine; - IsAvailable = true; - } - - public int Priority { get; private set; } - - public Vector3 FlagPosition { get; private set; } - - public bool IsAvailable { get; set; } - - private HookManager HookManager { get; } - - private ObjectManager ObjectManager { get; } - - private IMovementEngine MovementEngine { get; } - - public void Enter() - { - MovementEngine.Reset(); - } - - public void Execute() - { - if (ObjectManager.Player.Position.GetDistance(FlagPosition) > 3) - { - MovementEngine.SetState(MovementEngineState.Moving, FlagPosition); - MovementEngine.Execute(); - } - else - { - ObjectManager.UpdateWowObjects(); - - // interact with the flag - WowObject flagObject = ObjectManager.WowObjects.OfType().OrderBy(e => e.Position.GetDistance(FlagPosition)).FirstOrDefault(); - - if(flagObject != null && flagObject.GetType() == typeof(WowGameobject)) - { - HookManager.RightClickObject(flagObject); - } - else - { - // flag is not here - } - } - } - - public void Exit() - { - MovementEngine.Reset(); - } - } -} diff --git a/AmeisenBotX.Core/Battleground/Objectives/CarryFlagToBaseObjective.cs b/AmeisenBotX.Core/Battleground/Objectives/CarryFlagToBaseObjective.cs deleted file mode 100644 index 8479c2d8..00000000 --- a/AmeisenBotX.Core/Battleground/Objectives/CarryFlagToBaseObjective.cs +++ /dev/null @@ -1,57 +0,0 @@ -using AmeisenBotX.Core.Data; -using AmeisenBotX.Core.Data.Objects.WowObject; -using AmeisenBotX.Core.Hook; -using AmeisenBotX.Core.Movement; -using AmeisenBotX.Core.Movement.Enums; -using AmeisenBotX.Pathfinding.Objects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AmeisenBotX.Core.Battleground.Objectives -{ - public class CarryFlagToBaseObjective : IBattlegroundObjective - { - public CarryFlagToBaseObjective(int priority, Vector3 homePosition, HookManager hookManager, ObjectManager objectManager, IMovementEngine movementEngine) - { - Priority = priority; - HomePosition = homePosition; - HookManager = hookManager; - ObjectManager = objectManager; - MovementEngine = movementEngine; - } - - public int Priority { get; private set; } - - public Vector3 HomePosition { get; private set; } - - private HookManager HookManager { get; } - - private ObjectManager ObjectManager { get; } - - private IMovementEngine MovementEngine { get; } - - public bool IsAvailable => HookManager.GetBuffs(WowLuaUnit.Player).Any(e => e.Contains(" flag")); - - public void Execute() - { - if (ObjectManager.Player.Position.GetDistance(HomePosition) > 3) - { - MovementEngine.SetState(MovementEngineState.Moving, HomePosition); - MovementEngine.Execute(); - } - } - - public void Enter() - { - MovementEngine.Reset(); - } - - public void Exit() - { - MovementEngine.Reset(); - } - } -} diff --git a/AmeisenBotX.Core/Battleground/Objectives/IBattlegroundObjective.cs b/AmeisenBotX.Core/Battleground/Objectives/IBattlegroundObjective.cs deleted file mode 100644 index 472020c0..00000000 --- a/AmeisenBotX.Core/Battleground/Objectives/IBattlegroundObjective.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static AmeisenBotX.Core.Battleground.BattlegroundEngine; - -namespace AmeisenBotX.Core.Battleground.Objectives -{ - public interface IBattlegroundObjective - { - int Priority { get; } - - bool IsAvailable { get; } - - void Enter(); - - void Execute(); - - void Exit(); - } -} diff --git a/AmeisenBotX.Core/Battleground/Objectives/RetrieveOwnFlagObjective.cs b/AmeisenBotX.Core/Battleground/Objectives/RetrieveOwnFlagObjective.cs deleted file mode 100644 index e29d66aa..00000000 --- a/AmeisenBotX.Core/Battleground/Objectives/RetrieveOwnFlagObjective.cs +++ /dev/null @@ -1,69 +0,0 @@ -using AmeisenBotX.Core.Data; -using AmeisenBotX.Core.Data.Objects.WowObject; -using AmeisenBotX.Core.Hook; -using AmeisenBotX.Core.Movement; -using AmeisenBotX.Core.Movement.Enums; -using AmeisenBotX.Pathfinding.Objects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AmeisenBotX.Core.Battleground.Objectives -{ - public class RetrieveOwnFlagObjective : IBattlegroundObjective - { - public RetrieveOwnFlagObjective(int priority, HookManager hookManager, ObjectManager objectManager, IMovementEngine movementEngine) - { - Priority = priority; - HookManager = hookManager; - ObjectManager = objectManager; - MovementEngine = movementEngine; - IsAvailable = false; - } - - public int Priority { get; private set; } - - public WowPlayer FlagCarrier { get; set; } - - public bool IsAvailable { get; set; } - - private HookManager HookManager { get; } - - private ObjectManager ObjectManager { get; } - - private IMovementEngine MovementEngine { get; } - - public void Enter() - { - MovementEngine.Reset(); - } - - public void Execute() - { - if(FlagCarrier == null) - { - return; - } - - ObjectManager.UpdateObject(FlagCarrier); - - if (ObjectManager.Player.Position.GetDistance(FlagCarrier.Position) > 3) - { - MovementEngine.SetState(MovementEngineState.Moving, FlagCarrier.Position); - MovementEngine.Execute(); - } - else - { - HookManager.TargetGuid(FlagCarrier.Guid); - HookManager.StartAutoAttack(); - } - } - - public void Exit() - { - MovementEngine.Reset(); - } - } -} diff --git a/AmeisenBotX.Core/Battleground/Profiles/IBattlegroundProfile.cs b/AmeisenBotX.Core/Battleground/Profiles/IBattlegroundProfile.cs index c580da5b..110282ba 100644 --- a/AmeisenBotX.Core/Battleground/Profiles/IBattlegroundProfile.cs +++ b/AmeisenBotX.Core/Battleground/Profiles/IBattlegroundProfile.cs @@ -1,10 +1,6 @@ using AmeisenBotX.Core.Battleground.Enums; -using AmeisenBotX.Core.Battleground.Objectives; -using System; +using AmeisenBotX.Core.Battleground.States; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Battleground.Profiles { @@ -12,6 +8,6 @@ public interface IBattlegroundProfile { BattlegroundType BattlegroundType { get; } - List Objectives { get; } + Dictionary States { get; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/Profiles/ICtfBattlegroundProfile.cs b/AmeisenBotX.Core/Battleground/Profiles/ICtfBattlegroundProfile.cs new file mode 100644 index 00000000..912f6b1e --- /dev/null +++ b/AmeisenBotX.Core/Battleground/Profiles/ICtfBattlegroundProfile.cs @@ -0,0 +1,18 @@ +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Pathfinding.Objects; + +namespace AmeisenBotX.Core.Battleground.Profiles +{ + public interface ICtfBattlegroundProfile : IBattlegroundProfile + { + Vector3 EnemyBasePosition { get; } + + WowPlayer EnemyFlagCarrierPlayer { get; } + + bool IsMeFlagCarrier { get; } + + Vector3 OwnBasePosition { get; } + + WowPlayer OwnFlagCarrierPlayer { get; } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/Profiles/WarsongGulchProfile.cs b/AmeisenBotX.Core/Battleground/Profiles/WarsongGulchProfile.cs index 32620a01..919e0e49 100644 --- a/AmeisenBotX.Core/Battleground/Profiles/WarsongGulchProfile.cs +++ b/AmeisenBotX.Core/Battleground/Profiles/WarsongGulchProfile.cs @@ -1,27 +1,21 @@ using AmeisenBotX.Core.Battleground.Enums; -using AmeisenBotX.Core.Battleground.Objectives; +using AmeisenBotX.Core.Battleground.States; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.Movement; -using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Pathfinding.Objects; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Battleground.Profiles { public class WarsongGulchProfile : IBattlegroundProfile { - public WarsongGulchProfile(bool isAlliance, HookManager hookManager, ObjectManager objectManager, IMovementEngine movementEngine, bool forceCombat) + public WarsongGulchProfile(bool isAlliance, HookManager hookManager, ObjectManager objectManager, IMovementEngine movementEngine, BattlegroundEngine battlegroundEngine) { ObjectManager = objectManager; - MovementEngine = movementEngine; - HookManager = hookManager; IsAlliance = isAlliance; + IsMeFlagCarrier = false; if (isAlliance) { @@ -32,93 +26,100 @@ public WarsongGulchProfile(bool isAlliance, HookManager hookManager, ObjectManag WsgDataset = new HordeWsgDataset(); } - // used to make the players do different things - Random rnd = new Random(); - - Objectives = new List + States = new Dictionary() { - new CarryFlagToBaseObjective(100, WsgDataset.OwnFlagPosition, hookManager, objectManager, movementEngine), - new AttackEnemyPlayers(rnd.Next(50), hookManager, objectManager, movementEngine, ref forceCombat), - new CaptureFlagObjective(rnd.Next(10), WsgDataset.TargetFlagPosition, hookManager, objectManager, movementEngine), - new RetrieveOwnFlagObjective(rnd.Next(10), hookManager, objectManager, movementEngine), + { BattlegroundState.WaitingForStart, new WaitingForStartBgState(battlegroundEngine) }, + { BattlegroundState.MoveToEnemyBase, new MoveToEnemyBaseBgState(battlegroundEngine, objectManager, movementEngine, WsgDataset.EnemyFlagPosition) }, + { BattlegroundState.MoveToOwnBase, new MoveToOwnBaseBgState(battlegroundEngine, objectManager, movementEngine, WsgDataset.OwnFlagPosition) }, + { BattlegroundState.MoveToEnemyFlagCarrier, new MoveToEnemyFlagCarrierBgState(battlegroundEngine, objectManager, movementEngine, hookManager) }, + { BattlegroundState.AssistOwnFlagCarrier, new AssistOwnFlagCarrierBgState(battlegroundEngine, objectManager, movementEngine, hookManager) }, + { BattlegroundState.DefendMyself, new DefendMyselfBgState(battlegroundEngine, objectManager) }, + { BattlegroundState.PickupEnemyFlag, new PickupEnemyFlagBgState(battlegroundEngine, objectManager, movementEngine, hookManager) }, + { BattlegroundState.PickupOwnFlag, new PickupOwnFlagBgState(battlegroundEngine, objectManager, movementEngine, hookManager) }, + { BattlegroundState.PickupBuff, new PickupBuffBgState(battlegroundEngine) }, + { BattlegroundState.ExitBattleground, new ExitBattlegroundBgState(battlegroundEngine) } }; } + private interface IWsgDataset + { + Vector3 EnemyFlagPosition { get; } + + Vector3 OwnFlagPosition { get; } + } + public BattlegroundType BattlegroundType { get; } = BattlegroundType.CaptureTheFlag; - public List Objectives { get; private set; } + public Vector3 EnemyBasePosition => WsgDataset.EnemyFlagPosition; + + public WowPlayer EnemyFlagCarrier { get; private set; } + + public bool IsMeFlagCarrier { get; private set; } + + public Vector3 OwnBasePosition => WsgDataset.OwnFlagPosition; + + public WowPlayer OwnFlagCarrier { get; private set; } + + public Dictionary States { get; private set; } private bool IsAlliance { get; set; } - private IWsgDataset WsgDataset { get; set; } + private WowPlayer LastEnemyFlagCarrier { get; set; } + + private WowPlayer LastOwnFlagCarrier { get; set; } private ObjectManager ObjectManager { get; set; } - private HookManager HookManager { get; set; } + private IWsgDataset WsgDataset { get; set; } + + public void AllianceFlagWasDropped(string playername) => UnsetFlagCarrier(IsAlliance, playername); - private IMovementEngine MovementEngine { get; set; } + public void AllianceFlagWasPickedUp(string playername) => SetFlagCarrier(IsAlliance, playername); - private WowPlayer AllianceFlagCarrier { get; set; } + public void HordeFlagWasDropped(string playername) => UnsetFlagCarrier(!IsAlliance, playername); - private WowPlayer HordeFlagCarrier { get; set; } + public void HordeFlagWasPickedUp(string playername) => SetFlagCarrier(!IsAlliance, playername); - public void AllianceFlagWasPickedUp(string playername) + private void SetFlagCarrier(bool own, string playername) { - AllianceFlagCarrier = ObjectManager.WowObjects.OfType().FirstOrDefault(e => e.Name.ToUpper() == playername.ToUpper()); - Objectives.OfType().First().IsAvailable = !IsAlliance; - - if (IsAlliance) + if (own) { - Objectives.OfType().First().IsAvailable = true; - Objectives.OfType().First().FlagCarrier = AllianceFlagCarrier; + OwnFlagCarrier = ObjectManager.GetWowPlayerByName(playername); } - } - - public void HordeFlagWasPickedUp(string playername) - { - HordeFlagCarrier = ObjectManager.WowObjects.OfType().FirstOrDefault(e => e.Name.ToUpper() == playername.ToUpper()); - Objectives.OfType().First().IsAvailable = IsAlliance; - - if (!IsAlliance) + else { - Objectives.OfType().First().IsAvailable = true; - Objectives.OfType().First().FlagCarrier = HordeFlagCarrier; + EnemyFlagCarrier = ObjectManager.GetWowPlayerByName(playername); } - } - - public void AllianceFlagWasDropped(string playername) - { - AllianceFlagCarrier = null; - Objectives.OfType().First().IsAvailable = !IsAlliance; - Objectives.OfType().First().IsAvailable = !IsAlliance; - } - public void HordeFlagWasDropped(string playername) - { - HordeFlagCarrier = null; - Objectives.OfType().First().IsAvailable = IsAlliance; - Objectives.OfType().First().IsAvailable = IsAlliance; + IsMeFlagCarrier = playername.ToUpper() == ObjectManager.Player.Name.ToUpper(); } - private interface IWsgDataset + private void UnsetFlagCarrier(bool own, string playername) { - Vector3 TargetFlagPosition { get; } - - Vector3 OwnFlagPosition { get; } + if (own) + { + LastOwnFlagCarrier = OwnFlagCarrier; + OwnFlagCarrier = null; + } + else + { + LastEnemyFlagCarrier = EnemyFlagCarrier; + EnemyFlagCarrier = null; + } } private class AllianceWsgDataset : IWsgDataset { - public Vector3 OwnFlagPosition { get; } = new Vector3(1539, 1481, 352); + public Vector3 EnemyFlagPosition { get; } = new Vector3(916, 1434, 346); - public Vector3 TargetFlagPosition { get; } = new Vector3(916, 1434, 346); + public Vector3 OwnFlagPosition { get; } = new Vector3(1539, 1481, 352); } private class HordeWsgDataset : IWsgDataset { - public Vector3 OwnFlagPosition { get; } = new Vector3(916, 1434, 346); + public Vector3 EnemyFlagPosition { get; } = new Vector3(1539, 1481, 352); - public Vector3 TargetFlagPosition { get; } = new Vector3(1539, 1481, 352); + public Vector3 OwnFlagPosition { get; } = new Vector3(916, 1434, 346); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/AssistOwnFlagCarrierBgState.cs b/AmeisenBotX.Core/Battleground/States/AssistOwnFlagCarrierBgState.cs new file mode 100644 index 00000000..f590e4e7 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/AssistOwnFlagCarrierBgState.cs @@ -0,0 +1,69 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Hook; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; +using System.Collections.Generic; +using System.Linq; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class AssistOwnFlagCarrierBgState : BasicBattlegroundState + { + public AssistOwnFlagCarrierBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager, IMovementEngine movementEngine, HookManager hookManager) : base(battlegroundEngine) + { + ObjectManager = objectManager; + MovementEngine = movementEngine; + } + + private HookManager HookManager { get; } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + if (BattlegroundEngine.BattlegroundProfile.BattlegroundType == BattlegroundType.CaptureTheFlag) + { + WowPlayer ownFlagCarrier = ((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).OwnFlagCarrierPlayer; + IEnumerable nearEnemies = ObjectManager.GetNearEnemies(ownFlagCarrier.Position, 25); + + if (ownFlagCarrier != null + && nearEnemies.Count() > 1) + { + if (ObjectManager.Player.Position.GetDistance(ownFlagCarrier.Position) > 10) + { + MovementEngine.SetState(MovementEngineState.Moving, ownFlagCarrier.Position); + MovementEngine.Execute(); + } + else + { + WowPlayer target = nearEnemies.FirstOrDefault(); + if (target != null) + { + HookManager.TargetGuid(target.Guid); + HookManager.StartAutoAttack(); + } + } + } + else + { + // there is no friendly flag carrier + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + return; + } + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/BasicBattlegroundState.cs b/AmeisenBotX.Core/Battleground/States/BasicBattlegroundState.cs new file mode 100644 index 00000000..b8f5f8ea --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/BasicBattlegroundState.cs @@ -0,0 +1,18 @@ +namespace AmeisenBotX.Core.Battleground.States +{ + public abstract class BasicBattlegroundState + { + public BasicBattlegroundState(BattlegroundEngine battlegroundEngine) + { + BattlegroundEngine = battlegroundEngine; + } + + internal BattlegroundEngine BattlegroundEngine { get; } + + public abstract void Enter(); + + public abstract void Execute(); + + public abstract void Exit(); + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/BattlegroundState.cs b/AmeisenBotX.Core/Battleground/States/BattlegroundState.cs new file mode 100644 index 00000000..457fc76d --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/BattlegroundState.cs @@ -0,0 +1,16 @@ +namespace AmeisenBotX.Core.Battleground.States +{ + public enum BattlegroundState + { + WaitingForStart, + MoveToEnemyBase, + MoveToOwnBase, + MoveToEnemyFlagCarrier, + AssistOwnFlagCarrier, + DefendMyself, + PickupEnemyFlag, + PickupOwnFlag, + PickupBuff, + ExitBattleground + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/DefendMyselfBgState.cs b/AmeisenBotX.Core/Battleground/States/DefendMyselfBgState.cs new file mode 100644 index 00000000..f8b76d48 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/DefendMyselfBgState.cs @@ -0,0 +1,87 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using System.Collections.Generic; +using System.Linq; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class DefendMyselfBgState : BasicBattlegroundState + { + public DefendMyselfBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager) : base(battlegroundEngine) + { + } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + // at the beginning of the BG, move to the enemies base + // TODO: maybe handle speedbuff here + IEnumerable nearEnemies = ObjectManager.GetNearEnemies(ObjectManager.Player.Position, 30); + IEnumerable nearFriends = ObjectManager.GetNearFriends(ObjectManager.Player.Position, 30); + + int enemyCount = nearEnemies.Count(); + int friendCount = nearFriends.Count(); + + switch (BattlegroundEngine.BattlegroundProfile.BattlegroundType) + { + case BattlegroundType.CaptureTheFlag: + DoCtfLogic(enemyCount, friendCount); + break; + + default: + // fight + break; + } + } + + public override void Exit() + { + } + + private void DoCtfLogic(int enemyCount, int friendCount) + { + if (enemyCount > friendCount + 2) + { + // flee to base + BattlegroundEngine.SetState(BattlegroundState.MoveToOwnBase); + } + else if (enemyCount == 0) + { + WowPlayer enemyFlagCarrier = ((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).EnemyFlagCarrierPlayer; + WowPlayer ownFlagCarrier = ((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).OwnFlagCarrierPlayer; + + if (enemyFlagCarrier != null && ownFlagCarrier != null) + { + // move to enemy flag carrier + BattlegroundEngine.SetState(BattlegroundState.MoveToEnemyFlagCarrier); + } + else if (enemyFlagCarrier != null && ownFlagCarrier == null) + { + // get the enemies flag + BattlegroundEngine.SetState(BattlegroundState.MoveToEnemyBase); + } + else + { + if (ownFlagCarrier != null) + { + // help our flag carrier to get the flag to the base + BattlegroundEngine.SetState(BattlegroundState.AssistOwnFlagCarrier); + } + else + { + // try to get the enemies flag + BattlegroundEngine.SetState(BattlegroundState.MoveToEnemyBase); + } + return; + } + } + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/ExitBattlegroundBgState.cs b/AmeisenBotX.Core/Battleground/States/ExitBattlegroundBgState.cs new file mode 100644 index 00000000..a1bc5741 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/ExitBattlegroundBgState.cs @@ -0,0 +1,21 @@ +namespace AmeisenBotX.Core.Battleground.States +{ + public class ExitBattlegroundBgState : BasicBattlegroundState + { + public ExitBattlegroundBgState(BattlegroundEngine battlegroundEngine) : base(battlegroundEngine) + { + } + + public override void Enter() + { + } + + public override void Execute() + { + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/MoveToEnemyBaseBgState.cs b/AmeisenBotX.Core/Battleground/States/MoveToEnemyBaseBgState.cs new file mode 100644 index 00000000..e08caa10 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/MoveToEnemyBaseBgState.cs @@ -0,0 +1,60 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; +using AmeisenBotX.Pathfinding.Objects; +using System.Collections.Generic; +using System.Linq; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class MoveToEnemyBaseBgState : BasicBattlegroundState + { + public MoveToEnemyBaseBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager, IMovementEngine movementEngine, Vector3 enemyBasePosition) : base(battlegroundEngine) + { + } + + private Vector3 EnemyBasePosition { get; } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + // CTF flag priority + if (BattlegroundEngine.BattlegroundProfile.BattlegroundType == BattlegroundType.CaptureTheFlag) + { + IEnumerable flags = BattlegroundEngine.GetBattlegroundFlags(); + if (flags.Count() > 0 + && !((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).IsMeFlagCarrier) + { + BattlegroundEngine.SetState(BattlegroundState.PickupEnemyFlag); + return; + } + } + + if (ObjectManager.Player.Position.GetDistance(EnemyBasePosition) > 10) + { + MovementEngine.SetState(MovementEngineState.Moving, EnemyBasePosition); + MovementEngine.Execute(); + return; + } + else + { + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + return; + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/MoveToEnemyFlagCarrierBgState.cs b/AmeisenBotX.Core/Battleground/States/MoveToEnemyFlagCarrierBgState.cs new file mode 100644 index 00000000..04825369 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/MoveToEnemyFlagCarrierBgState.cs @@ -0,0 +1,65 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Hook; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class MoveToEnemyFlagCarrierBgState : BasicBattlegroundState + { + public MoveToEnemyFlagCarrierBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager, IMovementEngine movementEngine, HookManager hookManager) : base(battlegroundEngine) + { + ObjectManager = objectManager; + MovementEngine = movementEngine; + HookManager = hookManager; + } + + private HookManager HookManager { get; } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + if (BattlegroundEngine.BattlegroundProfile.BattlegroundType == BattlegroundType.CaptureTheFlag) + { + WowPlayer enemyFlagCarrier = ((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).EnemyFlagCarrierPlayer; + + if (enemyFlagCarrier != null) + { + if (ObjectManager.Player.Position.GetDistance(enemyFlagCarrier.Position) > 10) + { + MovementEngine.SetState(MovementEngineState.Moving, enemyFlagCarrier.Position); + MovementEngine.Execute(); + } + else + { + if (enemyFlagCarrier != null) + { + HookManager.TargetGuid(enemyFlagCarrier.Guid); + HookManager.StartAutoAttack(); + } + } + } + else + { + // there is no enemy flag carrier + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + return; + } + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/MoveToOwnBaseBgState.cs b/AmeisenBotX.Core/Battleground/States/MoveToOwnBaseBgState.cs new file mode 100644 index 00000000..1818e02a --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/MoveToOwnBaseBgState.cs @@ -0,0 +1,63 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; +using AmeisenBotX.Pathfinding.Objects; +using System.Collections.Generic; +using System.Linq; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class MoveToOwnBaseBgState : BasicBattlegroundState + { + public MoveToOwnBaseBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager, IMovementEngine movementEngine, Vector3 ownBasePosition) : base(battlegroundEngine) + { + ObjectManager = objectManager; + MovementEngine = movementEngine; + OwnBasePosition = ownBasePosition; + } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + private Vector3 OwnBasePosition { get; } + + public override void Enter() + { + } + + public override void Execute() + { + // CTF flag priority + if (BattlegroundEngine.BattlegroundProfile.BattlegroundType == BattlegroundType.CaptureTheFlag) + { + IEnumerable flags = BattlegroundEngine.GetBattlegroundFlags(); + if (flags.Count() > 0 + && !((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).IsMeFlagCarrier) + { + BattlegroundEngine.SetState(BattlegroundState.PickupEnemyFlag); + return; + } + + if (ObjectManager.Player.Position.GetDistance(OwnBasePosition) > 10) + { + MovementEngine.SetState(MovementEngineState.Moving, OwnBasePosition); + MovementEngine.Execute(); + return; + } + else + { + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + return; + } + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/PickupBuffBgState.cs b/AmeisenBotX.Core/Battleground/States/PickupBuffBgState.cs new file mode 100644 index 00000000..4ece5239 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/PickupBuffBgState.cs @@ -0,0 +1,21 @@ +namespace AmeisenBotX.Core.Battleground.States +{ + public class PickupBuffBgState : BasicBattlegroundState + { + public PickupBuffBgState(BattlegroundEngine battlegroundEngine) : base(battlegroundEngine) + { + } + + public override void Enter() + { + } + + public override void Execute() + { + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/PickupEnemyFlagBgState.cs b/AmeisenBotX.Core/Battleground/States/PickupEnemyFlagBgState.cs new file mode 100644 index 00000000..696349a5 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/PickupEnemyFlagBgState.cs @@ -0,0 +1,68 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Hook; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; +using System.Collections.Generic; +using System.Linq; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class PickupEnemyFlagBgState : BasicBattlegroundState + { + public PickupEnemyFlagBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager, IMovementEngine movementEngine, HookManager hookManager) : base(battlegroundEngine) + { + ObjectManager = objectManager; + HookManager = hookManager; + MovementEngine = movementEngine; + } + + private HookManager HookManager { get; } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + if (BattlegroundEngine.BattlegroundProfile.BattlegroundType == BattlegroundType.CaptureTheFlag) + { + IEnumerable flags = BattlegroundEngine.GetBattlegroundFlags(); + if (flags.Count() > 0) + { + if (!((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).IsMeFlagCarrier) + { + WowGameobject flagObject = flags.First(); + if (flagObject != null && flagObject.Position.GetDistance(ObjectManager.Player.Position) < 8) + { + HookManager.RightClickObject(flagObject); + } + else + { + MovementEngine.SetState(MovementEngineState.Moving, flagObject.Position); + MovementEngine.Execute(); + } + } + else + { + BattlegroundEngine.SetState(BattlegroundState.MoveToOwnBase); + } + } + else + { + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + } + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/PickupOwnFlagBgState.cs b/AmeisenBotX.Core/Battleground/States/PickupOwnFlagBgState.cs new file mode 100644 index 00000000..37ac1c73 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/PickupOwnFlagBgState.cs @@ -0,0 +1,68 @@ +using AmeisenBotX.Core.Battleground.Enums; +using AmeisenBotX.Core.Battleground.Profiles; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Hook; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; +using System.Collections.Generic; +using System.Linq; + +namespace AmeisenBotX.Core.Battleground.States +{ + public class PickupOwnFlagBgState : BasicBattlegroundState + { + public PickupOwnFlagBgState(BattlegroundEngine battlegroundEngine, ObjectManager objectManager, IMovementEngine movementEngine, HookManager hookManager) : base(battlegroundEngine) + { + ObjectManager = objectManager; + HookManager = hookManager; + MovementEngine = movementEngine; + } + + private HookManager HookManager { get; } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + if (BattlegroundEngine.BattlegroundProfile.BattlegroundType == BattlegroundType.CaptureTheFlag) + { + IEnumerable flags = BattlegroundEngine.GetBattlegroundFlags(); + if (flags.Count() > 0) + { + if (!((ICtfBattlegroundProfile)BattlegroundEngine.BattlegroundProfile).IsMeFlagCarrier) + { + WowGameobject flagObject = flags.First(); + if (flagObject != null && flagObject.Position.GetDistance(ObjectManager.Player.Position) < 8) + { + HookManager.RightClickObject(flagObject); + } + else + { + MovementEngine.SetState(MovementEngineState.Moving, flagObject.Position); + MovementEngine.Execute(); + } + } + else + { + BattlegroundEngine.SetState(BattlegroundState.MoveToOwnBase); + } + } + else + { + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + } + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Battleground/States/WaitingForStartBgState.cs b/AmeisenBotX.Core/Battleground/States/WaitingForStartBgState.cs new file mode 100644 index 00000000..d694f247 --- /dev/null +++ b/AmeisenBotX.Core/Battleground/States/WaitingForStartBgState.cs @@ -0,0 +1,26 @@ +namespace AmeisenBotX.Core.Battleground.States +{ + public class WaitingForStartBgState : BasicBattlegroundState + { + public WaitingForStartBgState(BattlegroundEngine battlegroundEngine) : base(battlegroundEngine) + { + } + + public override void Enter() + { + } + + public override void Execute() + { + // TODO: recognize wether the BG is running or not + if (true) + { + BattlegroundEngine.SetState(BattlegroundState.DefendMyself); + } + } + + public override void Exit() + { + } + } +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/CharacterManager.cs b/AmeisenBotX.Core/Character/CharacterManager.cs index 05f0193c..17437734 100644 --- a/AmeisenBotX.Core/Character/CharacterManager.cs +++ b/AmeisenBotX.Core/Character/CharacterManager.cs @@ -1,4 +1,5 @@ using AmeisenBotX.Core.Character.Comparators; +using AmeisenBotX.Core.Character.Enums; using AmeisenBotX.Core.Character.Inventory; using AmeisenBotX.Core.Character.Inventory.Enums; using AmeisenBotX.Core.Character.Inventory.Objects; @@ -42,27 +43,7 @@ public CharacterManager(XMemory xMemory, AmeisenBotConfig config, IOffsetList of public CharacterInventory Inventory { get; } - public void InteractWithUnit(WowUnit unit, float turnSpeed = 20.9f, float distance = 3f) - { - XMemory.Write(OffsetList.ClickToMoveX, unit.Position.X); - XMemory.Write(OffsetList.ClickToMoveY, unit.Position.Y); - XMemory.Write(OffsetList.ClickToMoveZ, unit.Position.Z); - XMemory.Write(OffsetList.ClickToMoveTurnSpeed, turnSpeed); - XMemory.Write(OffsetList.ClickToMoveDistance, distance); - XMemory.Write(OffsetList.ClickToMoveGuid, unit.Guid); - XMemory.Write(OffsetList.ClickToMoveAction, (int)ClickToMoveType.Interact); - } - - public void InteractWithObject(WowObject obj, float turnSpeed = 20.9f, float distance = 3f) - { - XMemory.Write(OffsetList.ClickToMoveX, obj.Position.X); - XMemory.Write(OffsetList.ClickToMoveY, obj.Position.Y); - XMemory.Write(OffsetList.ClickToMoveZ, obj.Position.Z); - XMemory.Write(OffsetList.ClickToMoveTurnSpeed, turnSpeed); - XMemory.Write(OffsetList.ClickToMoveDistance, distance); - XMemory.Write(OffsetList.ClickToMoveGuid, obj.Guid); - XMemory.Write(OffsetList.ClickToMoveAction, (int)ClickToMoveType.InteractObject); - } + public IWowItemComparator ItemComparator { get; set; } public int Money { get; private set; } @@ -70,8 +51,6 @@ public void InteractWithObject(WowObject obj, float turnSpeed = 20.9f, float dis public SpellBook SpellBook { get; } - public IWowItemComparator ItemComparator { get; set; } - private AmeisenBotConfig Config { get; } private HookManager HookManager { get; } @@ -86,6 +65,17 @@ public void InteractWithObject(WowObject obj, float turnSpeed = 20.9f, float dis public void AntiAfk() => XMemory.Write(OffsetList.TickCount, Environment.TickCount); + public void Face(Vector3 position, ulong guid) + { + XMemory.Write(OffsetList.ClickToMoveX, position.X); + XMemory.Write(OffsetList.ClickToMoveY, position.Y); + XMemory.Write(OffsetList.ClickToMoveZ, position.Z); + XMemory.Write(OffsetList.ClickToMoveTurnSpeed, 20.9f); + XMemory.Write(OffsetList.ClickToMoveDistance, 0.1f); + XMemory.Write(OffsetList.ClickToMoveGuid, guid); + XMemory.Write(OffsetList.ClickToMoveAction, (int)ClickToMoveType.FaceTarget); + } + public bool GetCurrentClickToMovePoint(out Vector3 currentCtmPosition) { if (XMemory.Read(OffsetList.ClickToMoveX, out Vector3 currentCtmPos)) @@ -112,6 +102,28 @@ public void HoldKey(VirtualKeys key) } } + public void InteractWithObject(WowObject obj, float turnSpeed = 20.9f, float distance = 3f) + { + XMemory.Write(OffsetList.ClickToMoveX, obj.Position.X); + XMemory.Write(OffsetList.ClickToMoveY, obj.Position.Y); + XMemory.Write(OffsetList.ClickToMoveZ, obj.Position.Z); + XMemory.Write(OffsetList.ClickToMoveTurnSpeed, turnSpeed); + XMemory.Write(OffsetList.ClickToMoveDistance, distance); + XMemory.Write(OffsetList.ClickToMoveGuid, obj.Guid); + XMemory.Write(OffsetList.ClickToMoveAction, (int)ClickToMoveType.InteractObject); + } + + public void InteractWithUnit(WowUnit unit, float turnSpeed = 20.9f, float distance = 3f) + { + XMemory.Write(OffsetList.ClickToMoveX, unit.Position.X); + XMemory.Write(OffsetList.ClickToMoveY, unit.Position.Y); + XMemory.Write(OffsetList.ClickToMoveZ, unit.Position.Z); + XMemory.Write(OffsetList.ClickToMoveTurnSpeed, turnSpeed); + XMemory.Write(OffsetList.ClickToMoveDistance, distance); + XMemory.Write(OffsetList.ClickToMoveGuid, unit.Guid); + XMemory.Write(OffsetList.ClickToMoveAction, (int)ClickToMoveType.Interact); + } + public bool IsAbleToUseArmor(WowArmor item) { return item.ArmorType switch @@ -155,17 +167,6 @@ public bool IsAbleToUseWeapon(WowWeapon item) }; } - public void Face(Vector3 position, ulong guid) - { - XMemory.Write(OffsetList.ClickToMoveX, position.X); - XMemory.Write(OffsetList.ClickToMoveY, position.Y); - XMemory.Write(OffsetList.ClickToMoveZ, position.Z); - XMemory.Write(OffsetList.ClickToMoveTurnSpeed, 20.9f); - XMemory.Write(OffsetList.ClickToMoveDistance, 0.1f); - XMemory.Write(OffsetList.ClickToMoveGuid, guid); - XMemory.Write(OffsetList.ClickToMoveAction, (int)ClickToMoveType.FaceTarget); - } - public bool IsItemAnImprovement(IWowItem item, out IWowItem itemToReplace) { itemToReplace = null; @@ -420,4 +421,4 @@ private void UpdateSkills() Skills = HookManager.GetSkills(); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/ArmsAxeItemComparator.cs b/AmeisenBotX.Core/Character/Comparators/ArmsAxeItemComparator.cs index a98c590e..34662e12 100644 --- a/AmeisenBotX.Core/Character/Comparators/ArmsAxeItemComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/ArmsAxeItemComparator.cs @@ -96,4 +96,4 @@ private double GetRating(IWowItem item, EquipmentSlot slot) return rating; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/AssassinationItemComparator.cs b/AmeisenBotX.Core/Character/Comparators/AssassinationItemComparator.cs index ad9b9efd..a5f4dce0 100644 --- a/AmeisenBotX.Core/Character/Comparators/AssassinationItemComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/AssassinationItemComparator.cs @@ -92,4 +92,4 @@ private double GetRating(IWowItem item, EquipmentSlot slot) return rating; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/BasicAgilityComparator.cs b/AmeisenBotX.Core/Character/Comparators/BasicAgilityComparator.cs index ad267ce1..faad0199 100644 --- a/AmeisenBotX.Core/Character/Comparators/BasicAgilityComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/BasicAgilityComparator.cs @@ -1,10 +1,6 @@ using AmeisenBotX.Core.Character.Comparators.Objects; using AmeisenBotX.Core.Character.Inventory.Objects; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Character.Comparators { @@ -30,4 +26,4 @@ public bool IsBetter(IWowItem current, IWowItem item) return scoreCurrent < scoreNew; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/BasicIntellectComparator.cs b/AmeisenBotX.Core/Character/Comparators/BasicIntellectComparator.cs index e1a6c6a6..98c3ce94 100644 --- a/AmeisenBotX.Core/Character/Comparators/BasicIntellectComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/BasicIntellectComparator.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using AmeisenBotX.Core.Character.Comparators.Objects; +using AmeisenBotX.Core.Character.Comparators.Objects; using AmeisenBotX.Core.Character.Inventory.Objects; +using System.Collections.Generic; namespace AmeisenBotX.Core.Character.Comparators { @@ -30,4 +26,4 @@ public bool IsBetter(IWowItem current, IWowItem item) return scoreCurrent < scoreNew; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/BasicSpiritComparator.cs b/AmeisenBotX.Core/Character/Comparators/BasicSpiritComparator.cs index 53f73f57..be4864c3 100644 --- a/AmeisenBotX.Core/Character/Comparators/BasicSpiritComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/BasicSpiritComparator.cs @@ -1,10 +1,6 @@ using AmeisenBotX.Core.Character.Comparators.Objects; using AmeisenBotX.Core.Character.Inventory.Objects; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Character.Comparators { @@ -30,4 +26,4 @@ public bool IsBetter(IWowItem current, IWowItem item) return scoreCurrent < scoreNew; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/BasicStrengthComparator.cs b/AmeisenBotX.Core/Character/Comparators/BasicStrengthComparator.cs index c8943b71..e63b979a 100644 --- a/AmeisenBotX.Core/Character/Comparators/BasicStrengthComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/BasicStrengthComparator.cs @@ -1,10 +1,6 @@ using AmeisenBotX.Core.Character.Comparators.Objects; using AmeisenBotX.Core.Character.Inventory.Objects; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Character.Comparators { @@ -30,4 +26,4 @@ public bool IsBetter(IWowItem current, IWowItem item) return scoreCurrent < scoreNew; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/FurySwordItemComparator.cs b/AmeisenBotX.Core/Character/Comparators/FurySwordItemComparator.cs index adae7bec..b3b206b5 100644 --- a/AmeisenBotX.Core/Character/Comparators/FurySwordItemComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/FurySwordItemComparator.cs @@ -83,4 +83,4 @@ private double GetRating(IWowItem item, EquipmentSlot slot) return rating; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/IWowItemComparator.cs b/AmeisenBotX.Core/Character/Comparators/IWowItemComparator.cs index 042dae7c..377824e1 100644 --- a/AmeisenBotX.Core/Character/Comparators/IWowItemComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/IWowItemComparator.cs @@ -6,4 +6,4 @@ public interface IWowItemComparator { bool IsBetter(IWowItem current, IWowItem item); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/ItemLevelComparator.cs b/AmeisenBotX.Core/Character/Comparators/ItemLevelComparator.cs index 27a0773f..47600394 100644 --- a/AmeisenBotX.Core/Character/Comparators/ItemLevelComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/ItemLevelComparator.cs @@ -7,4 +7,4 @@ public class ItemLevelComparator : IWowItemComparator public bool IsBetter(IWowItem current, IWowItem item) => current == null || current.ItemLevel < item.ItemLevel; } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/Objects/GearscoreFactory.cs b/AmeisenBotX.Core/Character/Comparators/Objects/GearscoreFactory.cs index 954adf44..945b4493 100644 --- a/AmeisenBotX.Core/Character/Comparators/Objects/GearscoreFactory.cs +++ b/AmeisenBotX.Core/Character/Comparators/Objects/GearscoreFactory.cs @@ -1,10 +1,7 @@ using AmeisenBotX.Core.Character.Inventory.Objects; -using System; using System.Collections.Generic; using System.Globalization; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Character.Comparators.Objects { @@ -21,11 +18,11 @@ public double Calculate(IWowItem item) { double score = 0; - foreach(KeyValuePair keyValuePair in StatMultiplicators) + foreach (KeyValuePair keyValuePair in StatMultiplicators) { if (item.Stats.TryGetValue(keyValuePair.ToString(), out string stat)) { - if((stat.Contains('.') || stat.Contains(',')) && double.TryParse(stat, NumberStyles.Any, CultureInfo.InvariantCulture, out double statDoubleValue)) + if ((stat.Contains('.') || stat.Contains(',')) && double.TryParse(stat, NumberStyles.Any, CultureInfo.InvariantCulture, out double statDoubleValue)) { score += statDoubleValue * keyValuePair.Value; } @@ -39,4 +36,4 @@ public double Calculate(IWowItem item) return score; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Comparators/TankItemComparator.cs b/AmeisenBotX.Core/Character/Comparators/TankItemComparator.cs index fc1dbd53..37e014f0 100644 --- a/AmeisenBotX.Core/Character/Comparators/TankItemComparator.cs +++ b/AmeisenBotX.Core/Character/Comparators/TankItemComparator.cs @@ -36,7 +36,7 @@ private double GetRating(IWowItem item, EquipmentSlot slot) if (slot.Equals(EquipmentSlot.INVSLOT_OFFHAND)) { // shields - if (item.GetType() == typeof(WowArmor) && ((WowArmor) item).ArmorType.Equals(ArmorType.SHIEDLS)) + if (item.GetType() == typeof(WowArmor) && ((WowArmor)item).ArmorType.Equals(ArmorType.SHIEDLS)) { if (item.Stats.TryGetValue("RESISTANCE0_NAME", out string armorString) && double.TryParse(armorString, System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out double armor)) { @@ -147,4 +147,4 @@ private double GetRating(IWowItem item, EquipmentSlot slot) return rating; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/ClickToMoveType.cs b/AmeisenBotX.Core/Character/Enums/ClickToMoveType.cs similarity index 88% rename from AmeisenBotX.Core/Character/ClickToMoveType.cs rename to AmeisenBotX.Core/Character/Enums/ClickToMoveType.cs index 0c6c4516..e65bab21 100644 --- a/AmeisenBotX.Core/Character/ClickToMoveType.cs +++ b/AmeisenBotX.Core/Character/Enums/ClickToMoveType.cs @@ -1,4 +1,4 @@ -namespace AmeisenBotX.Core.Character +namespace AmeisenBotX.Core.Character.Enums { public enum ClickToMoveType : int { @@ -17,4 +17,4 @@ public enum ClickToMoveType : int Attack = 16, WalkAndRotate = 19 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/CharacterEquipment.cs b/AmeisenBotX.Core/Character/Inventory/CharacterEquipment.cs index c1f4dc2d..415438b6 100644 --- a/AmeisenBotX.Core/Character/Inventory/CharacterEquipment.cs +++ b/AmeisenBotX.Core/Character/Inventory/CharacterEquipment.cs @@ -45,4 +45,4 @@ public void Update() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/CharacterInventory.cs b/AmeisenBotX.Core/Character/Inventory/CharacterInventory.cs index b0e4946e..da861ec7 100644 --- a/AmeisenBotX.Core/Character/Inventory/CharacterInventory.cs +++ b/AmeisenBotX.Core/Character/Inventory/CharacterInventory.cs @@ -39,4 +39,4 @@ public void Update() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Enums/ArmorType.cs b/AmeisenBotX.Core/Character/Inventory/Enums/ArmorType.cs index 2ea72c69..65928f8f 100644 --- a/AmeisenBotX.Core/Character/Inventory/Enums/ArmorType.cs +++ b/AmeisenBotX.Core/Character/Inventory/Enums/ArmorType.cs @@ -13,4 +13,4 @@ public enum ArmorType TOTEMS, SIGILS } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Enums/EquipmentSlot.cs b/AmeisenBotX.Core/Character/Inventory/Enums/EquipmentSlot.cs index 1fe5b8a0..9258baa2 100644 --- a/AmeisenBotX.Core/Character/Inventory/Enums/EquipmentSlot.cs +++ b/AmeisenBotX.Core/Character/Inventory/Enums/EquipmentSlot.cs @@ -28,4 +28,4 @@ public enum EquipmentSlot CONTAINER_BAG_3 = 22, CONTAINER_BAG_4 = 23 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Enums/ItemQuality.cs b/AmeisenBotX.Core/Character/Inventory/Enums/ItemQuality.cs index f3480452..83d575a7 100644 --- a/AmeisenBotX.Core/Character/Inventory/Enums/ItemQuality.cs +++ b/AmeisenBotX.Core/Character/Inventory/Enums/ItemQuality.cs @@ -11,4 +11,4 @@ public enum ItemQuality Legendary, Artifact } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Enums/WeaponType.cs b/AmeisenBotX.Core/Character/Inventory/Enums/WeaponType.cs index 8daed077..af8cdf18 100644 --- a/AmeisenBotX.Core/Character/Inventory/Enums/WeaponType.cs +++ b/AmeisenBotX.Core/Character/Inventory/Enums/WeaponType.cs @@ -20,4 +20,4 @@ public enum WeaponType TWOHANDED_SWORDS, WANDS } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/ItemFactory.cs b/AmeisenBotX.Core/Character/Inventory/ItemFactory.cs index 84ac4859..5b6ec5e8 100644 --- a/AmeisenBotX.Core/Character/Inventory/ItemFactory.cs +++ b/AmeisenBotX.Core/Character/Inventory/ItemFactory.cs @@ -47,4 +47,4 @@ private static void HandleDeserializationError(object sender, ErrorEventArgs e) e.ErrorContext.Handled = true; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/IWowItem.cs b/AmeisenBotX.Core/Character/Inventory/Objects/IWowItem.cs index 8e62b0c6..72c660c7 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/IWowItem.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/IWowItem.cs @@ -41,4 +41,4 @@ public interface IWowItem string Type { get; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowArmor.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowArmor.cs index 165be045..6df45eb3 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowArmor.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowArmor.cs @@ -29,4 +29,4 @@ public WowArmor(WowBasicItem wowBasicItem) : base(wowBasicItem) public ArmorType ArmorType { get; private set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowBasicItem.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowBasicItem.cs index b02decab..583cbb10 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowBasicItem.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowBasicItem.cs @@ -9,14 +9,18 @@ public class WowBasicItem : IWowItem /** * Default Constructor */ - public WowBasicItem() { } + + public WowBasicItem() + { + } /** * Copy Constructor */ + public WowBasicItem(WowBasicItem item) { - if(item != null) + if (item != null) { this.BagId = item.BagId; this.BagSlot = item.BagSlot; @@ -93,4 +97,4 @@ public WowBasicItem(WowBasicItem item) [JsonProperty("type")] public string Type { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowConsumable.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowConsumable.cs index da14a291..50913e47 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowConsumable.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowConsumable.cs @@ -23,4 +23,4 @@ public WowConsumable(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowContainer.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowContainer.cs index 49e4e199..745f5a9d 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowContainer.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowContainer.cs @@ -23,4 +23,4 @@ public WowContainer(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowGem.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowGem.cs index a3b9a055..1f23e85e 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowGem.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowGem.cs @@ -23,4 +23,4 @@ public WowGem(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowKey.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowKey.cs index 5ae4c615..ac541978 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowKey.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowKey.cs @@ -23,4 +23,4 @@ public WowKey(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowMiscellaneousItem.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowMiscellaneousItem.cs index 226b70bc..390d8d2b 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowMiscellaneousItem.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowMiscellaneousItem.cs @@ -23,4 +23,4 @@ public WowMiscellaneousItem(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowMoneyItem.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowMoneyItem.cs index a7c2b176..cdf8681e 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowMoneyItem.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowMoneyItem.cs @@ -23,4 +23,4 @@ public WowMoneyItem(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowProjectile.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowProjectile.cs index 4ded6b9e..bf1c01cd 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowProjectile.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowProjectile.cs @@ -23,4 +23,4 @@ public WowProjectile(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowQuestItem.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowQuestItem.cs index 88626fc3..aa40cbe9 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowQuestItem.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowQuestItem.cs @@ -23,4 +23,4 @@ public WowQuestItem(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowQuiver.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowQuiver.cs index 08a29862..89b42e12 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowQuiver.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowQuiver.cs @@ -23,4 +23,4 @@ public WowQuiver(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowReagent.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowReagent.cs index 9961f763..da5aee6b 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowReagent.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowReagent.cs @@ -23,4 +23,4 @@ public WowReagent(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowRecipe.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowRecipe.cs index 2b107633..39fd75ba 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowRecipe.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowRecipe.cs @@ -23,4 +23,4 @@ public WowRecipe(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowTradeGood.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowTradeGood.cs index a356c0b4..9cab3c87 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowTradeGood.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowTradeGood.cs @@ -23,4 +23,4 @@ public WowTradegood(WowBasicItem wowBasicItem) : base(wowBasicItem) EquipLocation = wowBasicItem.EquipLocation; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Inventory/Objects/WowWeapon.cs b/AmeisenBotX.Core/Character/Inventory/Objects/WowWeapon.cs index f513025a..1f186435 100644 --- a/AmeisenBotX.Core/Character/Inventory/Objects/WowWeapon.cs +++ b/AmeisenBotX.Core/Character/Inventory/Objects/WowWeapon.cs @@ -29,4 +29,4 @@ public WowWeapon(WowBasicItem wowBasicItem) : base(wowBasicItem) public WeaponType WeaponType { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Spells/Enums/Spellschools.cs b/AmeisenBotX.Core/Character/Spells/Enums/Spellschools.cs index c86adcb7..b70db7b1 100644 --- a/AmeisenBotX.Core/Character/Spells/Enums/Spellschools.cs +++ b/AmeisenBotX.Core/Character/Spells/Enums/Spellschools.cs @@ -13,4 +13,4 @@ public enum Spellschools Shadow = 1 << 5, Arcane = 1 << 6 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Spells/Objects/Spell.cs b/AmeisenBotX.Core/Character/Spells/Objects/Spell.cs index 6a84dbbb..2fe2776a 100644 --- a/AmeisenBotX.Core/Character/Spells/Objects/Spell.cs +++ b/AmeisenBotX.Core/Character/Spells/Objects/Spell.cs @@ -28,4 +28,4 @@ public class Spell [JsonProperty("spellBookName")] public string SpellbookName { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Character/Spells/SpellBook.cs b/AmeisenBotX.Core/Character/Spells/SpellBook.cs index a3863d59..d929f6d3 100644 --- a/AmeisenBotX.Core/Character/Spells/SpellBook.cs +++ b/AmeisenBotX.Core/Character/Spells/SpellBook.cs @@ -21,6 +21,7 @@ public SpellBook(HookManager hookManager) } public delegate void SpellBookUpdate(); + public event SpellBookUpdate OnSpellBookUpdate; public List Spells { get; private set; } @@ -59,4 +60,4 @@ private static void HandleDeserializationError(object sender, ErrorEventArgs e) e.ErrorContext.Handled = true; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Common/BotMath.cs b/AmeisenBotX.Core/Common/BotMath.cs index d76c8331..2a9eb205 100644 --- a/AmeisenBotX.Core/Common/BotMath.cs +++ b/AmeisenBotX.Core/Common/BotMath.cs @@ -45,4 +45,4 @@ public static bool IsFacing(Vector3 position, float rotation, Vector3 targetPosi return (f >= (rotation * minRotation)) && (f <= (rotation * maxRotation)); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Common/BotUtils.cs b/AmeisenBotX.Core/Common/BotUtils.cs index 7965ff35..1252428d 100644 --- a/AmeisenBotX.Core/Common/BotUtils.cs +++ b/AmeisenBotX.Core/Common/BotUtils.cs @@ -111,4 +111,4 @@ private static IntPtr MakeLParam(int p, int p2) [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr windowHandle, uint msg, IntPtr param, IntPtr parameter); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Common/Enums/VirtualKeys.cs b/AmeisenBotX.Core/Common/Enums/VirtualKeys.cs index 4feb3202..56cc2737 100644 --- a/AmeisenBotX.Core/Common/Enums/VirtualKeys.cs +++ b/AmeisenBotX.Core/Common/Enums/VirtualKeys.cs @@ -135,4 +135,4 @@ public enum VirtualKeys : int VK_LMENU = 0xA4, VK_RMENU = 0xA5 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/CombatLog/CombatLogParser.cs b/AmeisenBotX.Core/Data/CombatLog/CombatLogParser.cs index 283d1a74..c73a2c86 100644 --- a/AmeisenBotX.Core/Data/CombatLog/CombatLogParser.cs +++ b/AmeisenBotX.Core/Data/CombatLog/CombatLogParser.cs @@ -2,11 +2,7 @@ using AmeisenBotX.Logging; using AmeisenBotX.Logging.Enums; using Newtonsoft.Json; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Data.CombatLog { @@ -17,11 +13,11 @@ public CombatLogParser(IAmeisenBotCache ameisenBotCache) AmeisenBotCache = ameisenBotCache; } - IAmeisenBotCache AmeisenBotCache { get; } + private IAmeisenBotCache AmeisenBotCache { get; } public void Parse(long timestamp, List args) { AmeisenLogger.Instance.Log($"Parsing CombatLog: {JsonConvert.SerializeObject(args)}", LogLevel.Verbose); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntrySubtype.cs b/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntrySubtype.cs index d28fb74a..598cf6d0 100644 --- a/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntrySubtype.cs +++ b/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntrySubtype.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AmeisenBotX.Core.Data.CombatLog.Enums +namespace AmeisenBotX.Core.Data.CombatLog.Enums { public enum CombatLogEntrySubtype { } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntryType.cs b/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntryType.cs index 66ea57e7..e5420b8c 100644 --- a/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntryType.cs +++ b/AmeisenBotX.Core/Data/CombatLog/Enums/CombatLogEntryType.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AmeisenBotX.Core.Data.CombatLog.Enums +namespace AmeisenBotX.Core.Data.CombatLog.Enums { public enum CombatLogEntryType { } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/CombatLog/Objects/BasicCombatLogEntry.cs b/AmeisenBotX.Core/Data/CombatLog/Objects/BasicCombatLogEntry.cs index 936733a9..8dc95167 100644 --- a/AmeisenBotX.Core/Data/CombatLog/Objects/BasicCombatLogEntry.cs +++ b/AmeisenBotX.Core/Data/CombatLog/Objects/BasicCombatLogEntry.cs @@ -1,9 +1,5 @@ using AmeisenBotX.Core.Data.CombatLog.Enums; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Data.CombatLog.Objects { @@ -16,8 +12,8 @@ public BasicCombatLogEntry(CombatLogEntryType combatLogEntryType, CombatLogEntry CombatLogEntrySubtype = combatLogEntrySubtype; } - public CombatLogEntryType CombatLogEntryType { get; } - public CombatLogEntrySubtype CombatLogEntrySubtype { get; } + + public CombatLogEntryType CombatLogEntryType { get; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/CreatureType.cs b/AmeisenBotX.Core/Data/Enums/CreatureType.cs index 19818cdb..b167388c 100644 --- a/AmeisenBotX.Core/Data/Enums/CreatureType.cs +++ b/AmeisenBotX.Core/Data/Enums/CreatureType.cs @@ -17,4 +17,4 @@ public enum CreatureType NonCombatPet, GasCloud } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/DungeonDifficulty.cs b/AmeisenBotX.Core/Data/Enums/DungeonDifficulty.cs index 293b760a..7919de8c 100644 --- a/AmeisenBotX.Core/Data/Enums/DungeonDifficulty.cs +++ b/AmeisenBotX.Core/Data/Enums/DungeonDifficulty.cs @@ -5,4 +5,4 @@ public enum DungeonDifficulty Normal = 0, Heroic = 1 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/HerbNode.cs b/AmeisenBotX.Core/Data/Enums/HerbNode.cs index d4c4aa3e..001784e8 100644 --- a/AmeisenBotX.Core/Data/Enums/HerbNode.cs +++ b/AmeisenBotX.Core/Data/Enums/HerbNode.cs @@ -43,4 +43,4 @@ public enum HerbNodes : int Goldclover = 7844, AddersTongue = 8084 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/OreNode.cs b/AmeisenBotX.Core/Data/Enums/OreNode.cs index 48f37bad..7f090e0d 100644 --- a/AmeisenBotX.Core/Data/Enums/OreNode.cs +++ b/AmeisenBotX.Core/Data/Enums/OreNode.cs @@ -24,4 +24,4 @@ public enum OreNodes : int Saronite = 7804, Titanium = 6798 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/RaidDifficulty.cs b/AmeisenBotX.Core/Data/Enums/RaidDifficulty.cs index dc680f2b..eb19b0a6 100644 --- a/AmeisenBotX.Core/Data/Enums/RaidDifficulty.cs +++ b/AmeisenBotX.Core/Data/Enums/RaidDifficulty.cs @@ -7,4 +7,4 @@ public enum RaidDifficulty Heroic10 = 2, Heroic25 = 3 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/RollType.cs b/AmeisenBotX.Core/Data/Enums/RollType.cs index 51f4740f..90ad683a 100644 --- a/AmeisenBotX.Core/Data/Enums/RollType.cs +++ b/AmeisenBotX.Core/Data/Enums/RollType.cs @@ -6,4 +6,4 @@ public enum RollType : int Need = 1, Greed = 2, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/RuneType.cs b/AmeisenBotX.Core/Data/Enums/RuneType.cs index 154af7cb..54a5d628 100644 --- a/AmeisenBotX.Core/Data/Enums/RuneType.cs +++ b/AmeisenBotX.Core/Data/Enums/RuneType.cs @@ -7,4 +7,4 @@ public enum RuneType Frost, Death } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/ShapeshiftForm.cs b/AmeisenBotX.Core/Data/Enums/ShapeshiftForm.cs index 476b3233..3110be88 100644 --- a/AmeisenBotX.Core/Data/Enums/ShapeshiftForm.cs +++ b/AmeisenBotX.Core/Data/Enums/ShapeshiftForm.cs @@ -23,4 +23,4 @@ public enum ShapeshiftForm Moonkin = 31, SpiritOfRedemption = 32 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/WowClass.cs b/AmeisenBotX.Core/Data/Enums/WowClass.cs index 8f145dd7..55d92d06 100644 --- a/AmeisenBotX.Core/Data/Enums/WowClass.cs +++ b/AmeisenBotX.Core/Data/Enums/WowClass.cs @@ -14,4 +14,4 @@ public enum WowClass : int Warlock = 9, Druid = 11 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/WowGender.cs b/AmeisenBotX.Core/Data/Enums/WowGender.cs index 6ea8cdca..e41f297c 100644 --- a/AmeisenBotX.Core/Data/Enums/WowGender.cs +++ b/AmeisenBotX.Core/Data/Enums/WowGender.cs @@ -6,4 +6,4 @@ public enum WowGender Male = 0, Female = 1 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/WowPowertype.cs b/AmeisenBotX.Core/Data/Enums/WowPowertype.cs index bb300cfd..3532d357 100644 --- a/AmeisenBotX.Core/Data/Enums/WowPowertype.cs +++ b/AmeisenBotX.Core/Data/Enums/WowPowertype.cs @@ -9,4 +9,4 @@ public enum WowPowertype Runes = 5, Runeenergy = 6 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Enums/WowRace.cs b/AmeisenBotX.Core/Data/Enums/WowRace.cs index 516ca928..bce81dac 100644 --- a/AmeisenBotX.Core/Data/Enums/WowRace.cs +++ b/AmeisenBotX.Core/Data/Enums/WowRace.cs @@ -14,4 +14,4 @@ public enum WowRace : int Bloodelf = 10, Draenei = 11 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/ObjectManager.cs b/AmeisenBotX.Core/Data/ObjectManager.cs index e6aa7975..eba9f320 100644 --- a/AmeisenBotX.Core/Data/ObjectManager.cs +++ b/AmeisenBotX.Core/Data/ObjectManager.cs @@ -35,8 +35,12 @@ public ObjectManager(XMemory xMemory, IOffsetList offsetList, IAmeisenBotCache b public event ObjectUpdateComplete OnObjectUpdateComplete; + public HookManager HookManager { get; internal set; } + public bool IsWorldLoaded { get; private set; } + public WowUnit LastTarget { get; private set; } + public ulong LastTargetGuid { get; private set; } public int MapId { get; private set; } @@ -45,23 +49,22 @@ public ObjectManager(XMemory xMemory, IOffsetList offsetList, IAmeisenBotCache b public List PartymemberGuids { get; private set; } - public ulong PetGuid { get; private set; } - - public WowPlayer Player { get; private set; } + public List Partymembers + => WowObjects.Where(e => PartymemberGuids.Contains(e.Guid)).ToList(); - public WowUnit Target { get; private set; } + public WowUnit Pet { get; private set; } - public WowUnit LastTarget { get; private set; } + public ulong PetGuid { get; private set; } - public WowUnit Pet { get; private set; } + public WowPlayer Player { get; private set; } public IntPtr PlayerBase { get; private set; } public ulong PlayerGuid { get; private set; } - public ulong TargetGuid { get; private set; } + public WowUnit Target { get; private set; } - public HookManager HookManager { get; internal set; } + public ulong TargetGuid { get; private set; } public List WowObjects { @@ -82,9 +85,6 @@ public List WowObjects } } - public List Partymembers - => WowObjects.Where(e => PartymemberGuids.Contains(e.Guid)).ToList(); - public int ZoneId { get; private set; } private IAmeisenBotCache BotCache { get; } @@ -93,12 +93,31 @@ public List Partymembers private XMemory XMemory { get; } + public IEnumerable GetNearEnemies(Vector3 position, double distance) + => WowObjects.OfType() + .Where(e => e.Guid != PlayerGuid + && !e.IsDead + && !e.IsNotAttackable + && HookManager.GetUnitReaction(Player, e) != WowUnitReaction.Friendly + && e.Position.GetDistance(position) < distance); + + public IEnumerable GetNearFriends(Vector3 position, int distance) + => WowObjects.OfType() + .Where(e => e.Guid != PlayerGuid + && !e.IsDead + && !e.IsNotAttackable + && HookManager.GetUnitReaction(Player, e) == WowUnitReaction.Friendly + && e.Position.GetDistance(position) < distance); + public WowObject GetWowObjectByGuid(ulong guid) - => WowObjects.FirstOrDefault(e => e.Guid == guid); + => WowObjects.FirstOrDefault(e => e.Guid == guid); public T GetWowObjectByGuid(ulong guid) where T : WowObject => WowObjects.OfType().FirstOrDefault(e => e.Guid == guid); + public WowPlayer GetWowPlayerByName(string playername, StringComparison stringComparison = StringComparison.OrdinalIgnoreCase) + => WowObjects.OfType().FirstOrDefault(e => e.Name.Equals(playername.ToUpper(), stringComparison)); + public ulong ReadPartyLeaderGuid() { if (XMemory.Read(OffsetList.RaidLeader, out ulong partyleaderGuid)) @@ -171,14 +190,6 @@ public WowObject ReadWowObject(IntPtr activeObject, WowObjectType wowObjectType return null; } - public IEnumerable GetNearEnemies(double distance) - => WowObjects.OfType() - .Where(e => e.Guid != PlayerGuid - && !e.IsDead - && !e.IsNotAttackable - && HookManager.GetUnitReaction(Player, e) != WowUnitReaction.Friendly - && e.Position.GetDistance(Player.Position) < distance); - public WowPlayer ReadWowPlayer(IntPtr activeObject, WowObjectType wowObjectType = WowObjectType.Player) { WowUnit wowUnit = ReadWowUnit(activeObject, wowObjectType); @@ -584,4 +595,4 @@ private WowGameobject ReadWowGameobject(IntPtr activeObject, WowObjectType wowOb return null; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpse.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpse.cs index e9ace8dd..ff0a7cfb 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpse.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpse.cs @@ -3,4 +3,4 @@ internal class WowCorpse { } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpseFlags.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpseFlags.cs index 462913e4..93120c16 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpseFlags.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowCorpseFlags.cs @@ -8,4 +8,4 @@ public enum WowCorpseFlags HideCloak = 0x10, Lootable = 0x20 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowDynobject.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowDynobject.cs index b336aef8..ede904cf 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowDynobject.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowDynobject.cs @@ -10,4 +10,4 @@ public class WowDynobject : WowObject public int SpellId { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowGameObjectFlags.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowGameObjectFlags.cs index 2b94edae..54c34928 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowGameObjectFlags.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowGameObjectFlags.cs @@ -12,4 +12,4 @@ public enum WowGameobjectFlags : int DoesNotDespawn = 0x20, Triggered = 0x40, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobject.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobject.cs index 65da4487..5e6e199d 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobject.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobject.cs @@ -22,4 +22,4 @@ public class WowGameobject : WowObject public int State { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobjectType.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobjectType.cs index 564554c7..bd4630b7 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobjectType.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowGameobjectType.cs @@ -39,4 +39,4 @@ public enum WowGameobjectType Guildbank, Trapdoor } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowLuaUnit.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowLuaUnit.cs index df8d89a6..e791b04a 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowLuaUnit.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowLuaUnit.cs @@ -51,4 +51,4 @@ public enum WowLuaUnit Raid39, Raid40, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowObject.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowObject.cs index b03d8dc5..2155a711 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowObject.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowObject.cs @@ -9,14 +9,14 @@ public class WowObject public IntPtr DescriptorAddress { get; set; } - public ulong Guid { get; set; } - public int EntryId { get; set; } - public float Scale { get; set; } + public ulong Guid { get; set; } public Vector3 Position { get; set; } + public float Scale { get; set; } + public WowObjectType Type { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowObjectType.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowObjectType.cs index 2c6b4b26..05d43277 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowObjectType.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowObjectType.cs @@ -11,4 +11,4 @@ public enum WowObjectType Dynobject = 6, Corpse = 7 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowPlayer.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowPlayer.cs index f02ad7cf..57f92bc2 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowPlayer.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowPlayer.cs @@ -1,20 +1,19 @@ using AmeisenBotX.Core.Data.Enums; -using System; namespace AmeisenBotX.Core.Data.Objects.WowObject { public class WowPlayer : WowUnit { + public int ComboPoints { get; set; } + public int Exp { get; set; } public int MaxExp { get; set; } - public int ComboPoints { get; set; } - public bool IsAlliance() => Race == WowRace.Draenei || Race == WowRace.Human || Race == WowRace.Dwarf || Race == WowRace.Gnome || Race == WowRace.Nightelf; public bool IsHorde() => Race == WowRace.Undead || Race == WowRace.Orc || Race == WowRace.Bloodelf || Race == WowRace.Tauren || Race == WowRace.Undead; } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnit.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnit.cs index b6889be5..9ad3c26e 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnit.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnit.cs @@ -1,5 +1,4 @@ using AmeisenBotX.Core.Data.Enums; -using System; using System.Collections.Specialized; namespace AmeisenBotX.Core.Data.Objects.WowObject @@ -8,6 +7,8 @@ public class WowUnit : WowObject { public WowClass Class { get; set; } + public float CombatReach { get; set; } + public int CurrentlyCastingSpellId { get; set; } public int CurrentlyChannelingSpellId { get; set; } @@ -24,8 +25,18 @@ public class WowUnit : WowObject public double HealthPercentage => ReturnPercentage(Health, MaxHealth); + public bool IsAuctioneer => NpcFlags[(int)WowUnitNpcFlags.Auctioneer]; + public bool IsAutoAttacking { get; set; } + public bool IsBanker => NpcFlags[(int)WowUnitNpcFlags.Banker]; + + public bool IsBattlemaster => NpcFlags[(int)WowUnitNpcFlags.Battlemaster]; + + public bool IsCasting => CurrentlyCastingSpellId > 0 || CurrentlyChannelingSpellId > 0; + + public bool IsClasstrainer => NpcFlags[(int)WowUnitNpcFlags.ClassTrainer]; + public bool IsConfused => UnitFlags[(int)WowUnitFlags.Confused]; public bool IsDazed => UnitFlags[(int)WowUnitFlags.Dazed]; @@ -36,50 +47,6 @@ public class WowUnit : WowObject public bool IsFleeing => UnitFlags[(int)WowUnitFlags.Fleeing]; - public bool IsInCombat => UnitFlags[(int)WowUnitFlags.Combat]; - - public bool IsInFlightmasterFlight => UnitFlags[(int)WowUnitFlags.FlightmasterFlight]; - - public bool IsLootable => UnitFlagsDynamic[(int)WowUnitDynamicFlags.Lootable]; - - public bool IsLooting => UnitFlags[(int)WowUnitFlags.Looting]; - - public bool IsMounted => UnitFlags[(int)WowUnitFlags.Mounted]; - - public bool IsNotAttackable => UnitFlags[(int)WowUnitFlags.NotAttackable]; - - public bool IsPetInCombat => UnitFlags[(int)WowUnitFlags.PetInCombat]; - - public bool IsPvpFlagged => UnitFlags[(int)WowUnitFlags.PvpFlagged]; - - public bool IsReferAFriendLinked => UnitFlagsDynamic[(int)WowUnitDynamicFlags.ReferAFriendLinked]; - - public bool IsSilenced => UnitFlags[(int)WowUnitFlags.Silenced]; - - public bool IsSitting => UnitFlags[(int)WowUnitFlags.Sitting]; - - public bool IsSkinnable => UnitFlags[(int)WowUnitFlags.Skinnable]; - - public bool IsSpecialInfo => UnitFlagsDynamic[(int)WowUnitDynamicFlags.SpecialInfo]; - - public bool IsTaggedByMe => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TaggedByMe]; - - public bool IsTaggedByOther => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TaggedByOther]; - - public bool IsTappedByThreat => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TappedByThreat]; - - public bool IsTotem => UnitFlags[(int)WowUnitFlags.Totem]; - - public bool IsTrackedUnit => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TrackUnit]; - - public bool IsAuctioneer => NpcFlags[(int)WowUnitNpcFlags.Auctioneer]; - - public bool IsBanker => NpcFlags[(int)WowUnitNpcFlags.Banker]; - - public bool IsBattlemaster => NpcFlags[(int)WowUnitNpcFlags.Battlemaster]; - - public bool IsClasstrainer => NpcFlags[(int)WowUnitNpcFlags.ClassTrainer]; - public bool IsFlightmaster => NpcFlags[(int)WowUnitNpcFlags.Flightmaster]; public bool IsFoodVendor => NpcFlags[(int)WowUnitNpcFlags.FoodVendor]; @@ -92,22 +59,48 @@ public class WowUnit : WowObject public bool IsGuildbanker => NpcFlags[(int)WowUnitNpcFlags.Guildbanker]; + public bool IsInCombat => UnitFlags[(int)WowUnitFlags.Combat]; + + public bool IsInFlightmasterFlight => UnitFlags[(int)WowUnitFlags.FlightmasterFlight]; + public bool IsInnkeeper => NpcFlags[(int)WowUnitNpcFlags.Innkeeper]; + public bool IsLootable => UnitFlagsDynamic[(int)WowUnitDynamicFlags.Lootable]; + + public bool IsLooting => UnitFlags[(int)WowUnitFlags.Looting]; + + public bool IsMounted => UnitFlags[(int)WowUnitFlags.Mounted]; + public bool IsNoneNpc => NpcFlags[(int)WowUnitNpcFlags.None]; + public bool IsNotAttackable => UnitFlags[(int)WowUnitFlags.NotAttackable]; + + public bool IsPetInCombat => UnitFlags[(int)WowUnitFlags.PetInCombat]; + public bool IsPetition => NpcFlags[(int)WowUnitNpcFlags.Petitioner]; public bool IsPoisonVendor => NpcFlags[(int)WowUnitNpcFlags.PoisonVendor]; public bool IsProfessionTrainer => NpcFlags[(int)WowUnitNpcFlags.ProfessionTrainer]; + public bool IsPvpFlagged => UnitFlags[(int)WowUnitFlags.PvpFlagged]; + public bool IsQuestgiver => NpcFlags[(int)WowUnitNpcFlags.Questgiver]; public bool IsReagentVendor => NpcFlags[(int)WowUnitNpcFlags.ReagentVendor]; + public bool IsReferAFriendLinked => UnitFlagsDynamic[(int)WowUnitDynamicFlags.ReferAFriendLinked]; + public bool IsRepairVendor => NpcFlags[(int)WowUnitNpcFlags.RepairVendor]; + public bool IsSilenced => UnitFlags[(int)WowUnitFlags.Silenced]; + + public bool IsSitting => UnitFlags[(int)WowUnitFlags.Sitting]; + + public bool IsSkinnable => UnitFlags[(int)WowUnitFlags.Skinnable]; + + public bool IsSpecialInfo => UnitFlagsDynamic[(int)WowUnitDynamicFlags.SpecialInfo]; + public bool IsSpellclick => NpcFlags[(int)WowUnitNpcFlags.Spellclick]; public bool IsSpiritguide => NpcFlags[(int)WowUnitNpcFlags.Spiritguide]; @@ -118,12 +111,20 @@ public class WowUnit : WowObject public bool IsTabarddesigner => NpcFlags[(int)WowUnitNpcFlags.Tabarddesigner]; + public bool IsTaggedByMe => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TaggedByMe]; + + public bool IsTaggedByOther => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TaggedByOther]; + + public bool IsTappedByThreat => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TappedByThreat]; + + public bool IsTotem => UnitFlags[(int)WowUnitFlags.Totem]; + + public bool IsTrackedUnit => UnitFlagsDynamic[(int)WowUnitDynamicFlags.TrackUnit]; + public bool IsTrainer => NpcFlags[(int)WowUnitNpcFlags.Trainer]; public bool IsVendor => NpcFlags[(int)WowUnitNpcFlags.Vendor]; - public bool IsCasting => CurrentlyCastingSpellId > 0 || CurrentlyChannelingSpellId > 0; - public int Level { get; set; } public int Mana { get; set; } @@ -142,6 +143,8 @@ public class WowUnit : WowObject public string Name { get; set; } + public BitVector32 NpcFlags { get; set; } + public WowPowertype PowerType { get; set; } public WowRace Race { get; set; } @@ -152,8 +155,6 @@ public class WowUnit : WowObject public float Rotation { get; set; } - public float CombatReach { get; set; } - public int Runeenergy { get; set; } public double RuneenergyPercentage => ReturnPercentage(Runeenergy, MaxRuneenergy); @@ -164,8 +165,6 @@ public class WowUnit : WowObject public BitVector32 UnitFlagsDynamic { get; set; } - public BitVector32 NpcFlags { get; set; } - private double ReturnPercentage(int value, int max) { if (value == 0 || max == 0) @@ -178,4 +177,4 @@ private double ReturnPercentage(int value, int max) } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitDynamicFlags.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitDynamicFlags.cs index 139598c5..01be864d 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitDynamicFlags.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitDynamicFlags.cs @@ -15,4 +15,4 @@ public enum WowUnitDynamicFlags : int ReferAFriendLinked = 0x40, TappedByThreat = 0x80, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitFlags.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitFlags.cs index 0eed801b..79cb4186 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitFlags.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitFlags.cs @@ -29,4 +29,4 @@ public enum WowUnitFlags : int Skinnable = 0x8000000, Dazed = 0x20000000 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitNpcFlags.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitNpcFlags.cs index a3b4f9b0..1a41270e 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitNpcFlags.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitNpcFlags.cs @@ -31,4 +31,4 @@ public enum WowUnitNpcFlags : int Spellclick = 0x01000000, Guard = 0x10000000, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitReaction.cs b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitReaction.cs index d2518c38..cddeee26 100644 --- a/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitReaction.cs +++ b/AmeisenBotX.Core/Data/Objects/WowObject/WowUnitReaction.cs @@ -10,4 +10,4 @@ public enum WowUnitReaction Neutral = 3, Friendly = 4 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Persistence/IAmeisenBotCache.cs b/AmeisenBotX.Core/Data/Persistence/IAmeisenBotCache.cs index 3050817b..c9fe797c 100644 --- a/AmeisenBotX.Core/Data/Persistence/IAmeisenBotCache.cs +++ b/AmeisenBotX.Core/Data/Persistence/IAmeisenBotCache.cs @@ -18,4 +18,4 @@ public interface IAmeisenBotCache bool TryGetReaction(int a, int b, out WowUnitReaction reaction); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Data/Persistence/InMemoryBotCache.cs b/AmeisenBotX.Core/Data/Persistence/InMemoryBotCache.cs index 101a7b16..b6bab325 100644 --- a/AmeisenBotX.Core/Data/Persistence/InMemoryBotCache.cs +++ b/AmeisenBotX.Core/Data/Persistence/InMemoryBotCache.cs @@ -16,14 +16,14 @@ public InMemoryBotCache(string path) Clear(); } + public List CombatLogEntries { get; private set; } + public string FilePath { get; } public Dictionary NameCache { get; private set; } public Dictionary<(int, int), WowUnitReaction> ReactionCache { get; private set; } - public List CombatLogEntries { get; private set; } - public void CacheName(ulong guid, string name) { if (!NameCache.ContainsKey(guid)) @@ -124,4 +124,4 @@ public bool TryGetReaction(int a, int b, out WowUnitReaction reaction) return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Dungeon/DungeonEngine.cs b/AmeisenBotX.Core/Dungeon/DungeonEngine.cs new file mode 100644 index 00000000..1fa7e79f --- /dev/null +++ b/AmeisenBotX.Core/Dungeon/DungeonEngine.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Dungeon +{ + public class DungeonEngine + { + } +} diff --git a/AmeisenBotX.Core/Dungeon/Profiles/IDungeonProfile.cs b/AmeisenBotX.Core/Dungeon/Profiles/IDungeonProfile.cs new file mode 100644 index 00000000..983842ab --- /dev/null +++ b/AmeisenBotX.Core/Dungeon/Profiles/IDungeonProfile.cs @@ -0,0 +1,18 @@ +using AmeisenBotX.Core.Jobs.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs.Profiles +{ + public interface IDungeonProfile + { + public string Name { get; } + + public string Description { get; } + + public string Author { get; } + } +} diff --git a/AmeisenBotX.Core/Event/EventHookManager.cs b/AmeisenBotX.Core/Event/EventHookManager.cs index 5bd985ea..02b5a80f 100644 --- a/AmeisenBotX.Core/Event/EventHookManager.cs +++ b/AmeisenBotX.Core/Event/EventHookManager.cs @@ -163,4 +163,4 @@ private void SetupEventHook() HookManager.LuaDoString(luaStuff.ToString()); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Event/Objects/WowEvent.cs b/AmeisenBotX.Core/Event/Objects/WowEvent.cs index 09c6506d..6555f5f8 100644 --- a/AmeisenBotX.Core/Event/Objects/WowEvent.cs +++ b/AmeisenBotX.Core/Event/Objects/WowEvent.cs @@ -14,4 +14,4 @@ public class WowEvent [JsonProperty("time")] public long Timestamp { get; set; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Hook/HookManager.cs b/AmeisenBotX.Core/Hook/HookManager.cs index e2ee6c72..cfe3938f 100644 --- a/AmeisenBotX.Core/Hook/HookManager.cs +++ b/AmeisenBotX.Core/Hook/HookManager.cs @@ -1,5 +1,4 @@ -using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Character.Inventory.Objects; +using AmeisenBotX.Core.Character.Inventory.Objects; using AmeisenBotX.Core.Common; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; @@ -60,18 +59,6 @@ public bool IsWoWHooked public byte[] OriginalEndsceneBytes { get; private set; } - public void RightClickObject(WowObject flagObject) - { - string[] asm = new string[] - { - $"MOV ECX, {flagObject.BaseAddress.ToInt32()}", - $"CALL 0x711140", - "RETN", - }; - - InjectAndExecute(asm, false); - } - public IntPtr ReturnValueAddress { get; private set; } private IAmeisenBotCache BotCache { get; } @@ -82,20 +69,17 @@ public void RightClickObject(WowObject flagObject) private XMemory XMemory { get; } - public void AcceptPartyInvite() + public void AcceptBattlegroundInvite() { - LuaDoString("AcceptGroup();"); SendChatMessage("/click StaticPopup1Button1"); } - public void AcceptBattlegroundInvite() + public void AcceptPartyInvite() { + LuaDoString("AcceptGroup();"); SendChatMessage("/click StaticPopup1Button1"); } - public void LeaveBattleground() - => SendChatMessage("/click WorldStateScoreFrameLeaveButton"); - public void AcceptResurrect() { LuaDoString("AcceptResurrect();"); @@ -108,12 +92,6 @@ public void AcceptSummon() SendChatMessage("/click StaticPopup1Button1"); } - public void AttackUnit(WowUnit unit) - { - XMemory.Write(OffsetList.ClickToMoveGuid, unit.Guid); - WriteCtmValues(unit.Position, ClickToMoveType.AttackGuid); - } - public void CastSpell(string name, bool castOnSelf = false) { AmeisenLogger.Instance.Log($"Casting spell with name: {name}", LogLevel.Verbose); @@ -128,23 +106,6 @@ public void CastSpell(string name, bool castOnSelf = false) } } - public int GetFreeBagSlotCount() - { - LuaDoString("abFreeBagSlots=0 for i=1,5 do abFreeBagSlots=abFreeBagSlots+GetContainerNumFreeSlots(i-1)end"); - - if (int.TryParse(GetLocalizedText("abFreeBagSlots"), out int bagSlots)) - { - return bagSlots; - } - else - { - return 100; - } - } - - public void SellAllItems() - => LuaDoString("local p,N,n=0 for b=0,4 do for s=1,GetContainerNumSlots(b) do n=GetContainerItemLink(b,s) if n then N={GetItemInfo(n)} p=p+N[11] UseContainerItem(b,s) end end end"); - public void CastSpellById(int spellId) { AmeisenLogger.Instance.Log($"Casting spell with id: {spellId}", LogLevel.Verbose); @@ -165,12 +126,6 @@ public void CastSpellById(int spellId) } } - public void QueuBattlegroundByName(string bgName) - => SendChatMessage($"/run for i=1,GetNumBattlegroundTypes()do local name,_,_,_,_=GetBattlegroundInfo(i)if name==\"{bgName}\"then JoinBattlefield(i)end end"); - - public void UseItemByBagAndSlot(int bagId, int bagSlot) - => LuaDoString($"UseContainerItem({bagId}, {bagSlot});"); - public void ClearTarget() => SendChatMessage("/cleartarget"); @@ -280,6 +235,20 @@ public string GetEquipmentItems() return GetLocalizedText("abotEquipmentResult"); } + public int GetFreeBagSlotCount() + { + LuaDoString("abFreeBagSlots=0 for i=1,5 do abFreeBagSlots=abFreeBagSlots+GetContainerNumFreeSlots(i-1)end"); + + if (int.TryParse(GetLocalizedText("abFreeBagSlots"), out int bagSlots)) + { + return bagSlots; + } + else + { + return 100; + } + } + public string GetInventoryItems() { string command = "abotInventoryResult=\"[\"for a=0,4 do containerSlots=GetContainerNumSlots(a)for b=1,containerSlots do abId=GetContainerItemID(a,b)if string.len(tostring(abId or\"\"))>0 then abItemLink=GetContainerItemLink(a,b)abCurrentDurability,abMaxDurability=GetContainerItemDurability(a,b)abCooldownStart,abCooldownEnd=GetContainerItemCooldown(a,b)abIcon,abItemCount,abLocked,abQuality,abReadable,abLootable,abItemLink,isFiltered=GetContainerItemInfo(a,b)abName,abLink,abRarity,abLevel,abMinLevel,abType,abSubType,abStackCount,abEquipLoc,abIcon,abSellPrice=GetItemInfo(abItemLink)abstats=GetItemStats(abItemLink)statsResult={}for c,d in pairs(abstats)do table.insert(statsResult,string.format(\"\\\"%s\\\":\\\"%s\\\"\",c,d))end;abotInventoryResult=abotInventoryResult..\"{\"..'\"id\": \"'..tostring(abId or 0)..'\",'..'\"count\": \"'..tostring(abItemCount or 0)..'\",'..'\"quality\": \"'..tostring(abRarity or 0)..'\",'..'\"curDurability\": \"'..tostring(abCurrentDurability or 0)..'\",'..'\"maxDurability\": \"'..tostring(abMaxDurability or 0)..'\",'..'\"cooldownStart\": \"'..tostring(abCooldownStart or 0)..'\",'..'\"cooldownEnd\": \"'..tostring(abCooldownEnd or 0)..'\",'..'\"name\": \"'..tostring(abName or 0)..'\",'..'\"lootable\": \"'..tostring(abLootable or 0)..'\",'..'\"readable\": \"'..tostring(abReadable or 0)..'\",'..'\"link\": \"'..tostring(abItemLink or 0)..'\",'..'\"level\": \"'..tostring(abLevel or 0)..'\",'..'\"minLevel\": \"'..tostring(abMinLevel or 0)..'\",'..'\"type\": \"'..tostring(abType or 0)..'\",'..'\"subtype\": \"'..tostring(abSubType or 0)..'\",'..'\"maxStack\": \"'..tostring(abStackCount or 0)..'\",'..'\"equiplocation\": \"'..tostring(abEquipLoc or 0)..'\",'..'\"sellprice\": \"'..tostring(abSellPrice or 0)..'\",'..'\"stats\": '..\"{\"..table.concat(statsResult,\",\")..\"}\"..','..'\"bagid\": \"'..tostring(a or 0)..'\",'..'\"bagslot\": \"'..tostring(b or 0)..'\"'..\"}\"abotInventoryResult=abotInventoryResult..\",\"end end end;abotInventoryResult=abotInventoryResult..\"]\""; @@ -359,6 +328,29 @@ public string GetMoney() return GetLocalizedText("abMoney"); } + public Dictionary GetRunesReady(int runeId) + { + Dictionary runes = new Dictionary() + { + { RuneType.Blood, 0 }, + { RuneType.Frost, 0 }, + { RuneType.Unholy, 0 }, + { RuneType.Death, 0 } + }; + + for (int i = 0; i < 6; ++i) + { + if (XMemory.Read(OffsetList.RuneType + (4 * i), out RuneType type) + && XMemory.ReadByte(OffsetList.Runes, out byte runeStatus) + && ((1 << runeId) & runeStatus) != 0) + { + runes[type]++; + } + } + + return runes; + } + public List GetSkills() { LuaDoString("abSkillList=\"\"abSkillCount=GetNumSkillLines()for a=1,abSkillCount do local b,c=GetSkillLineInfo(a)if not c then abSkillList=abSkillList..b;if a SellItemsByName(itemName); - - public void SellItemsByName(string itemName) - => LuaDoString($"for bag = 0,4,1 do for slot = 1, GetContainerNumSlots(bag), 1 do local name = GetContainerItemLink(bag,slot); if name and string.find(name,\"{itemName}\") then UseContainerItem(bag,slot) end end end"); - - public void SendMovementPacket(WowUnit unit, int opcode) - { - string[] asm = new string[] - { - $"PUSH {opcode}", - $"PUSH {Environment.TickCount}", - $"MOV ECX, {unit.BaseAddress.ToInt32()}", - $"CALL {OffsetList.FunctionSendMovementPacket.ToInt32()}", - "RETN", - }; - - InjectAndExecute(asm, false); - } - public WowUnitReaction GetUnitReaction(WowUnit wowUnitA, WowUnit wowUnitB) { WowUnitReaction reaction = WowUnitReaction.Unknown; @@ -530,6 +464,14 @@ public WowUnitReaction GetUnitReaction(WowUnit wowUnitA, WowUnit wowUnitB) return reaction; } + public bool HasUnitStealableBuffs(WowLuaUnit luaUnit) + { + LuaDoString($"abIsStealableStuffThere=0;local y=0;for i=1,40 do local n,_,_,_,_,_,_,_,isStealable=UnitAura(\"{luaUnit}\",i);if isStealable==1 then abIsStealableStuffThere=1;end end"); + string rawValue = GetLocalizedText("abIsStealableStuffThere"); + + return int.TryParse(rawValue, out int result) ? result == 1 : false; + } + public byte[] InjectAndExecute(string[] asm, bool readReturnBytes) { AmeisenLogger.Instance.Log($"Injecting: {JsonConvert.SerializeObject(asm)}...", LogLevel.Verbose); @@ -628,6 +570,14 @@ public byte[] InjectAndExecute(string[] asm, bool readReturnBytes) return returnBytes.ToArray(); } + public bool IsBgInviteReady() + { + LuaDoString("abBgQueueIsReady = 0;for i=1,2 do local x = GetBattlefieldPortExpiration(i) if x > 0 then abBgQueueIsReady = 1 end end"); + string rawValue = GetLocalizedText("abBgQueueIsReady"); + + return int.TryParse(rawValue, out int result) ? result == 1 : false; + } + public bool IsClickToMovePending() { if (XMemory.Read(OffsetList.ClickToMovePendingMovement, out byte ctmPending)) @@ -638,6 +588,18 @@ public bool IsClickToMovePending() return false; } + public bool IsCtmMoving(WowUnit unit) + { + string[] asm = new string[] + { + $"MOV ECX, {unit.BaseAddress}", + $"CALL {OffsetList.FunctionStopClickToMove}", + "RETN", + }; + + return InjectAndExecute(asm, true)[0] == 0x1; + } + public bool IsGhost(string unit) { LuaDoString($"isGhost = UnitIsGhost(\"{unit}\");"); @@ -663,29 +625,6 @@ public bool IsRuneReady(int runeId) } } - public Dictionary GetRunesReady(int runeId) - { - Dictionary runes = new Dictionary() - { - { RuneType.Blood, 0 }, - { RuneType.Frost, 0 }, - { RuneType.Unholy, 0 }, - { RuneType.Death, 0 } - }; - - for (int i = 0; i < 6; ++i) - { - if (XMemory.Read(OffsetList.RuneType + (4 * i), out RuneType type) - && XMemory.ReadByte(OffsetList.Runes, out byte runeStatus) - && ((1 << runeId) & runeStatus) != 0) - { - runes[type]++; - } - } - - return runes; - } - public bool IsSpellKnown(int spellId, bool isPetSpell = false) { LuaDoString($"abIsSpellKnown = IsSpellKnown({spellId}, {isPetSpell});"); @@ -697,6 +636,12 @@ public bool IsSpellKnown(int spellId, bool isPetSpell = false) public void KickNpcsOutOfMammoth() => LuaDoString("for i = 1, 2 do EjectPassengerFromSeat(i) end"); + public void LearnAllAvaiableSpells() + => LuaDoString("/run LoadAddOn\"Blizzard_TrainerUI\" f=ClassTrainerTrainButton f.e = 0 if f:GetScript\"OnUpdate\" then f:SetScript(\"OnUpdate\", nil)else f:SetScript(\"OnUpdate\", function(f,e) f.e=f.e+e if f.e>.01 then f.e=0 f:Click() end end)end"); + + public void LeaveBattleground() + => SendChatMessage("/click WorldStateScoreFrameLeaveButton"); + public void LootEveryThing() => LuaDoString("abLootCount=GetNumLootItems();for i = abLootCount,1,-1 do LootSlot(i); ConfirmLootSlot(i); end"); @@ -733,6 +678,9 @@ public void LuaDoString(string command) } } + public void QueuBattlegroundByName(string bgName) + => SendChatMessage($"/run for i=1,GetNumBattlegroundTypes()do local name,_,_,_,_=GetBattlegroundInfo(i)if name==\"{bgName}\"then JoinBattlefield(i)end end"); + public void ReleaseSpirit() => LuaDoString("RepopMe();"); @@ -756,6 +704,18 @@ public void ReplaceItem(IWowItem currentItem, IWowItem newItem) public void RetrieveCorpse() => LuaDoString("RetrieveCorpse();"); + public void RightClickObject(WowObject gObject) + { + string[] asm = new string[] + { + $"MOV ECX, {gObject.BaseAddress.ToInt32()}", + $"CALL 0x711140", + "RETN", + }; + + InjectAndExecute(asm, false); + } + public void RightClickUnit(WowUnit wowUnit) { string[] asm = new string[] @@ -782,11 +742,42 @@ public void RollOnItem(int rollId, RollType rollType) public void SellAllGrayItems() => LuaDoString("local p,N,n=0 for b=0,4 do for s=1,GetContainerNumSlots(b) do n=GetContainerItemLink(b,s) if n and string.find(n,\"9d9d9d\") then N={GetItemInfo(n)} p=p+N[11] UseContainerItem(b,s) end end end"); + public void SellAllItems() + => LuaDoString("local p,N,n=0 for b=0,4 do for s=1,GetContainerNumSlots(b) do n=GetContainerItemLink(b,s) if n then N={GetItemInfo(n)} p=p+N[11] UseContainerItem(b,s) end end end"); + + public void SellItemsByName(string itemName) + => LuaDoString($"for bag = 0,4,1 do for slot = 1, GetContainerNumSlots(bag), 1 do local name = GetContainerItemLink(bag,slot); if name and string.find(name,\"{itemName}\") then UseContainerItem(bag,slot) end end end"); + public void SendChatMessage(string message) => LuaDoString($"DEFAULT_CHAT_FRAME.editBox:SetText(\"{message}\") ChatEdit_SendText(DEFAULT_CHAT_FRAME.editBox, 0)"); - public void LearnAllAvaiableSpells() - => LuaDoString("/run LoadAddOn\"Blizzard_TrainerUI\" f=ClassTrainerTrainButton f.e = 0 if f:GetScript\"OnUpdate\" then f:SetScript(\"OnUpdate\", nil)else f:SetScript(\"OnUpdate\", function(f,e) f.e=f.e+e if f.e>.01 then f.e=0 f:Click() end end)end"); + public void SendMovementPacket(WowUnit unit, int opcode) + { + string[] asm = new string[] + { + $"PUSH {opcode}", + $"PUSH {Environment.TickCount}", + $"MOV ECX, {unit.BaseAddress.ToInt32()}", + $"CALL {OffsetList.FunctionSendMovementPacket.ToInt32()}", + "RETN", + }; + + InjectAndExecute(asm, false); + } + + public void SetFacing(WowUnit unit, float angle) + { + string[] asm = new string[] + { + $"PUSH {angle}", + $"PUSH {Environment.TickCount}", + $"MOV ECX, {unit.BaseAddress}", + $"CALL {OffsetList.FunctionSetFacing}", + "RETN", + }; + + InjectAndExecute(asm, false); + } public void SetMaxFps(byte maxFps) { @@ -907,9 +898,21 @@ public bool SetupEndsceneHook() public void StartAutoAttack() => SendChatMessage("/startattack"); + public void StopClickToMove(WowUnit unit) + { + string[] asm = new string[] + { + $"MOV ECX, {unit.BaseAddress}", + $"CALL {OffsetList.FunctionStopClickToMove}", + "RETN", + }; + + InjectAndExecute(asm, false); + } + public void TargetGuid(ulong guid) { - if(guid == 0) + if (guid == 0) { return; } @@ -933,30 +936,11 @@ public void TargetLuaUnit(WowLuaUnit unit) public void TargetNearestEnemy() => SendChatMessage("/targetenemy [harm][nodead]"); - public void WriteCtmValues(Vector3 targetPosition, ClickToMoveType clickToMoveType = ClickToMoveType.Move, float distance = 1.5f) - { - XMemory.Write(OffsetList.ClickToMoveX, targetPosition.X); - XMemory.Write(OffsetList.ClickToMoveY, targetPosition.Y); - XMemory.Write(OffsetList.ClickToMoveZ, targetPosition.Z); - XMemory.Write(OffsetList.ClickToMoveDistance, distance); - XMemory.Write(OffsetList.ClickToMoveAction, clickToMoveType); - } - - public bool HasUnitStealableBuffs(WowLuaUnit luaUnit) - { - LuaDoString($"abIsStealableStuffThere=0;local y=0;for i=1,40 do local n,_,_,_,_,_,_,_,isStealable=UnitAura(\"{luaUnit}\",i);if isStealable==1 then abIsStealableStuffThere=1;end end"); - string rawValue = GetLocalizedText("abIsStealableStuffThere"); - - return int.TryParse(rawValue, out int result) ? result == 1 : false; - } - - public bool IsBgInviteReady() - { - LuaDoString("abBgQueueIsReady = 0;for i=1,2 do local x = GetBattlefieldPortExpiration(i) if x > 0 then abBgQueueIsReady = 1 end end"); - string rawValue = GetLocalizedText("abBgQueueIsReady"); + public void UseItemByBagAndSlot(int bagId, int bagSlot) + => LuaDoString($"UseContainerItem({bagId}, {bagSlot});"); - return int.TryParse(rawValue, out int result) ? result == 1 : false; - } + public void UseItemByName(string itemName) + => SellItemsByName(itemName); private bool AllocateCodeCaves() { @@ -1034,4 +1018,4 @@ private List ReadAuras(WowLuaUnit luaunit, string functionName) return resultLowered; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Jobs/Enums/JobEngineStatus.cs b/AmeisenBotX.Core/Jobs/Enums/JobEngineStatus.cs new file mode 100644 index 00000000..4214b7d6 --- /dev/null +++ b/AmeisenBotX.Core/Jobs/Enums/JobEngineStatus.cs @@ -0,0 +1,11 @@ +namespace AmeisenBotX.Core.Jobs.Enums +{ + public enum JobEngineStatus + { + None, + Searching, + Found, + Gathering, + Mounting + } +} diff --git a/AmeisenBotX.Core/Jobs/Enums/JobType.cs b/AmeisenBotX.Core/Jobs/Enums/JobType.cs new file mode 100644 index 00000000..f8421305 --- /dev/null +++ b/AmeisenBotX.Core/Jobs/Enums/JobType.cs @@ -0,0 +1,9 @@ +namespace AmeisenBotX.Core.Jobs.Enums +{ + public enum JobType + { + Gathering, + Crafting, + Grinding + } +} diff --git a/AmeisenBotX.Core/Jobs/JobEngine.cs b/AmeisenBotX.Core/Jobs/JobEngine.cs new file mode 100644 index 00000000..0907bb85 --- /dev/null +++ b/AmeisenBotX.Core/Jobs/JobEngine.cs @@ -0,0 +1,106 @@ +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data.Objects.WowObject; +using AmeisenBotX.Core.Hook; +using AmeisenBotX.Core.Jobs.Enums; +using AmeisenBotX.Core.Jobs.Profiles; +using AmeisenBotX.Core.Jobs.Profiles.Gathering; +using AmeisenBotX.Core.Movement; +using AmeisenBotX.Core.Movement.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs +{ + public class JobEngine + { + public JobEngine(ObjectManager objectManager, IMovementEngine movementEngine, HookManager hookManager) + { + ObjectManager = objectManager; + MovementEngine = movementEngine; + HookManager = hookManager; + + Reset(); + } + + public IJobProfile JobProfile { get; set; } + + public JobEngineStatus JobEngineStatus { get; private set; } + + private ObjectManager ObjectManager { get; } + + private IMovementEngine MovementEngine { get; } + + private HookManager HookManager { get; } + + private int CurrentNodeAt { get; set; } + + public void Execute() + { + if (JobProfile != null) + { + switch (JobProfile.JobType) + { + case JobType.Gathering: + ExecuteGathering(); + break; + + case JobType.Crafting: + break; + + case JobType.Grinding: + break; + } + } + } + + public void Reset() + { + JobEngineStatus = JobEngineStatus.None; + CurrentNodeAt = 0; + } + + public void ExecuteGathering() + { + IGatheringProfile gatheringProfile = (IGatheringProfile)JobProfile; + if (gatheringProfile.Path.Count > 0) + { + if (CurrentNodeAt > gatheringProfile.Path.Count - 1) + { + CurrentNodeAt = 0; + } + + IEnumerable nearNodes = ObjectManager.WowObjects.OfType().Where(e=>gatheringProfile.DisplayIds.Contains(e.DisplayId)); + + if (nearNodes.Count() > 0) + { + JobEngineStatus = JobEngineStatus.Found; + WowGameobject selectedNode = nearNodes.First(); + + if(selectedNode.Position.GetDistance(ObjectManager.Player.Position) > 6) + { + MovementEngine.SetState(MovementEngineState.Moving, gatheringProfile.Path[CurrentNodeAt]); + MovementEngine.Execute(); + } + else + { + JobEngineStatus = JobEngineStatus.Gathering; + + if (!ObjectManager.Player.IsCasting) + { + HookManager.RightClickObject(selectedNode); + } + } + } + else + { + JobEngineStatus = JobEngineStatus.Searching; + MovementEngine.SetState(MovementEngineState.Moving, gatheringProfile.Path[CurrentNodeAt]); + MovementEngine.Execute(); + } + } + } + } +} diff --git a/AmeisenBotX.Core/Jobs/Profiles/Crafting/ICraftingProfile.cs b/AmeisenBotX.Core/Jobs/Profiles/Crafting/ICraftingProfile.cs new file mode 100644 index 00000000..b5861476 --- /dev/null +++ b/AmeisenBotX.Core/Jobs/Profiles/Crafting/ICraftingProfile.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs.Profiles.Gathering +{ + public interface ICraftingProfile : IJobProfile + { + } +} diff --git a/AmeisenBotX.Core/Jobs/Profiles/Gathering/IGatheringProfile.cs b/AmeisenBotX.Core/Jobs/Profiles/Gathering/IGatheringProfile.cs new file mode 100644 index 00000000..4c1fbe8b --- /dev/null +++ b/AmeisenBotX.Core/Jobs/Profiles/Gathering/IGatheringProfile.cs @@ -0,0 +1,18 @@ +using AmeisenBotX.Pathfinding.Objects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs.Profiles.Gathering +{ + public interface IGatheringProfile : IJobProfile + { + public List DisplayIds { get; set; } + + public Vector3 MailboxPosition { get; set; } + + public List Path { get; set; } + } +} diff --git a/AmeisenBotX.Core/Jobs/Profiles/Grinding/IGrindingProfile.cs b/AmeisenBotX.Core/Jobs/Profiles/Grinding/IGrindingProfile.cs new file mode 100644 index 00000000..1932103a --- /dev/null +++ b/AmeisenBotX.Core/Jobs/Profiles/Grinding/IGrindingProfile.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs.Profiles.Gathering +{ + public interface IGrindingProfile : IJobProfile + { + } +} diff --git a/AmeisenBotX.Core/Jobs/Profiles/IJobProfile.cs b/AmeisenBotX.Core/Jobs/Profiles/IJobProfile.cs new file mode 100644 index 00000000..053629cb --- /dev/null +++ b/AmeisenBotX.Core/Jobs/Profiles/IJobProfile.cs @@ -0,0 +1,20 @@ +using AmeisenBotX.Core.Jobs.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs.Profiles +{ + public interface IJobProfile + { + public string Name { get; } + + public string Description { get; } + + public string Author { get; } + + public JobType JobType { get; } + } +} diff --git a/AmeisenBotX.Core/LoginHandler/DefaultLoginHandler.cs b/AmeisenBotX.Core/LoginHandler/DefaultLoginHandler.cs index e3827efe..12bf1422 100644 --- a/AmeisenBotX.Core/LoginHandler/DefaultLoginHandler.cs +++ b/AmeisenBotX.Core/LoginHandler/DefaultLoginHandler.cs @@ -125,4 +125,4 @@ private void HandleLogin(string username, string password) } while (result && gameState == "login"); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/LoginHandler/ILoginHandler.cs b/AmeisenBotX.Core/LoginHandler/ILoginHandler.cs index dbf4426a..1db780af 100644 --- a/AmeisenBotX.Core/LoginHandler/ILoginHandler.cs +++ b/AmeisenBotX.Core/LoginHandler/ILoginHandler.cs @@ -6,4 +6,4 @@ public interface ILoginHandler { bool Login(Process wowProcess, string username, string password, int characterSlot); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Movement/DefaultMovementEngine.cs b/AmeisenBotX.Core/Movement/DefaultMovementEngine.cs index 65ce92b0..b73b22cb 100644 --- a/AmeisenBotX.Core/Movement/DefaultMovementEngine.cs +++ b/AmeisenBotX.Core/Movement/DefaultMovementEngine.cs @@ -1,5 +1,4 @@ -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Movement.Settings; using AmeisenBotX.Pathfinding.Objects; @@ -25,16 +24,16 @@ public DefaultMovementEngine(ObjectManager objectManager, MovementSettings setti Reset(); } + public Vector3 Acceleration { get; private set; } + public Queue CurrentPath { get; private set; } public Vector3 LastPosition { get; private set; } - public Vector3 Acceleration { get; private set; } + public MovementSettings Settings { get; private set; } public Vector3 Velocity { get; private set; } - public MovementSettings Settings { get; private set; } - private ObjectManager ObjectManager { get; } public bool GetNextStep(Vector3 currentPosition, float currentRotation, out Vector3 positionToGoTo, out bool needToJump, bool enableSeperation = false) @@ -79,11 +78,56 @@ public bool GetNextStep(Vector3 currentPosition, float currentRotation, out Vect } double distanceTraveled = currentPosition.GetDistance2D(LastPosition); - needToJump = LastPosition != new Vector3(0, 0, 0) && (heightDiff > 1 || distanceTraveled > 0 && distanceTraveled < 0.1); + needToJump = LastPosition != new Vector3(0, 0, 0) && (heightDiff > 1 || distanceTraveled > 0 && distanceTraveled < 0.1); LastPosition = currentPosition; return true; } + public void LoadPath(List path) + { + CurrentPath = new Queue(); + foreach (Vector3 v in path) + { + CurrentPath.Enqueue(v); + } + } + + public void PostProcessPath() + { + // wont do anything here + } + + public void Reset() + { + if (CurrentPath == null) + { + CurrentPath = new Queue(); + } + + Acceleration = new Vector3(0, 0, 0); + CurrentPath.Clear(); + } + + private Vector3 CalculatePositionBehindMe(Vector3 currentPosition, float currentRotation) + { + double x = currentPosition.X + Math.Cos(currentRotation + Math.PI); + double y = currentPosition.Y + Math.Sin(currentRotation + Math.PI); + + Vector3 destination = new Vector3() + { + X = Convert.ToSingle(x), + Y = Convert.ToSingle(y), + Z = currentPosition.Z + }; + + return destination; + } + + private bool NeedToJumpOrUnstuck(Vector3 currentPosition, float currentRotation, double distanceTraveled) + { + return false; + } + private Vector3 Seek(Vector3 currentPosition, double distance) { Vector3 desired = CurrentPath.Peek() - currentPosition; @@ -155,50 +199,5 @@ private Vector3 Seperate(Vector3 currentPosition) return force; } - - public void LoadPath(List path) - { - CurrentPath = new Queue(); - foreach (Vector3 v in path) - { - CurrentPath.Enqueue(v); - } - } - - public void PostProcessPath() - { - // wont do anything here - } - - public void Reset() - { - if (CurrentPath == null) - { - CurrentPath = new Queue(); - } - - Acceleration = new Vector3(0, 0, 0); - CurrentPath.Clear(); - } - - private Vector3 CalculatePositionBehindMe(Vector3 currentPosition, float currentRotation) - { - double x = currentPosition.X + Math.Cos(currentRotation + Math.PI); - double y = currentPosition.Y + Math.Sin(currentRotation + Math.PI); - - Vector3 destination = new Vector3() - { - X = Convert.ToSingle(x), - Y = Convert.ToSingle(y), - Z = currentPosition.Z - }; - - return destination; - } - - private bool NeedToJumpOrUnstuck(Vector3 currentPosition, float currentRotation, double distanceTraveled) - { - return false; - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Movement/Enums/MovementEngineState.cs b/AmeisenBotX.Core/Movement/Enums/MovementEngineState.cs index 0eadc3e7..06796747 100644 --- a/AmeisenBotX.Core/Movement/Enums/MovementEngineState.cs +++ b/AmeisenBotX.Core/Movement/Enums/MovementEngineState.cs @@ -12,4 +12,4 @@ public enum MovementEngineState Evading, Wandering } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Movement/IMovementEngine.cs b/AmeisenBotX.Core/Movement/IMovementEngine.cs index 425b6a69..937b49f0 100644 --- a/AmeisenBotX.Core/Movement/IMovementEngine.cs +++ b/AmeisenBotX.Core/Movement/IMovementEngine.cs @@ -1,6 +1,5 @@ using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Pathfinding.Objects; -using System.Collections.Generic; namespace AmeisenBotX.Core.Movement { @@ -14,4 +13,4 @@ public interface IMovementEngine void SetState(MovementEngineState state, Vector3 position, float targetRotation = 0f); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Movement/Objects/BasicVehicle.cs b/AmeisenBotX.Core/Movement/Objects/BasicVehicle.cs index d20a0bb4..5688e741 100644 --- a/AmeisenBotX.Core/Movement/Objects/BasicVehicle.cs +++ b/AmeisenBotX.Core/Movement/Objects/BasicVehicle.cs @@ -4,8 +4,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.Movement.Objects { @@ -24,31 +22,31 @@ public BasicVehicle(GetPositionFunction getPositionFunction, GetRotationFunction Jump = jumpFunction; } - public delegate void JumpFunction(); - public delegate Vector3 GetPositionFunction(); public delegate float GetRotationFunction(); + public delegate void JumpFunction(); + public delegate void MoveToPositionFunction(Vector3 position); - public float MaxAcceleration { get; private set; } + public GetPositionFunction GetPosition { get; set; } - public float MaxSteering { get; private set; } + public GetRotationFunction GetRotation { get; set; } - public float MaxVelocity { get; private set; } + public JumpFunction Jump { get; private set; } - public ObjectManager ObjectManager { get; } + public float MaxAcceleration { get; private set; } - public Vector3 Velocity { get; private set; } + public float MaxSteering { get; private set; } - public JumpFunction Jump { get; private set; } + public float MaxVelocity { get; private set; } public MoveToPositionFunction MoveToPosition { get; set; } - public GetPositionFunction GetPosition { get; set; } + public ObjectManager ObjectManager { get; } - public GetRotationFunction GetRotation { get; set; } + public Vector3 Velocity { get; private set; } public Vector3 AvoidObstacles(float multiplier) { @@ -130,29 +128,6 @@ public Vector3 Seek(Vector3 position, float multiplier) return acceleration; } - public Vector3 Unstuck(int multiplier) - { - Vector3 positionBehindMe = CalculatPositionnBehind(GetPosition.Invoke(), GetRotation(), 4); - return Seek(positionBehindMe, multiplier); - } - - public Vector3 Wander(int multiplier) - { - // TODO: implement some sort of radius where the target wanders around. - // maybe add a very weak force keeping it inside a given circle... - // TODO: implement some sort of delay so that the target is not constantly walking - Random rnd = new Random(); - Vector3 currentPosition = GetPosition(); - - Vector3 newRandomPosition = new Vector3(0, 0, 0); - newRandomPosition += CalculateFuturePosition(currentPosition, GetRotation.Invoke(), Convert.ToSingle((rnd.NextDouble() * 4) + 4)); - - // rotate the vector by random amount of degrees - newRandomPosition.Rotate(rnd.Next(-14, 14)); - - return Seek(newRandomPosition, multiplier); - } - public Vector3 Seperate(float multiplier) { Vector3 acceleration = new Vector3(0, 0, 0); @@ -162,6 +137,12 @@ public Vector3 Seperate(float multiplier) return acceleration; } + public Vector3 Unstuck(int multiplier) + { + Vector3 positionBehindMe = CalculatPositionnBehind(GetPosition.Invoke(), GetRotation(), 4); + return Seek(positionBehindMe, multiplier); + } + public void Update(List forces) { foreach (Vector3 force in forces) @@ -177,6 +158,23 @@ public void Update(List forces) MoveToPosition?.Invoke(currentPosition); } + public Vector3 Wander(int multiplier) + { + // TODO: implement some sort of radius where the target wanders around. + // maybe add a very weak force keeping it inside a given circle... + // TODO: implement some sort of delay so that the target is not constantly walking + Random rnd = new Random(); + Vector3 currentPosition = GetPosition(); + + Vector3 newRandomPosition = new Vector3(0, 0, 0); + newRandomPosition += CalculateFuturePosition(currentPosition, GetRotation.Invoke(), Convert.ToSingle((rnd.NextDouble() * 4) + 4)); + + // rotate the vector by random amount of degrees + newRandomPosition.Rotate(rnd.Next(-14, 14)); + + return Seek(newRandomPosition, multiplier); + } + private static Vector3 CalculateFuturePosition(Vector3 position, float targetRotation, float targetVelocity) { float rotation = targetRotation; @@ -245,4 +243,4 @@ private Vector3 GetObjectForceAroundMe(double maxDistance = 16) where T : Wow return force / count; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Movement/Settings/MovementSettings.cs b/AmeisenBotX.Core/Movement/Settings/MovementSettings.cs index ab061884..8f6c1e11 100644 --- a/AmeisenBotX.Core/Movement/Settings/MovementSettings.cs +++ b/AmeisenBotX.Core/Movement/Settings/MovementSettings.cs @@ -1,7 +1,4 @@ -using AmeisenBotX.Pathfinding.Objects; -using System; - -namespace AmeisenBotX.Core.Movement.Settings +namespace AmeisenBotX.Core.Movement.Settings { public class MovementSettings { @@ -15,14 +12,14 @@ public MovementSettings() //// SeperationDistance *= rnd.NextDouble() + 1; } - public float MaxVelocity { get; set; } = 5f; + public float MaxAcceleration { get; set; } = 3f; public float MaxSteering { get; set; } = 1f; - public float MaxAcceleration { get; set; } = 3f; - - public double WaypointCheckThreshold { get; set; } = 2; + public float MaxVelocity { get; set; } = 5f; public double SeperationDistance { get; set; } = 4; + + public double WaypointCheckThreshold { get; set; } = 2; } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Movement/SmartMovementEngine.cs b/AmeisenBotX.Core/Movement/SmartMovementEngine.cs index 776bd9a1..889b981e 100644 --- a/AmeisenBotX.Core/Movement/SmartMovementEngine.cs +++ b/AmeisenBotX.Core/Movement/SmartMovementEngine.cs @@ -1,21 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Core.Movement.Objects; using AmeisenBotX.Core.Movement.Settings; using AmeisenBotX.Pathfinding.Objects; +using System; +using System.Collections.Generic; using static AmeisenBotX.Core.Movement.Objects.BasicVehicle; namespace AmeisenBotX.Core.Movement { public class SmartMovementEngine : IMovementEngine { - public delegate List GeneratePathFunction(Vector3 start, Vector3 end); - public SmartMovementEngine(GetPositionFunction getPositionFunction, GetRotationFunction getRotationFunction, MoveToPositionFunction moveToPositionFunction, GeneratePathFunction generatePathFunction, JumpFunction jumpFunction, ObjectManager objectManager, MovementSettings movementSettings) { State = MovementEngineState.None; @@ -32,43 +27,45 @@ public SmartMovementEngine(GetPositionFunction getPositionFunction, GetRotationF PlayerVehicle = new BasicVehicle(getPositionFunction, getRotationFunction, moveToPositionFunction, jumpFunction, objectManager, movementSettings.MaxSteering, movementSettings.MaxVelocity, movementSettings.MaxAcceleration); } - public MovementEngineState State { get; private set; } + public delegate List GeneratePathFunction(Vector3 start, Vector3 end); public Queue CurrentPath { get; private set; } - public Vector3 TargetPosition { get; private set; } - public Vector3 CurrentPathTargetPosition { get; private set; } - public Vector3 LastPosition { get; private set; } - - public Vector3 LastTargetPosition { get; private set; } + public GeneratePathFunction GeneratePath { get; set; } - public DateTime LastJumpCheck { get; private set; } + public GetPositionFunction GetPosition { get; set; } - public DateTime LastLastPositionUpdate { get; private set; } + public GetRotationFunction GetRotation { get; set; } public bool HasMoved { get; private set; } - public int TryCount { get; private set; } + public JumpFunction Jump { get; set; } - public float TargetRotation { get; private set; } + public DateTime LastJumpCheck { get; private set; } - public ObjectManager ObjectManager { get; } + public DateTime LastLastPositionUpdate { get; private set; } - public JumpFunction Jump { get; set; } + public Vector3 LastPosition { get; private set; } - public MoveToPositionFunction MoveToPosition { get; set; } + public Vector3 LastTargetPosition { get; private set; } - public GetRotationFunction GetRotation { get; set; } + public MovementSettings MovementSettings { get; private set; } - public GetPositionFunction GetPosition { get; set; } + public MoveToPositionFunction MoveToPosition { get; set; } - public GeneratePathFunction GeneratePath { get; set; } + public ObjectManager ObjectManager { get; } public BasicVehicle PlayerVehicle { get; private set; } - public MovementSettings MovementSettings { get; private set; } + public MovementEngineState State { get; private set; } + + public Vector3 TargetPosition { get; private set; } + + public float TargetRotation { get; private set; } + + public int TryCount { get; private set; } public void Execute() { @@ -185,18 +182,13 @@ public void Execute() HasMoved = true; } - private Vector3 MoveAhead(Vector3 targetPosition, double offset) + public void Reset() { - float rotation = GetRotation.Invoke(); - double x = targetPosition.X + (Math.Cos(rotation) * offset); - double y = targetPosition.Y + (Math.Sin(rotation) * offset); - - return new Vector3() - { - X = Convert.ToSingle(x), - Y = Convert.ToSingle(y), - Z = targetPosition.Z - }; + State = MovementEngineState.None; + CurrentPath = new Queue(); + HasMoved = false; + TryCount = 0; + LastLastPositionUpdate = DateTime.Now; } public void SetState(MovementEngineState state, Vector3 position, float targetRotation = 0f) @@ -211,13 +203,18 @@ public void SetState(MovementEngineState state, Vector3 position, float targetRo TargetRotation = targetRotation; } - public void Reset() + private Vector3 MoveAhead(Vector3 targetPosition, double offset) { - State = MovementEngineState.None; - CurrentPath = new Queue(); - HasMoved = false; - TryCount = 0; - LastLastPositionUpdate = DateTime.Now; + float rotation = GetRotation.Invoke(); + double x = targetPosition.X + (Math.Cos(rotation) * offset); + double y = targetPosition.Y + (Math.Sin(rotation) * offset); + + return new Vector3() + { + X = Convert.ToSingle(x), + Y = Convert.ToSingle(y), + Z = targetPosition.Z + }; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/OffsetLists/IOffsetList.cs b/AmeisenBotX.Core/OffsetLists/IOffsetList.cs index 6f5e9329..d00cabd5 100644 --- a/AmeisenBotX.Core/OffsetLists/IOffsetList.cs +++ b/AmeisenBotX.Core/OffsetLists/IOffsetList.cs @@ -10,10 +10,10 @@ public interface IOffsetList IntPtr AutolootPointer { get; } - IntPtr BattlegroundStatus { get; } - IntPtr BattlegroundFinished { get; } + IntPtr BattlegroundStatus { get; } + IntPtr CharacterSlotSelected { get; } IntPtr ChatBuffer { get; } @@ -216,18 +216,18 @@ public interface IOffsetList IntPtr WowObjectDescriptor { get; } - IntPtr WowObjectGuid { get; } - IntPtr WowObjectEntryId { get; } - IntPtr WowObjectScale { get; } + IntPtr WowObjectGuid { get; } IntPtr WowObjectPosition { get; } + IntPtr WowObjectScale { get; } + IntPtr WowObjectType { get; } IntPtr WowUnitPosition { get; } IntPtr ZoneId { get; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/OffsetLists/OffsetList335a.cs b/AmeisenBotX.Core/OffsetLists/OffsetList335a.cs index 1addfb1a..0d268921 100644 --- a/AmeisenBotX.Core/OffsetLists/OffsetList335a.cs +++ b/AmeisenBotX.Core/OffsetLists/OffsetList335a.cs @@ -10,10 +10,10 @@ public class OffsetList335a : IOffsetList public IntPtr AutolootPointer { get; } = new IntPtr(0xBD0914); - public IntPtr BattlegroundStatus { get; } = new IntPtr(0xBEA4D0); - public IntPtr BattlegroundFinished { get; } = new IntPtr(0xBEA588); + public IntPtr BattlegroundStatus { get; } = new IntPtr(0xBEA4D0); + public IntPtr CharacterSlotSelected { get; } = new IntPtr(0xAC436C); public IntPtr ChatBuffer { get; } = new IntPtr(0xB75A60); @@ -216,18 +216,18 @@ public class OffsetList335a : IOffsetList public IntPtr WowObjectDescriptor { get; } = new IntPtr(0x8); + public IntPtr WowObjectEntryId { get; } = new IntPtr(0x18); + public IntPtr WowObjectGuid { get; } = new IntPtr(0x30); public IntPtr WowObjectPosition { get; } = new IntPtr(0xE8); + public IntPtr WowObjectScale { get; } = new IntPtr(0x1C); + public IntPtr WowObjectType { get; } = new IntPtr(0x14); public IntPtr WowUnitPosition { get; } = new IntPtr(0x798); public IntPtr ZoneId { get; } = new IntPtr(0xAF4E48); - - public IntPtr WowObjectEntryId { get; } = new IntPtr(0x18); - - public IntPtr WowObjectScale { get; } = new IntPtr(0x1C); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Personality/BotPersonality.cs b/AmeisenBotX.Core/Personality/BotPersonality.cs index cc4a0e29..cb10080d 100644 --- a/AmeisenBotX.Core/Personality/BotPersonality.cs +++ b/AmeisenBotX.Core/Personality/BotPersonality.cs @@ -16,19 +16,19 @@ public BotPersonality(string path) Clear(); } - public Scale Sociality => (Scale)((int)Math.Round(SocialityScore)); - - public double SocialityScore { get; set; } = 2.0; - public Scale Bravery => (Scale)((int)Math.Round(BraveryScore)); public double BraveryScore { get; set; } = 2.0; - public Dictionary RememberedUnits { get; set; } + public string FilePath { get; } public Dictionary RememberedPlayers { get; set; } - public string FilePath { get; } + public Dictionary RememberedUnits { get; set; } + + public Scale Sociality => (Scale)((int)Math.Round(SocialityScore)); + + public double SocialityScore { get; set; } = 2.0; public void Clear() { @@ -36,6 +36,34 @@ public void Clear() RememberedPlayers = new Dictionary(); } + public PlayerRelationship GetPlayerRelationship(WowPlayer player, bool rememberIfUnknown = true) + { + if (RememberedUnits.ContainsKey(player.Guid)) + { + return (PlayerRelationship)((int)Math.Round(RememberedUnits[player.Guid])); + } + else if (rememberIfUnknown) + { + RememberedUnits.Add(player.Guid, 0); + } + + return PlayerRelationship.Unknown; + } + + public UnitRelationship GetUnitRelationship(WowUnit unit, bool rememberIfUnknown = true) + { + if (RememberedUnits.ContainsKey(unit.Guid)) + { + return (UnitRelationship)((int)Math.Round(RememberedUnits[unit.Guid])); + } + else if (rememberIfUnknown) + { + RememberedUnits.Add(unit.Guid, 0); + } + + return UnitRelationship.Unknown; + } + public void Load() { if (!Directory.Exists(Path.GetDirectoryName(FilePath))) @@ -83,33 +111,5 @@ public void Save() BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(stream, this); } - - public UnitRelationship GetUnitRelationship(WowUnit unit, bool rememberIfUnknown = true) - { - if (RememberedUnits.ContainsKey(unit.Guid)) - { - return (UnitRelationship)((int)Math.Round(RememberedUnits[unit.Guid])); - } - else if (rememberIfUnknown) - { - RememberedUnits.Add(unit.Guid, 0); - } - - return UnitRelationship.Unknown; - } - - public PlayerRelationship GetPlayerRelationship(WowPlayer player, bool rememberIfUnknown = true) - { - if (RememberedUnits.ContainsKey(player.Guid)) - { - return (PlayerRelationship)((int)Math.Round(RememberedUnits[player.Guid])); - } - else if (rememberIfUnknown) - { - RememberedUnits.Add(player.Guid, 0); - } - - return PlayerRelationship.Unknown; - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Personality/Enums/PlayerRelationship.cs b/AmeisenBotX.Core/Personality/Enums/PlayerRelationship.cs index 177d31b9..d8731506 100644 --- a/AmeisenBotX.Core/Personality/Enums/PlayerRelationship.cs +++ b/AmeisenBotX.Core/Personality/Enums/PlayerRelationship.cs @@ -12,4 +12,4 @@ public enum PlayerRelationship Friend, BestFriend, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Personality/Enums/Scale.cs b/AmeisenBotX.Core/Personality/Enums/Scale.cs index fc28ab96..5ff46bdc 100644 --- a/AmeisenBotX.Core/Personality/Enums/Scale.cs +++ b/AmeisenBotX.Core/Personality/Enums/Scale.cs @@ -8,4 +8,4 @@ public enum Scale Good = 3, VeryGood = 4, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Personality/Enums/UnitRelationship.cs b/AmeisenBotX.Core/Personality/Enums/UnitRelationship.cs index a9c21285..b92d883f 100644 --- a/AmeisenBotX.Core/Personality/Enums/UnitRelationship.cs +++ b/AmeisenBotX.Core/Personality/Enums/UnitRelationship.cs @@ -8,4 +8,4 @@ public enum UnitRelationship KillableWithGroup, KeepAway, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/Properties/AssemblyInfo.cs b/AmeisenBotX.Core/Properties/AssemblyInfo.cs index 380d8e4c..469e1828 100644 --- a/AmeisenBotX.Core/Properties/AssemblyInfo.cs +++ b/AmeisenBotX.Core/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/AmeisenBotX.Core/Raid/Profiles/IRaidProfile.cs b/AmeisenBotX.Core/Raid/Profiles/IRaidProfile.cs new file mode 100644 index 00000000..d36976bb --- /dev/null +++ b/AmeisenBotX.Core/Raid/Profiles/IRaidProfile.cs @@ -0,0 +1,18 @@ +using AmeisenBotX.Core.Jobs.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Jobs.Profiles +{ + public interface IRaidProfile + { + public string Name { get; } + + public string Description { get; } + + public string Author { get; } + } +} diff --git a/AmeisenBotX.Core/Raid/RaidEngine.cs b/AmeisenBotX.Core/Raid/RaidEngine.cs new file mode 100644 index 00000000..beb835cf --- /dev/null +++ b/AmeisenBotX.Core/Raid/RaidEngine.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.Dungeon +{ + public class RaidEngine + { + } +} diff --git a/AmeisenBotX.Core/StateMachine/AmeisenBotStateMachine.cs b/AmeisenBotX.Core/StateMachine/AmeisenBotStateMachine.cs index 106b1b80..054c1956 100644 --- a/AmeisenBotX.Core/StateMachine/AmeisenBotStateMachine.cs +++ b/AmeisenBotX.Core/StateMachine/AmeisenBotStateMachine.cs @@ -58,26 +58,26 @@ public AmeisenBotStateMachine( LastGhostCheck = DateTime.Now; LastEventPull = DateTime.Now; - LastState = AmeisenBotState.None; + LastState = BotState.None; UnitLootList = new Queue(); - States = new Dictionary() + States = new Dictionary() { - { AmeisenBotState.None, new StateNone(this, config) }, - { AmeisenBotState.StartWow, new StateStartWow(this, config, wowProcess, xMemory) }, - { AmeisenBotState.Login, new StateLogin(this, config, offsetList, characterManager) }, - { AmeisenBotState.LoadingScreen, new StateLoadingScreen(this, xMemory, config, objectManager) }, - { AmeisenBotState.Idle, new StateIdle(this, config, offsetList, objectManager, characterManager, hookManager, eventHookManager, combatClass, UnitLootList) }, - { AmeisenBotState.Dead, new StateDead(this, config, objectManager, hookManager) }, - { AmeisenBotState.Ghost, new StateGhost(this, config, offsetList, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine) }, - { AmeisenBotState.Following, new StateFollowing(this, config, objectManager, characterManager, pathfindingHandler, movementEngine) }, - { AmeisenBotState.Attacking, new StateAttacking(this, config, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine, movementSettings, combatClass) }, - { AmeisenBotState.Repairing, new StateRepairing(this, config, objectManager, hookManager, characterManager, pathfindingHandler, movementEngine) }, - { AmeisenBotState.Selling, new StateSelling(this, config, objectManager, hookManager, characterManager, pathfindingHandler, movementEngine) }, - { AmeisenBotState.Healing, new StateEating(this, config, objectManager, characterManager) }, - { AmeisenBotState.InsideAoeDamage, new StateInsideAoeDamage(this, config, objectManager, characterManager, pathfindingHandler, movementEngine) }, - { AmeisenBotState.Looting, new StateLooting(this, config, offsetList, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine, UnitLootList) }, - { AmeisenBotState.Battleground, new StateBattleground(this, config, offsetList, objectManager, characterManager, hookManager, movementEngine, battlegroundEngine) } + { BotState.None, new StateNone(this, config) }, + { BotState.StartWow, new StateStartWow(this, config, wowProcess, xMemory) }, + { BotState.Login, new StateLogin(this, config, offsetList, characterManager) }, + { BotState.LoadingScreen, new StateLoadingScreen(this, xMemory, config, objectManager) }, + { BotState.Idle, new StateIdle(this, config, offsetList, objectManager, characterManager, hookManager, eventHookManager, combatClass, UnitLootList) }, + { BotState.Dead, new StateDead(this, config, objectManager, hookManager) }, + { BotState.Ghost, new StateGhost(this, config, offsetList, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine) }, + { BotState.Following, new StateFollowing(this, config, objectManager, characterManager, pathfindingHandler, movementEngine) }, + { BotState.Attacking, new StateAttacking(this, config, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine, movementSettings, combatClass) }, + { BotState.Repairing, new StateRepairing(this, config, objectManager, hookManager, characterManager, movementEngine) }, + { BotState.Selling, new StateSelling(this, config, objectManager, hookManager, characterManager, movementEngine) }, + { BotState.Healing, new StateEating(this, config, objectManager, characterManager) }, + { BotState.InsideAoeDamage, new StateInsideAoeDamage(this, config, objectManager, characterManager, pathfindingHandler, movementEngine) }, + { BotState.Looting, new StateLooting(this, config, offsetList, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine, UnitLootList) }, + { BotState.Battleground, new StateBattleground(this, config, offsetList, objectManager, characterManager, hookManager, movementEngine, battlegroundEngine) } }; CurrentState = States.First(); @@ -94,19 +94,19 @@ public AmeisenBotStateMachine( public string BotDataPath { get; } - public KeyValuePair CurrentState { get; private set; } + public KeyValuePair CurrentState { get; private set; } - public AmeisenBotState LastState { get; private set; } + public BotState LastState { get; private set; } public string PlayerName { get; internal set; } - internal IOffsetList OffsetList { get; } + internal BattlegroundEngine BattlegroundEngine { get; } - internal XMemory XMemory { get; } + internal IOffsetList OffsetList { get; } internal Queue UnitLootList { get; set; } - internal BattlegroundEngine BattlegroundEngine { get; } + internal XMemory XMemory { get; } private IAmeisenBotCache BotCache { get; } @@ -124,25 +124,25 @@ public AmeisenBotStateMachine( private DateTime LastObjectUpdate { get; set; } + private IMovementEngine MovementEngine { get; set; } + private ObjectManager ObjectManager { get; } - private Dictionary States { get; } - - private IMovementEngine MovementEngine { get; set; } + private Dictionary States { get; } public void Execute() { if (XMemory.Process == null || XMemory.Process.HasExited) { AmeisenLogger.Instance.Log("WoW crashed...", LogLevel.Verbose); - SetState(AmeisenBotState.None); + SetState(BotState.None); } if (ObjectManager != null) { if (!ObjectManager.IsWorldLoaded) { - SetState(AmeisenBotState.LoadingScreen); + SetState(BotState.LoadingScreen); MovementEngine.Reset(); } @@ -152,23 +152,17 @@ public void Execute() { HandlePlayerDeadOrGhostState(); - if (CurrentState.Key != AmeisenBotState.Dead && CurrentState.Key != AmeisenBotState.Ghost) + if (CurrentState.Key != BotState.Dead && CurrentState.Key != BotState.Ghost) { if (Config.AutoDodgeAoeSpells && BotUtils.IsPositionInsideAoeSpell(ObjectManager.Player.Position, ObjectManager.WowObjects.OfType().ToList())) { - SetState(AmeisenBotState.InsideAoeDamage); + SetState(BotState.InsideAoeDamage); } - if (ObjectManager.Player.IsInCombat || IsAnyPartymemberInCombat() || (BattlegroundEngine != null && (BattlegroundEngine != null && !BattlegroundEngine.ForceCombat))) + if (ObjectManager.Player.IsInCombat || IsAnyPartymemberInCombat()) { - if(BattlegroundEngine != null && BattlegroundEngine.ForceCombat && ObjectManager.GetNearEnemies(50.0).Count() == 0) - { - BattlegroundEngine.ForceCombat = false; - return; - } - - SetState(AmeisenBotState.Attacking); + SetState(BotState.Attacking); } } } @@ -182,6 +176,11 @@ public void Execute() CurrentState.Value.Execute(); } + internal bool IsAnyPartymemberInCombat() + => ObjectManager.WowObjects.OfType() + .Where(e => ObjectManager.PartymemberGuids.Contains(e.Guid)) + .Any(r => r.Position.GetDistance(ObjectManager.Player.Position) < 60 && r.IsInCombat); + internal bool IsOnBattleground() => ObjectManager.MapId == 30 || ObjectManager.MapId == 489 @@ -189,12 +188,7 @@ internal bool IsOnBattleground() || ObjectManager.MapId == 566 || ObjectManager.MapId == 607; - internal bool IsAnyPartymemberInCombat() - => ObjectManager.WowObjects.OfType() - .Where(e => ObjectManager.PartymemberGuids.Contains(e.Guid)) - .Any(r => r.Position.GetDistance(ObjectManager.Player.Position) < 60 && r.IsInCombat); - - internal void SetState(AmeisenBotState state) + internal void SetState(BotState state) { if (CurrentState.Key == state) { @@ -223,10 +217,10 @@ private void HandleEventPull() private void HandleObjectUpdates() { if (LastObjectUpdate - TimeSpan.FromMilliseconds(Config.ObjectUpdateMs) < DateTime.Now - && CurrentState.Key != AmeisenBotState.None - && CurrentState.Key != AmeisenBotState.StartWow - && CurrentState.Key != AmeisenBotState.Login - && CurrentState.Key != AmeisenBotState.LoadingScreen) + && CurrentState.Key != BotState.None + && CurrentState.Key != BotState.StartWow + && CurrentState.Key != BotState.Login + && CurrentState.Key != BotState.LoadingScreen) { ObjectManager.UpdateWowObjects(); LastObjectUpdate = DateTime.Now; @@ -237,7 +231,7 @@ private void HandlePlayerDeadOrGhostState() { if (ObjectManager.Player.IsDead) { - SetState(AmeisenBotState.Dead); + SetState(BotState.Dead); } else { @@ -248,10 +242,10 @@ private void HandlePlayerDeadOrGhostState() if (isGhost) { - SetState(AmeisenBotState.Ghost); + SetState(BotState.Ghost); } } } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/DeathKnightBlood.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/DeathKnightBlood.cs index 033b0342..af80e19e 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/DeathKnightBlood.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/DeathKnightBlood.cs @@ -21,6 +21,16 @@ public DeathknightBlood(ObjectManager objectManager, CharacterManager characterM HookManager = hookManager; } + public string Author => "Jamsbaer"; + + public WowClass Class => WowClass.Deathknight; + + public Dictionary Configureables { get; set; } = new Dictionary(); + + public string Description => "FCFS based CombatClass for the Blood Deathknight spec."; + + public string Displayname => "[WIP] Blood Deathknight"; + public bool HandlesMovement => false; public bool HandlesTargetSelection => false; @@ -29,6 +39,10 @@ public DeathknightBlood(ObjectManager objectManager, CharacterManager characterM public IWowItemComparator ItemComparator => null; + public CombatClassRole Role => CombatClassRole.Tank; + + public string Version => "1.0"; + private CharacterManager CharacterManager { get; } private DateTime HeroicStrikeLastUsed { get; set; } @@ -39,20 +53,6 @@ public DeathknightBlood(ObjectManager objectManager, CharacterManager characterM private ObjectManager ObjectManager { get; } - public string Displayname => "[WIP] Blood Deathknight"; - - public string Version => "1.0"; - - public string Author => "Jamsbaer"; - - public string Description => "FCFS based CombatClass for the Blood Deathknight spec."; - - public WowClass Class => WowClass.Deathknight; - - public CombatClassRole Role => CombatClassRole.Tank; - - public Dictionary Configureables { get; set; } = new Dictionary(); - public void Execute() { ulong targetGuid = ObjectManager.TargetGuid; @@ -71,7 +71,6 @@ public void Execute() public void OutOfCombatExecute() { - } private void HandleAttacking(WowUnit target) @@ -131,17 +130,14 @@ private void HandleAttacking(WowUnit target) { HookManager.CastSpell("Icy Touch"); } - - - } private bool IsOneOfAllRunesReady() - => HookManager.IsRuneReady(0) - || HookManager.IsRuneReady(1) - && HookManager.IsRuneReady(2) - || HookManager.IsRuneReady(3) - && HookManager.IsRuneReady(4) + => HookManager.IsRuneReady(0) + || HookManager.IsRuneReady(1) + && HookManager.IsRuneReady(2) + || HookManager.IsRuneReady(3) + && HookManager.IsRuneReady(4) || HookManager.IsRuneReady(5); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/ICombatClass.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/ICombatClass.cs index c31caec2..50b3f1b8 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/ICombatClass.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/ICombatClass.cs @@ -1,24 +1,21 @@ using AmeisenBotX.Core.Character.Comparators; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; using System.Collections.Generic; namespace AmeisenBotX.Core.StateMachine.CombatClasses { public interface ICombatClass { - string Displayname { get; } + string Author { get; } - string Version { get; } + WowClass Class { get; } - string Author { get; } + Dictionary Configureables { get; set; } string Description { get; } - CombatClassRole Role { get; } - - WowClass Class { get; } + string Displayname { get; } bool HandlesMovement { get; } @@ -28,10 +25,12 @@ public interface ICombatClass IWowItemComparator ItemComparator { get; } - Dictionary Configureables { get; set; } + CombatClassRole Role { get; } + + string Version { get; } void Execute(); void OutOfCombatExecute(); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/BasicCombatClass.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/BasicCombatClass.cs index 556dde77..a3f68d31 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/BasicCombatClass.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/BasicCombatClass.cs @@ -9,10 +9,10 @@ using AmeisenBotX.Core.StateMachine.Utils; using AmeisenBotX.Logging; using AmeisenBotX.Logging.Enums; +using AmeisenBotX.Pathfinding.Objects; using System; using System.Collections.Generic; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; -using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis { @@ -56,47 +56,47 @@ protected BasicCombatClass(ObjectManager objectManager, CharacterManager charact TargetInterruptManager = new InterruptManager(ObjectManager.Target, null); } - public DispellBuffsFunction DispellBuffsFunction { get; internal set; } - - public DispellDebuffsFunction DispellDebuffsFunction { get; internal set; } + public abstract string Author { get; } public CharacterManager CharacterManager { get; internal set; } - public HookManager HookManager { get; internal set; } + public abstract WowClass Class { get; } - public ObjectManager ObjectManager { get; internal set; } + public abstract Dictionary Configureables { get; set; } public CooldownManager CooldownManager { get; internal set; } - public Dictionary Spells { get; internal set; } - - public AuraManager MyAuraManager { get; internal set; } + public abstract string Description { get; } - public AuraManager TargetAuraManager { get; internal set; } + public DispellBuffsFunction DispellBuffsFunction { get; internal set; } - public InterruptManager TargetInterruptManager { get; internal set; } + public DispellDebuffsFunction DispellDebuffsFunction { get; internal set; } public abstract string Displayname { get; } - public abstract string Version { get; } + public abstract bool HandlesMovement { get; } - public abstract string Author { get; } + public abstract bool HandlesTargetSelection { get; } - public abstract string Description { get; } + public HookManager HookManager { get; internal set; } - public abstract CombatClassRole Role { get; } + public abstract bool IsMelee { get; } - public abstract WowClass Class { get; } + public abstract IWowItemComparator ItemComparator { get; set; } - public abstract bool HandlesMovement { get; } + public AuraManager MyAuraManager { get; internal set; } - public abstract bool HandlesTargetSelection { get; } + public ObjectManager ObjectManager { get; internal set; } - public abstract bool IsMelee { get; } + public abstract CombatClassRole Role { get; } - public abstract IWowItemComparator ItemComparator { get; set; } + public Dictionary Spells { get; internal set; } - public abstract Dictionary Configureables { get; set; } + public AuraManager TargetAuraManager { get; internal set; } + + public InterruptManager TargetInterruptManager { get; internal set; } + + public abstract string Version { get; } public abstract void Execute(); @@ -119,7 +119,8 @@ internal bool CastSpellIfPossible(string spellName, bool needsResource = false, if (Spells[spellName] != null && !CooldownManager.IsSpellOnCooldown(spellName) - && (!needsResource || Spells[spellName].Costs < currentResourceAmount)) + && (!needsResource || Spells[spellName].Costs < currentResourceAmount) + && IsInRange(Spells[spellName], ObjectManager.Target.Position)) { CastSpell(spellName); return true; @@ -137,7 +138,8 @@ internal bool CastSpellIfPossibleDk(string spellName, bool needsRuneenergy = fal && (!needsRuneenergy || Spells[spellName].Costs < ObjectManager.Player.Runeenergy) && (!needsBloodrune || (HookManager.IsRuneReady(0) || HookManager.IsRuneReady(1))) && (!needsFrostrune || (HookManager.IsRuneReady(2) || HookManager.IsRuneReady(3))) - && (!needsUnholyrune || (HookManager.IsRuneReady(4) || HookManager.IsRuneReady(5)))) + && (!needsUnholyrune || (HookManager.IsRuneReady(4) || HookManager.IsRuneReady(5))) + && IsInRange(Spells[spellName], ObjectManager.Target.Position)) { CastSpell(spellName); return true; @@ -153,7 +155,8 @@ internal bool CastSpellIfPossibleRogue(string spellName, bool needsEnergy = fals if (Spells[spellName] != null && !CooldownManager.IsSpellOnCooldown(spellName) && (!needsEnergy || Spells[spellName].Costs < ObjectManager.Player.Energy) - && (!needsCombopoints || ObjectManager.Player.ComboPoints >= requiredCombopoints)) + && (!needsCombopoints || ObjectManager.Player.ComboPoints >= requiredCombopoints) + && IsInRange(Spells[spellName], ObjectManager.Target.Position)) { CastSpell(spellName); return true; @@ -162,6 +165,24 @@ internal bool CastSpellIfPossibleRogue(string spellName, bool needsEnergy = fals return false; } + private void CastSpell(string spellName) + { + HookManager.CastSpell(spellName); + CooldownManager.SetSpellCooldown(spellName, (int)HookManager.GetSpellCooldown(spellName)); + AmeisenLogger.Instance.Log($"[{Displayname}]: Casting Spell \"{spellName}\" on \"{ObjectManager.Target?.Name}\"", LogLevel.Verbose); + } + + private bool IsInRange(Spell spell, Vector3 position) + { + if ((spell.MinRange == 0 && spell.MaxRange == 0) || spell.MaxRange == 0) + { + return true; + } + + double distance = ObjectManager.Player.Position.GetDistance(position); + return distance > spell.MinRange && distance < spell.MaxRange; + } + private void PrepareCast(string spellName) { AmeisenLogger.Instance.Log($"[{Displayname}]: Trying to cast \"{spellName}\" on \"{ObjectManager.Target?.Name}\"", LogLevel.Verbose); @@ -171,12 +192,5 @@ private void PrepareCast(string spellName) Spells.Add(spellName, CharacterManager.SpellBook.GetSpellByName(spellName)); } } - - private void CastSpell(string spellName) - { - HookManager.CastSpell(spellName); - CooldownManager.SetSpellCooldown(spellName, (int)HookManager.GetSpellCooldown(spellName)); - AmeisenLogger.Instance.Log($"[{Displayname}]: Casting Spell \"{spellName}\" on \"{ObjectManager.Target?.Name}\"", LogLevel.Verbose); - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightFrost.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightFrost.cs index 2adb0da3..dcb4463a 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightFrost.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightFrost.cs @@ -4,7 +4,6 @@ using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; using AmeisenBotX.Logging; using AmeisenBotX.Logging.Enums; using System.Collections.Generic; @@ -17,21 +16,21 @@ public class DeathknightFrost : BasicCombatClass { // author: Jannis Höschele + private readonly string armyOfTheDeadSpell = "Army of the Dead"; + private readonly string bloodPlagueSpell = "Blood Plague"; + private readonly string bloodStrikeSpell = "Blood Strike"; + private readonly string deathCoilSpell = "Death Coil"; + private readonly string frostFeverSpell = "Frost Fever"; private readonly string frostPresenceSpell = "Frost Presence"; + private readonly string hornOfWinterSpell = "Horn of Winter"; + private readonly string iceboundFortitudeSpell = "Icebound Fortitude"; private readonly string icyTouchSpell = "Icy Touch"; - private readonly string bloodStrikeSpell = "Blood Strike"; + private readonly string mindFreezeSpell = "Mind Freeze"; + private readonly string obliterateSpell = "Obliterate"; private readonly string plagueStrikeSpell = "Plague Strike"; private readonly string runeStrikeSpell = "Rune Strike"; private readonly string strangulateSpell = "Strangulate"; - private readonly string mindFreezeSpell = "Mind Freeze"; - private readonly string obliterateSpell = "Obliterate"; - private readonly string frostFeverSpell = "Frost Fever"; - private readonly string bloodPlagueSpell = "Blood Plague"; - private readonly string deathCoilSpell = "Death Coil"; - private readonly string hornOfWinterSpell = "Horn of Winter"; - private readonly string iceboundFortitudeSpell = "Icebound Fortitude"; private readonly string unbreakableArmorSpell = "Unbreakable Armor"; - private readonly string armyOfTheDeadSpell = "Army of the Dead"; public DeathknightFrost(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -54,18 +53,16 @@ public DeathknightFrost(ObjectManager objectManager, CharacterManager characterM }; } - public override CombatClassRole Role => CombatClassRole.Dps; - - public override string Displayname => "Deathknight Frost"; + public override string Author => "Jannis"; - public override string Version => "1.0"; + public override WowClass Class => WowClass.Deathknight; - public override string Author => "Jannis"; + public override Dictionary Configureables { get; set; } = new Dictionary(); public override string Description => "FCFS based CombatClass for the Frost Deathknight spec."; - public override WowClass Class => WowClass.Deathknight; - + public override string Displayname => "Deathknight Frost"; + public override bool HandlesMovement => false; public override bool HandlesTargetSelection => false; @@ -74,7 +71,9 @@ public DeathknightFrost(ObjectManager objectManager, CharacterManager characterM public override IWowItemComparator ItemComparator { get; set; } = new BasicStrengthComparator(); - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override CombatClassRole Role => CombatClassRole.Dps; + + public override string Version => "1.0"; public override void Execute() { @@ -111,4 +110,4 @@ public override void OutOfCombatExecute() MyAuraManager.Tick(); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightUnholy.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightUnholy.cs index 7fef16d7..2f55d014 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightUnholy.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DeathknightUnholy.cs @@ -4,9 +4,6 @@ using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System.Collections.Generic; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; @@ -17,21 +14,21 @@ public class DeathknightUnholy : BasicCombatClass { // author: Jannis Höschele - private readonly string unholyPresenceSpell = "Unholy Presence"; - private readonly string icyTouchSpell = "Icy Touch"; - private readonly string scourgeStrikeSpell = "Scourge Strike"; + private readonly string armyOfTheDeadSpell = "Army of the Dead"; + private readonly string bloodPlagueSpell = "Blood Plague"; private readonly string bloodStrikeSpell = "Blood Strike"; + private readonly string deathCoilSpell = "Death Coil"; + private readonly string frostFeverSpell = "Frost Fever"; + private readonly string hornOfWinterSpell = "Horn of Winter"; + private readonly string iceboundFortitudeSpell = "Icebound Fortitude"; + private readonly string icyTouchSpell = "Icy Touch"; + private readonly string mindFreezeSpell = "Mind Freeze"; private readonly string plagueStrikeSpell = "Plague Strike"; private readonly string runeStrikeSpell = "Rune Strike"; + private readonly string scourgeStrikeSpell = "Scourge Strike"; private readonly string strangulateSpell = "Strangulate"; - private readonly string mindFreezeSpell = "Mind Freeze"; private readonly string summonGargoyleSpell = "Summon Gargoyle"; - private readonly string frostFeverSpell = "Frost Fever"; - private readonly string bloodPlagueSpell = "Blood Plague"; - private readonly string deathCoilSpell = "Death Coil"; - private readonly string hornOfWinterSpell = "Horn of Winter"; - private readonly string iceboundFortitudeSpell = "Icebound Fortitude"; - private readonly string armyOfTheDeadSpell = "Army of the Dead"; + private readonly string unholyPresenceSpell = "Unholy Presence"; public DeathknightUnholy(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -54,27 +51,27 @@ public DeathknightUnholy(ObjectManager objectManager, CharacterManager character }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Deathknight; - public override bool IsMelee => true; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicStrengthComparator(); + public override string Description => "FCFS based CombatClass for the Unholy Deathknight spec."; public override string Displayname => "Deathknight Unholy"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Unholy Deathknight spec."; + public override bool IsMelee => true; - public override WowClass Class => WowClass.Deathknight; + public override IWowItemComparator ItemComparator { get; set; } = new BasicStrengthComparator(); public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; public override void Execute() { @@ -110,4 +107,4 @@ public override void OutOfCombatExecute() MyAuraManager.Tick(); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidBalance.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidBalance.cs index 08ea80aa..93e20ef3 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidBalance.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidBalance.cs @@ -1,14 +1,10 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -21,32 +17,31 @@ public class DruidBalance : BasicCombatClass { // author: Jannis Höschele - private readonly string moonkinFormSpell = "Moonkin Form"; - private readonly string markOfTheWildSpell = "Mark of the Wild"; + private readonly string barkskinSpell = "Barkskin"; + private readonly int eclipseCheckTime = 1; + private readonly string eclipseLunarSpell = "Eclipse (Lunar)"; + private readonly string eclipseSolarSpell = "Eclipse (Solar)"; + private readonly string faerieFireSpell = "Faerie Fire"; + private readonly string forceOfNatureSpell = "Force of Nature"; private readonly string innervateSpell = "Innervate"; - private readonly string moonfireSpell = "Moonfire"; private readonly string insectSwarmSpell = "Insect Swarm"; + private readonly string markOfTheWildSpell = "Mark of the Wild"; + private readonly string moonfireSpell = "Moonfire"; + private readonly string moonkinFormSpell = "Moonkin Form"; private readonly string starfallSpell = "Starfall"; - private readonly string forceOfNatureSpell = "Force of Nature"; - private readonly string wrathSpell = "Wrath"; private readonly string starfireSpell = "Starfire"; - private readonly string faerieFireSpell = "Faerie Fire"; - private readonly string eclipseSolarSpell = "Eclipse (Solar)"; - private readonly string eclipseLunarSpell = "Eclipse (Lunar)"; - private readonly string barkskinSpell = "Barkskin"; - - private readonly int eclipseCheckTime = 1; + private readonly string wrathSpell = "Wrath"; public DruidBalance(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { MyAuraManager.BuffsToKeepActive = new Dictionary() { { moonkinFormSpell, () => CastSpellIfPossible(moonkinFormSpell, true) }, - { markOfTheWildSpell, () => + { markOfTheWildSpell, () => { HookManager.TargetGuid(ObjectManager.PlayerGuid); - return CastSpellIfPossible(markOfTheWildSpell, true); - } + return CastSpellIfPossible(markOfTheWildSpell, true); + } } }; @@ -62,33 +57,33 @@ public DruidBalance(ObjectManager objectManager, CharacterManager characterManag }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Druid; - public override bool IsMelee => false; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override string Description => "FCFS based CombatClass for the Balance (Owl) Druid spec."; - public bool SolarEclipse { get; set; } + public override string Displayname => "Druid Balance"; - public bool LunarEclipse { get; set; } + public override bool HandlesMovement => false; - public override string Displayname => "Druid Balance"; + public override bool HandlesTargetSelection => false; - public override string Version => "1.0"; + public override bool IsMelee => false; - public override string Author => "Jannis"; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); - public override string Description => "FCFS based CombatClass for the Balance (Owl) Druid spec."; + public DateTime LastEclipseCheck { get; private set; } - public override WowClass Class => WowClass.Druid; + public bool LunarEclipse { get; set; } public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public bool SolarEclipse { get; set; } - public DateTime LastEclipseCheck { get; private set; } + public override string Version => "1.0"; public override void Execute() { @@ -147,4 +142,4 @@ private bool CheckForEclipseProcs() return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidRestoration.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidRestoration.cs index e29756b4..c983c5e7 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidRestoration.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/DruidRestoration.cs @@ -1,19 +1,14 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis @@ -22,21 +17,20 @@ public class DruidRestoration : BasicCombatClass { // author: Jannis Höschele - private readonly string rejuvenationSpell = "Rejuvenation"; - private readonly string lifebloomSpell = "Lifebloom"; - private readonly string wildGrowthSpell = "Wild Growth"; - private readonly string regrowthSpell = "Regrowth"; + private readonly int deadPartymembersCheckTime = 4; private readonly string healingTouchSpell = "Healing Touch"; - private readonly string nourishSpell = "Nourish"; - private readonly string treeOfLifeSpell = "Tree of Life"; - private readonly string markOfTheWildSpell = "Mark of the Wild"; - private readonly string reviveSpell = "Revive"; - private readonly string tranquilitySpell = "Tranquility"; private readonly string innervateSpell = "Innervate"; + private readonly string lifebloomSpell = "Lifebloom"; + private readonly string markOfTheWildSpell = "Mark of the Wild"; private readonly string naturesSwiftnessSpell = "Nature's Swiftness"; + private readonly string nourishSpell = "Nourish"; + private readonly string regrowthSpell = "Regrowth"; + private readonly string rejuvenationSpell = "Rejuvenation"; + private readonly string reviveSpell = "Revive"; private readonly string swiftmendSpell = "Swiftmend"; - - private readonly int deadPartymembersCheckTime = 4; + private readonly string tranquilitySpell = "Tranquility"; + private readonly string treeOfLifeSpell = "Tree of Life"; + private readonly string wildGrowthSpell = "Wild Growth"; public DruidRestoration(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -46,7 +40,7 @@ public DruidRestoration(ObjectManager objectManager, CharacterManager characterM { markOfTheWildSpell, () => { HookManager.TargetGuid(ObjectManager.PlayerGuid); - return CastSpellIfPossible(markOfTheWildSpell, true); + return CastSpellIfPossible(markOfTheWildSpell, true); } } }; @@ -59,31 +53,31 @@ public DruidRestoration(ObjectManager objectManager, CharacterManager characterM }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => true; - - public override bool IsMelee => false; + public override string Author => "Jannis"; - public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); + public override WowClass Class => WowClass.Druid; - private DateTime LastDeadPartymembersCheck { get; set; } + public override Dictionary Configureables { get; set; } = new Dictionary(); - private Dictionary SpellUsageHealDict { get; } + public override string Description => "FCFS based CombatClass for the Unholy Deathknight spec."; public override string Displayname => "Druid Restoration"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => true; - public override string Description => "FCFS based CombatClass for the Unholy Deathknight spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Druid; + public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); public override CombatClassRole Role => CombatClassRole.Heal; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; + + private DateTime LastDeadPartymembersCheck { get; set; } + + private Dictionary SpellUsageHealDict { get; } public override void Execute() { @@ -215,4 +209,4 @@ private bool NeedToHealSomeone(out List playersThatNeedHealing) return playersThatNeedHealing.Count > 0; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterBeastmastery.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterBeastmastery.cs index 0cc055a6..ab7f6081 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterBeastmastery.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterBeastmastery.cs @@ -1,17 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using AmeisenBotX.Memory; using System; using System.Collections.Generic; using System.Linq; @@ -38,22 +32,21 @@ public class HunterBeastmastery : BasicCombatClass private readonly string killCommandSpell = "Kill Command"; private readonly string killShotSpell = "Kill Shot"; private readonly string mendPetSpell = "Mend Pet"; + private readonly string mongooseBiteSpell = "Mongoose Bite"; + private readonly string multiShotSpell = "Multi-Shot"; + private readonly int petstatusCheckTime = 2; private readonly string rapidFireSpell = "Rapid Fire"; + private readonly string raptorStrikeSpell = "Raptor Strike"; private readonly string revivePetSpell = "Revive Pet"; + private readonly string scatterShotSpell = "Scatter Shot"; private readonly string serpentStingSpell = "Serpent Sting"; private readonly string steadyShotSpell = "Steady Shot"; - private readonly string scatterShotSpell = "Scatter Shot"; private readonly string wingClipSpell = "Wing Clip"; - private readonly string multiShotSpell = "Multi-Shot"; - private readonly string raptorStrikeSpell = "Raptor Strike"; - private readonly string mongooseBiteSpell = "Mongoose Bite"; - - private readonly int petstatusCheckTime = 2; public HunterBeastmastery(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { PetManager = new PetManager( - ObjectManager.Pet, + ObjectManager.Pet, TimeSpan.FromSeconds(15), () => CastSpellIfPossible(mendPetSpell, true), () => CastSpellIfPossible(callPetSpell), @@ -77,33 +70,33 @@ public HunterBeastmastery(ObjectManager objectManager, CharacterManager characte }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Hunter; - public override bool IsMelee => false; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override string Description => "FCFS based CombatClass for the Beastmastery Hunter spec."; - private bool DisengagePrepared { get; set; } = false; + public override string Displayname => "Hunter Beastmastery"; - private bool InFrostTrapCombo { get; set; } = false; + public override bool HandlesMovement => false; - private PetManager PetManager { get; set; } + public override bool HandlesTargetSelection => false; - public override string Displayname => "Hunter Beastmastery"; + public override bool IsMelee => false; - public override string Version => "1.0"; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); - public override string Author => "Jannis"; + public override CombatClassRole Role => CombatClassRole.Dps; - public override string Description => "FCFS based CombatClass for the Beastmastery Hunter spec."; + public override string Version => "1.0"; - public override WowClass Class => WowClass.Hunter; + private bool DisengagePrepared { get; set; } = false; - public override CombatClassRole Role => CombatClassRole.Dps; + private bool InFrostTrapCombo { get; set; } = false; - public override Dictionary Configureables { get; set; } = new Dictionary(); + private PetManager PetManager { get; set; } public override void Execute() { @@ -205,4 +198,4 @@ public override void OutOfCombatExecute() DisengagePrepared = false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterMarksmanship.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterMarksmanship.cs index 7f80a5c3..14898a00 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterMarksmanship.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterMarksmanship.cs @@ -1,17 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using AmeisenBotX.Memory; using System; using System.Collections.Generic; using System.Linq; @@ -24,9 +18,11 @@ public class HunterMarksmanship : BasicCombatClass { // author: Jannis Höschele + private readonly string aimedShotSpell = "Aimed Shot"; private readonly string arcaneShotSpell = "Arcane Shot"; private readonly string aspectOfTheDragonhawkSpell = "Aspect of the Dragonhawk"; private readonly string callPetSpell = "Call Pet"; + private readonly string chimeraShotSpell = "Chimera Shot"; private readonly string concussiveShotSpell = "Concussive Shot"; private readonly string deterrenceSpell = "Deterrence"; private readonly string disengageSpell = "Disengage"; @@ -36,21 +32,19 @@ public class HunterMarksmanship : BasicCombatClass private readonly string killCommandSpell = "Kill Command"; private readonly string killShotSpell = "Kill Shot"; private readonly string mendPetSpell = "Mend Pet"; + private readonly string mongooseBiteSpell = "Mongoose Bite"; + private readonly string multiShotSpell = "Multi-Shot"; private readonly string rapidFireSpell = "Rapid Fire"; + private readonly string raptorStrikeSpell = "Raptor Strike"; private readonly string revivePetSpell = "Revive Pet"; private readonly string serpentStingSpell = "Serpent Sting"; + private readonly string silencingShotSpell = "Silencing Shot"; private readonly string steadyShotSpell = "Steady Shot"; - private readonly string aimedShotSpell = "Aimed Shot"; - private readonly string chimeraShotSpell = "Chimera Shot"; - private readonly string silencingShotSpell = "Silencing Shot"; - private readonly string multiShotSpell = "Multi-Shot"; - private readonly string raptorStrikeSpell = "Raptor Strike"; - private readonly string mongooseBiteSpell = "Mongoose Bite"; public HunterMarksmanship(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { PetManager = new PetManager( - ObjectManager.Pet, + ObjectManager.Pet, TimeSpan.FromSeconds(15), () => CastSpellIfPossible(mendPetSpell, true), () => CastSpellIfPossible(callPetSpell), @@ -73,33 +67,33 @@ public HunterMarksmanship(ObjectManager objectManager, CharacterManager characte }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Hunter; - public override bool IsMelee => false; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override string Description => "FCFS based CombatClass for the Marksmanship Hunter spec."; - private bool DisengagePrepared { get; set; } = false; + public override string Displayname => "Hunter Marksmanship"; - private bool InFrostTrapCombo { get; set; } = false; + public override bool HandlesMovement => false; - private PetManager PetManager { get; set; } + public override bool HandlesTargetSelection => false; - public override string Displayname => "Hunter Marksmanship"; + public override bool IsMelee => false; - public override string Version => "1.0"; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); - public override string Author => "Jannis"; + public override CombatClassRole Role => CombatClassRole.Dps; - public override string Description => "FCFS based CombatClass for the Marksmanship Hunter spec."; + public override string Version => "1.0"; - public override WowClass Class => WowClass.Hunter; + private bool DisengagePrepared { get; set; } = false; - public override CombatClassRole Role => CombatClassRole.Dps; + private bool InFrostTrapCombo { get; set; } = false; - public override Dictionary Configureables { get; set; } = new Dictionary(); + private PetManager PetManager { get; set; } public override void Execute() { @@ -204,4 +198,4 @@ public override void OutOfCombatExecute() DisengagePrepared = false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterSurvival.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterSurvival.cs index 55f77c41..d731c8a1 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterSurvival.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/HunterSurvival.cs @@ -1,17 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using AmeisenBotX.Memory; using System; using System.Collections.Generic; using System.Linq; @@ -24,35 +18,35 @@ public class HunterSurvival : BasicCombatClass { // author: Jannis Höschele + private readonly string aimedShotSpell = "Aimed Shot"; private readonly string arcaneShotSpell = "Arcane Shot"; private readonly string aspectOfTheDragonhawkSpell = "Aspect of the Dragonhawk"; + private readonly string blackArrowSpell = "Black Arrow"; private readonly string callPetSpell = "Call Pet"; private readonly string concussiveShotSpell = "Concussive Shot"; private readonly string deterrenceSpell = "Deterrence"; private readonly string disengageSpell = "Disengage"; + private readonly string explosiveShotSpell = "Explosive Shot"; private readonly string feignDeathSpell = "Feign Death"; private readonly string frostTrapSpell = "Frost Trap"; private readonly string huntersMarkSpell = "Hunter's Mark"; private readonly string killCommandSpell = "Kill Command"; private readonly string killShotSpell = "Kill Shot"; private readonly string mendPetSpell = "Mend Pet"; + private readonly string mongooseBiteSpell = "Mongoose Bite"; + private readonly string multiShotSpell = "Multi-Shot"; private readonly string rapidFireSpell = "Rapid Fire"; + private readonly string raptorStrikeSpell = "Raptor Strike"; private readonly string revivePetSpell = "Revive Pet"; private readonly string serpentStingSpell = "Serpent Sting"; private readonly string steadyShotSpell = "Steady Shot"; - private readonly string wyvernStingSpell = "Wyvern Sting"; private readonly string wingClipSpell = "Wing Clip"; - private readonly string multiShotSpell = "Multi-Shot"; - private readonly string aimedShotSpell = "Aimed Shot"; - private readonly string explosiveShotSpell = "Explosive Shot"; - private readonly string blackArrowSpell = "Black Arrow"; - private readonly string raptorStrikeSpell = "Raptor Strike"; - private readonly string mongooseBiteSpell = "Mongoose Bite"; + private readonly string wyvernStingSpell = "Wyvern Sting"; public HunterSurvival(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { PetManager = new PetManager( - ObjectManager.Pet, + ObjectManager.Pet, TimeSpan.FromSeconds(15), () => CastSpellIfPossible(mendPetSpell, true), () => CastSpellIfPossible(callPetSpell), @@ -76,33 +70,33 @@ public HunterSurvival(ObjectManager objectManager, CharacterManager characterMan }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Hunter; - public override bool IsMelee => false; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override string Description => "FCFS based CombatClass for the Survival Hunter spec."; - private bool DisengagePrepared { get; set; } = false; + public override string Displayname => "Hunter Survival"; - private bool InFrostTrapCombo { get; set; } = false; + public override bool HandlesMovement => false; - private PetManager PetManager { get; set; } + public override bool HandlesTargetSelection => false; - public override string Displayname => "Hunter Survival"; + public override bool IsMelee => false; - public override string Version => "1.0"; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); - public override string Author => "Jannis"; + public override CombatClassRole Role => CombatClassRole.Dps; - public override string Description => "FCFS based CombatClass for the Survival Hunter spec."; + public override string Version => "1.0"; - public override WowClass Class => WowClass.Hunter; + private bool DisengagePrepared { get; set; } = false; - public override CombatClassRole Role => CombatClassRole.Dps; + private bool InFrostTrapCombo { get; set; } = false; - public override Dictionary Configureables { get; set; } = new Dictionary(); + private PetManager PetManager { get; set; } public override void Execute() { @@ -204,4 +198,4 @@ public override void OutOfCombatExecute() DisengagePrepared = false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageArcane.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageArcane.cs index b5fcf91e..898bc824 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageArcane.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageArcane.cs @@ -1,17 +1,12 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; -using System.Linq; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; @@ -21,18 +16,18 @@ public class MageArcane : BasicCombatClass { // author: Jannis Höschele + private readonly string arcaneBarrageSpell = "Arcane Barrage"; + private readonly string arcaneBlastSpell = "Arcane Blast"; private readonly string arcaneIntellectSpell = "Arcane Intellect"; + private readonly string arcaneMissilesSpell = "Arcane Missiles"; private readonly string counterspellSpell = "Counterspell"; private readonly string evocationSpell = "Evocation"; - private readonly string arcaneBlastSpell = "Arcane Blast"; - private readonly string arcaneBarrageSpell = "Arcane Barrage"; - private readonly string arcaneMissilesSpell = "Arcane Missiles"; - private readonly string missileBarrageSpell = "Missile Barrage"; - private readonly string manaShieldSpell = "Mana Shield"; - private readonly string mageArmorSpell = "Mage Armor"; - private readonly string mirrorImageSpell = "Mirror Image"; private readonly string iceBlockSpell = "Ice Block"; private readonly string icyVeinsSpell = "Icy Veins"; + private readonly string mageArmorSpell = "Mage Armor"; + private readonly string manaShieldSpell = "Mana Shield"; + private readonly string mirrorImageSpell = "Mirror Image"; + private readonly string missileBarrageSpell = "Missile Barrage"; private readonly string spellStealSpell = "Spellsteal"; public MageArcane(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) @@ -43,7 +38,7 @@ public MageArcane(ObjectManager objectManager, CharacterManager characterManager { HookManager.TargetGuid(ObjectManager.PlayerGuid); return CastSpellIfPossible(arcaneIntellectSpell, true); - } + } }, { mageArmorSpell, () => CastSpellIfPossible(mageArmorSpell, true) }, { manaShieldSpell, () => CastSpellIfPossible(manaShieldSpell, true) } @@ -57,29 +52,29 @@ public MageArcane(ObjectManager objectManager, CharacterManager characterManager }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => false; + public override string Author => "Jannis"; - public override bool IsMelee => false; + public override WowClass Class => WowClass.Mage; - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override Dictionary Configureables { get; set; } = new Dictionary(); - public DateTime LastSpellstealCheck { get; private set; } + public override string Description => "FCFS based CombatClass for the Arcane Mage spec."; public override string Displayname => "Mage Arcane"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Arcane Mage spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Mage; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + + public DateTime LastSpellstealCheck { get; private set; } public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; public override void Execute() { @@ -120,4 +115,4 @@ public override void OutOfCombatExecute() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageFire.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageFire.cs index 534ceb8d..d82f1958 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageFire.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/MageFire.cs @@ -1,17 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using System; using System.Collections.Generic; -using System.Linq; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; @@ -26,13 +20,13 @@ public class MageFire : BasicCombatClass private readonly string evocationSpell = "Evocation"; private readonly string fireballSpell = "Fireball"; private readonly string hotstreakSpell = "Hot Streak"; + private readonly string iceBlockSpell = "Ice Block"; private readonly string livingBombSpell = "Living Bomb"; private readonly string manaShieldSpell = "Mana Shield"; + private readonly string mirrorImageSpell = "Mirror Image"; private readonly string moltenArmorSpell = "Molten Armor"; private readonly string pyroblastSpell = "Pyroblast"; private readonly string scorchSpell = "Scorch"; - private readonly string mirrorImageSpell = "Mirror Image"; - private readonly string iceBlockSpell = "Ice Block"; private readonly string spellStealSpell = "Spellsteal"; public MageFire(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) @@ -63,27 +57,27 @@ public MageFire(ObjectManager objectManager, CharacterManager characterManager, }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Mage; - public override bool IsMelee => false; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override string Description => "FCFS based CombatClass for the Fire Mage spec."; public override string Displayname => "Mage Fire"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Fire Mage spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Mage; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; public override void Execute() { @@ -123,4 +117,4 @@ public override void OutOfCombatExecute() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinHoly.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinHoly.cs index 96be239d..d499741d 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinHoly.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinHoly.cs @@ -1,19 +1,13 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using System; using System.Collections.Generic; using System.Linq; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; -using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis { @@ -30,7 +24,7 @@ public class PaladinHoly : BasicCombatClass private readonly string holyLightSpell = "Holy Light"; private readonly string holyShockSpell = "Holy Shock"; private readonly string layOnHandsSpell = "Lay on Hands"; - + public PaladinHoly(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { MyAuraManager.BuffsToKeepActive = new Dictionary() @@ -52,29 +46,29 @@ public PaladinHoly(ObjectManager objectManager, CharacterManager characterManage }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => true; + public override string Author => "Jannis"; - public override bool IsMelee => false; + public override WowClass Class => WowClass.Paladin; - public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); + public override Dictionary Configureables { get; set; } = new Dictionary(); - private Dictionary SpellUsageHealDict { get; } + public override string Description => "FCFS based CombatClass for the Holy Paladin spec."; public override string Displayname => "Paladin Holy"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => true; - public override string Description => "FCFS based CombatClass for the Holy Paladin spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Paladin; + public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); public override CombatClassRole Role => CombatClassRole.Heal; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; + + private Dictionary SpellUsageHealDict { get; } public override void Execute() { @@ -168,4 +162,4 @@ private bool NeedToHealSomeone(out List playersThatNeedHealing) return playersThatNeedHealing.Count > 0; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinRetribution.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinRetribution.cs index 4d42bce7..277a381a 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinRetribution.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PaladinRetribution.cs @@ -1,19 +1,10 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; -using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; @@ -23,22 +14,22 @@ public class PaladinRetribution : BasicCombatClass { // author: Jannis Höschele - private readonly string blessingOfMightSpell = "Blessing of Might"; - private readonly string retributionAuraSpell = "Retribution Aura"; private readonly string avengingWrathSpell = "Avenging Wrath"; - private readonly string sealOfVengeanceSpell = "Seal of Vengeance"; - private readonly string hammerOfWrathSpell = "Hammer of Wrath"; - private readonly string hammerOfJusticeSpell = "Hammer of Justice"; - private readonly string judgementOfLightSpell = "Judgement of Light"; + private readonly string blessingOfMightSpell = "Blessing of Might"; + private readonly string consecrationSpell = "Consecration"; private readonly string crusaderStrikeSpell = "Crusader Strike"; + private readonly string divinePleaSpell = "Divine Plea"; private readonly string divineStormSpell = "Divine Storm"; - private readonly string consecrationSpell = "Consecration"; private readonly string exorcismSpell = "Exorcism"; - private readonly string holyWrathSpell = "Holy Wrath"; - private readonly string divinePleaSpell = "Divine Plea"; + private readonly string hammerOfJusticeSpell = "Hammer of Justice"; + private readonly string hammerOfWrathSpell = "Hammer of Wrath"; private readonly string holyLightSpell = "Holy Light"; + private readonly string holyWrathSpell = "Holy Wrath"; + private readonly string judgementOfLightSpell = "Judgement of Light"; private readonly string layOnHandsSpell = "Lay on Hands"; - + private readonly string retributionAuraSpell = "Retribution Aura"; + private readonly string sealOfVengeanceSpell = "Seal of Vengeance"; + public PaladinRetribution(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { MyAuraManager.BuffsToKeepActive = new Dictionary() @@ -59,27 +50,27 @@ public PaladinRetribution(ObjectManager objectManager, CharacterManager characte }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Paladin; - public override bool IsMelee => true; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicStrengthComparator(); + public override string Description => "FCFS based CombatClass for the Retribution Paladin spec."; public override string Displayname => "Paladin Retribution"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Retribution Paladin spec."; + public override bool IsMelee => true; - public override WowClass Class => WowClass.Paladin; + public override IWowItemComparator ItemComparator { get; set; } = new BasicStrengthComparator(); public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; public override void Execute() { @@ -133,4 +124,4 @@ public override void OutOfCombatExecute() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestDiscipline.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestDiscipline.cs index fcc31f7b..828ceb2b 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestDiscipline.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestDiscipline.cs @@ -1,14 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -21,21 +18,20 @@ public class PriestDiscipline : BasicCombatClass // author: Jannis Höschele private readonly string bindingHealSpell = "Binding Heal"; + private readonly int deadPartymembersCheckTime = 4; + private readonly string desperatePrayerSpell = "Desperate Prayer"; private readonly string flashHealSpell = "Flash Heal"; private readonly string greaterHealSpell = "Greater Heal"; private readonly string hymnOfHopeSpell = "Hymn of Hope"; private readonly string innerFireSpell = "Inner Fire"; - private readonly string desperatePrayerSpell = "Desperate Prayer"; + private readonly string penanceSpell = "Penance"; private readonly string powerWordFortitudeSpell = "Power Word: Fortitude"; private readonly string powerWordShieldSpell = "Power Word: Shield"; private readonly string prayerOfHealingSpell = "Prayer of Healing"; private readonly string prayerOfMendingSpell = "Prayer of Mending"; private readonly string renewSpell = "Renew"; - private readonly string weakenedSoulSpell = "Weakened Soul"; - private readonly string penanceSpell = "Penance"; private readonly string resurrectionSpell = "Resurrection"; - - private readonly int deadPartymembersCheckTime = 4; + private readonly string weakenedSoulSpell = "Weakened Soul"; public PriestDiscipline(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -58,31 +54,31 @@ public PriestDiscipline(ObjectManager objectManager, CharacterManager characterM }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => true; - - public override bool IsMelee => false; + public override string Author => "Jannis"; - public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); + public override WowClass Class => WowClass.Priest; - private DateTime LastDeadPartymembersCheck { get; set; } + public override Dictionary Configureables { get; set; } = new Dictionary(); - private Dictionary SpellUsageHealDict { get; } + public override string Description => "FCFS based CombatClass for the Discipline Priest spec."; public override string Displayname => "Priest Discipline"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => true; - public override string Description => "FCFS based CombatClass for the Discipline Priest spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Priest; + public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); public override CombatClassRole Role => CombatClassRole.Heal; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; + + private DateTime LastDeadPartymembersCheck { get; set; } + + private Dictionary SpellUsageHealDict { get; } public override void Execute() { @@ -216,4 +212,4 @@ private bool NeedToHealSomeone(out List playersThatNeedHealing) return playersThatNeedHealing.Count > 0; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestHoly.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestHoly.cs index e2e89b0e..700d966c 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestHoly.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestHoly.cs @@ -1,14 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -21,6 +18,8 @@ public class PriestHoly : BasicCombatClass // author: Jannis Höschele private readonly string bindingHealSpell = "Binding Heal"; + private readonly int buffCheckTime = 8; + private readonly int deadPartymembersCheckTime = 4; private readonly string flashHealSpell = "Flash Heal"; private readonly string greaterHealSpell = "Greater Heal"; private readonly string guardianSpiritSpell = "Guardian Spirit"; @@ -32,9 +31,6 @@ public class PriestHoly : BasicCombatClass private readonly string renewSpell = "Renew"; private readonly string resurrectionSpell = "Resurrection"; - private readonly int buffCheckTime = 8; - private readonly int deadPartymembersCheckTime = 4; - public PriestHoly(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { MyAuraManager.BuffsToKeepActive = new Dictionary() @@ -55,31 +51,31 @@ public PriestHoly(ObjectManager objectManager, CharacterManager characterManager }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => true; + public override string Author => "Jannis"; - public override bool IsMelee => false; + public override WowClass Class => WowClass.Priest; - public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); - - private DateTime LastDeadPartymembersCheck { get; set; } + public override Dictionary Configureables { get; set; } = new Dictionary(); - private Dictionary SpellUsageHealDict { get; } + public override string Description => "FCFS based CombatClass for the Holy Priest spec."; public override string Displayname => "Priest Holy"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => true; - public override string Description => "FCFS based CombatClass for the Holy Priest spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Priest; + public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); public override CombatClassRole Role => CombatClassRole.Heal; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; + + private DateTime LastDeadPartymembersCheck { get; set; } + + private Dictionary SpellUsageHealDict { get; } public override void Execute() { @@ -198,4 +194,4 @@ private bool NeedToHealSomeone(out List playersThatNeedHealing) return playersThatNeedHealing.Count > 0; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestShadow.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestShadow.cs index 8cd2b01e..35d5e7ed 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestShadow.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/PriestShadow.cs @@ -1,19 +1,14 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis @@ -22,20 +17,19 @@ public class PriestShadow : BasicCombatClass { // author: Jannis Höschele + private readonly int deadPartymembersCheckTime = 4; + private readonly string devouringPlagueSpell = "Devouring Plague"; private readonly string flashHealSpell = "Flash Heal"; private readonly string hymnOfHopeSpell = "Hymn of Hope"; - private readonly string shadowformSpell = "Shadowform"; - private readonly string shadowfiendSpell = "Shadowfiend"; + private readonly string mindBlastSpell = "Mind Blast"; + private readonly string mindFlaySpell = "Mind Flay"; private readonly string powerWordFortitudeSpell = "Power Word: Fortitude"; private readonly string resurrectionSpell = "Resurrection"; - private readonly string vampiricTouchSpell = "Vampiric Touch"; - private readonly string devouringPlagueSpell = "Devouring Plague"; + private readonly string shadowfiendSpell = "Shadowfiend"; + private readonly string shadowformSpell = "Shadowform"; private readonly string shadowWordPainSpell = "Shadow Word: Pain"; - private readonly string mindBlastSpell = "Mind Blast"; - private readonly string mindFlaySpell = "Mind Flay"; private readonly string vampiricEmbraceSpell = "Vampiric Embrace"; - - private readonly int deadPartymembersCheckTime = 4; + private readonly string vampiricTouchSpell = "Vampiric Touch"; public PriestShadow(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -46,7 +40,7 @@ public PriestShadow(ObjectManager objectManager, CharacterManager characterManag { HookManager.TargetGuid(ObjectManager.PlayerGuid); return CastSpellIfPossible(powerWordFortitudeSpell, true); - } + } }, { vampiricEmbraceSpell, () => CastSpellIfPossible(vampiricEmbraceSpell, true) } }; @@ -60,29 +54,29 @@ public PriestShadow(ObjectManager objectManager, CharacterManager characterManag }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => false; + public override string Author => "Jannis"; - public override bool IsMelee => false; + public override WowClass Class => WowClass.Priest; - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override Dictionary Configureables { get; set; } = new Dictionary(); - private DateTime LastDeadPartymembersCheck { get; set; } + public override string Description => "FCFS based CombatClass for the Shadow Priest spec."; public override string Displayname => "Priest Shadow"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Shadow Priest spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Priest; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; + + private DateTime LastDeadPartymembersCheck { get; set; } public override void Execute() { @@ -164,4 +158,4 @@ private bool HandleDeadPartymembers() return true; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/RogueAssassination.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/RogueAssassination.cs index dbe0095a..049bd216 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/RogueAssassination.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/RogueAssassination.cs @@ -1,17 +1,10 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; -using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; -using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; -using System; using System.Collections.Generic; -using System.Linq; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; @@ -21,15 +14,15 @@ public class RogueAssassination : BasicCombatClass { // author: Jannis Höschele - private readonly string stealthSpell = "Stealth"; - private readonly string hungerForBloodSpell = "Hunger for Blood"; - private readonly string sliceAndDiceSpell = "Slice and Dice"; - private readonly string mutilateSpell = "Mutilate"; + private readonly string cloakOfShadowsSpell = "Cloak of Shadows"; private readonly string coldBloodSpell = "Cold Blood"; private readonly string eviscerateSpell = "Eviscerate"; - private readonly string cloakOfShadowsSpell = "Cloak of Shadows"; + private readonly string hungerForBloodSpell = "Hunger for Blood"; private readonly string kickSpell = "Kick"; + private readonly string mutilateSpell = "Mutilate"; + private readonly string sliceAndDiceSpell = "Slice and Dice"; private readonly string sprintSpell = "Sprint"; + private readonly string stealthSpell = "Stealth"; public RogueAssassination(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -45,27 +38,27 @@ public RogueAssassination(ObjectManager objectManager, CharacterManager characte }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => false; + public override WowClass Class => WowClass.Rogue; - public override bool IsMelee => true; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicAgilityComparator(); + public override string Description => "FCFS based CombatClass for the Assasination Rogue spec."; public override string Displayname => "[WIP] Rogue Assasination"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Assasination Rogue spec."; + public override bool IsMelee => true; - public override WowClass Class => WowClass.Rogue; + public override IWowItemComparator ItemComparator { get; set; } = new BasicAgilityComparator(); public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; public override void Execute() { @@ -106,7 +99,6 @@ public override void Execute() public override void OutOfCombatExecute() { - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanElemental.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanElemental.cs index 1f7c3493..6d27f01d 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanElemental.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanElemental.cs @@ -1,21 +1,14 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Inventory.Enums; -using AmeisenBotX.Core.Character.Inventory.Objects; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; using static AmeisenBotX.Core.StateMachine.Utils.InterruptManager; @@ -25,22 +18,21 @@ public class ShamanElemental : BasicCombatClass { // author: Jannis Höschele - private readonly string flameShockSpell = "Flame Shock"; - private readonly string lavaBurstSpell = "Lava Burst"; - private readonly string lightningBoltSpell = "Lightning Bolt"; + private readonly string ancestralSpiritSpell = "Ancestral Spirit"; private readonly string chainLightningSpell = "Chain Lightning"; - private readonly string windShearSpell = "Wind Shear"; - private readonly string thunderstormSpell = "Thunderstorm"; - private readonly string lightningShieldSpell = "Lightning Shield"; - private readonly string waterShieldSpell = "Water Shield"; - private readonly string flametoungueWeaponSpell = "Flametoungue Weapon"; + private readonly int deadPartymembersCheckTime = 4; private readonly string elementalMasterySpell = "Elemental Mastery"; + private readonly string flameShockSpell = "Flame Shock"; + private readonly string flametoungueWeaponSpell = "Flametoungue Weapon"; private readonly string heroismSpell = "Heroism"; - private readonly string ancestralSpiritSpell = "Ancestral Spirit"; private readonly string hexSpell = "Hex"; + private readonly string lavaBurstSpell = "Lava Burst"; private readonly string lesserHealingWaveSpell = "Lesser Healing Wave"; - - private readonly int deadPartymembersCheckTime = 4; + private readonly string lightningBoltSpell = "Lightning Bolt"; + private readonly string lightningShieldSpell = "Lightning Shield"; + private readonly string thunderstormSpell = "Thunderstorm"; + private readonly string waterShieldSpell = "Water Shield"; + private readonly string windShearSpell = "Wind Shear"; public ShamanElemental(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -62,31 +54,31 @@ public ShamanElemental(ObjectManager objectManager, CharacterManager characterMa }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => false; - - public override bool IsMelee => false; + public override string Author => "Jannis"; - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override WowClass Class => WowClass.Shaman; - private DateTime LastDeadPartymembersCheck { get; set; } + public override Dictionary Configureables { get; set; } = new Dictionary(); - private bool HexedTarget { get; set; } + public override string Description => "FCFS based CombatClass for the Elemental Shaman spec."; public override string Displayname => "Shaman Elemental"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Elemental Shaman spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Shaman; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; + + private bool HexedTarget { get; set; } + + private DateTime LastDeadPartymembersCheck { get; set; } public override void Execute() { @@ -180,4 +172,4 @@ private bool HandleDeadPartymembers() return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanRestoration.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanRestoration.cs index 4df348a7..a6edaa5e 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanRestoration.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/ShamanRestoration.cs @@ -1,16 +1,11 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Inventory.Enums; -using AmeisenBotX.Core.Character.Inventory.Objects; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -22,18 +17,17 @@ public class ShamanRestoration : BasicCombatClass { // author: Jannis Höschele + private readonly string ancestralSpiritSpell = "Ancestral Spirit"; + private readonly int buffCheckTime = 8; private readonly string chainHealSpell = "Chain Heal"; - private readonly string healingWaveSpell = "Healing Wave"; - private readonly string riptideSpell = "Riptide"; - private readonly string earthShieldSpell = "Earth Shield"; - private readonly string waterShieldSpell = "Water Shield"; + private readonly int deadPartymembersCheckTime = 4; private readonly string earthlivingWeaponSpell = "Earthliving Weapon"; + private readonly string earthShieldSpell = "Earth Shield"; + private readonly string healingWaveSpell = "Healing Wave"; private readonly string naturesSwiftnessSpell = "Nature's Swiftness"; + private readonly string riptideSpell = "Riptide"; private readonly string tidalForceSpell = "Tidal Force"; - private readonly string ancestralSpiritSpell = "Ancestral Spirit"; - - private readonly int buffCheckTime = 8; - private readonly int deadPartymembersCheckTime = 4; + private readonly string waterShieldSpell = "Water Shield"; public ShamanRestoration(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -49,33 +43,33 @@ public ShamanRestoration(ObjectManager objectManager, CharacterManager character }; } - public override bool HandlesMovement => false; + public override string Author => "Jannis"; - public override bool HandlesTargetSelection => true; + public override WowClass Class => WowClass.Shaman; - public override bool IsMelee => false; + public override Dictionary Configureables { get; set; } = new Dictionary(); - public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); + public override string Description => "FCFS based CombatClass for the Restoration Shaman spec."; - private DateTime LastBuffCheck { get; set; } + public override string Displayname => "Shaman Restoration"; - private DateTime LastDeadPartymembersCheck { get; set; } + public override bool HandlesMovement => false; - private Dictionary SpellUsageHealDict { get; } + public override bool HandlesTargetSelection => true; - public override string Displayname => "Shaman Restoration"; + public override bool IsMelee => false; - public override string Version => "1.0"; + public override IWowItemComparator ItemComparator { get; set; } = new BasicSpiritComparator(); - public override string Author => "Jannis"; + public override CombatClassRole Role => CombatClassRole.Heal; - public override string Description => "FCFS based CombatClass for the Restoration Shaman spec."; + public override string Version => "1.0"; - public override WowClass Class => WowClass.Shaman; + private DateTime LastBuffCheck { get; set; } - public override CombatClassRole Role => CombatClassRole.Heal; + private DateTime LastDeadPartymembersCheck { get; set; } - public override Dictionary Configureables { get; set; } = new Dictionary(); + private Dictionary SpellUsageHealDict { get; } public override void Execute() { @@ -186,4 +180,4 @@ private bool NeedToHealSomeone(out List playersThatNeedHealing) return playersThatNeedHealing.Count > 0; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockAffliction.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockAffliction.cs index c4a0cf06..aeb4e5a6 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockAffliction.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockAffliction.cs @@ -1,19 +1,14 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis @@ -24,26 +19,25 @@ public class WarlockAffliction : BasicCombatClass private readonly string corruptionSpell = "Corruption"; private readonly string curseOfAgonySpell = "Curse of Agony"; - private readonly string unstableAfflictionSpell = "Unstable Affliction"; - private readonly string hauntSpell = "Haunt"; - private readonly string lifeTapSpell = "Life Tap"; + private readonly string deathCoilSpell = "Death Coil"; + private readonly string demonArmorSpell = "Demon Armor"; + private readonly string demonSkinSpell = "Demon Skin"; private readonly string drainSoulSpell = "Drain Soul"; - private readonly string shadowBoltSpell = "Shadow Bolt"; + private readonly int fearAttemptDelay = 5; private readonly string fearSpell = "Fear"; - private readonly string howlOfTerrorSpell = "Howl of Terror"; - private readonly string demonSkinSpell = "Demon Skin"; - private readonly string demonArmorSpell = "Demon Armor"; private readonly string felArmorSpell = "Fel Armor"; - private readonly string deathCoilSpell = "Death Coil"; - private readonly string summonImpSpell = "Summon Imp"; + private readonly string hauntSpell = "Haunt"; + private readonly string howlOfTerrorSpell = "Howl of Terror"; + private readonly string lifeTapSpell = "Life Tap"; + private readonly string shadowBoltSpell = "Shadow Bolt"; private readonly string summonFelhunterSpell = "Summon Felhunter"; - - private readonly int fearAttemptDelay = 5; + private readonly string summonImpSpell = "Summon Imp"; + private readonly string unstableAfflictionSpell = "Unstable Affliction"; public WarlockAffliction(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { PetManager = new PetManager( - ObjectManager.Pet, + ObjectManager.Pet, TimeSpan.FromSeconds(1), null, () => (CharacterManager.SpellBook.IsSpellKnown(summonFelhunterSpell) && CharacterManager.Inventory.Items.Any(e => e.Name.Equals("Soul Shard", StringComparison.OrdinalIgnoreCase)) && CastSpellIfPossible(summonFelhunterSpell)) @@ -66,31 +60,31 @@ public WarlockAffliction(ObjectManager objectManager, CharacterManager character }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => false; + public override string Author => "Jannis"; - public override bool IsMelee => false; + public override WowClass Class => WowClass.Warlock; - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override Dictionary Configureables { get; set; } = new Dictionary(); - private DateTime LastFearAttempt { get; set; } + public override string Description => "FCFS based CombatClass for the Affliction Warlock spec."; public override string Displayname => "Warlock Affliction"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Affliction Warlock spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Warlock; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + + public PetManager PetManager { get; private set; } public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; - public PetManager PetManager { get; private set; } + private DateTime LastFearAttempt { get; set; } public override void Execute() { @@ -151,4 +145,4 @@ public override void OutOfCombatExecute() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDemonology.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDemonology.cs index bc900ecf..2414f669 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDemonology.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDemonology.cs @@ -1,19 +1,14 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis @@ -24,30 +19,29 @@ public class WarlockDemonology : BasicCombatClass private readonly string corruptionSpell = "Corruption"; private readonly string curseOftheElementsSpell = "Curse of the Elements"; - private readonly string soulfireSpell = "Soul Fire"; - private readonly string incinerateSpell = "Incinerate"; - private readonly string moltenCoreSpell = "Molten Core"; + private readonly int damageBuffCheckTime = 1; + private readonly string deathCoilSpell = "Death Coil"; private readonly string decimationSpell = "Decimation"; - private readonly string metamorphosisSpell = "Metamorphosis"; - private readonly string immolationAuraSpell = "Immolation Aura"; + private readonly string demonArmorSpell = "Demon Armor"; private readonly string demonicEmpowermentSpell = "Demonic Empowerment"; + private readonly string demonSkinSpell = "Demon Skin"; + private readonly string drainLifeSpell = "Drain Life"; + private readonly string drainSoulSpell = "Drain Soul"; + private readonly int fearAttemptDelay = 5; + private readonly string fearSpell = "Fear"; + private readonly string felArmorSpell = "Fel Armor"; + private readonly string howlOfTerrorSpell = "Howl of Terror"; private readonly string immolateSpell = "Immolate"; + private readonly string immolationAuraSpell = "Immolation Aura"; + private readonly string incinerateSpell = "Incinerate"; private readonly string lifeTapSpell = "Life Tap"; - private readonly string drainSoulSpell = "Drain Soul"; - private readonly string drainLifeSpell = "Drain Life"; + private readonly string metamorphosisSpell = "Metamorphosis"; + private readonly string moltenCoreSpell = "Molten Core"; private readonly string shadowBoltSpell = "Shadow Bolt"; private readonly string shadowMasterySpell = "Shadow Mastery"; - private readonly string fearSpell = "Fear"; - private readonly string howlOfTerrorSpell = "Howl of Terror"; - private readonly string demonSkinSpell = "Demon Skin"; - private readonly string demonArmorSpell = "Demon Armor"; - private readonly string felArmorSpell = "Fel Armor"; - private readonly string deathCoilSpell = "Death Coil"; - private readonly string summonImpSpell = "Summon Imp"; + private readonly string soulfireSpell = "Soul Fire"; private readonly string summonFelguardSpell = "Summon Felguard"; - - private readonly int damageBuffCheckTime = 1; - private readonly int fearAttemptDelay = 5; + private readonly string summonImpSpell = "Summon Imp"; public WarlockDemonology(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { @@ -74,33 +68,33 @@ public WarlockDemonology(ObjectManager objectManager, CharacterManager character }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => false; - - public override bool IsMelee => false; + public override string Author => "Jannis"; - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override WowClass Class => WowClass.Warlock; - private DateTime LastDamageBuffCheck { get; set; } + public override Dictionary Configureables { get; set; } = new Dictionary(); - private DateTime LastFearAttempt { get; set; } + public override string Description => "FCFS based CombatClass for the Demonology Warlock spec."; public override string Displayname => "Warlock Demonology"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Demonology Warlock spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Warlock; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + + public PetManager PetManager { get; private set; } public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; - public PetManager PetManager { get; private set; } + private DateTime LastDamageBuffCheck { get; set; } + + private DateTime LastFearAttempt { get; set; } public override void Execute() { @@ -192,4 +186,4 @@ private bool HandleDamageBuffing() return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDestruction.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDestruction.cs index 68501dc3..7b404b0e 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDestruction.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/Jannis/WarlockDestruction.cs @@ -1,19 +1,14 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Character.Comparators; -using AmeisenBotX.Core.Character.Spells.Objects; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Enums; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.StateMachine.Enums; using AmeisenBotX.Core.StateMachine.Utils; -using AmeisenBotX.Logging; -using AmeisenBotX.Logging.Enums; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using static AmeisenBotX.Core.StateMachine.Utils.AuraManager; namespace AmeisenBotX.Core.StateMachine.CombatClasses.Jannis @@ -22,25 +17,24 @@ public class WarlockDestruction : BasicCombatClass { // author: Jannis Höschele - private readonly string corruptionSpell = "Corruption"; - private readonly string curseOftheElementsSpell = "Curse of the Elements"; private readonly string chaosBoltSpell = "Chaos Bolt"; private readonly string conflagrateSpell = "Conflagrate"; - private readonly string incinerateSpell = "Incinerate"; - private readonly string immolateSpell = "Immolate"; - private readonly string lifeTapSpell = "Life Tap"; - private readonly string drainSoulSpell = "Drain Soul"; + private readonly string corruptionSpell = "Corruption"; + private readonly string curseOftheElementsSpell = "Curse of the Elements"; + private readonly string deathCoilSpell = "Death Coil"; + private readonly string demonArmorSpell = "Demon Armor"; + private readonly string demonSkinSpell = "Demon Skin"; private readonly string drainLifeSpell = "Drain Life"; + private readonly string drainSoulSpell = "Drain Soul"; + private readonly int fearAttemptDelay = 5; private readonly string fearSpell = "Fear"; - private readonly string howlOfTerrorSpell = "Howl of Terror"; - private readonly string demonSkinSpell = "Demon Skin"; - private readonly string demonArmorSpell = "Demon Armor"; private readonly string felArmorSpell = "Fel Armor"; - private readonly string deathCoilSpell = "Death Coil"; + private readonly string howlOfTerrorSpell = "Howl of Terror"; + private readonly string immolateSpell = "Immolate"; + private readonly string incinerateSpell = "Incinerate"; + private readonly string lifeTapSpell = "Life Tap"; private readonly string summonImpSpell = "Summon Imp"; - private readonly int fearAttemptDelay = 5; - public WarlockDestruction(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager) : base(objectManager, characterManager, hookManager) { PetManager = new PetManager( @@ -65,31 +59,31 @@ public WarlockDestruction(ObjectManager objectManager, CharacterManager characte }; } - public override bool HandlesMovement => false; - - public override bool HandlesTargetSelection => false; + public override string Author => "Jannis"; - public override bool IsMelee => false; + public override WowClass Class => WowClass.Warlock; - public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + public override Dictionary Configureables { get; set; } = new Dictionary(); - private DateTime LastFearAttempt { get; set; } + public override string Description => "FCFS based CombatClass for the Destruction Warlock spec."; public override string Displayname => "Warlock Destruction"; - public override string Version => "1.0"; + public override bool HandlesMovement => false; - public override string Author => "Jannis"; + public override bool HandlesTargetSelection => false; - public override string Description => "FCFS based CombatClass for the Destruction Warlock spec."; + public override bool IsMelee => false; - public override WowClass Class => WowClass.Warlock; + public override IWowItemComparator ItemComparator { get; set; } = new BasicIntellectComparator(); + + public PetManager PetManager { get; private set; } public override CombatClassRole Role => CombatClassRole.Dps; - public override Dictionary Configureables { get; set; } = new Dictionary(); + public override string Version => "1.0"; - public PetManager PetManager { get; private set; } + private DateTime LastFearAttempt { get; set; } public override void Execute() { @@ -154,4 +148,4 @@ public override void OutOfCombatExecute() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/PaladinProtection.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/PaladinProtection.cs index 46591d32..a1924e4a 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/PaladinProtection.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/PaladinProtection.cs @@ -33,6 +33,16 @@ public PaladinProtection(ObjectManager objectManager, CharacterManager character LastTargetCheck = DateTime.Now; } + public string Author => "einTyp"; + + public WowClass Class => WowClass.Paladin; + + public Dictionary Configureables { get; set; } = new Dictionary(); + + public string Description => "..."; + + public string Displayname => "Protection Paladin"; + public bool HandlesMovement => true; public bool HandlesTargetSelection => true; @@ -43,57 +53,47 @@ public PaladinProtection(ObjectManager objectManager, CharacterManager character public bool Jumped { get; set; } + public CombatClassRole Role => CombatClassRole.Tank; + + public string Version => "1.0"; + private CharacterManager CharacterManager { get; } private bool Dancing { get; set; } - + + private double GCDTime { get; set; } + private HookManager HookManager { get; } - + private DateTime LastAvenger { get; set; } - + private DateTime LastConsecration { get; set; } - + private DateTime LastDivineShield { get; set; } - + private DateTime LastGCD { get; set; } - + private DateTime LastHammer { get; set; } - + private DateTime LastHolyShield { get; set; } - + private Vector3 LastPlayerPosition { get; set; } private DateTime LastProtection { get; set; } - - private DateTime LastSacrifice { get; set; } - - private DateTime LastTargetCheck { get; set; } - - private Vector3 LastTargetPosition { get; set; } - - private DateTime LastWisdom { get; set; } - - private DefaultMovementEngine MovementEngine { get; set; } - - private ObjectManager ObjectManager { get; } - - private IPathfindingHandler PathfindingHandler { get; set; } - - private double GCDTime { get; set; } - public string Displayname => "Protection Paladin"; + private DateTime LastSacrifice { get; set; } - public string Version => "1.0"; + private DateTime LastTargetCheck { get; set; } - public string Author => "einTyp"; + private Vector3 LastTargetPosition { get; set; } - public string Description => "..."; + private DateTime LastWisdom { get; set; } - public WowClass Class => WowClass.Paladin; + private DefaultMovementEngine MovementEngine { get; set; } - public CombatClassRole Role => CombatClassRole.Tank; + private ObjectManager ObjectManager { get; } - public Dictionary Configureables { get; set; } = new Dictionary(); + private IPathfindingHandler PathfindingHandler { get; set; } public void Execute() { diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/RogueAssassination2.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/RogueAssassination2.cs index 54f017e1..d0cf8bd4 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/RogueAssassination2.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/RogueAssassination2.cs @@ -51,6 +51,16 @@ public RogueAssassination2(ObjectManager objectManager, CharacterManager charact spells = new RogueAssassinSpells(hookManager, objectManager); } + public string Author => "einTyp"; + + public WowClass Class => WowClass.Rogue; + + public Dictionary Configureables { get; set; } = new Dictionary(); + + public string Description => "..."; + + public string Displayname => "Assasination Rogue"; + public bool HandlesMovement => true; public bool HandlesTargetSelection => true; @@ -59,6 +69,10 @@ public RogueAssassination2(ObjectManager objectManager, CharacterManager charact public IWowItemComparator ItemComparator => new AssassinationItemComparator(); + public CombatClassRole Role => CombatClassRole.Dps; + + public string Version => "1.0"; + private CharacterManager CharacterManager { get; } private bool Dancing { get; set; } @@ -79,20 +93,6 @@ public RogueAssassination2(ObjectManager objectManager, CharacterManager charact private IPathfindingHandler PathfindingHandler { get; set; } - public string Displayname => "Assasination Rogue"; - - public string Version => "1.0"; - - public string Author => "einTyp"; - - public string Description => "..."; - - public WowClass Class => WowClass.Rogue; - - public CombatClassRole Role => CombatClassRole.Dps; - - public Dictionary Configureables { get; set; } = new Dictionary(); - public void Execute() { ulong targetGuid = ObjectManager.TargetGuid; diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorArms.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorArms.cs index 2641f629..6a362d10 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorArms.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorArms.cs @@ -19,15 +19,11 @@ public class WarriorArms : ICombatClass { private readonly WarriorArmSpells spells; - private bool multipleTargets = false; - private bool computeNewRoute = false; - private double distanceToTarget = 0; - private double distanceTraveled = 0; - private bool hasTargetMoved = false; + private bool multipleTargets = false; public WarriorArms(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IPathfindingHandler pathhandler, DefaultMovementEngine movement) { @@ -39,6 +35,16 @@ public WarriorArms(ObjectManager objectManager, CharacterManager characterManage spells = new WarriorArmSpells(hookManager, objectManager); } + public string Author => "einTyp"; + + public WowClass Class => WowClass.Warrior; + + public Dictionary Configureables { get; set; } = new Dictionary(); + + public string Description => "..."; + + public string Displayname => "Arms Warrior"; + public bool HandlesMovement => true; public bool HandlesTargetSelection => true; @@ -47,6 +53,10 @@ public WarriorArms(ObjectManager objectManager, CharacterManager characterManage public IWowItemComparator ItemComparator => new ArmsAxeItemComparator(); + public CombatClassRole Role => CombatClassRole.Dps; + + public string Version => "1.0"; + private CharacterManager CharacterManager { get; } private bool Dancing { get; set; } @@ -63,20 +73,6 @@ public WarriorArms(ObjectManager objectManager, CharacterManager characterManage private IPathfindingHandler PathfindingHandler { get; set; } - public string Displayname => "Arms Warrior"; - - public string Version => "1.0"; - - public string Author => "einTyp"; - - public string Description => "..."; - - public WowClass Class => WowClass.Warrior; - - public CombatClassRole Role => CombatClassRole.Dps; - - public Dictionary Configureables { get; set; } = new Dictionary(); - public void Execute() { ulong targetGuid = ObjectManager.TargetGuid; @@ -292,6 +288,7 @@ private class WarriorArmSpells private static readonly string ShatteringThrow = "Shattering Throw"; private static readonly string Slam = "Slam"; private static readonly string Whirlwind = "Whirlwind"; + private readonly Dictionary nextActionTime = new Dictionary() { { BattleShout, DateTime.Now }, diff --git a/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorFury.cs b/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorFury.cs index c72041ba..c6f9bf99 100644 --- a/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorFury.cs +++ b/AmeisenBotX.Core/StateMachine/CombatClasses/WarriorFury.cs @@ -17,22 +17,17 @@ namespace AmeisenBotX.Core.StateMachine.CombatClasses { public class WarriorFury : ICombatClass { - private readonly WarriorFurySpells spells; - private readonly string[] runningEmotes = { "/train", "/fart", "/burp", "/moo", "/lost", "/puzzled", "/cackle", "/silly", "/question", "/talk" }; - + private readonly WarriorFurySpells spells; private readonly string[] standingEmotes = { "/chug", "/pick", "/whistle", "/shimmy", "/dance", "/twiddle", "/bored", "/violin", "/highfive", "/bow" }; + private bool computeNewRoute = false; private double distanceToTarget = 0; private double distanceTraveled = 0; - private bool multipleTargets = false; - - private bool computeNewRoute = false; - private bool hasTargetMoved = false; - + private bool multipleTargets = false; private bool standing = false; public WarriorFury(ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IPathfindingHandler pathhandler, DefaultMovementEngine movement) @@ -45,6 +40,16 @@ public WarriorFury(ObjectManager objectManager, CharacterManager characterManage spells = new WarriorFurySpells(hookManager, objectManager); } + public string Author => "einTyp"; + + public WowClass Class => WowClass.Warrior; + + public Dictionary Configureables { get; set; } = new Dictionary(); + + public string Description => "..."; + + public string Displayname => "Fury Warrior"; + public bool HandlesMovement => true; public bool HandlesTargetSelection => true; @@ -53,6 +58,10 @@ public WarriorFury(ObjectManager objectManager, CharacterManager characterManage public IWowItemComparator ItemComparator => new FurySwordItemComparator(); + public CombatClassRole Role => CombatClassRole.Dps; + + public string Version => "1.0"; + private CharacterManager CharacterManager { get; } private bool Dancing { get; set; } @@ -69,20 +78,6 @@ public WarriorFury(ObjectManager objectManager, CharacterManager characterManage private IPathfindingHandler PathfindingHandler { get; set; } - public string Displayname => "Fury Warrior"; - - public string Version => "1.0"; - - public string Author => "einTyp"; - - public string Description => "..."; - - public WowClass Class => WowClass.Warrior; - - public CombatClassRole Role => CombatClassRole.Dps; - - public Dictionary Configureables { get; set; } = new Dictionary(); - public void Execute() { ulong targetGuid = ObjectManager.TargetGuid; @@ -318,6 +313,7 @@ private class WarriorFurySpells private static readonly string ShatteringThrow = "Shattering Throw"; private static readonly string Slam = "Slam"; private static readonly string Whirlwind = "Whirlwind"; + private readonly Dictionary nextActionTime = new Dictionary() { { BattleShout, DateTime.Now }, diff --git a/AmeisenBotX.Core/StateMachine/Enums/CombatClassRole.cs b/AmeisenBotX.Core/StateMachine/Enums/CombatClassRole.cs index 4edb3954..8e0680d8 100644 --- a/AmeisenBotX.Core/StateMachine/Enums/CombatClassRole.cs +++ b/AmeisenBotX.Core/StateMachine/Enums/CombatClassRole.cs @@ -6,4 +6,4 @@ public enum CombatClassRole Heal, Dps } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/State.cs b/AmeisenBotX.Core/StateMachine/States/BasicState.cs similarity index 76% rename from AmeisenBotX.Core/StateMachine/States/State.cs rename to AmeisenBotX.Core/StateMachine/States/BasicState.cs index 24b812fb..89db0ada 100644 --- a/AmeisenBotX.Core/StateMachine/States/State.cs +++ b/AmeisenBotX.Core/StateMachine/States/BasicState.cs @@ -1,8 +1,8 @@ namespace AmeisenBotX.Core.StateMachine.States { - public abstract class State + public abstract class BasicState { - public State(AmeisenBotStateMachine stateMachine) + public BasicState(AmeisenBotStateMachine stateMachine) { AmeisenBotStateMachine = stateMachine; } @@ -15,4 +15,4 @@ public State(AmeisenBotStateMachine stateMachine) public abstract void Exit(); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/AmeisenBotState.cs b/AmeisenBotX.Core/StateMachine/States/BotState.cs similarity index 91% rename from AmeisenBotX.Core/StateMachine/States/AmeisenBotState.cs rename to AmeisenBotX.Core/StateMachine/States/BotState.cs index e2d05eaa..05f55c37 100644 --- a/AmeisenBotX.Core/StateMachine/States/AmeisenBotState.cs +++ b/AmeisenBotX.Core/StateMachine/States/BotState.cs @@ -1,6 +1,6 @@ namespace AmeisenBotX.Core.StateMachine.States { - public enum AmeisenBotState + public enum BotState { None, StartWow, @@ -19,4 +19,4 @@ public enum AmeisenBotState Selling, Battleground } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateAttacking.cs b/AmeisenBotX.Core/StateMachine/States/StateAttacking.cs index 0f484639..fa082011 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateAttacking.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateAttacking.cs @@ -1,6 +1,5 @@ using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; @@ -9,14 +8,13 @@ using AmeisenBotX.Core.Movement.Settings; using AmeisenBotX.Core.StateMachine.CombatClasses; using AmeisenBotX.Pathfinding; -using AmeisenBotX.Pathfinding.Objects; using System; using System.Collections.Generic; using System.Linq; namespace AmeisenBotX.Core.StateMachine.States { - internal class StateAttacking : State + internal class StateAttacking : BasicState { public StateAttacking(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine, MovementSettings movementSettings, ICombatClass combatClass) : base(stateMachine) { @@ -24,11 +22,11 @@ public StateAttacking(AmeisenBotStateMachine stateMachine, AmeisenBotConfig conf ObjectManager = objectManager; CharacterManager = characterManager; HookManager = hookManager; - PathfindingHandler = pathfindingHandler; MovementEngine = movementEngine; - MovementSettings = movementSettings; CombatClass = combatClass; + Enemies = new List(); + // default distance values DistanceToTarget = combatClass == null || combatClass.IsMelee ? 3.0 : 25.0; } @@ -41,9 +39,9 @@ public StateAttacking(AmeisenBotStateMachine stateMachine, AmeisenBotConfig conf private AmeisenBotConfig Config { get; } - private HookManager HookManager { get; } + private List Enemies { get; set; } - private MovementSettings MovementSettings { get; } + private HookManager HookManager { get; } private DateTime LastRotationCheck { get; set; } @@ -53,10 +51,6 @@ public StateAttacking(AmeisenBotStateMachine stateMachine, AmeisenBotConfig conf private ObjectManager ObjectManager { get; } - private IPathfindingHandler PathfindingHandler { get; } - - private int TryCount { get; set; } - public override void Enter() { AmeisenBotStateMachine.XMemory.Write(AmeisenBotStateMachine.OffsetList.CvarMaxFps, Config.MaxFpsCombat); @@ -64,9 +58,9 @@ public override void Enter() public override void Execute() { - if (!ObjectManager.Player.IsInCombat && !AmeisenBotStateMachine.IsAnyPartymemberInCombat() && !(AmeisenBotStateMachine.BattlegroundEngine != null && AmeisenBotStateMachine.BattlegroundEngine.ForceCombat)) + if (IsTargetInValid() && !ObjectManager.Player.IsInCombat && !AmeisenBotStateMachine.IsAnyPartymemberInCombat()) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); return; } @@ -85,55 +79,54 @@ public override void Execute() ObjectManager.UpdateObject(ObjectManager.Target); // do we need to clear our target - if (DateTime.Now - LastValidTargetCheck > TimeSpan.FromMilliseconds(1000) - && ObjectManager.TargetGuid > 0 - && (ObjectManager.Target.IsDead - || HookManager.GetUnitReaction(ObjectManager.Player, ObjectManager.Target) == WowUnitReaction.Friendly)) + if (DateTime.Now - LastValidTargetCheck > TimeSpan.FromMilliseconds(250)) { - HookManager.ClearTarget(); - ObjectManager.UpdateObject(ObjectManager.Player); - } - LastValidTargetCheck = DateTime.Now; + if (IsTargetInValid()) + { + HookManager.ClearTarget(); + ObjectManager.UpdateObject(ObjectManager.Player); - // select a new target if our current target is invalid - if ((ObjectManager.TargetGuid == 0 - || (ObjectManager.Target == null || ObjectManager.Target.Guid == ObjectManager.PlayerGuid)) - && SelectTargetToAttack(out WowUnit target)) - { - HookManager.TargetGuid(target.Guid); + // select a new target if our current target is invalid + if (SelectTargetToAttack(out WowUnit target)) + { + HookManager.TargetGuid(target.Guid); - ObjectManager.UpdateObject(ObjectManager.Player); - ObjectManager.UpdateObject(ObjectManager.Target); + ObjectManager.UpdateObject(ObjectManager.Player); + ObjectManager.UpdateObject(ObjectManager.Target); + } + } + + LastValidTargetCheck = DateTime.Now; } - } - // use the default MovementEngine to move if the CombatClass doesnt - if ((CombatClass == null || !CombatClass.HandlesMovement) && ObjectManager.Target != null) - { - HandleMovement(ObjectManager.Target); - } + // use the default MovementEngine to move if the CombatClass doesnt + if ((CombatClass == null || !CombatClass.HandlesMovement) && ObjectManager.Target != null) + { + HandleMovement(ObjectManager.Target); + } - // if no CombatClass is loaded, just autoattack - if (CombatClass != null) - { - CombatClass.Execute(); - } - else - { - if (!ObjectManager.Player.IsAutoAttacking) + // if no CombatClass is loaded, just autoattack + if (CombatClass != null) { - HookManager.StartAutoAttack(); + CombatClass.Execute(); + } + else + { + if (!ObjectManager.Player.IsAutoAttacking) + { + HookManager.StartAutoAttack(); + } } } } - - TryCount = 0; } public override void Exit() { MovementEngine.Reset(); + Enemies.Clear(); + // set our normal maxfps AmeisenBotStateMachine.XMemory.Write(AmeisenBotStateMachine.OffsetList.CvarMaxFps, Config.MaxFps); @@ -194,6 +187,12 @@ private void HandleMovement(WowUnit target) } } + private bool IsTargetInValid() + => !BotUtils.IsValidUnit(ObjectManager.Target) + || ObjectManager.Target.Guid == ObjectManager.PlayerGuid + || ObjectManager.Player.Position.GetDistance(ObjectManager.Target.Position) > 50 + || HookManager.GetUnitReaction(ObjectManager.Player, ObjectManager.Target) == WowUnitReaction.Friendly; + private bool SelectTargetToAttack(out WowUnit target) { // TODO: need to handle duels, our target will @@ -279,4 +278,4 @@ private bool SelectTargetToAttack(out WowUnit target) return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateBattleground.cs b/AmeisenBotX.Core/StateMachine/States/StateBattleground.cs index 6d89b264..8e7a5440 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateBattleground.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateBattleground.cs @@ -1,21 +1,13 @@ using AmeisenBotX.Core.Battleground; using AmeisenBotX.Core.Character; using AmeisenBotX.Core.Data; -using AmeisenBotX.Core.Event; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.Movement; using AmeisenBotX.Core.OffsetLists; -using AmeisenBotX.Core.StateMachine.CombatClasses; -using AmeisenBotX.Memory; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.StateMachine.States { - public class StateBattleground : State + public class StateBattleground : BasicState { public StateBattleground(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, IOffsetList offsetList, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IMovementEngine movementEngine, BattlegroundEngine battlegroundEngine) : base(stateMachine) { @@ -28,23 +20,22 @@ public StateBattleground(AmeisenBotStateMachine stateMachine, AmeisenBotConfig c BattlegroundEngine = battlegroundEngine; } + private BattlegroundEngine BattlegroundEngine { get; } + private CharacterManager CharacterManager { get; } private AmeisenBotConfig Config { get; } private HookManager HookManager { get; } + private IMovementEngine MovementEngine { get; } + private ObjectManager ObjectManager { get; } private IOffsetList OffsetList { get; } - private IMovementEngine MovementEngine { get; } - - private BattlegroundEngine BattlegroundEngine { get; } - public override void Enter() { - } public override void Execute() @@ -52,7 +43,7 @@ public override void Execute() if (AmeisenBotStateMachine.XMemory.Read(OffsetList.BattlegroundStatus, out int bgStatus) && bgStatus == 0) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); return; } @@ -71,4 +62,4 @@ public override void Exit() MovementEngine.Reset(); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateDead.cs b/AmeisenBotX.Core/StateMachine/States/StateDead.cs index 3500f9bd..ff4df4da 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateDead.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateDead.cs @@ -3,7 +3,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateDead : State + public class StateDead : BasicState { public StateDead(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, HookManager hookManager) : base(stateMachine) { @@ -30,11 +30,11 @@ public override void Execute() } else if (HookManager.IsGhost("player")) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Ghost); + AmeisenBotStateMachine.SetState(BotState.Ghost); } else { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } @@ -42,4 +42,4 @@ public override void Exit() { } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateEating.cs b/AmeisenBotX.Core/StateMachine/States/StateEating.cs index 3fe55248..1997109a 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateEating.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateEating.cs @@ -3,7 +3,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateEating : State + public class StateEating : BasicState { public StateEating(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, CharacterManager characterManager) : base(stateMachine) { @@ -24,11 +24,10 @@ public override void Enter() public override void Execute() { - } public override void Exit() { } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateFollowing.cs b/AmeisenBotX.Core/StateMachine/States/StateFollowing.cs index 48cf24a1..69f015a0 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateFollowing.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateFollowing.cs @@ -1,19 +1,15 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Movement; using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Pathfinding; -using AmeisenBotX.Pathfinding.Objects; -using System; using System.Collections.Generic; using System.Linq; namespace AmeisenBotX.Core.StateMachine.States { - internal class StateFollowing : State + internal class StateFollowing : BasicState { public StateFollowing(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, CharacterManager characterManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine) : base(stateMachine) { @@ -68,7 +64,7 @@ public override void Enter() if (PlayerToFollow == null) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } @@ -78,7 +74,7 @@ public override void Execute() double distance = PlayerToFollow.Position.GetDistance(ObjectManager.Player.Position); if (distance < Config.MinFollowDistance || distance > Config.MaxFollowDistance) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } if (ObjectManager.Player.CurrentlyCastingSpellId > 0 || ObjectManager.Player.CurrentlyChannelingSpellId > 0) @@ -92,7 +88,6 @@ public override void Execute() public override void Exit() { - } private WowPlayer SkipIfOutOfRange(WowPlayer playerToFollow) @@ -112,4 +107,4 @@ private WowPlayer SkipIfOutOfRange(WowPlayer playerToFollow) private bool UnitIsOutOfRange(double distance) => (distance < Config.MinFollowDistance || distance > Config.MaxFollowDistance); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateGhost.cs b/AmeisenBotX.Core/StateMachine/States/StateGhost.cs index 68f3d820..ab50f646 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateGhost.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateGhost.cs @@ -1,6 +1,4 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; @@ -9,13 +7,11 @@ using AmeisenBotX.Core.OffsetLists; using AmeisenBotX.Pathfinding; using AmeisenBotX.Pathfinding.Objects; -using System; -using System.Collections.Generic; using System.Linq; namespace AmeisenBotX.Core.StateMachine.States { - public class StateGhost : State + public class StateGhost : BasicState { public StateGhost(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, IOffsetList offsetList, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine) : base(stateMachine) { @@ -56,7 +52,7 @@ public override void Execute() { if (ObjectManager.Player.Health > 1) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } if (AmeisenBotStateMachine.IsOnBattleground()) @@ -79,7 +75,6 @@ public override void Execute() public override void Exit() { - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateIdle.cs b/AmeisenBotX.Core/StateMachine/States/StateIdle.cs index e3119f33..e2464181 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateIdle.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateIdle.cs @@ -1,5 +1,4 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Character.Inventory.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Event; @@ -13,7 +12,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateIdle : State + public class StateIdle : BasicState { public StateIdle(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, IOffsetList offsetList, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, EventHookManager eventHookManager, ICombatClass combatClass, Queue unitLootList) : base(stateMachine) { @@ -37,13 +36,13 @@ public StateIdle(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, I private HookManager HookManager { get; } - private ObjectManager ObjectManager { get; } - - private IOffsetList OffsetList { get; } + private DateTime LastBagSlotCheck { get; set; } private DateTime LastRepairCheck { get; set; } - private DateTime LastBagSlotCheck { get; set; } + private ObjectManager ObjectManager { get; } + + private IOffsetList OffsetList { get; } private Queue UnitLootList { get; } @@ -72,71 +71,55 @@ public override void Execute() if (AmeisenBotStateMachine.XMemory.Read(OffsetList.BattlegroundStatus, out int bgStatus) && bgStatus == 3) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Battleground); + AmeisenBotStateMachine.SetState(BotState.Battleground); return; - } + } // do i need to loot units if (UnitLootList.Count > 0) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Looting); + AmeisenBotStateMachine.SetState(BotState.Looting); return; } // do i need to follow someone if (IsUnitToFollowThere()) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Following); + AmeisenBotStateMachine.SetState(BotState.Following); + return; } // do we need to repair our equipment if (DateTime.Now - LastRepairCheck > TimeSpan.FromSeconds(12)) { + LastRepairCheck = DateTime.Now; + if (IsRepairNpcNear() && CharacterManager.Equipment.Equipment.Any(e => ((double)e.Value.MaxDurability / (double)e.Value.Durability) < 0.2)) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Repairing); + AmeisenBotStateMachine.SetState(BotState.Repairing); + return; } - - LastRepairCheck = DateTime.Now; } // do we need to sell stuff if (DateTime.Now - LastBagSlotCheck > TimeSpan.FromSeconds(5) && CharacterManager.Inventory.Items.Any(e => e.Price > 0)) { + LastBagSlotCheck = DateTime.Now; + if (IsVendorNpcNear() && HookManager.GetFreeBagSlotCount() < 4) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Selling); + AmeisenBotStateMachine.SetState(BotState.Selling); + return; } - - LastBagSlotCheck = DateTime.Now; } // do buffing etc... CombatClass?.OutOfCombatExecute(); } - private void CheckForBattlegroundInvites() - { - if (AmeisenBotStateMachine.XMemory.Read(OffsetList.BattlegroundStatus, out int bgStatus) - && bgStatus == 2) - { - HookManager.AcceptBattlegroundInvite(); - } - } - - internal bool IsVendorNpcNear() - { - return ObjectManager.WowObjects.OfType().Any(e => e.GetType() != typeof(WowPlayer) && e.IsVendor && e.Position.GetDistance(ObjectManager.Player.Position) < 50); - } - - internal bool IsRepairNpcNear() - { - return ObjectManager.WowObjects.OfType().Any(e => e.GetType() != typeof(WowPlayer) && e.IsRepairVendor && e.Position.GetDistance(ObjectManager.Player.Position) < 50); - } - public override void Exit() { } @@ -174,6 +157,25 @@ public bool IsUnitToFollowThere() return playerToFollow != null; } + internal bool IsRepairNpcNear() + { + return ObjectManager.WowObjects.OfType().Any(e => e.GetType() != typeof(WowPlayer) && e.IsRepairVendor && e.Position.GetDistance(ObjectManager.Player.Position) < 50); + } + + internal bool IsVendorNpcNear() + { + return ObjectManager.WowObjects.OfType().Any(e => e.GetType() != typeof(WowPlayer) && e.IsVendor && e.Position.GetDistance(ObjectManager.Player.Position) < 50); + } + + private void CheckForBattlegroundInvites() + { + if (AmeisenBotStateMachine.XMemory.Read(OffsetList.BattlegroundStatus, out int bgStatus) + && bgStatus == 2) + { + HookManager.AcceptBattlegroundInvite(); + } + } + private WowPlayer SkipIfOutOfRange(WowPlayer playerToFollow) { if (playerToFollow != null) @@ -191,4 +193,4 @@ private WowPlayer SkipIfOutOfRange(WowPlayer playerToFollow) private bool UnitIsOutOfRange(double distance) => (distance < Config.MinFollowDistance || distance > Config.MaxFollowDistance); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateInsideAoeDamage.cs b/AmeisenBotX.Core/StateMachine/States/StateInsideAoeDamage.cs index 06465d0c..4a145867 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateInsideAoeDamage.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateInsideAoeDamage.cs @@ -1,6 +1,4 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Movement; @@ -13,7 +11,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateInsideAoeDamage : State + public class StateInsideAoeDamage : BasicState { public StateInsideAoeDamage(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, CharacterManager characterManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine) : base(stateMachine) { @@ -28,19 +26,18 @@ public StateInsideAoeDamage(AmeisenBotStateMachine stateMachine, AmeisenBotConfi private AmeisenBotConfig Config { get; } + private List FriendlySpells { get; } = new List() { + 0 + }; + private IMovementEngine MovementEngine { get; } private ObjectManager ObjectManager { get; } private IPathfindingHandler PathfindingHandler { get; } - private List FriendlySpells { get; } = new List () { - 0 - }; - public override void Enter() { - } public override void Execute() @@ -54,7 +51,7 @@ public override void Execute() if (aoeSpellObject == null) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); return; } @@ -67,7 +64,6 @@ public override void Execute() public override void Exit() { - } private Vector3 FindPositionOutsideOfAoeSpell(Vector3 aoePosition, float aoeRadius) @@ -90,4 +86,4 @@ private Vector3 FindPositionOutsideOfAoeSpell(Vector3 aoePosition, float aoeRadi }; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateJob.cs b/AmeisenBotX.Core/StateMachine/States/StateJob.cs new file mode 100644 index 00000000..4eee3e27 --- /dev/null +++ b/AmeisenBotX.Core/StateMachine/States/StateJob.cs @@ -0,0 +1,47 @@ +using AmeisenBotX.Core.Character; +using AmeisenBotX.Core.Data; +using AmeisenBotX.Core.Hook; +using AmeisenBotX.Core.Movement; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AmeisenBotX.Core.StateMachine.States +{ + public class StateJob : BasicState + { + public StateJob(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, HookManager hookmanager, CharacterManager characterManager, IMovementEngine movementEngine) : base(stateMachine) + { + Config = config; + ObjectManager = objectManager; + HookManager = hookmanager; + CharacterManager = characterManager; + MovementEngine = movementEngine; + } + + private CharacterManager CharacterManager { get; } + + private AmeisenBotConfig Config { get; } + + private HookManager HookManager { get; } + + private IMovementEngine MovementEngine { get; } + + private ObjectManager ObjectManager { get; } + + public override void Enter() + { + } + + public override void Execute() + { + + } + + public override void Exit() + { + } + } +} diff --git a/AmeisenBotX.Core/StateMachine/States/StateLoadingScreen.cs b/AmeisenBotX.Core/StateMachine/States/StateLoadingScreen.cs index 7f16b2e9..57b91b96 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateLoadingScreen.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateLoadingScreen.cs @@ -3,7 +3,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateLoadingScreen : State + public class StateLoadingScreen : BasicState { public StateLoadingScreen(AmeisenBotStateMachine stateMachine, XMemory xMemory, AmeisenBotConfig config, ObjectManager objectManager) : base(stateMachine) { @@ -26,13 +26,13 @@ public override void Execute() { if (XMemory.Process != null && XMemory.Process.HasExited) { - AmeisenBotStateMachine.SetState(AmeisenBotState.None); + AmeisenBotStateMachine.SetState(BotState.None); } ObjectManager.RefreshIsWorldLoaded(); if (ObjectManager.IsWorldLoaded) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } @@ -40,4 +40,4 @@ public override void Exit() { } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateLogin.cs b/AmeisenBotX.Core/StateMachine/States/StateLogin.cs index 9c68f82d..b1145813 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateLogin.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateLogin.cs @@ -7,7 +7,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateLogin : State + public class StateLogin : BasicState { public StateLogin(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, IOffsetList offsetList, CharacterManager characterManager) : base(stateMachine) { @@ -43,13 +43,13 @@ public override void Execute() } else { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } else { AmeisenBotStateMachine.XMemory.Process.Kill(); - AmeisenBotStateMachine.SetState(AmeisenBotState.None); + AmeisenBotStateMachine.SetState(BotState.None); } } @@ -57,4 +57,4 @@ public override void Exit() { } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateLooting.cs b/AmeisenBotX.Core/StateMachine/States/StateLooting.cs index 9054ca43..ca08368d 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateLooting.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateLooting.cs @@ -1,6 +1,4 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; @@ -8,16 +6,13 @@ using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Core.OffsetLists; using AmeisenBotX.Pathfinding; -using AmeisenBotX.Pathfinding.Objects; -using System; using System.Collections.Generic; using System.Linq; -using System.Threading; using System.Threading.Tasks; namespace AmeisenBotX.Core.StateMachine.States { - public class StateLooting : State + public class StateLooting : BasicState { public StateLooting(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, IOffsetList offsetList, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine, Queue unitLootList) : base(stateMachine) { @@ -38,6 +33,8 @@ public StateLooting(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config private HookManager HookManager { get; } + private int LootTryCount { get; set; } + private IMovementEngine MovementEngine { get; set; } private ObjectManager ObjectManager { get; } @@ -46,11 +43,9 @@ public StateLooting(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config private IPathfindingHandler PathfindingHandler { get; } - private List UnitsAlreadyLootedList { get; } - private Queue UnitLootList { get; } - private int LootTryCount { get; set; } + private List UnitsAlreadyLootedList { get; } public override void Enter() { @@ -61,7 +56,7 @@ public override void Execute() { if (UnitLootList.Count == 0) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } else { @@ -80,7 +75,7 @@ public override void Execute() MovementEngine.Execute(); LootTryCount++; - if(LootTryCount == 16) + if (LootTryCount == 64) { UnitsAlreadyLootedList.Add(UnitLootList.Dequeue()); } @@ -91,7 +86,7 @@ public override void Execute() { HookManager.RightClickUnit(selectedUnit); LootTryCount++; - Task.Delay(500).GetAwaiter().GetResult(); + Task.Delay(1000).GetAwaiter().GetResult(); } while (AmeisenBotStateMachine.XMemory.ReadByte(OffsetList.LootWindowOpen, out byte lootOpen) && lootOpen == 0 && LootTryCount < 2); @@ -108,7 +103,6 @@ public override void Execute() public override void Exit() { - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateNone.cs b/AmeisenBotX.Core/StateMachine/States/StateNone.cs index ce3c2bde..ee60d7a7 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateNone.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateNone.cs @@ -1,6 +1,6 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateNone : State + public class StateNone : BasicState { public StateNone(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config) : base(stateMachine) { @@ -13,15 +13,15 @@ public override void Enter() { if (Config.AutostartWow) { - AmeisenBotStateMachine.SetState(AmeisenBotState.StartWow); + AmeisenBotStateMachine.SetState(BotState.StartWow); } else if (Config.AutoLogin) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Login); + AmeisenBotStateMachine.SetState(BotState.Login); } else { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } @@ -33,4 +33,4 @@ public override void Exit() { } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateRepairing.cs b/AmeisenBotX.Core/StateMachine/States/StateRepairing.cs index cd8c690f..499be217 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateRepairing.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateRepairing.cs @@ -1,30 +1,23 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.Movement; using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Pathfinding; -using AmeisenBotX.Pathfinding.Objects; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; namespace AmeisenBotX.Core.StateMachine.States { - public class StateRepairing : State + public class StateRepairing : BasicState { - public StateRepairing(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, HookManager hookmanager, CharacterManager characterManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine) : base(stateMachine) + public StateRepairing(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, HookManager hookmanager, CharacterManager characterManager, IMovementEngine movementEngine) : base(stateMachine) { Config = config; ObjectManager = objectManager; HookManager = hookmanager; CharacterManager = characterManager; - PathfindingHandler = pathfindingHandler; MovementEngine = movementEngine; } @@ -32,26 +25,21 @@ public StateRepairing(AmeisenBotStateMachine stateMachine, AmeisenBotConfig conf private AmeisenBotConfig Config { get; } - private IMovementEngine MovementEngine { get; set; } - - private ObjectManager ObjectManager { get; } - private HookManager HookManager { get; } - private IPathfindingHandler PathfindingHandler { get; } + private IMovementEngine MovementEngine { get; set; } - private int TryCount { get; set; } + private ObjectManager ObjectManager { get; } public override void Enter() { - } public override void Execute() { if (CharacterManager.Equipment.Equipment.Any(e => ((double)e.Value.MaxDurability / (double)e.Value.Durability) > 0.2)) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); return; } @@ -89,13 +77,12 @@ public override void Execute() } else { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } public override void Exit() { - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateSelling.cs b/AmeisenBotX.Core/StateMachine/States/StateSelling.cs index 6fcab4e6..61d11ecd 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateSelling.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateSelling.cs @@ -1,32 +1,24 @@ using AmeisenBotX.Core.Character; -using AmeisenBotX.Core.Character.Inventory.Enums; using AmeisenBotX.Core.Character.Inventory.Objects; -using AmeisenBotX.Core.Common; -using AmeisenBotX.Core.Common.Enums; using AmeisenBotX.Core.Data; using AmeisenBotX.Core.Data.Objects.WowObject; using AmeisenBotX.Core.Hook; using AmeisenBotX.Core.Movement; using AmeisenBotX.Core.Movement.Enums; using AmeisenBotX.Pathfinding; -using AmeisenBotX.Pathfinding.Objects; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; namespace AmeisenBotX.Core.StateMachine.States { - public class StateSelling : State + public class StateSelling : BasicState { - public StateSelling(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, HookManager hookmanager, CharacterManager characterManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine) : base(stateMachine) + public StateSelling(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, HookManager hookmanager, CharacterManager characterManager, IMovementEngine movementEngine) : base(stateMachine) { Config = config; ObjectManager = objectManager; HookManager = hookmanager; CharacterManager = characterManager; - PathfindingHandler = pathfindingHandler; MovementEngine = movementEngine; } @@ -34,17 +26,14 @@ public StateSelling(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config private AmeisenBotConfig Config { get; } + private HookManager HookManager { get; } + private IMovementEngine MovementEngine { get; set; } private ObjectManager ObjectManager { get; } - private HookManager HookManager { get; } - - private IPathfindingHandler PathfindingHandler { get; } - public override void Enter() { - } public override void Execute() @@ -52,7 +41,7 @@ public override void Execute() if (HookManager.GetFreeBagSlotCount() > 4 || !CharacterManager.Inventory.Items.Any(e => e.Price > 0)) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); return; } @@ -92,13 +81,12 @@ public override void Execute() } else { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } public override void Exit() { - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/States/StateStartWow.cs b/AmeisenBotX.Core/StateMachine/States/StateStartWow.cs index 4a85782b..264d8602 100644 --- a/AmeisenBotX.Core/StateMachine/States/StateStartWow.cs +++ b/AmeisenBotX.Core/StateMachine/States/StateStartWow.cs @@ -4,7 +4,7 @@ namespace AmeisenBotX.Core.StateMachine.States { - public class StateStartWow : State + public class StateStartWow : BasicState { public StateStartWow(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, Process wowProcess, XMemory xMemory) : base(stateMachine) { @@ -31,17 +31,17 @@ public override void Execute() { if (WowProcess.HasExited) { - AmeisenBotStateMachine.SetState(AmeisenBotState.None); + AmeisenBotStateMachine.SetState(BotState.None); return; } if (Config.AutoLogin) { - AmeisenBotStateMachine.SetState(AmeisenBotState.Login); + AmeisenBotStateMachine.SetState(BotState.Login); } else { - AmeisenBotStateMachine.SetState(AmeisenBotState.Idle); + AmeisenBotStateMachine.SetState(BotState.Idle); } } @@ -49,4 +49,4 @@ public override void Exit() { } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/Utils/AuraManager.cs b/AmeisenBotX.Core/StateMachine/Utils/AuraManager.cs index ee1a2209..aa8bd1ce 100644 --- a/AmeisenBotX.Core/StateMachine/Utils/AuraManager.cs +++ b/AmeisenBotX.Core/StateMachine/Utils/AuraManager.cs @@ -17,22 +17,28 @@ public AuraManager(Dictionary buffsToKeepActive, Dictionar GetDebuffs = getDebuffsFunction; } + public AuraManager() + { + Buffs = new List(); + Debuffs = new List(); + } + public delegate bool CastFunction(); + public delegate bool DispellBuffsFunction(); + public delegate bool DispellDebuffsFunction(); - public delegate List GetBuffsFunction(); - public delegate List GetDebuffsFunction(); - public TimeSpan MinUpdateTime { get; private set; } + public delegate List GetBuffsFunction(); - public DateTime LastBuffUpdate { get; private set; } + public delegate List GetDebuffsFunction(); public List Buffs { get; private set; } - public List Debuffs { get; private set; } - public Dictionary BuffsToKeepActive { get; set; } + public List Debuffs { get; private set; } + public Dictionary DebuffsToKeepActive { get; set; } public DispellBuffsFunction DispellBuffs { get; set; } @@ -43,11 +49,9 @@ public AuraManager(Dictionary buffsToKeepActive, Dictionar public GetDebuffsFunction GetDebuffs { get; set; } - public AuraManager() - { - Buffs = new List(); - Debuffs = new List(); - } + public DateTime LastBuffUpdate { get; private set; } + + public TimeSpan MinUpdateTime { get; private set; } public bool Tick(bool forceUpdate = false) { @@ -100,4 +104,4 @@ public bool Tick(bool forceUpdate = false) return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/Utils/CooldownManager.cs b/AmeisenBotX.Core/StateMachine/Utils/CooldownManager.cs index 2c782aba..3831db0a 100644 --- a/AmeisenBotX.Core/StateMachine/Utils/CooldownManager.cs +++ b/AmeisenBotX.Core/StateMachine/Utils/CooldownManager.cs @@ -24,6 +24,17 @@ public CooldownManager(List spells) public Dictionary Cooldowns { get; } + public bool IsSpellOnCooldown(string spellname) + { + if (Cooldowns.ContainsKey(spellname.ToUpper())) + { + return Cooldowns.TryGetValue(spellname.ToUpper(), out DateTime dateTime) + && dateTime > DateTime.Now; + } + + return false; + } + public bool SetSpellCooldown(string spellname, int cooldownLeftMs) { if (!Cooldowns.ContainsKey(spellname.ToUpper())) @@ -37,16 +48,5 @@ public bool SetSpellCooldown(string spellname, int cooldownLeftMs) return true; } - - public bool IsSpellOnCooldown(string spellname) - { - if (Cooldowns.ContainsKey(spellname.ToUpper())) - { - return Cooldowns.TryGetValue(spellname.ToUpper(), out DateTime dateTime) - && dateTime > DateTime.Now; - } - - return false; - } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/Utils/InterruptManager.cs b/AmeisenBotX.Core/StateMachine/Utils/InterruptManager.cs index 575c7f3f..5b645e84 100644 --- a/AmeisenBotX.Core/StateMachine/Utils/InterruptManager.cs +++ b/AmeisenBotX.Core/StateMachine/Utils/InterruptManager.cs @@ -1,9 +1,5 @@ using AmeisenBotX.Core.Data.Objects.WowObject; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AmeisenBotX.Core.StateMachine.Utils { @@ -17,10 +13,10 @@ public InterruptManager(WowUnit unitToWatch, SortedList InterruptSpells { get; set; } + private WowUnit UnitToWatch { get; set; } + public bool Tick() { if (InterruptSpells != null && InterruptSpells.Count > 0 && UnitToWatch != null && UnitToWatch.IsCasting) @@ -37,4 +33,4 @@ public bool Tick() return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/StateMachine/Utils/PetManager.cs b/AmeisenBotX.Core/StateMachine/Utils/PetManager.cs index ddeb73a5..b64a088e 100644 --- a/AmeisenBotX.Core/StateMachine/Utils/PetManager.cs +++ b/AmeisenBotX.Core/StateMachine/Utils/PetManager.cs @@ -14,22 +14,24 @@ public PetManager(WowUnit pet, TimeSpan healPetCooldown, CastMendPetFunction cas CastRevivePet = castRevivePetFunction; } - public delegate bool CastMendPetFunction(); public delegate bool CastCallPetFunction(); - public delegate bool CastRevivePetFunction(); - public CastMendPetFunction CastMendPet { get; set; } + public delegate bool CastMendPetFunction(); + + public delegate bool CastRevivePetFunction(); public CastCallPetFunction CastCallPet { get; set; } + public CastMendPetFunction CastMendPet { get; set; } + public CastRevivePetFunction CastRevivePet { get; set; } public TimeSpan HealPetCooldown { get; set; } - public WowUnit Pet { get; set; } - public DateTime LastMendPetUsed { get; private set; } + public WowUnit Pet { get; set; } + public bool Tick() { if (Pet != null) @@ -62,4 +64,4 @@ public bool Tick() return false; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Core/packages.config b/AmeisenBotX.Core/packages.config index 3de38192..a75532f5 100644 --- a/AmeisenBotX.Core/packages.config +++ b/AmeisenBotX.Core/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/AmeisenBotX.Logging/AmeisenLogger.cs b/AmeisenBotX.Logging/AmeisenLogger.cs index 510518fe..3da9fba5 100644 --- a/AmeisenBotX.Logging/AmeisenLogger.cs +++ b/AmeisenBotX.Logging/AmeisenLogger.cs @@ -126,4 +126,4 @@ private void DoLogWork() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Logging/Enums/LogLevel.cs b/AmeisenBotX.Logging/Enums/LogLevel.cs index a8a98df4..a12071fc 100644 --- a/AmeisenBotX.Logging/Enums/LogLevel.cs +++ b/AmeisenBotX.Logging/Enums/LogLevel.cs @@ -8,4 +8,4 @@ public enum LogLevel Debug, Verbose, } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Logging/Objects/LogEntry.cs b/AmeisenBotX.Logging/Objects/LogEntry.cs index 8ab01176..b49b97c8 100644 --- a/AmeisenBotX.Logging/Objects/LogEntry.cs +++ b/AmeisenBotX.Logging/Objects/LogEntry.cs @@ -32,4 +32,4 @@ public override string ToString() return $"[{TimeStamp.ToLongTimeString()}] {("[" + LogLevel.ToString() + "]").PadRight(9)} [{CallingClass}:{CallingCodeline}:{CallingFunction}] {Message}"; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Logging/Properties/AssemblyInfo.cs b/AmeisenBotX.Logging/Properties/AssemblyInfo.cs index 472fc70e..f2fc32c3 100644 --- a/AmeisenBotX.Logging/Properties/AssemblyInfo.cs +++ b/AmeisenBotX.Logging/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/AmeisenBotX.Memory/Properties/AssemblyInfo.cs b/AmeisenBotX.Memory/Properties/AssemblyInfo.cs index 05f77350..9dd745e8 100644 --- a/AmeisenBotX.Memory/Properties/AssemblyInfo.cs +++ b/AmeisenBotX.Memory/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/AmeisenBotX.Memory/Win32/Rect.cs b/AmeisenBotX.Memory/Win32/Rect.cs index 927d7b24..74d04f87 100644 --- a/AmeisenBotX.Memory/Win32/Rect.cs +++ b/AmeisenBotX.Memory/Win32/Rect.cs @@ -41,4 +41,4 @@ public override int GetHashCode() public override string ToString() => $"Left: {Left} Top: {Top} Right: {Right} Bottom: {Bottom}"; } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Memory/Win32/Win32Imports.cs b/AmeisenBotX.Memory/Win32/Win32Imports.cs index c98be071..2f3d1902 100644 --- a/AmeisenBotX.Memory/Win32/Win32Imports.cs +++ b/AmeisenBotX.Memory/Win32/Win32Imports.cs @@ -109,4 +109,4 @@ public enum ThreadAccess : int [DllImport("kernel32.dll", SetLastError = true)] public static extern bool WriteProcessMemory(IntPtr processHandle, IntPtr baseAddress, byte[] buffer, int size, out IntPtr numberOfBytesWritten); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Memory/XMemory.cs b/AmeisenBotX.Memory/XMemory.cs index fad28cd4..20b71775 100644 --- a/AmeisenBotX.Memory/XMemory.cs +++ b/AmeisenBotX.Memory/XMemory.cs @@ -303,4 +303,4 @@ private int SizeOf(Type type) return SizeCache[type]; } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/Enums/MovementType.cs b/AmeisenBotX.Pathfinding/Enums/MovementType.cs index 84d6e6bc..bce1f1e9 100644 --- a/AmeisenBotX.Pathfinding/Enums/MovementType.cs +++ b/AmeisenBotX.Pathfinding/Enums/MovementType.cs @@ -4,4 +4,4 @@ public enum MovementType { MOVE_TO_POSITION } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/Enums/PathRequestFlags.cs b/AmeisenBotX.Pathfinding/Enums/PathRequestFlags.cs index 47337443..dfb588ad 100644 --- a/AmeisenBotX.Pathfinding/Enums/PathRequestFlags.cs +++ b/AmeisenBotX.Pathfinding/Enums/PathRequestFlags.cs @@ -9,4 +9,4 @@ public enum PathRequestFlags ChaikinCurve = 1 << 0, NaturalSteeringBehavior = 1 << 1 } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/IPathfindingHandler.cs b/AmeisenBotX.Pathfinding/IPathfindingHandler.cs index 7df3ac06..e51f2f9b 100644 --- a/AmeisenBotX.Pathfinding/IPathfindingHandler.cs +++ b/AmeisenBotX.Pathfinding/IPathfindingHandler.cs @@ -7,4 +7,4 @@ public interface IPathfindingHandler { List GetPath(int mapId, Vector3 start, Vector3 end); } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/NavmeshServerClient.cs b/AmeisenBotX.Pathfinding/NavmeshServerClient.cs index 2eaa4bdd..b9e79526 100644 --- a/AmeisenBotX.Pathfinding/NavmeshServerClient.cs +++ b/AmeisenBotX.Pathfinding/NavmeshServerClient.cs @@ -125,4 +125,4 @@ private void CConnectionWatchdog(object sender, ElapsedEventArgs e) } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/Objects/PathRequest.cs b/AmeisenBotX.Pathfinding/Objects/PathRequest.cs index f9c87749..050e2049 100644 --- a/AmeisenBotX.Pathfinding/Objects/PathRequest.cs +++ b/AmeisenBotX.Pathfinding/Objects/PathRequest.cs @@ -49,4 +49,4 @@ public override int GetHashCode() } } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/Objects/Vector3.cs b/AmeisenBotX.Pathfinding/Objects/Vector3.cs index a6009ee7..92a4a3d6 100644 --- a/AmeisenBotX.Pathfinding/Objects/Vector3.cs +++ b/AmeisenBotX.Pathfinding/Objects/Vector3.cs @@ -25,47 +25,33 @@ public static Vector3 FromArray(float[] array) Z = array[2] }; + public static Vector3 operator -(Vector3 a, Vector3 b) + => new Vector3(a.X - b.X, a.Y - b.Y, a.Z - b.Z); + public static bool operator !=(Vector3 left, Vector3 right) { return !(left == right); } - public static bool operator ==(Vector3 left, Vector3 right) - { - return left.Equals(right); - } - - public static Vector3 operator -(Vector3 a, Vector3 b) - => new Vector3(a.X - b.X, a.Y - b.Y, a.Z - b.Z); - - public static Vector3 operator +(Vector3 a, Vector3 b) - => new Vector3(a.X + b.X, a.Y + b.Y, a.Z + b.Z); - public static Vector3 operator *(Vector3 a, float b) => new Vector3(a.X * b, a.Y * b, a.Z * b); public static Vector3 operator /(Vector3 a, float b) => new Vector3(a.X / b, a.Y / b, a.Z / b); - public void Add(Vector3 vector) - { - X += vector.X; - Y += vector.Y; - Z += vector.Z; - } + public static Vector3 operator +(Vector3 a, Vector3 b) + => new Vector3(a.X + b.X, a.Y + b.Y, a.Z + b.Z); - public void Subtract(Vector3 vector) + public static bool operator ==(Vector3 left, Vector3 right) { - X -= vector.X; - Y -= vector.Y; - Z -= vector.Z; + return left.Equals(right); } - public void Multiply(Vector3 vector) + public void Add(Vector3 vector) { - X = vector.X > 0 ? X * vector.X : 0; - Y = vector.Y > 0 ? Y * vector.Y : 0; - Z = vector.Z > 0 ? Z * vector.Z : 0; + X += vector.X; + Y += vector.Y; + Z += vector.Z; } public void Divide(Vector3 vector) @@ -75,13 +61,6 @@ public void Divide(Vector3 vector) Z = vector.Z > 0 ? Z / vector.Z : 0; } - public void Multiply(float multiplier) - { - X = multiplier > 0 ? X * multiplier : 0; - Y = multiplier > 0 ? Y * multiplier : 0; - Z = multiplier > 0 ? Z * multiplier : 0; - } - public void Divide(float multiplier) { X = multiplier > 0 ? X / multiplier : 0; @@ -100,6 +79,20 @@ public double GetDistance(Vector3 b) + ((Y - b.Y) * (Y - b.Y)) + ((Z - b.Z) * (Z - b.Z))); + public double GetDistance2D(Vector3 b) + => Math.Sqrt(Math.Pow(X - b.X, 2) + Math.Pow(Y - b.Y, 2)); + + public override int GetHashCode() + { + unchecked + { + return (int)(17 + (X * 23) + (Y * 23) + (Z * 23)); + } + } + + public float GetMagnitude() + => Convert.ToSingle(Math.Sqrt(X * X + Y * Y)); + public void Limit(float maxSpeed) { X = X < 0 ? X <= maxSpeed * -1 ? maxSpeed * -1 : X : X >= maxSpeed ? maxSpeed : X; @@ -107,11 +100,19 @@ public void Limit(float maxSpeed) Z = Z < 0 ? Z <= maxSpeed * -1 ? maxSpeed * -1 : Z : Z >= maxSpeed ? maxSpeed : Z; } - public double GetDistance2D(Vector3 b) - => Math.Sqrt(Math.Pow(X - b.X, 2) + Math.Pow(Y - b.Y, 2)); + public void Multiply(Vector3 vector) + { + X = vector.X > 0 ? X * vector.X : 0; + Y = vector.Y > 0 ? Y * vector.Y : 0; + Z = vector.Z > 0 ? Z * vector.Z : 0; + } - public float GetMagnitude() - => Convert.ToSingle(Math.Sqrt(X * X + Y * Y)); + public void Multiply(float multiplier) + { + X = multiplier > 0 ? X * multiplier : 0; + Y = multiplier > 0 ? Y * multiplier : 0; + Z = multiplier > 0 ? Z * multiplier : 0; + } public void Normalize() => Normalize(GetMagnitude()); @@ -139,12 +140,11 @@ public void RotateRadians(double radians) Y = Convert.ToSingle(sa * X + ca * Y); } - public override int GetHashCode() + public void Subtract(Vector3 vector) { - unchecked - { - return (int)(17 + (X * 23) + (Y * 23) + (Z * 23)); - } + X -= vector.X; + Y -= vector.Y; + Z -= vector.Z; } public float[] ToArray() @@ -155,4 +155,4 @@ public float[] ToArray() Z }; } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/Properties/AssemblyInfo.cs b/AmeisenBotX.Pathfinding/Properties/AssemblyInfo.cs index fca59c17..9d67735a 100644 --- a/AmeisenBotX.Pathfinding/Properties/AssemblyInfo.cs +++ b/AmeisenBotX.Pathfinding/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.1.0.0")] -[assembly: AssemblyFileVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] \ No newline at end of file diff --git a/AmeisenBotX.Pathfinding/packages.config b/AmeisenBotX.Pathfinding/packages.config index 3de38192..a75532f5 100644 --- a/AmeisenBotX.Pathfinding/packages.config +++ b/AmeisenBotX.Pathfinding/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/AmeisenBotX.Test/BotMathTests.cs b/AmeisenBotX.Test/BotMathTests.cs index 62720516..76e6f7fc 100644 --- a/AmeisenBotX.Test/BotMathTests.cs +++ b/AmeisenBotX.Test/BotMathTests.cs @@ -14,4 +14,4 @@ public void CapVector3Test() Assert.AreEqual(new Vector3(4, 4, 4), BotMath.CapVector3(vector, 4)); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Test/BotUtilsTests.cs b/AmeisenBotX.Test/BotUtilsTests.cs index 2990219f..2b6a012d 100644 --- a/AmeisenBotX.Test/BotUtilsTests.cs +++ b/AmeisenBotX.Test/BotUtilsTests.cs @@ -21,4 +21,4 @@ public void BigValueToStringTest() Assert.AreEqual("1000M", BotUtils.BigValueToString(1000000000)); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Test/CharacterManagerTests.cs b/AmeisenBotX.Test/CharacterManagerTests.cs index d4355b8d..3e63441d 100644 --- a/AmeisenBotX.Test/CharacterManagerTests.cs +++ b/AmeisenBotX.Test/CharacterManagerTests.cs @@ -101,8 +101,6 @@ public void TestItemListParsing() Assert.IsInstanceOfType(item2, typeof(WowWeapon)); Assert.AreEqual(EquipmentSlot.NOT_EQUIPABLE, item0.EquipSlot); - Assert.AreEqual(EquipmentSlot.INVSLOT_CHEST, item1.EquipSlot); - Assert.AreEqual(EquipmentSlot.INVSLOT_RANGED, item2.EquipSlot); Assert.AreEqual(ArmorType.CLOTH, ((WowArmor)item1).ArmorType); Assert.AreEqual(WeaponType.GUNS, ((WowWeapon)item2).WeaponType); @@ -132,4 +130,4 @@ public void TestItemParsing() Assert.AreEqual(650, item.Price); } } -} +} \ No newline at end of file diff --git a/AmeisenBotX.Test/Properties/AssemblyInfo.cs b/AmeisenBotX.Test/Properties/AssemblyInfo.cs index c628e91c..237695fa 100644 --- a/AmeisenBotX.Test/Properties/AssemblyInfo.cs +++ b/AmeisenBotX.Test/Properties/AssemblyInfo.cs @@ -14,4 +14,4 @@ // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/AmeisenBotX/AmeisenBotX.csproj b/AmeisenBotX/AmeisenBotX.csproj index a2813418..d25deef0 100644 --- a/AmeisenBotX/AmeisenBotX.csproj +++ b/AmeisenBotX/AmeisenBotX.csproj @@ -143,6 +143,10 @@ {6f95990d-d5d9-4242-9992-deefbf8d3e60} AmeisenBotX.Core + + {AFE27893-225B-4F90-9CFD-87DB2EE0D7DF} + AmeisenBotX.Logging + {BA329AA1-E3DA-42A1-87B4-3A695919767F} AmeisenBotX.Pathfinding diff --git a/AmeisenBotX/App.config b/AmeisenBotX/App.config index 01116c2c..a0d2eaa5 100644 --- a/AmeisenBotX/App.config +++ b/AmeisenBotX/App.config @@ -3,4 +3,4 @@ - + \ No newline at end of file diff --git a/AmeisenBotX/App.xaml b/AmeisenBotX/App.xaml index 620920f7..558889bc 100644 --- a/AmeisenBotX/App.xaml +++ b/AmeisenBotX/App.xaml @@ -21,148 +21,148 @@ - + - - + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - - - + + + + + + + + + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + @@ -661,107 +661,107 @@ - - - + + + - - + + - + - + - + - + - - - + + + - - - + + + - - + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - - + + - - + + @@ -769,64 +769,64 @@ - - - + + + - - + + - + - + - + - + - - - + + + - - - + + + - - + + - + - + - + \ No newline at end of file diff --git a/AmeisenBotX/App.xaml.cs b/AmeisenBotX/App.xaml.cs index 828e45b4..254a9fba 100644 --- a/AmeisenBotX/App.xaml.cs +++ b/AmeisenBotX/App.xaml.cs @@ -8,4 +8,4 @@ namespace AmeisenBotX public partial class App : Application { } -} +} \ No newline at end of file diff --git a/AmeisenBotX/ConfigEditorWindow.xaml b/AmeisenBotX/ConfigEditorWindow.xaml index 32838d1e..f1530335 100644 --- a/AmeisenBotX/ConfigEditorWindow.xaml +++ b/AmeisenBotX/ConfigEditorWindow.xaml @@ -297,7 +297,7 @@