forked from Bastion/Bastion
parent
13f0c93767
commit
9f77df0da4
@ -0,0 +1,676 @@ |
|||||||
|
local Tinkr, Bastion = ... |
||||||
|
|
||||||
|
local SubModulue = Bastion.Module:New('sub') |
||||||
|
local Evaluator = Tinkr.Util.Evaluator |
||||||
|
local Player = Bastion.UnitManager:Get('player') |
||||||
|
local None = Bastion.UnitManager:Get('none') |
||||||
|
local Target = Bastion.UnitManager:Get('target') |
||||||
|
|
||||||
|
local RollTheBones = Bastion.SpellBook:GetSpell(315508) |
||||||
|
local SliceAndDice = Bastion.SpellBook:GetSpell(315496) |
||||||
|
local BetweenTheEyes = Bastion.SpellBook:GetSpell(315341) |
||||||
|
local BladeRush = Bastion.SpellBook:GetSpell(271877) |
||||||
|
local Vanish = Bastion.SpellBook:GetSpell(1856) |
||||||
|
local Dispatch = Bastion.SpellBook:GetSpell(2098) |
||||||
|
local Ambush = Bastion.SpellBook:GetSpell(8676) |
||||||
|
local Stealth = Bastion.SpellBook:GetSpell(1784) |
||||||
|
local PistolShot = Bastion.SpellBook:GetSpell(185763) |
||||||
|
local Opportunity = Bastion.SpellBook:GetSpell(195627) |
||||||
|
local SinisterStrike = Bastion.SpellBook:GetSpell(193315) |
||||||
|
local GrandMelee = Bastion.SpellBook:GetSpell(193358) |
||||||
|
local Broadside = Bastion.SpellBook:GetSpell(193356) |
||||||
|
local TrueBearing = Bastion.SpellBook:GetSpell(193359) |
||||||
|
local RuthlessPrecision = Bastion.SpellBook:GetSpell(193357) |
||||||
|
local SkullAndCrossbones = Bastion.SpellBook:GetSpell(199603) |
||||||
|
local BuriedTreasure = Bastion.SpellBook:GetSpell(199600) |
||||||
|
local AdrenalineRush = Bastion.SpellBook:GetSpell(13750) |
||||||
|
local ShadowDance = Bastion.SpellBook:GetSpell(185313) |
||||||
|
local ShadowDanceAura = Bastion.SpellBook:GetSpell(185422) |
||||||
|
local Audacity = Bastion.SpellBook:GetSpell(381845) |
||||||
|
local Flagellation = Bastion.SpellBook:GetSpell(323654) |
||||||
|
local Dreadblades = Bastion.SpellBook:GetSpell(343142) |
||||||
|
local JollyRoger = Bastion.SpellBook:GetSpell(199603) |
||||||
|
local BladeFlurry = Bastion.SpellBook:GetSpell(13877) |
||||||
|
local Kick = Bastion.SpellBook:GetSpell(1766) |
||||||
|
local MarkedForDeath = Bastion.SpellBook:GetSpell(137619) |
||||||
|
local CrimsonVial = Bastion.SpellBook:GetSpell(185311) |
||||||
|
local Shiv = Bastion.SpellBook:GetSpell(5938) |
||||||
|
local KidneyShot = Bastion.SpellBook:GetSpell(408) |
||||||
|
local InstantPoison = Bastion.SpellBook:GetSpell(315584) |
||||||
|
local AtrophicPosion = Bastion.SpellBook:GetSpell(381637) |
||||||
|
local Evasion = Bastion.SpellBook:GetSpell(5277) |
||||||
|
local TricksOfTheTrade = Bastion.SpellBook:GetSpell(57934) |
||||||
|
local CheapShot = Bastion.SpellBook:GetSpell(1833) |
||||||
|
local BagOfTricks = Bastion.SpellBook:GetSpell(312411) |
||||||
|
local AutoAttack = Bastion.SpellBook:GetSpell(6603) |
||||||
|
local SymbolsOfDeath = Bastion.SpellBook:GetSpell(212283) |
||||||
|
local ShadowBlades = Bastion.SpellBook:GetSpell(121471) |
||||||
|
local ColdBlood = Bastion.SpellBook:GetSpell(382245) |
||||||
|
local ShurikenTornado = Bastion.SpellBook:GetSpell(277925) |
||||||
|
local ThistleTea = Bastion.SpellBook:GetSpell(381623) |
||||||
|
local Gloomblade = Bastion.SpellBook:GetSpell(200758) |
||||||
|
local Shadowstrike = Bastion.SpellBook:GetSpell(185438) |
||||||
|
local Rupture = Bastion.SpellBook:GetSpell(1943) |
||||||
|
local Eviscerate = Bastion.SpellBook:GetSpell(196819) |
||||||
|
local NumbingPoison = Bastion.SpellBook:GetSpell(5761) |
||||||
|
local ShurikenStorm = Bastion.SpellBook:GetSpell(197835) |
||||||
|
local BlackPowder = Bastion.SpellBook:GetSpell(319175) |
||||||
|
local SecretTechnique = Bastion.SpellBook:GetSpell(280719) |
||||||
|
local DarkBrew = Bastion.SpellBook:GetSpell(310454) |
||||||
|
|
||||||
|
local IrideusFragment = Bastion.ItemBook:GetItem(193743) |
||||||
|
local Healthstone = Bastion.ItemBook:GetItem(5512) |
||||||
|
local WindscarWhetstone = Bastion.ItemBook:GetItem(137486) |
||||||
|
|
||||||
|
local PurgeTarget = Bastion.UnitManager:CreateCustomUnit('purge', function(unit) |
||||||
|
local purge = nil |
||||||
|
|
||||||
|
Bastion.UnitManager:EnumNameplates(function(unit) |
||||||
|
if unit:IsDead() then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not Player:CanSee(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if Player:GetDistance(unit) > 40 then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if unit:GetAuras():HasAnyStealableAura() then |
||||||
|
purge = unit |
||||||
|
return true |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
if purge == nil then |
||||||
|
purge = None |
||||||
|
end |
||||||
|
|
||||||
|
return purge |
||||||
|
end) |
||||||
|
|
||||||
|
local KickTarget = Bastion.UnitManager:CreateCustomUnit('kick', function(unit) |
||||||
|
local purge = nil |
||||||
|
|
||||||
|
Bastion.UnitManager:EnumNameplates(function(unit) |
||||||
|
if unit:IsDead() then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not Player:CanSee(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if Player:GetDistance(unit) > 40 then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if Player:InMelee(unit) and unit:IsInterruptible(5) and Player:IsFacing(unit) then |
||||||
|
purge = unit |
||||||
|
return true |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
if purge == nil then |
||||||
|
purge = None |
||||||
|
end |
||||||
|
|
||||||
|
return purge |
||||||
|
end) |
||||||
|
|
||||||
|
local Tank = Bastion.UnitManager:CreateCustomUnit('tank', function(unit) |
||||||
|
local tank = nil |
||||||
|
|
||||||
|
Bastion.UnitManager:EnumFriends(function(unit) |
||||||
|
if Player:GetDistance(unit) > 40 then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not Player:CanSee(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if unit:IsDead() then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if unit:IsTank() then |
||||||
|
tank = unit |
||||||
|
return true |
||||||
|
end |
||||||
|
|
||||||
|
return false |
||||||
|
end) |
||||||
|
|
||||||
|
if tank == nil then |
||||||
|
tank = None |
||||||
|
end |
||||||
|
|
||||||
|
return tank |
||||||
|
end) |
||||||
|
|
||||||
|
local RuptureTarget = Bastion.UnitManager:CreateCustomUnit('rupture', function() |
||||||
|
local target = nil |
||||||
|
|
||||||
|
Bastion.UnitManager:EnumNameplates(function(unit) |
||||||
|
if unit:IsDead() then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not Player:CanSee(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not Player:InMelee(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not unit:IsAffectingCombat() then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if not Player:IsFacing(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
if ( |
||||||
|
not unit:GetAuras():FindMy(Rupture):IsUp() or |
||||||
|
unit:GetAuras():FindMy(Rupture):GetRemainingTime() < 6 |
||||||
|
) |
||||||
|
then |
||||||
|
target = unit |
||||||
|
return true |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
if target == nil then |
||||||
|
target = None |
||||||
|
end |
||||||
|
|
||||||
|
return target |
||||||
|
end) |
||||||
|
|
||||||
|
local DefaultAPL = Bastion.APL:New('default') |
||||||
|
local AOEAPL = Bastion.APL:New('aoe') |
||||||
|
local SpecialAPL = Bastion.APL:New('special') |
||||||
|
local RacialsAPL = Bastion.APL:New('racials') |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
Kick:CastableIf(function(self) |
||||||
|
return KickTarget:Exists() and Player:InMelee(KickTarget) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(KickTarget) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
KidneyShot:CastableIf(function(self) |
||||||
|
return KickTarget:Exists() and Player:InMelee(KickTarget) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Kick:GetTimeSinceLastCast() > 2 and |
||||||
|
(Player:GetComboPoints(Target) >= 5 or |
||||||
|
( |
||||||
|
Player:GetComboPoints(Target) >= 4 and |
||||||
|
(Player:GetAuras():FindMy(Broadside):IsUp() or Player:GetAuras():FindMy(Opportunity):IsUp()))) |
||||||
|
|
||||||
|
end):SetTarget(KickTarget) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
CheapShot:CastableIf(function(self) |
||||||
|
return KickTarget:Exists() and Player:InMelee(KickTarget) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and Player:GetAuras():FindMy(Stealth):IsUp() |
||||||
|
end):SetTarget(KickTarget) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
Stealth:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and not Player:IsAffectingCombat() and |
||||||
|
not Player:GetAuras():FindMy(Stealth):IsUp() and not IsMounted() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
CrimsonVial:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetHealthPercent() < 70 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
Shiv:CastableIf(function(self) |
||||||
|
return PurgeTarget:Exists() and Player:InMelee(PurgeTarget) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and PurgeTarget:GetAuras():HasAnyStealableAura() |
||||||
|
end):SetTarget(PurgeTarget) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
InstantPoison:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
not Player:GetAuras():FindMy(InstantPoison):IsUp() and not Player:IsMoving() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
AtrophicPosion:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
not Player:GetAuras():FindMy(AtrophicPosion):IsUp() and not Player:IsMoving() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
NumbingPoison:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
not Player:GetAuras():FindMy(NumbingPoison):IsUp() and not Player:IsMoving() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddItem( |
||||||
|
Healthstone:UsableIf(function(self) |
||||||
|
return self:IsEquippedAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetHealthPercent() < 40 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
TricksOfTheTrade:CastableIf(function(self) |
||||||
|
return Tank:Exists() and self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:IsTanking(Target) |
||||||
|
end):SetTarget(Tank) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddSpell( |
||||||
|
Evasion:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetHealthPercent() < 40 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddItem( |
||||||
|
IrideusFragment:UsableIf(function(self) |
||||||
|
return self:IsEquippedAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and (Player:GetMeleeAttackers() > 2 or Target:IsBoss()) |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
SpecialAPL:AddItem( |
||||||
|
WindscarWhetstone:UsableIf(function(self) |
||||||
|
return self:IsEquippedAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and (Player:GetMeleeAttackers() > 2 or Target:IsBoss()) |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadowstrike during Shadow Dance. |
||||||
|
SpecialAPL:AddSpell( |
||||||
|
Shadowstrike:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and Vanish:GetTimeSinceLastCast() <= 3 |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
RacialsAPL:AddSpell( |
||||||
|
BagOfTricks:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Symbols of Death on cooldown as much as possible. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
SymbolsOfDeath:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadow Blades on cooldown. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
ShadowBlades:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Cold Blood before a finishing move, ideally before Secret Technique. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
ColdBlood:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetComboPoints(Target) >= 5 and SecretTechnique:GetCooldownRemaining() <= 2 and |
||||||
|
Player:GetAuras():FindMy(SliceAndDice):IsUp() and |
||||||
|
Target:GetAuras():FindMy(Rupture):IsUp() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Line up Shuriken Tornado with Symbols of Death. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
ShurikenTornado:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetAuras():FindMy(SymbolsOfDeath):IsUp() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadow Dance on cooldown as much as possible. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
ShadowDance:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Thistle Tea when low on energy. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
ThistleTea:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetPowerDeficit() >= 100 and |
||||||
|
ThistleTea:GetTimeSinceLastCast() >= 3 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Finishing moves with 6 or more combo points (5 or more during Shadow Dance) with the following priority: |
||||||
|
-- Cast Slice and Dice if it needs to be refreshed for maintenance or if it is not up. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
SliceAndDice:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) and |
||||||
|
( |
||||||
|
not Player:GetAuras():FindMy(SliceAndDice):IsUp() or |
||||||
|
Player:GetAuras():FindMy(SliceAndDice):GetRemainingTime() < 12 |
||||||
|
) |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cast Rupture if it needs to be refreshed for maintenance or if it is not up. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
Rupture:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) and ( |
||||||
|
not Target:GetAuras():FindMy(Rupture):IsUp() or |
||||||
|
Target:GetAuras():FindMy(Rupture):GetRemainingTime() < 12 |
||||||
|
) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Secret Technique - Best is to use it during Shadow Dance. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
SecretTechnique:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cast Eviscerate. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
Eviscerate:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Vanish - Is a fairly weak cooldown. It is best to use on low combo points for a Shadowstrike cast. Use it after Secret Technique in Shadow Dance when playing with Danse Macabre. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
Vanish:CastableIf(function(self) |
||||||
|
return Tank:Exists() and Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetComboPoints(Target) < 4 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Combo Point builder with the following priority: |
||||||
|
-- Use Gloomblade outside of Shadow Dance. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
Gloomblade:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
not Player:GetAuras():FindMy(ShadowDanceAura):IsUp() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadowstrike during Shadow Dance. |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
Shadowstrike:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- AOE |
||||||
|
|
||||||
|
-- Use Symbols of Death on cooldown as much as possible. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
SymbolsOfDeath:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadow Blades on cooldown. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ShadowBlades:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Cold Blood before a finishing move. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ColdBlood:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetComboPoints(Target) >= 5 and SecretTechnique:GetCooldownRemaining() <= 2 and |
||||||
|
Player:GetAuras():FindMy(SliceAndDice):IsUp() and |
||||||
|
Target:GetAuras():FindMy(Rupture):IsUp() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Line up Shuriken Tornado with Symbols of Death. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ShurikenTornado:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetAuras():FindMy(SymbolsOfDeath):IsUp() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadow Dance on cooldown as much as possible. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ShadowDance:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Thistle Tea with Shadow Dance. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ThistleTea:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp() and Player:GetPowerDeficit() >= 70 and |
||||||
|
ThistleTea:GetTimeSinceLastCast() >= 3 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Finishing moves with 5 or more combo points with the following priority: |
||||||
|
-- Cast Slice and Dice if it needs to be refreshed for maintenance or if it is not up. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
SliceAndDice:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) and |
||||||
|
( |
||||||
|
not Player:GetAuras():FindMy(SliceAndDice):IsUp() or |
||||||
|
Player:GetAuras():FindMy(SliceAndDice):GetRemainingTime() < 6 |
||||||
|
) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cast Rupture if it needs to be refreshed for maintenance or if it is not up. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
Rupture:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) and ( |
||||||
|
not Target:GetAuras():FindMy(Rupture):IsUp() or |
||||||
|
Target:GetAuras():FindMy(Rupture):GetRemainingTime() < 12 |
||||||
|
) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cast Rupture on all targets. (scam??) |
||||||
|
-- AOEAPL:AddSpell( |
||||||
|
-- Rupture:CastableIf(function(self) |
||||||
|
-- return RuptureTarget:Exists() and Player:InMelee(RuptureTarget) and |
||||||
|
-- self:IsKnownAndUsable() and |
||||||
|
-- not Player:IsCastingOrChanneling() and |
||||||
|
-- (Player:GetComboPoints(RuptureTarget) >= 6 or |
||||||
|
-- (Player:GetComboPoints(RuptureTarget) >= 5 and |
||||||
|
-- Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) and ( |
||||||
|
-- not RuptureTarget:GetAuras():FindMy(Rupture):IsUp() or |
||||||
|
-- RuptureTarget:GetAuras():FindMy(Rupture):GetRemainingTime() < 6 |
||||||
|
-- ) |
||||||
|
-- end):SetTarget(RuptureTarget) |
||||||
|
-- ) |
||||||
|
|
||||||
|
AOEAPL:AddSpell( |
||||||
|
SecretTechnique:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetComboPoints(Target) >= 6 or |
||||||
|
(Player:GetComboPoints(Target) >= 5 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp())) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cast Black Powder with 3 or more targets, 2 or more when talented into Dark Brew. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
BlackPowder:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
(Player:GetMeleeAttackers() >= 3 or |
||||||
|
(Player:GetMeleeAttackers() >= 2 and |
||||||
|
DarkBrew:IsKnown())) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cast Eviscerate. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
Eviscerate:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetComboPoints(Target) >= 5 |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Vanish - Is a fairly weak cooldown. It is best to use on low combo points for a Shadowstrike cast. Use it after Secret Technique in Shadow Dance when playing with Danse Macabre. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
Vanish:CastableIf(function(self) |
||||||
|
return Tank:Exists() and Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetComboPoints(Target) < 4 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Combo Point builder with the following priority: |
||||||
|
-- Use Shuriken Storm on 2 targets outside of Shadow Dance. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ShurikenStorm:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetMeleeAttackers() >= 2 and |
||||||
|
not Player:GetAuras():FindMy(ShadowDanceAura):IsUp() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shadowstrike on 2 and 3 targets during Shadow Dance or to proc Premeditation. |
||||||
|
AOEAPL:AddSpell( |
||||||
|
Shadowstrike:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetMeleeAttackers() >= 2 and |
||||||
|
Player:GetAuras():FindMy(ShadowDanceAura):IsUp() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Use Shuriken Storm |
||||||
|
AOEAPL:AddSpell( |
||||||
|
ShurikenStorm:CastableIf(function(self) |
||||||
|
return Target:Exists() and Player:InMelee(Target) and |
||||||
|
self:IsKnownAndUsable() and |
||||||
|
not Player:IsCastingOrChanneling() and |
||||||
|
Player:GetMeleeAttackers() >= 4 |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
SubModulue:Sync(function() |
||||||
|
SpecialAPL:Execute() |
||||||
|
if Player:GetMeleeAttackers() > 1 then |
||||||
|
AOEAPL:Execute() |
||||||
|
else |
||||||
|
DefaultAPL:Execute() |
||||||
|
end |
||||||
|
RacialsAPL:Execute() |
||||||
|
end) |
||||||
|
|
||||||
|
Bastion:Register(SubModulue) |
Loading…
Reference in new issue