|  |  |  | @ -107,6 +107,8 @@ 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 | 
			
		
	
	
		
			
				
					|  |  |  | @ -385,6 +387,104 @@ local Explosive = Bastion.UnitManager:CreateCustomUnit('explosive', function(uni | 
			
		
	
		
			
				
					|  |  |  |  |     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 | 
			
		
	
	
		
			
				
					|  |  |  | @ -397,6 +497,29 @@ 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( | 
			
		
	
		
			
				
					|  |  |  |  |     Moonfire:CastableIf(function(self) | 
			
		
	
		
			
				
					|  |  |  |  |         return Explosive:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() | 
			
		
	
	
		
			
				
					|  |  |  | @ -413,12 +536,20 @@ DefaultAPL:AddSpell( | 
			
		
	
		
			
				
					|  |  |  |  |     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:GetAuras():FindMy(CatForm):IsUp() and not Player:IsCastingOrChanneling() then | 
			
		
	
		
			
				
					|  |  |  |  |         if (IsShiftKeyDown() or not Player:IsAffectingCombat()) and not Player:IsMounted() and | 
			
		
	
		
			
				
					|  |  |  |  |             not Player:GetAuras():FindMy(CatForm):IsUp() and | 
			
		
	
		
			
				
					|  |  |  |  |             not Player:IsCastingOrChanneling() then | 
			
		
	
		
			
				
					|  |  |  |  |             CatForm:Cast(Player) | 
			
		
	
		
			
				
					|  |  |  |  |         elseif not IsShiftKeyDown() and Player:GetAuras():FindMy(CatForm):IsUp() then | 
			
		
	
		
			
				
					|  |  |  |  |         elseif (not IsShiftKeyDown() and Player:IsAffectingCombat()) and Player:GetAuras():FindMy(CatForm):IsUp() then | 
			
		
	
		
			
				
					|  |  |  |  |             CancelShapeshiftForm() | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
	
		
			
				
					|  |  |  | @ -585,26 +716,26 @@ DefaultAPL:AddSpell( | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | DefaultAPL:AddSpell( | 
			
		
	
		
			
				
					|  |  |  |  |     Sunfire:CastableIf(function(self) | 
			
		
	
		
			
				
					|  |  |  |  |         return Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() | 
			
		
	
		
			
				
					|  |  |  |  |             and Player:CanSee(Target) and | 
			
		
	
		
			
				
					|  |  |  |  |         return SunfireTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() | 
			
		
	
		
			
				
					|  |  |  |  |             and Player:CanSee(SunfireTarget) and | 
			
		
	
		
			
				
					|  |  |  |  |             ( | 
			
		
	
		
			
				
					|  |  |  |  |             not Target:GetAuras():FindMy(SunfireAura):IsUp() or | 
			
		
	
		
			
				
					|  |  |  |  |                 Target:GetAuras():FindMy(SunfireAura):GetRemainingTime() <= 5.4) and | 
			
		
	
		
			
				
					|  |  |  |  |             Target:IsHostile() and | 
			
		
	
		
			
				
					|  |  |  |  |             Target:IsAffectingCombat() and Player:GetPP() >= 25 | 
			
		
	
		
			
				
					|  |  |  |  |     end):SetTarget(Target) | 
			
		
	
		
			
				
					|  |  |  |  |             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 Target:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() | 
			
		
	
		
			
				
					|  |  |  |  |             and Player:CanSee(Target) and | 
			
		
	
		
			
				
					|  |  |  |  |         return MoonfireTarget:Exists() and self:IsKnownAndUsable() and not Player:IsCastingOrChanneling() | 
			
		
	
		
			
				
					|  |  |  |  |             and Player:CanSee(MoonfireTarget) and | 
			
		
	
		
			
				
					|  |  |  |  |             ( | 
			
		
	
		
			
				
					|  |  |  |  |             not Target:GetAuras():FindMy(MoonfireAura):IsUp() or | 
			
		
	
		
			
				
					|  |  |  |  |                 Target:GetAuras():FindMy(MoonfireAura):GetRemainingTime() <= 5.4) and | 
			
		
	
		
			
				
					|  |  |  |  |             Target:IsHostile() and | 
			
		
	
		
			
				
					|  |  |  |  |             Target:IsAffectingCombat() and Player:GetPP() >= 25 | 
			
		
	
		
			
				
					|  |  |  |  |     end):SetTarget(Target) | 
			
		
	
		
			
				
					|  |  |  |  |             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( | 
			
		
	
	
		
			
				
					|  |  |  | 
 |