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)