An open-source suite of rotations for the Caffeine Quest, Grind, and Gather bots. Intended for leveling and open-world content.
https://caffeine.cx/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.7 KiB
154 lines
5.7 KiB
local Unlocker, Caffeine = ...
|
|
|
|
local OpenFury = Caffeine.Module:New('OpenFury')
|
|
|
|
-- Units
|
|
local player = Caffeine.UnitManager:Get('player')
|
|
local target = Caffeine.UnitManager:Get('target')
|
|
local none = Caffeine.UnitManager:Get('none')
|
|
|
|
-- Spells
|
|
local battle_shout = Caffeine.Globals.SpellBook:GetSpell(6673)
|
|
local berserker_stance = Caffeine.Globals.SpellBook:GetSpell(386196)
|
|
local charge = Caffeine.Globals.SpellBook:GetSpell(100)
|
|
local hamstring = Caffeine.Globals.SpellBook:GetSpell(1715)
|
|
local heroic_leap = Caffeine.Globals.SpellBook:GetSpell(6544)
|
|
local heroic_throw = Caffeine.Globals.SpellBook:GetSpell(57755)
|
|
local impending_victory = Caffeine.Globals.SpellBook:GetSpell(202168)
|
|
local pummel = Caffeine.Globals.SpellBook:GetSpell(6552)
|
|
local rallying_cry = Caffeine.Globals.SpellBook:GetSpell(97462)
|
|
local shield_block = Caffeine.Globals.SpellBook:GetSpell(2565)
|
|
local shield_slam = Caffeine.Globals.SpellBook:GetSpell(23922)
|
|
local slam = Caffeine.Globals.SpellBook:GetSpell(1464)
|
|
local spell_reflection = Caffeine.Globals.SpellBook:GetSpell(23920)
|
|
local taunt = Caffeine.Globals.SpellBook:GetSpell(355)
|
|
local avatar = Caffeine.Globals.SpellBook:GetSpell(107574)
|
|
local bloodthirst = Caffeine.Globals.SpellBook:GetSpell(23881)
|
|
local defensive_stance = Caffeine.Globals.SpellBook:GetSpell(386208)
|
|
local enraged_regeneration = Caffeine.Globals.SpellBook:GetSpell(184364)
|
|
local execute = Caffeine.Globals.SpellBook:GetSpell(280735)
|
|
local odyns_fury = Caffeine.Globals.SpellBook:GetSpell(385059)
|
|
local raging_blow = Caffeine.Globals.SpellBook:GetSpell(85288)
|
|
local rampage = Caffeine.Globals.SpellBook:GetSpell(184367)
|
|
local recklessness = Caffeine.Globals.SpellBook:GetSpell(1719)
|
|
local whirlwind = Caffeine.Globals.SpellBook:GetSpell(190411)
|
|
local spear_of_bastion = Caffeine.Globals.SpellBook:GetSpell(376079)
|
|
|
|
|
|
-- Auras
|
|
local enrage_buff = Caffeine.Globals.SpellBook:GetSpell(184362)
|
|
local whirlwind_buff = Caffeine.Globals.SpellBook:GetSpell(85739)
|
|
|
|
-- APLs
|
|
local default_apl = Caffeine.APL:New('default')
|
|
|
|
--[[
|
|
Talents
|
|
BgEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAChIoEARQICEFIhIQkESSaJRSkgQkkEpEgkIJBAAABEE
|
|
]]
|
|
|
|
-- Whirlwind to maintain buff (if 2+ targets)
|
|
default_apl:AddSpell(
|
|
whirlwind:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and not Player:GetAuras():FindMy(whirlwind_buff):IsUp() and Player:GetEnemies(8) > 1
|
|
end):SetTarget(None)
|
|
)
|
|
|
|
-- If not Enraged, use Rampage if available or use Bloodthirst
|
|
default_apl:AddSpell(
|
|
rampage:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and not Player:GetAuras():FindMy(enrage_buff):IsUp() and Player:GetPower() >= 80
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
default_apl:AddSpell(
|
|
bloodthirst:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and not Player:GetAuras():FindMy(enrage_buff):IsUp()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- Recklessness/Avatar
|
|
default_apl:AddSpell(
|
|
recklessness:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and Player:GetAuras():FindMy(enrage_buff):IsUp()
|
|
end):SetTarget(None)
|
|
)
|
|
|
|
default_apl:AddSpell(
|
|
avatar:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and Player:GetAuras():FindMy(enrage_buff):IsUp()
|
|
end):SetTarget(None)
|
|
)
|
|
|
|
-- Spear of Bastion while enraged on CD
|
|
default_apl:AddSpell(
|
|
spear_of_bastion:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and Player:GetAuras():FindMy(enrage_buff):IsUp()
|
|
end):SetTarget(None):OnCast(function(self)
|
|
local loc = Caffeine.UnitManager:FindEnemiesCentroid(4, 20)
|
|
self:Click(loc)
|
|
end)
|
|
)
|
|
|
|
-- Odyn's Fury while enraged on CD
|
|
default_apl:AddSpell(
|
|
odyns_fury:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and Player:GetAuras():FindMy(enrage_buff):IsUp()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- Rampage when available
|
|
default_apl:AddSpell(
|
|
rampage:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and Player:GetPower() >= 80
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- Execute when able
|
|
default_apl:AddSpell(
|
|
execute:CastableIf(function(self)
|
|
return self:IsKnownAndUsable() and Target:GetHP() <= 35
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- Raging Blow if available
|
|
default_apl:AddSpell(
|
|
raging_blow:CastableIf(function(self)
|
|
return self:IsKnownAndUsable()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- Bloodthirst filler
|
|
default_apl:AddSpell(
|
|
bloodthirst:CastableIf(function(self)
|
|
return self:IsKnownAndUsable()
|
|
end):SetTarget(Target)
|
|
)
|
|
|
|
-- Whirlwind filler
|
|
default_apl:AddSpell(
|
|
whirlwind:CastableIf(function(self)
|
|
return self:IsKnownAndUsable()
|
|
end):SetTarget(None)
|
|
)
|
|
|
|
OpenFury:Sync(function()
|
|
if not player:IsFacing(target) and target:Exists() and not target:IsDead() then
|
|
Caffeine.Util:FaceUnit(target)
|
|
end
|
|
|
|
if not player:InMelee(target) and target:Exists() and not target:IsDead() and target:IsHostile() then
|
|
local tx, ty, tz = ObjectPosition('target')
|
|
local px, py, pz = ObjectPosition('player')
|
|
if GetTime() - move_to_timer > 0.5 and FastDistance(px, py, pz, tx, ty, tz) > 5 then
|
|
MoveTo(tx, ty, tz)
|
|
move_to_timer = GetTime()
|
|
end
|
|
end
|
|
|
|
if player:IsAffectingCombat() and target:Exists() and target:IsHostile() and not target:IsDead() and player:IsFacing(target) then
|
|
default_apl:Execute()
|
|
end
|
|
end)
|
|
|
|
Caffeine:Register(OpenFury) |