local Tinkr, Bastion = ... local RestoModule = Bastion.Module:New('resto_druid') local Evaluator = Tinkr.Util.Evaluator local Player = Bastion.UnitManager:Get('player') local None = Bastion.UnitManager:Get('none') local Target = Bastion.UnitManager:Get('target') local AnomalyDetectionMarkI = Bastion.SpellBook:GetSpell(382499) local AutoAttack = Bastion.SpellBook:GetSpell(6603) local MechanismBypass = Bastion.SpellBook:GetSpell(382501) local OverloadElementalDeposit = Bastion.SpellBook:GetSpell(388213) local ReviveBattlePets = Bastion.SpellBook:GetSpell(125439) local WarStomp = Bastion.SpellBook:GetSpell(20549) local ArmorSkills = Bastion.SpellBook:GetSpell(76275) local Brawn = Bastion.SpellBook:GetSpell(154743) local Cultivation = Bastion.SpellBook:GetSpell(20552) local Endurance = Bastion.SpellBook:GetSpell(20550) local Languages = Bastion.SpellBook:GetSpell(79746) local MasterRiding = Bastion.SpellBook:GetSpell(90265) local NatureResistance = Bastion.SpellBook:GetSpell(20551) local WeaponSkills = Bastion.SpellBook:GetSpell(76300) local ActivateEmpowerment = Bastion.SpellBook:GetSpell(357857) local BlessingofOhnara = Bastion.SpellBook:GetSpell(384522) local BronzeTimelock = Bastion.SpellBook:GetSpell(374990) local ChampionAbility = Bastion.SpellBook:GetSpell(356550) local CenarionWard = Bastion.SpellBook:GetSpell(102351) local CombatAlly = Bastion.SpellBook:GetSpell(211390) local ConstructAbility = Bastion.SpellBook:GetSpell(347013) local CovenantAbility = Bastion.SpellBook:GetSpell(313347) local GarrisonAbility = Bastion.SpellBook:GetSpell(161691) local HeartEssence = Bastion.SpellBook:GetSpell(296208) local HuntingCompanion = Bastion.SpellBook:GetSpell(376280) local SanityRestorationOrb = Bastion.SpellBook:GetSpell(314955) local SignatureAbility = Bastion.SpellBook:GetSpell(326526) local SkywardAscent = Bastion.SpellBook:GetSpell(372610) local SummonPocopoc = Bastion.SpellBook:GetSpell(360078) local SurgeForward = Bastion.SpellBook:GetSpell(372608) local Throw = Bastion.SpellBook:GetSpell(385265) local VenthyrAbility = Bastion.SpellBook:GetSpell(315594) local WartimeAbility = Bastion.SpellBook:GetSpell(264739) local WhirlingSurge = Bastion.SpellBook:GetSpell(361584) local PocopocZoneAbilitySkill = Bastion.SpellBook:GetSpell(363942) local DragonridingBasics = Bastion.SpellBook:GetSpell(376777) local LiftOff = Bastion.SpellBook:GetSpell(383363) local ThrilloftheSkies = Bastion.SpellBook:GetSpell(383366) local Vigor = Bastion.SpellBook:GetSpell(383359) local WindsoftheIsles = Bastion.SpellBook:GetSpell(373586) local Barkskin = Bastion.SpellBook:GetSpell(22812) local BearForm = Bastion.SpellBook:GetSpell(5487) local CatForm = Bastion.SpellBook:GetSpell(768) local Cyclone = Bastion.SpellBook:GetSpell(33786) local EntanglingRoots = Bastion.SpellBook:GetSpell(339) local FerociousBite = Bastion.SpellBook:GetSpell(22568) local FrenziedRegeneration = Bastion.SpellBook:GetSpell(22842) local Growl = Bastion.SpellBook:GetSpell(6795) local Innervate = Bastion.SpellBook:GetSpell(29166) local Mangle = Bastion.SpellBook:GetSpell(33917) local MarkoftheWild = Bastion.SpellBook:GetSpell(1126) local Moonfire = Bastion.SpellBook:GetSpell(8921) local MoonfireAura = Bastion.SpellBook:GetSpell(164812) local Prowl = Bastion.SpellBook:GetSpell(5215) local Rebirth = Bastion.SpellBook:GetSpell(20484) local Regrowth = Bastion.SpellBook:GetSpell(8936) local Rejuvenation = Bastion.SpellBook:GetSpell(774) local RejuvenationAura = Bastion.SpellBook:GetSpell(25299) local Revive = Bastion.SpellBook:GetSpell(50769) local Rip = Bastion.SpellBook:GetSpell(1079) local Shred = Bastion.SpellBook:GetSpell(5221) local Soothe = Bastion.SpellBook:GetSpell(2908) local StampedingRoar = Bastion.SpellBook:GetSpell(106898) local Sunfire = Bastion.SpellBook:GetSpell(93402) local SunfireAura = Bastion.SpellBook:GetSpell(164815) local Swiftmend = Bastion.SpellBook:GetSpell(18562) local TeleportMoonglade = Bastion.SpellBook:GetSpell(18960) local Thrash = Bastion.SpellBook:GetSpell(106832) local TigerDash = Bastion.SpellBook:GetSpell(252216) local TravelForm = Bastion.SpellBook:GetSpell(783) local UrsolsVortex = Bastion.SpellBook:GetSpell(102793) local WildGrowth = Bastion.SpellBook:GetSpell(48438) local Wrath = Bastion.SpellBook:GetSpell(5176) local AquaticForm = Bastion.SpellBook:GetSpell(276012) local FlightForm = Bastion.SpellBook:GetSpell(276029) local TigerDash = Bastion.SpellBook:GetSpell(252216) local Efflorescence = Bastion.SpellBook:GetSpell(145205) local IncarnationTreeofLife = Bastion.SpellBook:GetSpell(33891) local Ironbark = Bastion.SpellBook:GetSpell(102342) local Lifebloom = Bastion.SpellBook:GetSpell(33763) local LifebloomAura = Bastion.SpellBook:GetSpell(188550) local NaturesCure = Bastion.SpellBook:GetSpell(88423) local NaturesSwiftness = Bastion.SpellBook:GetSpell(132158) local Revitalize = Bastion.SpellBook:GetSpell(212040) local Tranquility = Bastion.SpellBook:GetSpell(740) local MasteryHarmony = Bastion.SpellBook:GetSpell(77495) local Moonfire = Bastion.SpellBook:GetSpell(8921) local Wrath = Bastion.SpellBook:GetSpell(5176) local BearForm = Bastion.SpellBook:GetSpell(5487) local AdaptiveSwarm = Bastion.SpellBook:GetSpell(391888) local AdaptiveSwarmBuff = Bastion.SpellBook:GetSpell(391891) local ClearCasting = Bastion.SpellBook:GetSpell(16870) local ConvokeTheSpirits = Bastion.SpellBook:GetSpell(391528) local Flourish = Bastion.SpellBook:GetSpell(197721) local SoulOfTheForest = Bastion.SpellBook:GetSpell(114108) local Bursting = Bastion.SpellBook:GetSpell(240443) local Rake = Bastion.SpellBook:GetSpell(1822) local RakeAura = Bastion.SpellBook:GetSpell(155722) local Starsurge = Bastion.SpellBook:GetSpell(197626) local NaturesVigil = Bastion.SpellBook:GetSpell(124974) local SpringBlossoms = Bastion.SpellBook:GetSpell(207386) local RakeDebuff = Bastion.SpellBook:GetSpell(155722) local Lowest = Bastion.UnitManager:CreateCustomUnit('lowest', function(unit) local lowest = nil local lowestHP = math.huge Bastion.UnitManager:EnumFriends(function(unit) if unit:IsDead() then return false end if Player:GetDistance(unit) > 40 then return false end if not Player:CanSee(unit) then return false end local hp = unit:GetHP() if hp < lowestHP then lowest = unit lowestHP = hp end end) if not lowest then lowest = Player end return lowest end) local DispelTarget = Bastion.UnitManager:CreateCustomUnit('dispel', function(unit) local lowest = nil local lowestHP = math.huge Bastion.UnitManager:EnumFriends(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 not unit:IsDead() and Player:CanSee(unit) and unit:GetAuras():HasAnyDispelableAura(NaturesCure) then local hp = unit:GetHP() if hp < lowestHP then lowest = unit lowestHP = hp end end end) if lowest == nil then lowest = None end return lowest end) local PurgeTarget = Bastion.UnitManager:CreateCustomUnit('purge', function(unit) 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 not unit:IsDead() and Player:CanSee(unit) and unit:GetAuras():HasAnyStealableAura() 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 = Player end return tank end) local RejuvUnit = Bastion.UnitManager:CreateCustomUnit('rejuv', function(unit) local lowest = nil local lowestHP = math.huge Bastion.UnitManager:EnumFriends(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 not unit:IsDead() and Player:CanSee(unit) and ( not unit:GetAuras():FindMy(Rejuvenation):IsUp() or unit:GetAuras():FindMy(Rejuvenation):GetRemainingTime() <= 3.6) then local hp = unit:GetHP() if hp < lowestHP then lowest = unit lowestHP = hp end end end) if lowest == nil then lowest = Player end return lowest end) local SwiftmendUnit = Bastion.UnitManager:CreateCustomUnit('swiftmend', function(unit) local lowest = nil local lowestHP = math.huge Bastion.UnitManager:EnumFriends(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:CanSee(unit) and ( (unit:GetAuras():FindMy(Regrowth):IsUp()) or ( unit:GetAuras():FindMy(Rejuvenation):IsUp() and not unit:GetAuras():FindMy(WildGrowth):IsUp()) ) ) then local hp = unit:GetHP() if hp < lowestHP then lowest = unit lowestHP = hp end end end) if lowest == nil then lowest = None end return lowest end) local WildGrowthUnit = Bastion.UnitManager:CreateCustomUnit('wildgrowth', function(unit) local lowest = nil local lowestHP = math.huge Bastion.UnitManager:EnumFriends(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:CanSee(unit) and ( ( Player:GetAuras():FindMy(SoulOfTheForest):IsUp() and ( Player:GetAuras():FindMy(SoulOfTheForest):GetRemainingTime() <= 5 or unit:GetPartyHPAround(30, 90) >= 2)) or (unit:GetPartyHPAround(30, 90) >= 3 or unit:GetPartyHPAround(30, 85) >= 2)) then local hp = unit:GetHP() if hp < lowestHP then lowest = unit lowestHP = hp end end end) if lowest == nil then lowest = None end return lowest end) local Explosive = Bastion.UnitManager:CreateCustomUnit('explosive', function(unit) local explosive = nil Bastion.ObjectManager.explosives:each(function(unit) if unit:IsDead() then return false end if not Player:CanSee(unit) then return false end if Player:GetDistance(unit) <= 40 then explosive = unit return true end end) if explosive == nil then explosive = None end return explosive end) local RakeTarget = Bastion.UnitManager:CreateCustomUnit('rake', function(unit) local rakeTarget = 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 not unit:IsDead() and Player:CanSee(unit) and unit:InCombatOdds() > 80 and unit:InMelee(Player) and Player:IsFacing(unit) and ( not unit:GetAuras():FindMy(RakeDebuff):IsUp() or unit:GetAuras():FindMy(RakeDebuff):GetRemainingTime() <= 3.6) then rakeTarget = unit end end) if rakeTarget == nil then rakeTarget = None end return rakeTarget end) local MoonfireTarget = Bastion.UnitManager:CreateCustomUnit('moonfire', function(unit) local moonfireTarget = 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 not unit:IsDead() and Player:CanSee(unit) and unit:InCombatOdds() > 80 and ( not unit:GetAuras():FindMy(MoonfireAura):IsUp() or unit:GetAuras():FindMy(MoonfireAura):GetRemainingTime() <= 3.6) then moonfireTarget = unit end end) if moonfireTarget == nil then moonfireTarget = None end return moonfireTarget end) local SunfireTarget = Bastion.UnitManager:CreateCustomUnit('sunfire', function(unit) local sunfireTarget = 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 not unit:IsDead() and Player:CanSee(unit) and unit:InCombatOdds() > 80 and ( not unit:GetAuras():FindMy(SunfireAura):IsUp() or unit:GetAuras():FindMy(SunfireAura):GetRemainingTime() <= 3.6) then sunfireTarget = unit end end) if sunfireTarget == nil then sunfireTarget = None end return sunfireTarget end) local RestoCommands = Bastion.Command:New('resto') local PLACE_EFFLO = false RestoCommands:Register('efflo', 'Request the engine to place an Efflorescence', function() PLACE_EFFLO = true Bastion.Notifications:AddNotification(Efflorescence:GetIcon(), "Efflorescence requested") end) local DefaultAPL = Bastion.APL:New('default') local DamageAPL = Bastion.APL:New('damage') DamageAPL:AddSpell( Rake:CastableIf(function(self) return RakeTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and ( not RakeTarget:GetAuras():FindMy(RakeDebuff):IsUp() or RakeTarget:GetAuras():FindMy(RakeDebuff):GetRemainingTime() <= 3.6) end):SetTarget(RakeTarget) ) DamageAPL:AddSpell( FerociousBite:CastableIf(function(self) return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:GetComboPoints() >= 5 end):SetTarget(Target) ) DamageAPL:AddSpell( Shred:CastableIf(function(self) return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:GetComboPoints() < 5 end):SetTarget(Target) ) DefaultAPL:AddSpell( Efflorescence:CastableIf(function(self) return PLACE_EFFLO and Player:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() end):SetTarget(None):OnCast(function(self) local loc = Bastion.UnitManager:FindFriendsCentroid(10, 40) PLACE_EFFLO = false self:Click(loc) end) ) CatForm:OnCast(function(self) if not Player:GetAuras():FindMy(Prowl):IsUp() and not Player:IsAffectingCombat() then Prowl:Cast(Player) end end) DefaultAPL:AddAction( 'cat_form_shift', function() if (IsShiftKeyDown()) and not Player:IsMounted() and not Player:GetAuras():FindMy(CatForm):IsUp() and not Player:IsCastingOrChanneling() then CatForm:Cast(Player) elseif (not IsShiftKeyDown() and Player:IsAffectingCombat()) and Player:GetAuras():FindMy(CatForm):IsUp() then CancelShapeshiftForm() end end ) DefaultAPL:AddSpell( NaturesCure:CastableIf(function(self) return DispelTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and self:IsInRange(DispelTarget) and DispelTarget:GetAuras():HasAnyDispelableAura(NaturesCure) end):SetTarget(DispelTarget) ) DefaultAPL:AddSpell( Soothe:CastableIf(function(self) return PurgeTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and self:IsInRange(PurgeTarget) and PurgeTarget:GetAuras():HasAnyStealableAura() end):SetTarget(PurgeTarget) ) DefaultAPL:AddSpell( NaturesSwiftness:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) and Lowest:GetHP() < 70 end):SetTarget(Lowest) ) DefaultAPL:AddSpell( ConvokeTheSpirits:CastableIf(function(self) return Player:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and self:IsInRange(Player) and (Player:GetPartyHPAround(40, 70) >= 2 or Player:GetPartyHPAround(40, 75) >= 3) and (Flourish:IsKnownAndUsable() or Flourish:GetTimeSinceLastCast() > 10) end):SetTarget(Player) ) DefaultAPL:AddSpell( Flourish:CastableIf(function(self) return Player:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and self:IsInRange(Player) and (Player:GetPartyHPAround(40, 70) >= 2 or Player:GetPartyHPAround(40, 75) >= 3) and (not ConvokeTheSpirits:IsKnownAndUsable() and ConvokeTheSpirits:GetTimeSinceLastCast() > 10) and WildGrowth:GetTimeSinceLastCast() <= 6 end):SetTarget(Player) ) DefaultAPL:AddSpell( NaturesVigil:CastableIf(function(self) return Player:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and self:IsInRange(Player) and Flourish:GetTimeSinceLastCast() <= 5 end):SetTarget(Player) ) DefaultAPL:AddSpell( AdaptiveSwarm:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) end):SetTarget(Lowest) ) DefaultAPL:AddSpell( Swiftmend:CastableIf(function(self) return SwiftmendUnit:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(SwiftmendUnit) and ( SwiftmendUnit:GetHP() <= 60 or ( Lowest:GetPartyHPAround(30, 90) >= 3 or Lowest:GetPartyHPAround(30, 85) >= 2 ) ) end):SetTarget(SwiftmendUnit) ) DefaultAPL:AddSpell( WildGrowth:CastableIf(function(self) return WildGrowthUnit:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(WildGrowthUnit) and ( Player:GetAuras():FindMy(SoulOfTheForest):IsUp() or (WildGrowthUnit:GetPartyHPAround(30, 90) >= 3 or WildGrowthUnit:GetPartyHPAround(30, 85) >= 2) ) and not Player:IsMoving() end):SetTarget(WildGrowthUnit) ) DefaultAPL:AddSpell( Regrowth:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) and Lowest:GetHP() < 65 and Player:GetAuras():FindMy(SoulOfTheForest):IsUp() and not Player:IsMoving() end):SetTarget(Lowest) ) DefaultAPL:AddSpell( Regrowth:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) and Lowest:GetHP() < 70 and ( NaturesSwiftness:GetTimeSinceLastCast() < 2 or Player:GetAuras():FindMy(NaturesSwiftness):IsUp() or NaturesSwiftness:IsKnownAndUsable()) and not Player:IsMoving() and not Player:GetAuras():FindMy(SoulOfTheForest):IsUp() end):SetTarget(Lowest) ) DefaultAPL:AddSpell( CenarionWard:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) and Lowest:GetHP() <= 90 end):SetTarget(Lowest) ) DefaultAPL:AddSpell( Ironbark:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) and Lowest:GetHP() <= 70 and not Lowest:GetAuras():FindMy(CenarionWard):IsUp() end):SetTarget(Lowest) ) DefaultAPL:AddSpell( Rejuvenation:CastableIf(function(self) return RejuvUnit:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(RejuvUnit) and (RejuvUnit:GetHP() <= 94) and not Player:GetAuras():FindMy(SoulOfTheForest):IsUp() end):SetTarget(RejuvUnit) ) DefaultAPL:AddSpell( Lifebloom:CastableIf(function(self) return Player:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and ( not Player:GetAuras():FindMy(LifebloomAura):IsUp() or Player:GetAuras():FindMy(LifebloomAura):GetRemainingTime() <= 4.5) and Player:IsAffectingCombat() end):SetTarget(Player) ) DefaultAPL:AddSpell( Lifebloom:CastableIf(function(self) return Tank:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and ( not Tank:GetAuras():FindMy(LifebloomAura):IsUp() or Tank:GetAuras():FindMy(LifebloomAura):GetRemainingTime() <= 4.5) and Tank:IsAffectingCombat() end):SetTarget(Tank) ) DefaultAPL:AddSpell( Regrowth:CastableIf(function(self) return Lowest:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Lowest) and ( not Player:GetAuras():FindMy(Regrowth):IsUp() and Lowest:GetHP() < 70 or (Lowest:GetHP() <= 85 and Player:GetAuras():FindMy(ClearCasting):IsUp())) and not Player:GetAuras():FindMy(SoulOfTheForest):IsUp() and not Player:IsMoving() end):SetTarget(Lowest) ) DefaultAPL:AddSpell( Rejuvenation:CastableIf(function(self) return RejuvUnit:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(RejuvUnit) and (RejuvUnit:GetHP() <= 94 or Player:GetPartyHPAround(40, 90) >= 2) and not Player:GetAuras():FindMy(SoulOfTheForest):IsUp() end):SetTarget(RejuvUnit) ) DefaultAPL:AddSpell( Moonfire:CastableIf(function(self) return Explosive:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() end):SetTarget(Explosive) ) DefaultAPL:AddSpell( Sunfire:CastableIf(function(self) return SunfireTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(SunfireTarget) and ( not SunfireTarget:GetAuras():FindMy(SunfireAura):IsUp() or SunfireTarget:GetAuras():FindMy(SunfireAura):GetRemainingTime() <= 5.4) and SunfireTarget:IsHostile() and SunfireTarget:IsAffectingCombat() and Player:GetPP() >= 25 end):SetTarget(SunfireTarget) ) DefaultAPL:AddSpell( Moonfire:CastableIf(function(self) return MoonfireTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(MoonfireTarget) and ( not MoonfireTarget:GetAuras():FindMy(MoonfireAura):IsUp() or MoonfireTarget:GetAuras():FindMy(MoonfireAura):GetRemainingTime() <= 5.4) and MoonfireTarget:IsHostile() and MoonfireTarget:IsAffectingCombat() and Player:GetPP() >= 25 end):SetTarget(MoonfireTarget) ) DefaultAPL:AddSpell( Starsurge:CastableIf(function(self) return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Target) and Target:IsHostile() and Target:IsAffectingCombat() and Player:GetPP() >= 25 end):SetTarget(Target) ) DefaultAPL:AddSpell( Wrath:CastableIf(function(self) return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() and Player:CanSee(Target) and not Player:IsMoving() and Target:IsHostile() and Target:IsAffectingCombat() and Player:GetPP() >= 25 end):SetTarget(Target) ) RestoModule:Sync(function() if IsShiftKeyDown() and Player:GetAuras():FindMy(CatForm):IsUp() then return DamageAPL:Execute() end DefaultAPL:Execute() end) Bastion:Register(RestoModule)