diff --git a/scripts/brewmaster.lua b/scripts/brewmaster.lua index 166937b..342e8dc 100644 --- a/scripts/brewmaster.lua +++ b/scripts/brewmaster.lua @@ -8,7 +8,20 @@ local Player = Bastion.UnitManager:Get('player') local Target = Bastion.UnitManager:Get('target') local None = Bastion.UnitManager:Get('none') +local PurifyingBrew = Bastion.SpellBook:GetSpell(119582) +local CelestialBrew = Bastion.SpellBook:GetSpell(322507) +local PurifiedChi = Bastion.SpellBook:GetSpell(325092) local AutoAttack = Bastion.SpellBook:GetSpell(6603) +local ImpCelestialBrew = Bastion.SpellBook:GetSpell(322510) +local ChiWave = Bastion.SpellBook:GetSpell(115098) +local RushingJadeWind = Bastion.SpellBook:GetSpell(116847) +local BreathOfFire = Bastion.SpellBook:GetSpell(115181) +local KegSmash = Bastion.SpellBook:GetSpell(121253) +local WeaponsOfOrder = Bastion.SpellBook:GetSpell(387184) +local BlackoutKick = Bastion.SpellBook:GetSpell(205523) +local RisingSunKick = Bastion.SpellBook:GetSpell(107428) + +local CDsEnabled = false ---@return boolean local function CombatRotation() @@ -17,6 +30,50 @@ local function CombatRotation() AutoAttack:Cast(Target) end + local Stagger = UnitStagger("player") + + if Stagger > 10000 and PurifyingBrew:IsKnownAndUsable() and PurifyingBrew:GetChargesRemaining() > 1 or (PurifyingBrew:GetNextChargeCooldown() <= 3 and PurifyingBrew:GetChargesRemaining() == 1) then + PurifyingBrew:Cast(Player) + end + + if CelestialBrew:IsKnownAndUsable() and (not ImpCelestialBrew:IsKnown() or (ImpCelestialBrew:IsKnown() and Player:GetAuras():FindMy(PurifiedChi):IsUp())) then + return CelestialBrew:Cast(Player) + end + + if not Player:InMelee(Target) then + if not Player:GetAuras():FindMy(RushingJadeWind):IsUp() and RushingJadeWind:IsKnownAndUsable() then + return RushingJadeWind:Cast(Player) + end + if ChiWave:IsKnownAndUsable() and Target:Exists() and ChiWave:IsInRange(Target) then + return ChiWave:Cast(Target) + end + end + + if BreathOfFire:IsKnownAndUsable() and BreathOfFire:IsInRange(Target) then + return BreathOfFire:Cast(Player) + end + + if KegSmash:IsKnownAndUsable() and Target:Exists() and KegSmash:IsInRange(Target) and (KegSmash:GetChargesRemaining() == KegSmash:GetMaxCharges() or (KegSmash:GetChargesRemaining() == (KegSmash:GetMaxCharges() - 1)) and KegSmash:GetNextChargeCooldown() <= 2) then + return KegSmash:Cast(Target) + end + + if WeaponsOfOrder:IsKnownAndUsable() and CDsEnabled then + return WeaponsOfOrder:Cast(Player) + end + + -- Exploding Keg in AOE here + -- Rising Sun Kick In AOE here + + if BlackoutKick:IsKnownAndUsable() and Target:Exists() and BlackoutKick:IsInRange(Target) then + return BlackoutKick:Cast(Target) + end + + if RisingSunKick:IsKnownAndUsable() and Target:Exists() and RisingSunKick:IsInRange(Target) then + return RisingSunKick:Cast(Target) + end + + -- Exploding Keg in ST here + return false end @@ -37,7 +94,7 @@ BrewModule:Sync(function() return false end - if Player:IsAffectingCombat() then + if Player:IsAffectingCombat() or IsCurrentSpell(AutoAttack:GetID()) then -- Combat Rotation return CombatRotation() else diff --git a/src/Spell/Spell.lua b/src/Spell/Spell.lua index 1bfdc9b..35d2d4f 100644 --- a/src/Spell/Spell.lua +++ b/src/Spell/Spell.lua @@ -396,6 +396,18 @@ function Spell:GetChargesRemaining() return charges end +-- Get a spells charge cooldown if applicable +---@return number | nil +function Spell:GetNextChargeCooldown() + local charges, maxCharges, start, duration = GetSpellCharges(self:GetID()) + + if not maxCharges then return nil end + + local nextChargeTime = start + duration + + return nextChargeTime - GetTime() +end + -- Create a condition for the spell ---@param name string ---@param func fun(self:Spell):boolean