diff --git a/dist/Shaman/enhancement.lua b/dist/Shaman/enhancement.lua new file mode 100644 index 0000000..d48e28d --- /dev/null +++ b/dist/Shaman/enhancement.lua @@ -0,0 +1,154 @@ +local Unlocker, Caffeine = ... + +local OpenEnhancement = Caffeine.Module:New('OpenEnhancement') + +-- Units +local player = Caffeine.UnitManager:Get('player') +local target = Caffeine.UnitManager:Get('target') +local none = Caffeine.UnitManager:Get('none') + +-- Spells +local astral_shift = Caffeine.Globals.SpellBook:GetSpell(108271) +local chain_lightning = Caffeine.Globals.SpellBook:GetSpell(188443) +local flame_shock = Caffeine.Globals.SpellBook:GetSpell(188389) +local flametongue_weapon = Caffeine.Globals.SpellBook:GetSpell(318038) +local frost_shock = Caffeine.Globals.SpellBook:GetSpell(196840) +local ghost_wolf = Caffeine.Globals.SpellBook:GetSpell(2645) +local healing_surge = Caffeine.Globals.SpellBook:GetSpell(8004) +local lightning_bolt = Caffeine.Globals.SpellBook:GetSpell(188196) +local wind_shear = Caffeine.Globals.SpellBook:GetSpell(57994) +local crash_lightning = Caffeine.Globals.SpellBook:GetSpell(187874) +local doom_winds = Caffeine.Globals.SpellBook:GetSpell(384352) +local feral_spirit = Caffeine.Globals.SpellBook:GetSpell(51533) +local ice_strike = Caffeine.Globals.SpellBook:GetSpell(342240) +local stormstrike = Caffeine.Globals.SpellBook:GetSpell(17364) +local sundering = Caffeine.Globals.SpellBook:GetSpell(197214) +local windfury_totem = Caffeine.Globals.SpellBook:GetSpell(8512) +local windfury_weapon = Caffeine.Globals.SpellBook:GetSpell(33757) +local windstrike = Caffeine.Globals.SpellBook:GetSpell(115356) + +-- Auras +local windfury_aura = Caffeine.Globals.SpellBook:GetSpell(327942) +local maelstrom_weapon = Caffeine.Globals.SpellBook:GetSpell(344179) +local crash_lightning_aura = Caffeine.Globals.SpellBook:GetSpell(187878) +local ascendance_aura = Caffeine.Globals.SpellBook:GetSpell(114051) + +-- APLs +local default_apl = Caffeine.APL:New('default') + +--[[ + Talents + BYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoVSSLJRJJkUQUCkIBAAAAAoFgUSiSaSIikkWAKJRAI +]] + +-- if no windfury aura, drop +default_apl:AddSpell( + windfury_totem:CastableIf(function(self) + return self:IsKnownAndUsable() and not player:GetAuras():FindMy(windfury_aura):IsUp() + end):Settarget(none) +) + +-- Cast Feral Spirit on CD +default_apl:AddSpell( + feral_spirit:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Cast Doom Winds on CD +default_apl:AddSpell( + doom_winds:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Cast Lightning Bolt at 5+ Maelstrom Weapon Stacks, Chain Lightning with 2+ targets +default_apl:AddSpell( + lightning_bolt:CastableIf(function(self) + return self:IsKnownAndUsable() and player:GetAuras():FindMy(maelstrom_weapon):GetCount() > 4 and player:GetEnemies(8) < 2 + end):Settarget(target) +) + +default_apl:AddSpell( + chain_lightning:CastableIf(function(self) + return self:IsKnownAndUsable() and player:GetAuras():FindMy(maelstrom_weapon):GetCount() > 4 and player:GetEnemies(8) > 1 + end):Settarget(target) +) + +-- Maintain crash lightning buff with 2+ targets +default_apl:AddSpell( + crash_lightning:CastableIf(function(self) + return self:IsKnownAndUsable() and not player:GetAuras():FindMy(crash_lightning_aura):IsUp() and player:GetEnemies(8) > 1 + end):Settarget(target) +) + +-- Sundering on CD +default_apl:AddSpell( + sundering:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Windstrike if ascendance has proc'd +default_apl:AddSpell( + windstrike:CastableIf(function(self) + return self:IsKnownAndUsable() and player:GetAuras():FindMy(ascendance_aura):IsUp() + end):Settarget(target) +) + +-- Stormstrike +default_apl:AddSpell( + stormstrike:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Crash Lightning +default_apl:AddSpell( + crash_lightning:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Ice Strike +default_apl:AddSpell( + ice_strike:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Flame Shock +default_apl:AddSpell( + flame_shock:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +-- Frost Shock +default_apl:AddSpell( + frost_shock:CastableIf(function(self) + return self:IsKnownAndUsable() + end):Settarget(target) +) + +local move_to_timer = 0 +OpenEnhancement: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(OpenEnhancement) \ No newline at end of file diff --git a/dist/main.lua b/dist/main.lua new file mode 100644 index 0000000..e69de29