parent
477f95bb67
commit
8052fba9e2
@ -0,0 +1,252 @@ |
|||||||
|
--Talents: C4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzCzsMmxMmxM2w2sMbjHAz2yyMzyCImZgZYmFDsMzMDzGzMMLzEAAAAAEgFLz22sNzMBAA2A |
||||||
|
|
||||||
|
local Tinkr, Bastion = ... |
||||||
|
|
||||||
|
local RestoMonkModule = Bastion.Module:New('MistweaverMonk') |
||||||
|
local Player = Bastion.UnitManager:Get('player') |
||||||
|
local Target = Bastion.UnitManager:Get('target') |
||||||
|
|
||||||
|
-- Initialize SpellBook |
||||||
|
local SpellBook = Bastion.SpellBook:New() |
||||||
|
|
||||||
|
-- Spells |
||||||
|
local RenewingMist = SpellBook:GetSpell(115151) |
||||||
|
local EnvelopingMist = SpellBook:GetSpell(124682) |
||||||
|
local Vivify = SpellBook:GetSpell(116670) |
||||||
|
local RisingSunKick = SpellBook:GetSpell(107428) |
||||||
|
local ThunderFocusTea = SpellBook:GetSpell(116680) |
||||||
|
local TigerPalm = SpellBook:GetSpell(100780) |
||||||
|
local BlackoutKick = SpellBook:GetSpell(100784) |
||||||
|
local SpinningCraneKick = SpellBook:GetSpell(101546) |
||||||
|
local Revival = SpellBook:GetSpell(115310) |
||||||
|
local Restoral = SpellBook:GetSpell(388615) |
||||||
|
local InvokeYulon = SpellBook:GetSpell(322118) |
||||||
|
local InvokeChiJi = SpellBook:GetSpell(325197) |
||||||
|
local SoothingMist = SpellBook:GetSpell(115175) |
||||||
|
local ManaTea = SpellBook:GetSpell(197908) |
||||||
|
local CelestialConduit = SpellBook:GetSpell(443028) |
||||||
|
local FortifyingBrew = SpellBook:GetSpell(243435) |
||||||
|
local DiffuseMagic = SpellBook:GetSpell(122783) |
||||||
|
local LifeCocoon = SpellBook:GetSpell(116849) |
||||||
|
local JadefireStomp = SpellBook:GetSpell(388193) |
||||||
|
local SheilunsGift = SpellBook:GetSpell(399491) |
||||||
|
|
||||||
|
|
||||||
|
-- Buffs |
||||||
|
local TeachingsOfTheMonastery = SpellBook:GetSpell(202090) |
||||||
|
local StrengthOfTheBlackOx = SpellBook:GetSpell(392883) |
||||||
|
|
||||||
|
-- Custom Units |
||||||
|
local Lowest = Bastion.UnitManager:CreateCustomUnit('lowest', function(unit) |
||||||
|
local lowest = nil |
||||||
|
local lowestHP = math.huge |
||||||
|
|
||||||
|
Bastion.UnitManager:EnumFriends(function(unit) |
||||||
|
if unit:IsDead() or Player:GetDistance(unit) > 40 or not Player:CanSee(unit) then |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
local hp = unit:GetHP() |
||||||
|
if hp < lowestHP then |
||||||
|
lowest = unit |
||||||
|
lowestHP = hp |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
return lowest or Player |
||||||
|
end) |
||||||
|
|
||||||
|
-- APLs |
||||||
|
local DefaultAPL = Bastion.APL:New('default') |
||||||
|
local CooldownAPL = Bastion.APL:New('cooldown') |
||||||
|
local DefensiveAPL = Bastion.APL:New('defensive') |
||||||
|
local DpsAPL = Bastion.APL:New('dps') |
||||||
|
|
||||||
|
-- Helper Functions |
||||||
|
local function ShouldUseRenewingMist() |
||||||
|
return RenewingMist:GetCharges() >= 2 |
||||||
|
end |
||||||
|
|
||||||
|
local function ShouldUseEnvelopingMist() |
||||||
|
return Player:GetAuras():FindMy(StrengthOfTheBlackOx):IsUp() |
||||||
|
end |
||||||
|
|
||||||
|
local function NeedsUrgentHealing() |
||||||
|
return Lowest:GetHP() < 70 or Player:GetPartyHPAround(30, 80) >= 3 |
||||||
|
end |
||||||
|
|
||||||
|
-- Default APL |
||||||
|
DefaultAPL:AddSpell( |
||||||
|
SheilunsGift:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetPartyHPAround(40, 80) >= 3 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
DefaultAPL:AddSpell( |
||||||
|
Vivify:CastableIf(function(self) |
||||||
|
return Lowest:Exists() and Lowest:GetHP() < 70 and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Lowest) |
||||||
|
) |
||||||
|
|
||||||
|
DefaultAPL:AddSpell( |
||||||
|
RenewingMist:CastableIf(function(self) |
||||||
|
return ShouldUseRenewingMist() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Lowest) |
||||||
|
) |
||||||
|
|
||||||
|
DefaultAPL:AddSpell( |
||||||
|
RisingSunKick:CastableIf(function(self) |
||||||
|
return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
DefaultAPL:AddSpell( |
||||||
|
ThunderFocusTea:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
DefaultAPL:AddSpell( |
||||||
|
EnvelopingMist:CastableIf(function(self) |
||||||
|
return Lowest:Exists() and ShouldUseEnvelopingMist() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Lowest) |
||||||
|
) |
||||||
|
|
||||||
|
DefaultAPL:AddSpell( |
||||||
|
TigerPalm:CastableIf(function(self) |
||||||
|
return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
-- Cooldown APL |
||||||
|
CooldownAPL:AddSpell( |
||||||
|
CelestialConduit:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetPartyHPAround(40, 70) >= 3 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
CooldownAPL:AddSpell( |
||||||
|
InvokeChiJi:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetPartyHPAround(40, 85) >= 2 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
CooldownAPL:AddSpell( |
||||||
|
InvokeYulon:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetPartyHPAround(40, 75) >= 3 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
CooldownAPL:AddSpell( |
||||||
|
ManaTea:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetMana() < 50 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
-- Defensive APL |
||||||
|
DefensiveAPL:AddSpell( |
||||||
|
FortifyingBrew:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetHP() < 50 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
DefensiveAPL:AddSpell( |
||||||
|
DiffuseMagic:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetHP() < 70 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
DefensiveAPL:AddSpell( |
||||||
|
LifeCocoon:CastableIf(function(self) |
||||||
|
return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Lowest:GetHP() < 40 |
||||||
|
end):SetTarget(Lowest) |
||||||
|
) |
||||||
|
|
||||||
|
-- DPS APL |
||||||
|
DpsAPL:AddSpell( |
||||||
|
JadefireStomp:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
DpsAPL:AddSpell( |
||||||
|
RisingSunKick:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:IsWithinCombatDistance(Target, 5) -- Assuming 5 is melee range |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
DpsAPL:AddSpell( |
||||||
|
SpinningCraneKick:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetEnemies(8) >= 2 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
DpsAPL:AddSpell( |
||||||
|
BlackoutKick:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:IsWithinCombatDistance(Target, 5) |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
DpsAPL:AddSpell( |
||||||
|
TigerPalm:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:IsWithinCombatDistance(Target, 5) |
||||||
|
and Player:GetAuras():FindMy(TeachingsOfTheMonastery):GetCount() < 3 |
||||||
|
end):SetTarget(Target) |
||||||
|
) |
||||||
|
|
||||||
|
DpsAPL:AddSpell( |
||||||
|
SpinningCraneKick:CastableIf(function(self) |
||||||
|
return self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() |
||||||
|
and Player:GetEnemies(8) >= 3 |
||||||
|
end):SetTarget(Player) |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Module Sync |
||||||
|
RestoMonkModule:Sync(function() |
||||||
|
if Player:IsMounted() then |
||||||
|
return |
||||||
|
end |
||||||
|
|
||||||
|
if Player:IsAffectingCombat() then |
||||||
|
DefensiveAPL:Execute() |
||||||
|
|
||||||
|
-- Prioritize DPS in Mythic+, but still maintain healing |
||||||
|
if NeedsUrgentHealing() then |
||||||
|
CooldownAPL:Execute() |
||||||
|
DefaultAPL:Execute() |
||||||
|
else |
||||||
|
DpsAPL:Execute() |
||||||
|
|
||||||
|
-- Weave in essential healing abilities |
||||||
|
if RenewingMist:GetCharges() >= 2 then |
||||||
|
RenewingMist:Cast(Lowest) |
||||||
|
end |
||||||
|
|
||||||
|
if Vivify:IsKnownAndUsable() and Lowest:GetHP() < 80 then |
||||||
|
Vivify:Cast(Lowest) |
||||||
|
end |
||||||
|
end |
||||||
|
else |
||||||
|
-- Out of combat logic |
||||||
|
if Lowest:GetHP() < 90 then |
||||||
|
DefaultAPL:Execute() |
||||||
|
end |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
Bastion:Register(RestoMonkModule) |
||||||
|
|
Loading…
Reference in new issue