Basic rotations that work
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OkRotations/ElementalShaman.lua

106 lines
3.1 KiB

local Tinkr, Bastion = ...
local ElementalModule = Bastion.Module:New('ElementalShaman')
local Player = Bastion.UnitManager:Get('player')
local Target = Bastion.UnitManager:Get('target')
local SpellBook = Bastion.SpellBook:New()
-- Spells
local StormElemental = SpellBook:GetSpell(192249)
local PrimordialWave = SpellBook:GetSpell(375982)
local Stormkeeper = SpellBook:GetSpell(191634)
local LavaBurst = SpellBook:GetSpell(51505)
local EarthShock = SpellBook:GetSpell(8042)
local LightningBolt = SpellBook:GetSpell(188196)
local FlameShock = SpellBook:GetSpell(188389)
local FrostShock = SpellBook:GetSpell(196840)
local FireElemental = SpellBook:GetSpell(198067)
local ElementalBlast = SpellBook:GetSpell(117014)
local Icefury = SpellBook:GetSpell(210714)
local Ascendance = SpellBook:GetSpell(114050)
-- Buffs
local MasterOfTheElements = SpellBook:GetSpell(16166)
local LavaSurge = SpellBook:GetSpell(77762)
-- Create APL
local DefaultAPL = Bastion.APL:New('default')
-- Default APL
DefaultAPL:AddSpell(
StormElemental:CastableIf(function(self)
return self:IsKnownAndUsable()
end):SetTarget(Player)
)
DefaultAPL:AddSpell(
PrimordialWave:CastableIf(function(self)
return self:IsKnownAndUsable()
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
Stormkeeper:CastableIf(function(self)
return self:IsKnownAndUsable()
end):SetTarget(Player)
)
DefaultAPL:AddSpell(
LavaBurst:CastableIf(function(self)
return self:IsKnownAndUsable() and
(Player:GetPower() <= 90 or Player:GetAuras():FindMy(MasterOfTheElements):IsUp())
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
EarthShock:CastableIf(function(self)
return self:IsKnownAndUsable() and
(Player:GetAuras():FindMy(MasterOfTheElements):IsUp() or Player:GetPower() >= 90)
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
ElementalBlast:CastableIf(function(self)
return self:IsKnownAndUsable() and
(Player:GetAuras():FindMy(MasterOfTheElements):IsUp() or Player:GetPower() >= 90)
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
Icefury:CastableIf(function(self)
return self:IsKnownAndUsable() and not Player:GetAuras():FindMy(Icefury):IsUp()
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
FrostShock:CastableIf(function(self)
return self:IsKnownAndUsable() and
Player:GetAuras():FindMy(Icefury):IsUp() and
Player:GetAuras():FindMy(MasterOfTheElements):IsUp()
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
LightningBolt:CastableIf(function(self)
return self:IsKnownAndUsable()
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
FlameShock:CastableIf(function(self)
return self:IsKnownAndUsable() and
(Player:IsMoving() or Target:GetAuras():FindMy(FlameShock):GetRemainingTime() < 3)
end):SetTarget(Target)
)
DefaultAPL:AddSpell(
FrostShock:CastableIf(function(self)
return self:IsKnownAndUsable() and Player:IsMoving()
end):SetTarget(Target)
)
ElementalModule:Sync(function()
if not Player:IsAffectingCombat() then return end
DefaultAPL:Execute()
end)
Bastion:Register(ElementalModule)