parent
6408b3a222
commit
cea7d35b50
@ -0,0 +1,275 @@ |
||||
local Tinkr, Bastion = ... |
||||
local BloodDKModule = Bastion.Module:New('BloodDeathKnight') |
||||
local Player = Bastion.UnitManager:Get('player') |
||||
local Target = Bastion.UnitManager:Get('target') |
||||
local SpellBook = Bastion.SpellBook:New() |
||||
|
||||
-- Spells |
||||
local DeathStrike = SpellBook:GetSpell(49998) |
||||
local Marrowrend = SpellBook:GetSpell(195182) |
||||
local HeartStrike = SpellBook:GetSpell(206930) |
||||
local BloodBoil = SpellBook:GetSpell(50842) |
||||
local DeathAndDecay = SpellBook:GetSpell(43265) |
||||
local DancingRuneWeapon = SpellBook:GetSpell(49028) |
||||
local Tombstone = SpellBook:GetSpell(219809) |
||||
local Bonestorm = SpellBook:GetSpell(194844) |
||||
local AbominationLimb = SpellBook:GetSpell(315443) |
||||
local EmpowerRuneWeapon = SpellBook:GetSpell(47568) |
||||
local DeathsCaress = SpellBook:GetSpell(195292) |
||||
local RaiseDead = SpellBook:GetSpell(46585) |
||||
local BlindingSleet = SpellBook:GetSpell(207167) |
||||
local AntiMagicShell = SpellBook:GetSpell(48707) |
||||
local GorefiendGrasp = SpellBook:GetSpell(108199) |
||||
local MindFreeze = SpellBook:GetSpell(47528) |
||||
local Asphyxiate = SpellBook:GetSpell(221562) |
||||
local RaiseAlly = SpellBook:GetSpell(61999) |
||||
local AntiMagicZone = SpellBook:GetSpell(51052) |
||||
local VampiricBlood = SpellBook:GetSpell(55233) |
||||
|
||||
-- Buffs |
||||
local BoneShield = SpellBook:GetSpell(195181) |
||||
local DancingRuneWeaponBuff = SpellBook:GetSpell(81256) |
||||
|
||||
-- Helper Functions |
||||
local function GetEnemiesInRange(range) |
||||
local count = 0 |
||||
Bastion.UnitManager:EnumEnemies(function(unit) |
||||
if unit:GetDistance(Player) <= range then |
||||
count = count + 1 |
||||
end |
||||
end) |
||||
return count |
||||
end |
||||
|
||||
local function HasEnoughRunicPower(cost) |
||||
return Player:GetPower() >= cost |
||||
end |
||||
|
||||
-- Create APLs |
||||
local DefaultAPL = Bastion.APL:New('default') |
||||
local CooldownAPL = Bastion.APL:New('cooldown') |
||||
local DefensiveAPL = Bastion.APL:New('defensive') |
||||
local UtilityAPL = Bastion.APL:New('utility') |
||||
|
||||
-- Utility APL |
||||
UtilityAPL:AddSpell( |
||||
BlindingSleet:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and GetEnemiesInRange(12) >= 3 |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
UtilityAPL:AddSpell( |
||||
GorefiendGrasp:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and GetEnemiesInRange(15) >= 3 |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
UtilityAPL:AddSpell( |
||||
MindFreeze:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and Target:IsCasting() and Target:IsInterruptible() |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
UtilityAPL:AddSpell( |
||||
Asphyxiate:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and not Target:IsStunned() |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
-- Cooldown APL |
||||
CooldownAPL:AddSpell( |
||||
DancingRuneWeapon:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and not Player:GetAuras():FindMy(DancingRuneWeaponBuff):IsUp() |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
CooldownAPL:AddSpell( |
||||
AbominationLimb:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
CooldownAPL:AddSpell( |
||||
EmpowerRuneWeapon:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
-- Defensive APL |
||||
DefensiveAPL:AddSpell( |
||||
AntiMagicShell:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and Player:GetHP() <= 70 |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
DefensiveAPL:AddSpell( |
||||
AntiMagicZone:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and Player:GetHP() <= 50 |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
DefensiveAPL:AddSpell( |
||||
VampiricBlood:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and Player:GetHP() <= 60 |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
-- Default APL |
||||
DefaultAPL:AddSpell( |
||||
Marrowrend:CastableIf(function(self) |
||||
local boneShieldCount = Player:GetAuras():FindMy(BoneShield):GetCount() |
||||
return self:IsKnownAndUsable() and |
||||
(boneShieldCount <= 6 or |
||||
(boneShieldCount <= 7 and Player:GetAuras():FindMy(BoneShield):GetRemainingTime() < 3)) |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
DefaultAPL:AddSpell( |
||||
DeathStrike:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and HasEnoughRunicPower(45) and Player:GetHP() <= 80 |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
DefaultAPL:AddSpell( |
||||
Tombstone:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and Player:GetAuras():FindMy(BoneShield):GetCount() > 6 |
||||
and not Player:GetAuras():FindMy(DancingRuneWeaponBuff):IsUp() |
||||
and Player:GetAuras():FindMy(DeathAndDecay):IsUp() |
||||
and DancingRuneWeapon:GetCooldownRemaining() > 0 |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
DefaultAPL:AddSpell( |
||||
Bonestorm:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and Player:GetAuras():FindMy(BoneShield):GetCount() > 11 |
||||
and not Player:GetAuras():FindMy(DancingRuneWeaponBuff):IsUp() |
||||
and Player:GetAuras():FindMy(DeathAndDecay):IsUp() |
||||
and HasEnoughRunicPower(100) |
||||
and DancingRuneWeapon:GetCooldownRemaining() > 0 |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
DefaultAPL:AddSpell( |
||||
DeathAndDecay:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and not Player:GetAuras():FindMy(DeathAndDecay):IsUp() |
||||
end):SetTarget(Player) |
||||
) |
||||
|
||||
DefaultAPL:AddSpell( |
||||
BloodBoil:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() and self:GetCharges() > 1 |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
DefaultAPL:AddSpell( |
||||
HeartStrike:CastableIf(function(self) |
||||
return self:IsKnownAndUsable() |
||||
end):SetTarget(Target) |
||||
) |
||||
|
||||
-- Opener sequence |
||||
local OpenerSequence = Bastion.Sequencer:New({ |
||||
function(self) |
||||
if DeathAndDecay:IsKnownAndUsable() then |
||||
DeathAndDecay:Cast(Player) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if DeathsCaress:IsKnownAndUsable() then |
||||
DeathsCaress:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if RaiseDead:IsKnownAndUsable() then |
||||
RaiseDead:Cast(Player) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if DancingRuneWeapon:IsKnownAndUsable() then |
||||
DancingRuneWeapon:Cast(Player) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if BloodBoil:IsKnownAndUsable() then |
||||
BloodBoil:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if Tombstone:IsKnownAndUsable() then |
||||
Tombstone:Cast(Player) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if HeartStrike:IsKnownAndUsable() then |
||||
HeartStrike:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if DeathStrike:IsKnownAndUsable() then |
||||
DeathStrike:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if HeartStrike:IsKnownAndUsable() then |
||||
HeartStrike:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if BloodBoil:IsKnownAndUsable() then |
||||
BloodBoil:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if DeathStrike:IsKnownAndUsable() then |
||||
DeathStrike:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
function(self) |
||||
if Marrowrend:IsKnownAndUsable() then |
||||
Marrowrend:Cast(Target) |
||||
return true |
||||
end |
||||
return false |
||||
end, |
||||
}, function() |
||||
return not Player:IsAffectingCombat() |
||||
end) |
||||
|
||||
DefaultAPL:AddSequence(OpenerSequence, function() |
||||
return not Player:IsAffectingCombat() |
||||
end) |
||||
|
||||
BloodDKModule:Sync(function() |
||||
if not Player:IsAffectingCombat() then |
||||
return |
||||
end |
||||
|
||||
DefensiveAPL:Execute() |
||||
UtilityAPL:Execute() |
||||
CooldownAPL:Execute() |
||||
DefaultAPL:Execute() |
||||
end) |
||||
|
||||
Bastion:Register(BloodDKModule) |
Loading…
Reference in new issue