local Tinkr, _Bastion = ... ---@type Bastion local Bastion = _Bastion local ProtModule = Bastion.Module:New('paladin_protection') local Player = Bastion.UnitManager:Get('player') local Target = Bastion.UnitManager:Get('target') local CrusaderAura = Bastion.SpellBook:GetSpell(32223) local DevoAura = Bastion.SpellBook:GetSpell(465) local Consecrate = Bastion.SpellBook:GetSpell(26573) local ConsecrateAura = Bastion.SpellBook:GetSpell(188370) local Judgement = Bastion.SpellBook:GetSpell(275779) ---@return boolean local function CombatRotation() -- Cast Consecrate if an enemy is in range, and the player isnt moving. if Consecrate:IsKnownAndUsable() and not Player:IsMoving() and not Player:GetAuras():FindMy(ConsecrateAura):IsUp() and Player:GetEnemies(10) >= 1 then return Consecrate:Cast(Player) end if Judgement:IsKnownAndUsable() and Target:Exists() and not Player:IsCastingOrChanneling() and Judgement:IsInRange(Target) then return Judgement:Cast(Target) end return false end ---@return boolean local function OutOfCombatRotation() return false end local isRunning = false ProtModule:Sync(function() if not isRunning then Bastion:Print('Prot Paladin Started') isRunning = true end if not Player:IsAlive() then return false end -- Cast Crusader Aura if talented and the player is mounted. if Player:IsMounted() and CrusaderAura:IsKnownAndUsable() and not Player:GetAuras():FindMy(CrusaderAura):IsUp() and not Player:IsCastingOrChanneling() then return CrusaderAura:Cast(Player) end -- Cast Devo Aura if the player is not mounted. if not Player:IsMounted() and DevoAura:IsKnownAndUsable() and not Player:GetAuras():FindMy(DevoAura):IsUp() and not Player:IsCastingOrChanneling() then return DevoAura:Cast(Player) end if Player:IsAffectingCombat() then -- Combat Rotation return CombatRotation() else -- Out Of Combat Rotation return OutOfCombatRotation() end end) Bastion:Register(ProtModule)