landsandboat/scripts/mixins/rage.lua
2025-09-14 22:15:15 -06:00

58 lines
1.9 KiB
Lua

--[[
Mobs that enter rage mode after a specified amount of time in combat. Controlled by following vars that can be set onMobSpawn:
localVar default description
-------- ------- -----------
rageTimer 1200 seconds into combat at which point the mob will rage.
https://ffxiclopedia.fandom.com/wiki/Rage
--]]
require('scripts/globals/mixins')
g_mixins = g_mixins or {}
g_mixins.rage = function(rageMob)
rageMob:addListener('PRESPAWN', 'RAGE_SPAWN', function(mob)
mob:setLocalVar('[rage]timer', 1200) -- 20 minutes
end)
rageMob:addListener('ENGAGE', 'RAGE_ENGAGE', function(mob)
mob:setLocalVar('[rage]at', GetSystemTime() + mob:getLocalVar('[rage]timer'))
end)
rageMob:addListener('COMBAT_TICK', 'RAGE_CTICK', function(mob)
if
mob:getLocalVar('[rage]started') == 0 and
GetSystemTime() > mob:getLocalVar('[rage]at')
then
mob:setLocalVar('[rage]started', 1)
-- boost stats
for i = xi.mod.STR, xi.mod.CHR do
local amt = math.ceil(mob:getStat(i) * 9)
mob:setLocalVar('[rage]mod_' .. i, amt)
mob:addMod(i, amt)
end
-- TODO: ATT, DEF, MACC, MATT, EVA, attack speed all increase
end
end)
-- Todo: should happen when mob begins to regen while unclaimed. If 1st healing tick hasn't happened, retail mob is stil raged.
rageMob:addListener('DISENGAGE', 'RAGE_DISENGAGE', function(mob)
if mob:getLocalVar('[rage]started') == 1 then
mob:setLocalVar('[rage]started', 0)
-- unboost stats
for i = xi.mod.STR, xi.mod.CHR do
local amt = mob:getLocalVar('[rage]mod_' .. i)
mob:delMod(i, amt)
end
-- TODO: ATT, DEF, MACC, MATT, EVA, attack speed all decrease
end
end)
end
return g_mixins.rage