58 lines
1.9 KiB
Lua
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
|