base ret routine

main
Sundance Kid 2 years ago
parent a2774fec9f
commit 953ce02692
  1. 852
      scripts/retribution.lua

@ -0,0 +1,852 @@
---@type _, Bastion
local Tinkr, Bastion = ...
-- Core
local RetributionModule = Bastion.Module:New('retribution')
local Evaluator = Tinkr.Util.Evaluator
local Time = Bastion.CombatTimer
local Notifications = Bastion.Notifications
-- Targets
local Player = Bastion.UnitManager:Get('player')
local None = Bastion.UnitManager:Get('none')
local Target = Bastion.UnitManager:Get('target')
local RebukeTarget = Bastion.UnitManager:CreateCustomUnit('kick', function()
local purge = nil
Bastion.UnitManager:EnumEnemies(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
return false
end)
if purge == nil then
purge = None
end
return purge
end)
-- Spells
local AutoAttack = Bastion.SpellBook:GetSpell(6603)
local ForgeOfLight = Bastion.SpellBook:GetSpell(259930)
local LightsJudgment = Bastion.SpellBook:GetSpell(255647)
local Logging = Bastion.SpellBook:GetSpell(167895)
local MobileBanking = Bastion.SpellBook:GetSpell(83958)
local OverloadElementalDeposit = Bastion.SpellBook:GetSpell(388213)
local ArmorSkills = Bastion.SpellBook:GetSpell(76271)
local Demonbane = Bastion.SpellBook:GetSpell(255653)
local GuildMail = Bastion.SpellBook:GetSpell(83951)
local HastyHearth = Bastion.SpellBook:GetSpell(83944)
local HolyResistance = Bastion.SpellBook:GetSpell(255651)
local Languages = Bastion.SpellBook:GetSpell(79741)
local LightsReckoning = Bastion.SpellBook:GetSpell(255652)
local MasterRiding = Bastion.SpellBook:GetSpell(90265)
local MountUp = Bastion.SpellBook:GetSpell(78633)
local TheQuickandtheDead = Bastion.SpellBook:GetSpell(83950)
local WeaponSkills = Bastion.SpellBook:GetSpell(76294)
local BlessingOfFreedom = Bastion.SpellBook:GetSpell(1044)
local BlessingOfSacrifice = Bastion.SpellBook:GetSpell(6940)
local Consecration = Bastion.SpellBook:GetSpell(26573)
local CrusaderAura = Bastion.SpellBook:GetSpell(32223)
local CrusaderStrike = Bastion.SpellBook:GetSpell(35395)
local DivineShield = Bastion.SpellBook:GetSpell(642)
local DivineSteed = Bastion.SpellBook:GetSpell(190784)
local FlashOfLight = Bastion.SpellBook:GetSpell(19750)
local HammerOfJustice = Bastion.SpellBook:GetSpell(853)
local HammerOfWrath = Bastion.SpellBook:GetSpell(24275)
local HandOfReckoning = Bastion.SpellBook:GetSpell(62124)
local Intercession = Bastion.SpellBook:GetSpell(391054)
local Judgment = Bastion.SpellBook:GetSpell(20271)
local LayonHands = Bastion.SpellBook:GetSpell(633)
local Rebuke = Bastion.SpellBook:GetSpell(96231)
local Redemption = Bastion.SpellBook:GetSpell(7328)
local RetributionAura = Bastion.SpellBook:GetSpell(183435)
local SenseUndead = Bastion.SpellBook:GetSpell(5502)
local Seraphim = Bastion.SpellBook:GetSpell(152262)
local ShieldOftheRighteous = Bastion.SpellBook:GetSpell(53600)
local WordOfGlory = Bastion.SpellBook:GetSpell(85673)
local AspirationOfDivinity = Bastion.SpellBook:GetSpell(385416)
local GoldenPath = Bastion.SpellBook:GetSpell(377128)
local Incandescence = Bastion.SpellBook:GetSpell(385464)
local OfDuskandDawn = Bastion.SpellBook:GetSpell(385125)
local Recompense = Bastion.SpellBook:GetSpell(384914)
local ZealotsParagon = Bastion.SpellBook:GetSpell(391142)
local BladeOfJustice = Bastion.SpellBook:GetSpell(184575)
local Crusade = Bastion.SpellBook:GetSpell(231895)
local DivineStorm = Bastion.SpellBook:GetSpell(53385)
local DivineToll = Bastion.SpellBook:GetSpell(375576)
local Exorcism = Bastion.SpellBook:GetSpell(383185)
local FinalReckoning = Bastion.SpellBook:GetSpell(343721)
local HandOfHindrance = Bastion.SpellBook:GetSpell(183218)
local ShieldOfVengeance = Bastion.SpellBook:GetSpell(184662)
local TemplarsVerdict = Bastion.SpellBook:GetSpell(85256)
local WakeOfAshes = Bastion.SpellBook:GetSpell(255937)
local GreaterJudgment = Bastion.SpellBook:GetSpell(231663)
local MasteryHandOfLight = Bastion.SpellBook:GetSpell(267316)
local AvengingWrath = Bastion.SpellBook:GetSpell(31884)
local ExecutionSentence = Bastion.SpellBook:GetSpell(343527)
local HolyAvenger = Bastion.SpellBook:GetSpell(105809)
local ExecutionersWrath = Bastion.SpellBook:GetSpell(387196)
local RadiantDecree = Bastion.SpellBook:GetSpell(384052)
local JusticarsVengeance = Bastion.SpellBook:GetSpell(215661)
local DivineResonance = Bastion.SpellBook:GetSpell(384027)
local Expurgation = Bastion.SpellBook:GetSpell(383344)
local VanguardsMomentum = Bastion.SpellBook:GetSpell(383314)
local AshesToDust = Bastion.SpellBook:GetSpell(383300)
-- Items
local AlgetharPuzzleBox = Bastion.ItemBook:GetItem(193701)
local RumblingRuby = Bastion.ItemBook:GetItem(194303)
local DecorationOfFlame = Bastion.ItemBook:GetItem(194299)
-- Powers
local HolyPower = Enum.PowerType.HolyPower
-- Velocity
local movements = {}
local lastX, lastY, lastZ
C_Timer.NewTicker(0.1, function()
local x, y, z = ObjectPosition('player')
if lastX and lastY and lastZ then
local distance = math.sqrt((x - lastX) ^ 2 + (y - lastY) ^ 2 + (z - lastZ) ^ 2)
table.insert(movements, distance)
end
if #movements > 20 then
table.remove(movements, 1)
end
lastX, lastY, lastZ = x, y, z
end)
local function GetAverageVelocity()
local total = 0
for _, distance in ipairs(movements) do
total = total + distance
end
return total / #movements
end
local function IsPlayerMoving()
return GetAverageVelocity() >= 0.55
end
-- calculate the total distance moved over the last 2 seconds
-- APLs
local DefaultAPL = Bastion.APL:New('default')
local CooldownsAPL = Bastion.APL:New('cooldowns')
local FinishersAPL = Bastion.APL:New('finishers')
local ESFRPoolingAPL = Bastion.APL:New('es_fr_pooling')
local ESFRActiveAPL = Bastion.APL:New('es_fr_active')
local GeneratorsAPL = Bastion.APL:New('generators')
local function TimeToHPG()
return math.max(
Player:GetGCD(),
math.min(
Judgment:IsKnown() and Judgment:GetCooldownRemaining() or 999,
CrusaderStrike:IsKnown() and CrusaderStrike:GetCooldownRemaining() or 999,
BladeOfJustice:IsKnown() and BladeOfJustice:GetCooldownRemaining() or 999,
HammerOfWrath:IsKnown() and HammerOfWrath:GetCooldownRemaining() or 999,
WakeOfAshes:IsKnown() and WakeOfAshes:GetCooldownRemaining() or 999,
DivineToll:IsKnown() and DivineToll:GetCooldownRemaining() or 999
)
)
end
-- actions.cooldowns=potion,if=buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10|fight_remains<25
-- NYI
-- actions.cooldowns+=/lights_judgment,if=spell_targets.lights_judgment>=2|!raid_event.adds.exists|raid_event.adds.in>75|raid_event.adds.up
CooldownsAPL:AddSpell(
LightsJudgment:CastableIf(function()
return Target:GetEnemies(8) >= 2
end):SetTarget(Target)
)
-- actions.cooldowns+=/use_item,name=algethar_puzzle_box,if=(cooldown.avenging_wrath.remains<5&!talent.crusade|cooldown.crusade.remains<5&talent.crusade)&(holy_power>=5&time<5|holy_power>=3&time>5)
-- actions.cooldowns+=/use_item,slot=trinket1,if=(buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains
-- actions.cooldowns+=/use_item,slot=trinket2,if=(buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains
-- actions.cooldowns+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&(trinket.2.cooldown.remains|!variable.trinket_2_buffs|!buff.crusade.up&cooldown.crusade.remains>20|!buff.avenging_wrath.up&cooldown.avenging_wrath.remains>20)
-- actions.cooldowns+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&(trinket.1.cooldown.remains|!variable.trinket_1_buffs|!buff.crusade.up&cooldown.crusade.remains>20|!buff.avenging_wrath.up&cooldown.avenging_wrath.remains>20)
CooldownsAPL:AddItem(
DecorationOfFlame:UsableIf(function()
local result = Player:GetAuras():FindMy(AvengingWrath):IsUp() or
(Player:GetAuras():FindMy(Crusade):IsUp() and
Player:GetAuras():FindMy(Crusade):GetCount() == 10)
return result
end):SetTarget(Player)
)
-- actions.cooldowns+=/shield_of_vengeance,if=(!talent.execution_sentence|cooldown.execution_sentence.remains<52)&fight_remains>15
CooldownsAPL:AddSpell(
ShieldOfVengeance:CastableIf(function()
return not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() < 52
end):SetTarget(Target)
)
-- actions.cooldowns+=/avenging_wrath,if=((holy_power>=4&time<5|holy_power>=3&time>5)|talent.holy_avenger&cooldown.holy_avenger.remains=0)&(!talent.seraphim|!talent.final_reckoning|cooldown.seraphim.remains>0)
CooldownsAPL:AddSpell(
AvengingWrath:CastableIf(function()
return (
Player:GetPower(HolyPower) >= 4 and Time:GetTime() < 5 or
Player:GetPower(HolyPower) >= 3 and Time:GetTime() > 5) and
(not HolyAvenger:IsKnown() or not FinalReckoning:IsKnown() or Seraphim:GetCooldownRemaining() > 0)
end):SetTarget(Player)
)
-- actions.cooldowns+=/crusade,if=holy_power>=5&time<5|holy_power>=3&time>5
CooldownsAPL:AddSpell(
Crusade:CastableIf(function()
return Crusade:GetCooldownRemaining() == 0 and (Player:GetPower(HolyPower) >= 5 and Time:GetTime() < 5 or
Player:GetPower(HolyPower) >= 3 and Time:GetTime() > 5)
end):SetTarget(Player):OnCast(function(spell)
Notifications:AddNotification(spell:GetIcon(), spell:GetName(), 10)
end)
)
-- actions.cooldowns+=/holy_avenger,if=time_to_hpg=0&holy_power<=2&(buff.avenging_wrath.up|talent.crusade&(cooldown.crusade.remains=0|buff.crusade.up)|fight_remains<20)
CooldownsAPL:AddSpell(
HolyAvenger:CastableIf(function()
return TimeToHPG() == 0 and Player:GetPower(HolyPower) <= 2 and
(
Player:GetAuras():FindMy(AvengingWrath):IsUp() or
Crusade:IsKnown() and (Crusade:GetCooldownRemaining() == 0 or Player:GetAuras():FindMy(Crusade):IsUp())
or
Target:TimeToDie() < 20)
end):SetTarget(Player)
)
-- actions.cooldowns+=/final_reckoning,if=(holy_power>=4&time<8|holy_power>=3&time>=8)&(cooldown.avenging_wrath.remains>gcd|cooldown.crusade.remains&(!buff.crusade.up|buff.crusade.stack>=10))&(time_to_hpg>0|holy_power=5)&(!talent.seraphim|buff.seraphim.up)&(!raid_event.adds.exists|raid_event.adds.up|raid_event.adds.in>40)&(!buff.avenging_wrath.up|holy_power=5|cooldown.hammer_of_wrath.remains)
CooldownsAPL:AddSpell(
FinalReckoning:CastableIf(function()
return (Player:GetPower(HolyPower) >= 4 and Time:GetTime() < 8 or
Player:GetPower(HolyPower) >= 3 and Time:GetTime() >= 8) and
(AvengingWrath:GetCooldownRemaining() > Player:GetGCD() or Crusade:GetCooldownRemaining() > 0 and
(not Player:GetAuras():FindMy(Crusade):IsUp() or Player:GetAuras():FindMy(Crusade):GetCount() >= 10))
and
(TimeToHPG() > 0 or Player:GetPower(HolyPower) == 5) and
(not Seraphim:IsKnown() or Player:GetAuras():FindMy(Seraphim):IsUp()) and
(not Player:GetAuras():FindMy(AvengingWrath):IsUp() or Player:GetPower(HolyPower) == 5 or
HammerOfWrath:GetCooldownRemaining() > 0)
end):SetTarget(None):OnCast(function(self)
self:Click(Target:GetPosition())
end)
)
-- actions.finishers=variable,name=ds_castable,value=spell_targets.divine_storm>=2|buff.empyrean_power.up&!debuff.judgment.up&!buff.divine_purpose.up|buff.crusade.up&buff.crusade.stack<10&buff.empyrean_legacy.up&!talent.justicars_vengeance
FinishersAPL:AddVariable(
'ds_castable',
function()
return Player:GetEnemies(8) >= 2 and Player:InMelee(Target)
end
)
-- actions.finishers+=/seraphim,if=
-- (
-- cooldown.avenging_wrath.remains > 15 | cooldown.crusade.remains > 15
-- ) &
-- !talent.final_reckoning &
-- (
-- !talent.execution_sentence | spell_targets.divine_storm >= 5
-- ) &
-- fight_remains < 15 & fight_remains > 5 | buff.crusade.up & buff.crusade.stack < 10
FinishersAPL:AddSpell(
Seraphim:CastableIf(function()
return (AvengingWrath:GetCooldownRemaining() > 15 or Crusade:GetCooldownRemaining() > 15) and
not FinalReckoning:IsKnown() and
(not ExecutionSentence:IsKnown() or Player:GetEnemies(8) >= 5) and
Target:TimeToDie() < 15 and Target:TimeToDie() > 5 or
Player:GetAuras():FindMy(Crusade):IsUp() and Player:GetAuras():FindMy(Crusade):GetCount() < 10
end):SetTarget(Player)
)
-- actions.finishers+=/execution_sentence,if=(buff.crusade.down&cooldown.crusade.remains>10|buff.crusade.stack>=3|cooldown.avenging_wrath.remains>10)&(!talent.final_reckoning|cooldown.final_reckoning.remains>10)&target.time_to_die>8&(spell_targets.divine_storm<5|talent.executioners_wrath)
FinishersAPL:AddSpell(
ExecutionSentence:CastableIf(function()
return (not Player:GetAuras():FindMy(Crusade):IsUp() and Crusade:GetCooldownRemaining() > 10 or
Player:GetAuras():FindMy(Crusade):GetCount() >= 3 or
AvengingWrath:GetCooldownRemaining() > 10) and
(not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() > 10) and
Target:TimeToDie() > 8 and
(Target:GetEnemies(8) < 5 or ExecutionersWrath:IsKnown())
end):SetTarget(Target)
)
-- actions.finishers+=/radiant_decree,if=(buff.crusade.down&cooldown.crusade.remains>5|buff.crusade.stack>=3|cooldown.avenging_wrath.remains>5)&(!talent.final_reckoning|cooldown.final_reckoning.remains>5)
FinishersAPL:AddSpell(
RadiantDecree:CastableIf(function()
return (not Player:GetAuras():FindMy(Crusade):IsUp() and Crusade:GetCooldownRemaining() > 5 or
Player:GetAuras():FindMy(Crusade):GetCount() >= 3 or
AvengingWrath:GetCooldownRemaining() > 5) and
(not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() > 5)
end):SetTarget(Target)
)
-- actions.finishers+=/divine_storm,if=
-- variable.ds_castable &
-- (
-- buff.crusade.up & buff.crusade.stack < 10
-- ) & (
-- (
-- !talent.crusade | cooldown.crusade.remains > gcd * 3
-- ) &
-- (
-- !talent.execution_sentence | cooldown.execution_sentence.remains > gcd * 6 |cooldown.execution_sentence.remains > gcd* 4 & holy_power >= 4 | target.time_to_die < 8 | spell_targets.divine_storm >= 5 | !talent.seraphim & cooldown.execution_sentence.remains > gcd * 2
-- ) &(
-- !talent.final_reckoning | cooldown.final_reckoning.remains>gcd * 6 | cooldown.final_reckoning.remains > gcd * 4 & holy_power >= 4 | !talent.seraphim & cooldown.final_reckoning.remains > gcd * 2
-- ) |
-- talent.holy_avenger & cooldown.holy_avenger.remains < gcd * 3 | buff.holy_avenger.up | buff.crusade.up & buff.crusade.stack < 10
-- )
FinishersAPL:AddSpell(
DivineStorm:CastableIf(function()
return FinishersAPL:GetVariable('ds_castable') and
(Player:GetAuras():FindMy(Crusade):IsUp() and
Player:GetAuras():FindMy(Crusade):GetCount() < 10) and
(not Crusade:IsKnown() or Crusade:GetCooldownRemaining() > 3) and
(not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() > 6 or
ExecutionSentence:GetCooldownRemaining() > 4 and Player:GetPower(HolyPower) >= 4 or
Target:TimeToDie() < 8 or
Target:GetEnemies(8) >= 5 or
not Seraphim:IsKnown() and ExecutionSentence:GetCooldownRemaining() > 2) and
(not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() > 6 or
FinalReckoning:GetCooldownRemaining() > 4 and Player:GetPower(HolyPower) >= 4 or
not Seraphim:IsKnown() and FinalReckoning:GetCooldownRemaining() > 2) or
HolyAvenger:IsKnown() and HolyAvenger:GetCooldownRemaining() < 3 or
Player:GetAuras():FindMy(HolyAvenger):IsUp() or
Player:GetAuras():FindMy(Crusade):IsUp() and
Player:GetAuras():FindMy(Crusade):GetCount() < 10
end):SetTarget(Target)
)
-- actions.finishers+=/justicars_vengeance,if=
-- (!talent.crusade | cooldown.crusade.remains > gcd*3 ) &
-- (!talent.execution_sentence | cooldown.execution_sentence.remains > gcd*6 | cooldown.execution_sentence.remains > gcd * 4 & holy_power >= 4 | target.time_to_die < 8 | !talent.seraphim & cooldown.execution_sentence.remains > gcd * 2 ) &
-- (!talent.final_reckoning | cooldown.final_reckoning.remains > gcd* 6 | cooldown.final_reckoning.remains > gcd * 4 & holy_power >= 4 | !talent.seraphim & cooldown.final_reckoning.remains > gcd * 2) |
-- talent.holy_avenger & cooldown.holy_avenger.remains < gcd*3 | buff.holy_avenger.up | buff.crusade.up & buff.crusade.stack < 10
FinishersAPL:AddSpell(
JusticarsVengeance:CastableIf(function()
local a = (not Crusade:IsKnown() or Crusade:GetCooldownRemaining() > Player:GetGCD() * 3)
local b = (
not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() > Player:GetGCD() * 6 or
ExecutionSentence:GetCooldownRemaining() > Player:GetGCD() * 4 and Player:GetPower(HolyPower) >= 4 or
Target:TimeToDie() < 8 or
not Seraphim:IsKnown() and ExecutionSentence:GetCooldownRemaining() > Player:GetGCD() * 2)
local c = not FinalReckoning:IsKnown() or
(
FinalReckoning:GetCooldownRemaining() > Player:GetGCD() * 6 or
FinalReckoning:GetCooldownRemaining() > Player:GetGCD() * 4 and Player:GetPower(HolyPower) >= 4 or
not Seraphim:IsKnown() and FinalReckoning:GetCooldownRemaining() > Player:GetGCD() * 2)
local d = HolyAvenger:IsKnown() and HolyAvenger:GetCooldownRemaining() < Player:GetGCD() * 3 or
Player:GetAuras():FindMy(HolyAvenger):IsUp() or
Player:GetAuras():FindMy(Crusade):IsUp() and Player:GetAuras():FindMy(Crusade):GetCount() < 10
local result = (a and b and c) or d
return result
end):SetTarget(Target)
)
-- actions.finishers+=/templars_verdict,if=(!talent.crusade|cooldown.crusade.remains>gcd*3)&(!talent.execution_sentence|cooldown.execution_sentence.remains>gcd*6|cooldown.execution_sentence.remains>gcd*4&holy_power>=4|target.time_to_die<8|!talent.seraphim&cooldown.execution_sentence.remains>gcd*2)&(!talent.final_reckoning|cooldown.final_reckoning.remains>gcd*6|cooldown.final_reckoning.remains>gcd*4&holy_power>=4|!talent.seraphim&cooldown.final_reckoning.remains>gcd*2)|talent.holy_avenger&cooldown.holy_avenger.remains<gcd*3|buff.holy_avenger.up|buff.crusade.up&buff.crusade.stack<10
FinishersAPL:AddSpell(
TemplarsVerdict:CastableIf(function()
return (not Crusade:IsKnown() or Crusade:GetCooldownRemaining() > 3) and
(not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() > 6 or
ExecutionSentence:GetCooldownRemaining() > 4 and Player:GetPower(HolyPower) >= 4 or
Target:TimeToDie() < 8 or
not Seraphim:IsKnown() and ExecutionSentence:GetCooldownRemaining() > 2) and
(not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() > 6 or
FinalReckoning:GetCooldownRemaining() > 4 and Player:GetPower(HolyPower) >= 4 or
not Seraphim:IsKnown() and FinalReckoning:GetCooldownRemaining() > 2) or
HolyAvenger:IsKnown() and HolyAvenger:GetCooldownRemaining() < 3 or
Player:GetAuras():FindMy(HolyAvenger):IsUp() or
Player:GetAuras():FindMy(Crusade):IsUp() and
Player:GetAuras():FindMy(Crusade):GetCount() < 10
end):SetTarget(Target)
)
-- actions.es_fr_active+=/call_action_list,name=finishers,if=
-- holy_power=5 | debuff.judgment.up | debuff.final_reckoning.up &
-- (debuff.final_reckoning.remains < gcd.max | spell_targets.divine_storm >= 2 & !talent.execution_sentence) |
-- debuff.execution_sentence.up & debuff.execution_sentence.remains < gcd.max
ESFRActiveAPL:AddAPL(
FinishersAPL,
function()
return Player:GetPower(HolyPower) == 5 or
Target:GetAuras():Find(Judgment):IsUp() or
Target:GetAuras():Find(FinalReckoning):IsUp() and
(
Target:GetAuras():Find(FinalReckoning):GetRemainingTime() < Player:GetMaxGCD() or
Player:GetEnemies(8) >= 2 and not ExecutionSentence:IsKnown()
) or
Target:GetAuras():Find(ExecutionSentence):IsUp() and
Target:GetAuras():Find(ExecutionSentence):GetRemainingTime() < Player:GetMaxGCD()
end
)
-- actions.es_fr_active+=/divine_toll,if=holy_power<=2
ESFRActiveAPL:AddSpell(
DivineToll:CastableIf(function()
return Player:GetPower(HolyPower) <= 2
end):SetTarget(Player)
)
-- actions.es_fr_active+=/wake_of_ashes,if=holy_power<=2&(debuff.final_reckoning.up&debuff.final_reckoning.remains<gcd*2&!talent.divine_resonance|debuff.execution_sentence.up&debuff.execution_sentence.remains<gcd|spell_targets.divine_storm>=5&talent.divine_resonance&talent.execution_sentence)
ESFRActiveAPL:AddSpell(
WakeOfAshes:CastableIf(function()
return Player:GetPower(HolyPower) <= 2 and (
Target:GetAuras():Find(FinalReckoning):IsUp() and
Target:GetAuras():Find(FinalReckoning):GetRemainingTime() < Player:GetGCD() * 2 and
not DivineResonance:IsKnown() or Target:GetAuras():Find(ExecutionSentence):IsUp() and
Target:GetAuras():Find(ExecutionSentence):GetRemainingTime() < Player:GetGCD() or
Target:GetEnemies(8) >= 5 and DivineResonance:IsKnown() and ExecutionSentence:IsKnown()
)
end):SetTarget(Target)
)
-- actions.es_fr_active+=/blade_of_justice,if=talent.expurgation&(!talent.divine_resonance&holy_power<=3|holy_power<=2)
ESFRActiveAPL:AddSpell(
BladeOfJustice:CastableIf(function()
return Expurgation:IsKnown() and
(not DivineResonance:IsKnown() and Player:GetPower(HolyPower) <= 3 or
Player:GetPower(HolyPower) <= 2)
end):SetTarget(Target)
)
-- actions.es_fr_active+=/judgment,if=!debuff.judgment.up&holy_power>=2
ESFRActiveAPL:AddSpell(
Judgment:CastableIf(function()
return not Target:GetAuras():Find(Judgment):IsUp() and Player:GetPower(HolyPower) >= 2
end):SetTarget(Target)
)
-- actions.es_fr_active+=/call_action_list,name=finishers
ESFRActiveAPL:AddAPL(
FinishersAPL,
function()
return true
end
)
-- actions.es_fr_active+=/wake_of_ashes,if=holy_power<=2
ESFRActiveAPL:AddSpell(
WakeOfAshes:CastableIf(function()
return Player:GetPower(HolyPower) <= 2
end):SetTarget(Target)
)
-- actions.es_fr_active+=/blade_of_justice,if=holy_power<=3
ESFRActiveAPL:AddSpell(
BladeOfJustice:CastableIf(function()
return Player:GetPower(HolyPower) <= 3
end):SetTarget(Target)
)
-- actions.es_fr_active+=/judgment,if=!debuff.judgment.up
ESFRActiveAPL:AddSpell(
Judgment:CastableIf(function()
return not Target:GetAuras():Find(Judgment):IsUp()
end):SetTarget(Target)
)
-- actions.es_fr_active+=/hammer_of_wrath
ESFRActiveAPL:AddSpell(
HammerOfWrath:CastableIf(function()
return HammerOfWrath:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.es_fr_active+=/crusader_strike
ESFRActiveAPL:AddSpell(
CrusaderStrike:CastableIf(function()
return CrusaderStrike:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.es_fr_active+=/arcane_torrent
-- NYI
-- actions.es_fr_active+=/exorcism
ESFRActiveAPL:AddSpell(
Exorcism:CastableIf(function()
return Exorcism:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.es_fr_active+=/consecration
ESFRActiveAPL:AddSpell(
Consecration:CastableIf(function()
return Consecration:IsKnownAndUsable() and not IsPlayerMoving()
end):SetTarget(Target)
)
-- actions.es_fr_pooling=seraphim,if=holy_power=5&(!talent.final_reckoning|cooldown.final_reckoning.remains<=gcd*3)&(!talent.execution_sentence|cooldown.execution_sentence.remains<=gcd*3|talent.final_reckoning)
ESFRPoolingAPL:AddSpell(
Seraphim:CastableIf(function()
return Player:GetPower(HolyPower) == 5 and
(not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() <= Player:GetGCD() * 3) and
(
not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() <= Player:GetGCD() * 3 or
FinalReckoning:IsKnown())
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/call_action_list,name=finishers,if=holy_power=5|debuff.final_reckoning.up|buff.crusade.up&buff.crusade.stack<10
ESFRPoolingAPL:AddAPL(
FinishersAPL,
function()
return Player:GetPower(HolyPower) == 5 or Target:GetAuras():Find(FinalReckoning):IsUp() or
Player:GetAuras():FindMy(Crusade):IsUp() and Player:GetAuras():FindMy(Crusade):GetCount() < 10
end
)
-- actions.es_fr_pooling+=/hammer_of_wrath,if=talent.vanguards_momentum
ESFRPoolingAPL:AddSpell(
HammerOfWrath:CastableIf(function()
return VanguardsMomentum:IsKnown()
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/wake_of_ashes,if=holy_power<=2&talent.ashes_to_dust&(cooldown.crusade.remains|cooldown.avenging_wrath.remains)
ESFRPoolingAPL:AddSpell(
WakeOfAshes:CastableIf(function()
return Player:GetPower(HolyPower) <= 2 and AshesToDust:IsKnown() and
(Crusade:GetCooldownRemaining() > 0 or AvengingWrath:GetCooldownRemaining() > 0)
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/blade_of_justice,if=holy_power<=3
ESFRPoolingAPL:AddSpell(
BladeOfJustice:CastableIf(function()
return Player:GetPower(HolyPower) <= 3
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/judgment,if=!debuff.judgment.up
ESFRPoolingAPL:AddSpell(
Judgment:CastableIf(function()
return not Target:GetAuras():Find(Judgment):IsUp()
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/hammer_of_wrath
ESFRPoolingAPL:AddSpell(
HammerOfWrath:CastableIf(function()
return HammerOfWrath:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/crusader_strike,if=cooldown.crusader_strike.charges_fractional>=1.75&(holy_power<=2|holy_power<=3&cooldown.blade_of_justice.remains>gcd*2|holy_power=4&cooldown.blade_of_justice.remains>gcd*2&cooldown.judgment.remains>gcd*2)
ESFRPoolingAPL:AddSpell(
CrusaderStrike:CastableIf(function()
return CrusaderStrike:GetChargesFractional() >= 1.75 and
(Player:GetPower(HolyPower) <= 2 or
Player:GetPower(HolyPower) <= 3 and BladeOfJustice:GetCooldownRemaining() > Player:GetGCD() * 2 or
Player:GetPower(HolyPower) == 4 and BladeOfJustice:GetCooldownRemaining() > Player:GetGCD() * 2 and
Judgment:GetCooldownRemaining() > Player:GetGCD() * 2)
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/seraphim,if=!talent.final_reckoning&cooldown.execution_sentence.remains<=gcd*3
ESFRPoolingAPL:AddSpell(
Seraphim:CastableIf(function()
return not FinalReckoning:IsKnown() and ExecutionSentence:GetCooldownRemaining() <= Player:GetGCD() * 3
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/call_action_list,name=finishers
ESFRPoolingAPL:AddAPL(
FinishersAPL,
function()
return true
end
)
-- actions.es_fr_pooling+=/crusader_strike
ESFRPoolingAPL:AddSpell(
CrusaderStrike:CastableIf(function()
return CrusaderStrike:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/arcane_torrent,if=holy_power<=4
-- NYI
-- actions.es_fr_pooling+=/exorcism
ESFRPoolingAPL:AddSpell(
Exorcism:CastableIf(function()
return Exorcism:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/seraphim,if=
-- (
-- !talent.final_reckoning | cooldown.final_reckoning.remains <= gcd * 3
-- ) & (
-- !talent.execution_sentence | cooldown.execution_sentence.remains <= gcd * 3 | talent.final_reckoning
-- )
ESFRPoolingAPL:AddSpell(
Seraphim:CastableIf(function()
return (not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() <= Player:GetGCD() * 3) and
(not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() <= Player:GetGCD() * 3 or
FinalReckoning:IsKnown())
end):SetTarget(Target)
)
-- actions.es_fr_pooling+=/consecration
ESFRPoolingAPL:AddSpell(
Consecration:CastableIf(function()
return Consecration:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.generators=call_action_list,name=finishers,if=holy_power=5|(debuff.judgment.up|holy_power=4)&buff.divine_resonance.up|buff.holy_avenger.up
GeneratorsAPL:AddAPL(
FinishersAPL,
function()
return Player:GetPower(HolyPower) == 5 or
(Target:GetAuras():Find(Judgment):IsUp() or Player:GetPower(HolyPower) == 4) and
Player:GetAuras():FindMy(DivineResonance):IsUp() or
Player:GetAuras():FindMy(HolyAvenger):IsUp()
end
)
-- actions.generators+=/hammer_of_wrath,if=talent.zealots_paragon
GeneratorsAPL:AddSpell(
HammerOfWrath:CastableIf(function()
return ZealotsParagon:IsKnown()
end):SetTarget(Target)
)
-- actions.generators+=/wake_of_ashes,if=holy_power<=2&talent.ashes_to_dust&(cooldown.avenging_wrath.remains|cooldown.crusade.remains)
GeneratorsAPL:AddSpell(
WakeOfAshes:CastableIf(function()
return Player:GetPower(HolyPower) <= 2 and AshesToDust:IsKnown() and
(AvengingWrath:GetCooldownRemaining() > 0 or Crusade:GetCooldownRemaining() > 0)
end):SetTarget(Target)
)
-- actions.generators+=/divine_toll,if=
-- holy_power <= 2 &
-- !debuff.judgment.up &
-- (
-- !talent.seraphim | buff.seraphim.up
-- ) &
-- !talent.final_reckoning &
-- (!talent.execution_sentence | fight_remains < 8 | spell_targets.divine_storm >= 5 ) &
-- (cooldown.avenging_wrath.remains > 15 | cooldown.crusade.remains > 15 | fight_remains < 8)
GeneratorsAPL:AddSpell(
DivineToll:CastableIf(function()
local a = Player:GetPower(HolyPower) <= 2
local b = Target:GetAuras():Find(Judgment):IsDown()
local c = (not Seraphim:IsKnown() or Player:GetAuras():FindMy(Seraphim):IsUp())
local d = not FinalReckoning:IsKnown()
local e = (not ExecutionSentence:IsKnown() or Target:TimeToDie() < 8 or Player:GetEnemies(8) >= 5)
local f = (
AvengingWrath:GetCooldownRemaining() > 15 or Crusade:GetCooldownRemaining() > 15 or Target:TimeToDie() < 8)
return a and b and c and e and f
end):SetTarget(Player)
)
-- actions.generators+=/judgment,if=!debuff.judgment.up&holy_power>=2
GeneratorsAPL:AddSpell(
Judgment:CastableIf(function()
return Target:GetAuras():Find(Judgment):IsDown() and Player:GetPower(HolyPower) >= 2
end):SetTarget(Target)
)
-- actions.generators+=/wake_of_ashes,if=(holy_power=0|holy_power<=2&cooldown.blade_of_justice.remains>gcd*2)&(!raid_event.adds.exists|raid_event.adds.in>20|raid_event.adds.up)&(!talent.seraphim|cooldown.seraphim.remains>5)&(!talent.execution_sentence|cooldown.execution_sentence.remains>15|target.time_to_die<8|spell_targets.divine_storm>=5)&(!talent.final_reckoning|cooldown.final_reckoning.remains>15|fight_remains<8)&(cooldown.avenging_wrath.remains|cooldown.crusade.remains)
GeneratorsAPL:AddSpell(
WakeOfAshes:CastableIf(function()
return (Player:GetPower(HolyPower) == 0 or Player:GetPower(HolyPower) <= 2 and
BladeOfJustice:GetCooldownRemaining() > Player:GetGCD() * 2) and
(not Seraphim:IsKnown() or Seraphim:GetCooldownRemaining() > 5) and
(not ExecutionSentence:IsKnown() or ExecutionSentence:GetCooldownRemaining() > 15 or
Target:TimeToDie() < 8 or
Player:GetEnemies():GetCount() >= 5) and
(not FinalReckoning:IsKnown() or FinalReckoning:GetCooldownRemaining() > 15 or
Target:TimeToDie() < 8) and
(AvengingWrath:GetCooldownRemaining() > 0 or Crusade:GetCooldownRemaining() > 0)
end):SetTarget(Target)
)
-- actions.generators+=/call_action_list,name=finishers,if=holy_power>=3&buff.crusade.up&buff.crusade.stack<10
GeneratorsAPL:AddAPL(
FinishersAPL,
function()
return Player:GetPower(HolyPower) >= 3 and Player:GetAuras():FindMy(Crusade):IsUp() and
Player:GetAuras():FindMy(Crusade):GetCount() < 10
end
)
-- actions.generators+=/exorcism
GeneratorsAPL:AddSpell(
Exorcism:CastableIf(function()
return Exorcism:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.generators+=/judgment,if=!debuff.judgment.up
GeneratorsAPL:AddSpell(
Judgment:CastableIf(function()
return Target:GetAuras():Find(Judgment):IsDown()
end):SetTarget(Target)
)
-- actions.generators+=/hammer_of_wrath
GeneratorsAPL:AddSpell(
HammerOfWrath:CastableIf(function()
return HammerOfWrath:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.generators+=/blade_of_justice,if=holy_power<=3
GeneratorsAPL:AddSpell(
BladeOfJustice:CastableIf(function()
return Player:GetPower(HolyPower) <= 3
end):SetTarget(Target)
)
-- actions.generators+=/call_action_list,name=finishers,if=(target.health.pct<=20|buff.avenging_wrath.up|buff.crusade.up|buff.empyrean_power.up)
GeneratorsAPL:AddAPL(
FinishersAPL,
function()
return Target:GetHealthPercent() <= 20 or Player:GetAuras():FindMy(AvengingWrath):IsUp() or
Player:GetAuras():FindMy(Crusade):IsUp()
end
)
-- actions.generators+=/consecration,if=!consecration.up&spell_targets.divine_storm>=2
GeneratorsAPL:AddSpell(
Consecration:CastableIf(function()
return Consecration:IsKnownAndUsable() and Player:GetEnemies(8) >= 2
end):SetTarget(Target)
)
-- actions.generators+=/crusader_strike,if=cooldown.crusader_strike.charges_fractional>=1.75&(holy_power<=2|holy_power<=3&cooldown.blade_of_justice.remains>gcd*2|holy_power=4&cooldown.blade_of_justice.remains>gcd*2&cooldown.judgment.remains>gcd*2)
GeneratorsAPL:AddSpell(
CrusaderStrike:CastableIf(function()
return CrusaderStrike:IsKnownAndUsable() and
CrusaderStrike:GetChargesFractional() >= 1.75 and
(Player:GetPower(HolyPower) <= 2 or Player:GetPower(HolyPower) <= 3 and
BladeOfJustice:GetCooldownRemaining() > Player:GetGCD() * 2 or
Player:GetPower(HolyPower) == 4 and
BladeOfJustice:GetCooldownRemaining() > Player:GetGCD() * 2 and
Judgment:GetCooldownRemaining() > Player:GetGCD() * 2)
end):SetTarget(Target)
)
-- actions.generators+=/call_action_list,name=finishers
GeneratorsAPL:AddAPL(
FinishersAPL,
function()
return true
end
)
-- actions.generators+=/consecration,if=!consecration.up
GeneratorsAPL:AddSpell(
Consecration:CastableIf(function()
return Player:GetAuras():FindMy(Consecration):IsDown()
end):SetTarget(Target)
)
-- actions.generators+=/crusader_strike
GeneratorsAPL:AddSpell(
CrusaderStrike:CastableIf(function()
return CrusaderStrike:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions.generators+=/arcane_torrent
-- NYI
-- actions.generators+=/consecration
GeneratorsAPL:AddSpell(
Consecration:CastableIf(function()
return Consecration:IsKnownAndUsable()
end):SetTarget(Target)
)
-- actions=auto_attack
-- NYI
-- actions+=/rebuke
DefaultAPL:AddSpell(
Rebuke:CastableIf(function(self)
return RebukeTarget:Exists() and Player:InMelee(RebukeTarget) and
self:IsKnownAndUsable() and
not Player:IsCastingOrChanneling()
end):SetTarget(RebukeTarget):OnCast(function(spell)
Notifications:AddNotification(spell:GetIcon(), spell:GetName())
end)
)
-- actions+=/call_action_list,name=cooldowns
DefaultAPL:AddAPL(
CooldownsAPL,
function()
return true
end
)
-- actions+=/call_action_list,name=es_fr_pooling,if=(talent.execution_sentence&cooldown.execution_sentence.remains<9&spell_targets.divine_storm<5|talent.final_reckoning&cooldown.final_reckoning.remains<9)&(!buff.crusade.up|buff.crusade.stack=10)&target.time_to_die>8
DefaultAPL:AddAPL(
ESFRPoolingAPL,
function()
return ExecutionSentence:IsKnown() and ExecutionSentence:GetCooldownRemaining() < 9 and Target:GetEnemies(8) < 5
or
FinalReckoning:IsKnown() and FinalReckoning:GetCooldownRemaining() < 9 and
(not Player:GetAuras():FindMy(Crusade):IsUp() or Player:GetAuras():FindMy(Crusade):GetCount() == 10) and
Target:TimeToDie() > 8
end
)
-- actions+=/call_action_list,name=es_fr_active,if=debuff.execution_sentence.up|debuff.final_reckoning.up
DefaultAPL:AddAPL(
ESFRActiveAPL,
function()
return Target:GetAuras():Find(ExecutionSentence):IsUp() or Target:GetAuras():Find(FinalReckoning):IsUp()
end
)
-- actions+=/call_action_list,name=generators
DefaultAPL:AddAPL(
GeneratorsAPL,
function()
return true
end
)
local notified = false
RetributionModule:Sync(function()
if Player:IsAffectingCombat() and not IsMounted() then
DefaultAPL:Execute()
end
end)
Bastion:Register(RetributionModule)
Loading…
Cancel
Save