44 lines
1.3 KiB
Lua
44 lines
1.3 KiB
Lua
-----------------------------------
|
|
-- Global file for ability AoE type and radius calculations.
|
|
-----------------------------------
|
|
xi = xi or {}
|
|
xi.combat = xi.combat or {}
|
|
xi.combat.abilityAoE = xi.combat.abilityAoE or {}
|
|
-----------------------------------
|
|
|
|
-- Calculate ability AoE type and radius based on caster modifiers.
|
|
-- Used in core.
|
|
---@param caster CBaseEntity
|
|
---@param ability CAbility
|
|
---@return [xi.aoeType, number]
|
|
xi.combat.abilityAoE.calculateTypeAndRadius = function(caster, ability)
|
|
local baseType = ability:getAOE()
|
|
local baseRadius = ability:getRadius()
|
|
local recastId = ability:getRecastID()
|
|
|
|
-- Epeolatry makes Liement a 10y AoE
|
|
if
|
|
ability:getID() == xi.jobAbility.LIEMENT and
|
|
caster:getMod(xi.mod.LIEMENT_EXTENDS_TO_AREA) > 0
|
|
then
|
|
return { xi.aoeType.ROUND, 10 }
|
|
end
|
|
|
|
-- Contradance makes Healing Waltz a 10y AoE
|
|
if
|
|
ability:getID() == xi.jobAbility.HEALING_WALTZ and
|
|
caster:hasStatusEffect(xi.effect.CONTRADANCE)
|
|
then
|
|
return { xi.aoeType.ROUND, 10 }
|
|
end
|
|
|
|
-- Luzaf's Ring increases COR roll radius (8y -> 16y)
|
|
if
|
|
recastId == xi.recastID.PHANTOM_ROLL or
|
|
recastId == xi.recastID.DOUBLE_UP
|
|
then
|
|
return { xi.aoeType.ROUND, baseRadius + caster:getMod(xi.mod.ROLL_RANGE) }
|
|
end
|
|
|
|
return { baseType, baseRadius }
|
|
end
|