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.
106 lines
3.1 KiB
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) |