From ecea9a26766041f370af42a060dca4858f7e550c Mon Sep 17 00:00:00 2001 From: abunai10 Date: Thu, 24 Aug 2023 13:11:59 -0400 Subject: [PATCH] Add Arms warrior --- dist/Warrior/arms.lua | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 dist/Warrior/arms.lua diff --git a/dist/Warrior/arms.lua b/dist/Warrior/arms.lua new file mode 100644 index 0000000..7314e40 --- /dev/null +++ b/dist/Warrior/arms.lua @@ -0,0 +1,119 @@ +local Unlocker, Caffeine = ... + +local OpenArms = Caffeine.Module:New('OpenArms') + +-- Units +local player = Caffeine.UnitManager:Get('player') +local target = Caffeine.UnitManager:Get('target') +local none = Caffeine.UnitManager:Get('none') + +-- Spells +local rend = Caffeine.Globals.SpellBook:GetSpell(772) +local thunder_clap = Caffeine.Globals.SpellBook:GetSpell(396719) +local avatar = Caffeine.Globals.SpellBook:GetSpell(107574) +local sweeping_strikes = Caffeine.Globals.SpellBook:GetSpell(260708) +local colossus_smash = Caffeine.Globals.SpellBook:GetSpell(167105) +local thunderous_roar = Caffeine.Globals.SpellBook:GetSpell(384318) +local execute = Caffeine.Globals.SpellBook:GetSpell(5308) +local mortal_strike = Caffeine.Globals.SpellBook:GetSpell(12294) +local overpower = Caffeine.Globals.SpellBook:GetSpell(7384) +local slam = Caffeine.Globals.SpellBook:GetSpell(1464) + +-- Auras +local colossus_smash_aura = Caffeine.Globals.SpellBook:GetSpell(208086) +local sudden_death = Caffeine.Globals.SpellBook:GetSpell(52437) + +-- APLs +local default_apl = Caffeine.APL:New('default') + + +-- Cast Rend when less than 4 seconds remaining, if multiple targets, use thunder clap +default_apl:AddSpell( + rend:CastableIf(function(self) + return self:IsKnownAndUsable() and target:GetAuras():FindMy(rend):GetRemainingTime() < 4 and player:GetEnemies(8) == 1 + end):Settarget(target) +) + +default_apl:AddSpell( + thunder_clap:CastableIf(function(self) + return self:IsKnownAndUsable() and target:GetAuras():FindMy(rend):GetRemainingTime() < 4 and player:GetEnemies(8) > 1 + end):Settarget(none) +) + +-- Avatar +default_apl:AddSpell( + avatar:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(none) +) + +-- Sweeping Strikes if 2+ targets +default_apl:AddSpell( + sweeping_strikes:CastableIf(function(self) + return self:IsKnownAndUsable() and player:GetEnemies(8) > 1 + end):Settarget(none) +) + +-- Colossus Smash on CD +default_apl:AddSpell( + colossus_smash:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Thunderous Roar while enemy has Colossus Smash or you have Test of Might +default_apl:AddSpell( + thunderous_roar:CastableIf(function(self) + return self:IsKnownAndUsable() and (target:GetAuras():FindMy(colossus_smash_aura):IsUp() or player:GetAuras():FindMy(test_of_might):IsUp()) + end):Settarget(target) +) + +-- Execute if 35% hp or Sudden Death proc +default_apl:AddSpell( + execute:CastableIf(function(self) + return self:IsKnownAndUsable() and target:GetHP() < 35 or player:GetAuras():FindMy(sudden_death):IsUp() + end):Settarget(target) +) + +-- Mortal Strike on CD +default_apl:AddSpell( + mortal_strike:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Overpower +default_apl:AddSpell( + overpower:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Slam above 35% hp +default_apl:AddSpell( + slam:CastableIf(function(self) + return self:IsKnownAndUsable() and target:GetHP() >= 35 + end):Settarget(target) +) + +local move_to_timer = 0 +OpenArms:Sync(function() + if not player:IsFacing(target) and target:Exists() and not target:IsDead() then + Caffeine.Util:FaceUnit(target) + end + + if not player:InMelee(target) and target:Exists() and not target:IsDead() and target:IsHostile() then + local tx, ty, tz = ObjectPosition('target') + local px, py, pz = ObjectPosition('player') + if GetTime() - move_to_timer > 0.5 and FastDistance(px, py, pz, tx, ty, tz) > 5 then + MoveTo(tx, ty, tz) + move_to_timer = GetTime() + end + end + + if player:IsAffectingCombat() and target:Exists() and target:IsHostile() and not target:IsDead() and player:IsFacing(target) then + default_apl:Execute() + end +end) + +Caffeine:Register(OpenArms) \ No newline at end of file