forked from Bastion/Bastion
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.
167 lines
5.9 KiB
167 lines
5.9 KiB
local Tinkr, Bastion = ...
|
|
|
|
-- Core
|
|
local AssassinationModule = Bastion.Module:New('assa')
|
|
local Player = Bastion.UnitManager:Get('player')
|
|
local Target = Bastion.UnitManager:Get('target')
|
|
local Focus = Bastion.UnitManager:Get('focus')
|
|
local Draw = Tinkr.Util.Draw:New()
|
|
|
|
function Round(num, numDecimalPlaces)
|
|
return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
|
|
end
|
|
|
|
-- Draw
|
|
Draw:Sync(function(draw)
|
|
local px, py, pz = ObjectPosition('player')
|
|
local distance = ObjectDistance('player', 'target')
|
|
|
|
draw:Circle(px, py, pz, 5)
|
|
draw:SetColor(230, 230, 250)
|
|
draw:SetAlpha(50)
|
|
|
|
if Target:Exists() then
|
|
if Round(distance) <= 6 then
|
|
draw:SetColor(144, 238, 144)
|
|
draw:SetAlpha(200)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- SpellBook
|
|
local SliceAndDice = Bastion.SpellBook:GetSpell(6774)
|
|
local Rupture = Bastion.SpellBook:GetSpell(48672)
|
|
local HungerForBloodAura = Bastion.SpellBook:GetSpell(63848)
|
|
local HungerForBlood = Bastion.SpellBook:GetSpell(51662)
|
|
local Vanish = Bastion.SpellBook:GetSpell(26889)
|
|
local Overkill = Bastion.SpellBook:GetSpell(58427)
|
|
local ColdBlood = Bastion.SpellBook:GetSpell(14177)
|
|
local Envenom = Bastion.SpellBook:GetSpell(57993)
|
|
local Mutilate = Bastion.SpellBook:GetSpell(48666)
|
|
local TricksOfTheTrade = Bastion.SpellBook:GetSpell(57934)
|
|
local FanOfKnives = Bastion.SpellBook:GetSpell(51723)
|
|
local Kick = Bastion.SpellBook:GetSpell(1766)
|
|
|
|
-- Items
|
|
local PotionOfSpeed = Bastion.ItemBook:GetItem(40211)
|
|
|
|
-- APLs
|
|
local PreCombatAPL = Bastion.APL:New('precombat')
|
|
local DefaultAPL = Bastion.APL:New('default')
|
|
|
|
-- actions.precombat+=/tricks_of_the_trade,if=group
|
|
PreCombatAPL:AddSpell(
|
|
TricksOfTheTrade:CastableIf(function(self)
|
|
return Focus:Exists() and self:IsInRange(Focus) and self:IsKnownAndUsable() and Focus:IsAffectingCombat()
|
|
end):SetTarget(Focus)
|
|
)
|
|
|
|
-- actions.precombat+=/potion
|
|
PreCombatAPL:AddItem(
|
|
PotionOfSpeed:UsableIf(function(self)
|
|
return Target:Exists() and self:IsUsable() and Target:IsBoss() and Target:IsAffectingCombat() and
|
|
Player:CanAttack(Target)
|
|
end):SetTarget(Player)
|
|
)
|
|
|
|
-- actions.precombat+=/mutilate,if=combo_points.deficit>1
|
|
PreCombatAPL:AddSpell(
|
|
Mutilate:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and Target:IsAffectingCombat()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/kick
|
|
DefaultAPL:AddSpell(
|
|
Kick:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and Target:IsInterruptible()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/slice_and_dice,if=buff.slice_and_dice.down
|
|
DefaultAPL:AddSpell(
|
|
SliceAndDice:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and not Player:GetAuras():FindMy(SliceAndDice):IsUp()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/fan_of_knives,if=active_enemies> 6
|
|
DefaultAPL:AddSpell(
|
|
FanOfKnives:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and Player:GetEnemies(10) > 6
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/hunger_for_blood,if=buff.hunger_for_blood.down
|
|
DefaultAPL:AddSpell(
|
|
HungerForBlood:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and
|
|
not Player:GetAuras():FindMy(HungerForBloodAura):IsUp() or
|
|
Player:GetAuras():FindMy(HungerForBloodAura):GetRemainingTime() < 5
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/rupture,if=talent.hunger_for_blood.enabled&buff.hunger_for_blood.down
|
|
DefaultAPL:AddSpell(
|
|
Rupture:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and
|
|
not Player:GetAuras():FindMy(HungerForBloodAura):IsUp() or
|
|
Player:GetAuras():FindMy(HungerForBloodAura):GetRemainingTime() < 5
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/vanish,if=talent.overkill.enabled&buff.overkill.down
|
|
DefaultAPL:AddSpell(
|
|
Vanish:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and Target:IsBoss() and
|
|
not Player:GetAuras():FindMy(Overkill):IsUp()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/cold_blood,if=combo_points.deficit=0
|
|
DefaultAPL:AddSpell(
|
|
ColdBlood:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and
|
|
Target:IsBoss() and
|
|
Player:GetComboPointsDeficit(Target) < 2 and not Player:GetAuras():FindMy(Envenom):IsUp()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/envenom,if=combo_points.deficit<2&(debuff.envenom.down|energy.time_to_max<debuff.envenom.remains)
|
|
DefaultAPL:AddSpell(
|
|
Envenom:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target)
|
|
and (Player:GetAuras():FindMy(SliceAndDice):GetRemainingTime() < 4
|
|
or (Player:GetComboPointsDeficit(Target) < 2 and not Player:GetAuras():FindMy(Envenom):IsUp()))
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- actions+=/tricks_of_the_trade,if=group
|
|
DefaultAPL:AddSpell(
|
|
TricksOfTheTrade:CastableIf(function(self)
|
|
return Focus:Exists() and self:IsInRange(Focus) and self:IsKnownAndUsable() and Focus:IsAffectingCombat()
|
|
end):SetTarget(Focus)
|
|
)
|
|
|
|
-- actions+=/mutilate,if=combo_points.deficit>1
|
|
DefaultAPL:AddSpell(
|
|
Mutilate:CastableIf(function(self)
|
|
return Target:Exists() and self:IsKnownAndUsable() and self:IsInRange(Target) and
|
|
Player:GetComboPointsDeficit(Target) > 1
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
AssassinationModule:Sync(function()
|
|
if not Player:IsAffectingCombat() then
|
|
PreCombatAPL:Execute()
|
|
end
|
|
if Player:IsAffectingCombat() then
|
|
DefaultAPL:Execute()
|
|
if not IsPlayerAttacking('target') then
|
|
Eval('StartAttack()', 't')
|
|
end
|
|
end
|
|
|
|
Draw:Enable()
|
|
end)
|
|
Bastion:Register(AssassinationModule)
|
|
|