From afda2d43594bb3e498dd27ed15d8424519c7930d Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Thu, 26 Feb 2026 03:54:48 +0100 Subject: [PATCH] Add en-spell check to additional effect functions. Clean mob AE sections --- scripts/effects/enaero.lua | 6 +-- scripts/effects/enaero_ii.lua | 6 +-- scripts/effects/enblizzard.lua | 6 +-- scripts/effects/enblizzard_ii.lua | 6 +-- scripts/effects/endark.lua | 14 ++---- scripts/effects/enfire.lua | 6 +-- scripts/effects/enfire_ii.lua | 6 +-- scripts/effects/enlight.lua | 11 ++--- scripts/effects/enstone.lua | 6 +-- scripts/effects/enstone_ii.lua | 6 +-- scripts/effects/enthunder.lua | 6 +-- scripts/effects/enthunder_ii.lua | 6 +-- scripts/effects/enwater.lua | 6 +-- scripts/effects/enwater_ii.lua | 6 +-- .../action_additional_effect_damage.lua | 33 ++++++++++++++ .../action_additional_effect_status.lua | 43 +++++++++++++++++++ .../zones/Batallia_Downs/mobs/Lumber_Jack.lua | 4 -- .../zones/Jugner_Forest/mobs/King_Arthro.lua | 21 ++++----- .../mobs/Olla_Grande.lua | 3 -- 19 files changed, 115 insertions(+), 86 deletions(-) diff --git a/scripts/effects/enaero.lua b/scripts/effects/enaero.lua index 90b6533bd1e..e9f3e78b97c 100644 --- a/scripts/effects/enaero.lua +++ b/scripts/effects/enaero.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.WIND) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.WIND) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enaero_ii.lua b/scripts/effects/enaero_ii.lua index b7b4691a292..8622b8cdc82 100644 --- a/scripts/effects/enaero_ii.lua +++ b/scripts/effects/enaero_ii.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.WIND + 8) -- Tier IIs have higher "enspell IDs" - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.WIND + 8) -- Tier IIs have higher "enspell IDs" + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enblizzard.lua b/scripts/effects/enblizzard.lua index 500f7f2c951..6e865173754 100644 --- a/scripts/effects/enblizzard.lua +++ b/scripts/effects/enblizzard.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.ICE) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.ICE) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enblizzard_ii.lua b/scripts/effects/enblizzard_ii.lua index 163be40420c..123ee7d5aef 100644 --- a/scripts/effects/enblizzard_ii.lua +++ b/scripts/effects/enblizzard_ii.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.ICE + 8) -- Tier IIs have higher "enspell IDs" - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.ICE + 8) -- Tier IIs have higher "enspell IDs" + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/endark.lua b/scripts/effects/endark.lua index b2d0942fde8..4a9e98cb7c1 100644 --- a/scripts/effects/endark.lua +++ b/scripts/effects/endark.lua @@ -7,22 +7,16 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) local jpValue = target:getJobPointLevel(xi.jp.ENDARK_EFFECT) - target:addMod(xi.mod.ENSPELL, xi.element.DARK) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower() + jpValue) - target:addMod(xi.mod.ATT, jpValue) - target:addMod(xi.mod.ACC, jpValue) + effect:addMod(xi.mod.ENSPELL, xi.element.DARK) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower() + jpValue) + effect:addMod(xi.mod.ATT, jpValue) + effect:addMod(xi.mod.ACC, jpValue) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - local jpValue = target:getJobPointLevel(xi.jp.ENDARK_EFFECT) - - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) - target:delMod(xi.mod.ATT, jpValue) - target:delMod(xi.mod.ACC, jpValue) end return effectObject diff --git a/scripts/effects/enfire.lua b/scripts/effects/enfire.lua index 3c17d24a689..68facd4ecd1 100644 --- a/scripts/effects/enfire.lua +++ b/scripts/effects/enfire.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.FIRE) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.FIRE) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enfire_ii.lua b/scripts/effects/enfire_ii.lua index 24ff416ffc8..a135636732d 100644 --- a/scripts/effects/enfire_ii.lua +++ b/scripts/effects/enfire_ii.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.FIRE + 8) -- Tier IIs have higher "enspell IDs" - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.FIRE + 8) -- Tier IIs have higher "enspell IDs" + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enlight.lua b/scripts/effects/enlight.lua index 2e2a03dcca3..b482998a70e 100644 --- a/scripts/effects/enlight.lua +++ b/scripts/effects/enlight.lua @@ -7,20 +7,15 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) local jpValue = target:getJobPointLevel(xi.jp.ENLIGHT_EFFECT) - target:addMod(xi.mod.ENSPELL, xi.element.LIGHT) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower() + jpValue) - target:addMod(xi.mod.ACC, jpValue) + effect:addMod(xi.mod.ENSPELL, xi.element.LIGHT) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower() + jpValue) + effect:addMod(xi.mod.ACC, jpValue) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - local jpValue = target:getJobPointLevel(xi.jp.ENLIGHT_EFFECT) - - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) - target:delMod(xi.mod.ACC, jpValue) end return effectObject diff --git a/scripts/effects/enstone.lua b/scripts/effects/enstone.lua index 541094f6d19..bae98dc6b89 100644 --- a/scripts/effects/enstone.lua +++ b/scripts/effects/enstone.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.EARTH) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.EARTH) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enstone_ii.lua b/scripts/effects/enstone_ii.lua index fc07b9266bc..231bf40b872 100644 --- a/scripts/effects/enstone_ii.lua +++ b/scripts/effects/enstone_ii.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.EARTH + 8) -- Tier IIs have higher "enspell IDs" - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.EARTH + 8) -- Tier IIs have higher "enspell IDs" + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enthunder.lua b/scripts/effects/enthunder.lua index c21a7929ce2..87b4ecd4911 100644 --- a/scripts/effects/enthunder.lua +++ b/scripts/effects/enthunder.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.THUNDER) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.THUNDER) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enthunder_ii.lua b/scripts/effects/enthunder_ii.lua index 9906e687acf..af86dc07e56 100644 --- a/scripts/effects/enthunder_ii.lua +++ b/scripts/effects/enthunder_ii.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.THUNDER + 8) -- Tier IIs have higher "enspell IDs" - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.THUNDER + 8) -- Tier IIs have higher "enspell IDs" + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enwater.lua b/scripts/effects/enwater.lua index 391db67209e..5af86cf6003 100644 --- a/scripts/effects/enwater.lua +++ b/scripts/effects/enwater.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.WATER) - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.WATER) + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/effects/enwater_ii.lua b/scripts/effects/enwater_ii.lua index 88c3c6960ac..bb4368a63c4 100644 --- a/scripts/effects/enwater_ii.lua +++ b/scripts/effects/enwater_ii.lua @@ -5,16 +5,14 @@ local effectObject = {} effectObject.onEffectGain = function(target, effect) - target:addMod(xi.mod.ENSPELL, xi.element.WATER + 8) -- Tier IIs have higher "enspell IDs" - target:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) + effect:addMod(xi.mod.ENSPELL, xi.element.WATER + 8) -- Tier IIs have higher "enspell IDs" + effect:addMod(xi.mod.ENSPELL_DMG, effect:getPower()) end effectObject.onEffectTick = function(target, effect) end effectObject.onEffectLose = function(target, effect) - target:setMod(xi.mod.ENSPELL_DMG, 0) - target:setMod(xi.mod.ENSPELL, 0) end return effectObject diff --git a/scripts/globals/combat/action_additional_effect_damage.lua b/scripts/globals/combat/action_additional_effect_damage.lua index 1906613c17e..09e47cc0db7 100644 --- a/scripts/globals/combat/action_additional_effect_damage.lua +++ b/scripts/globals/combat/action_additional_effect_damage.lua @@ -56,12 +56,45 @@ local function validateParameters(actor, target, fedData) return params end +local function hasEnspell(actor) + local enspellTable = + { + [ 1] = xi.effect.ENFIRE, + [ 2] = xi.effect.ENFIRE_II, + [ 3] = xi.effect.ENBLIZZARD, + [ 4] = xi.effect.ENBLIZZARD_II, + [ 5] = xi.effect.ENAERO, + [ 6] = xi.effect.ENAERO_II, + [ 7] = xi.effect.ENSTONE, + [ 8] = xi.effect.ENSTONE_II, + [ 9] = xi.effect.ENTHUNDER, + [10] = xi.effect.ENTHUNDER_II, + [11] = xi.effect.ENWATER, + [12] = xi.effect.ENWATER_II, + [13] = xi.effect.ENLIGHT, + [14] = xi.effect.ENDARK, + } + + for i = 1, #enspellTable do + if actor:hasStatusEffect(enspellTable[i]) then + return true + end + end + + return false +end + ----------------------------------- -- Global functions called from "emtity.onAdditionalEffect()" ----------------------------------- xi.combat.action.executeAddEffectDamage = function(actor, target, fedData) local params = validateParameters(actor, target, fedData) + -- Early return: En-spell overrides innate/weapon additional effects. + if hasEnspell(actor) then + return 0, 0, 0 + end + -- Early return: No proc. if math.random(1, 100) > params.chance then return 0, 0, 0 diff --git a/scripts/globals/combat/action_additional_effect_status.lua b/scripts/globals/combat/action_additional_effect_status.lua index 101c1709eac..fc20b85b138 100644 --- a/scripts/globals/combat/action_additional_effect_status.lua +++ b/scripts/globals/combat/action_additional_effect_status.lua @@ -70,12 +70,45 @@ local function validateParameters(actor, target, fedData) return params end +local function hasEnspell(actor) + local enspellTable = + { + [ 1] = xi.effect.ENFIRE, + [ 2] = xi.effect.ENFIRE_II, + [ 3] = xi.effect.ENBLIZZARD, + [ 4] = xi.effect.ENBLIZZARD_II, + [ 5] = xi.effect.ENAERO, + [ 6] = xi.effect.ENAERO_II, + [ 7] = xi.effect.ENSTONE, + [ 8] = xi.effect.ENSTONE_II, + [ 9] = xi.effect.ENTHUNDER, + [10] = xi.effect.ENTHUNDER_II, + [11] = xi.effect.ENWATER, + [12] = xi.effect.ENWATER_II, + [13] = xi.effect.ENLIGHT, + [14] = xi.effect.ENDARK, + } + + for i = 1, #enspellTable do + if actor:hasStatusEffect(enspellTable[i]) then + return true + end + end + + return false +end + ----------------------------------- -- Global functions called from "emtity.onAdditionalEffect()" ----------------------------------- xi.combat.action.executeAddEffectEnhancement = function(actor, target, fedData) local params = validateParameters(actor, target, fedData) + -- Early return: En-spell overrides innate/weapon additional effects. + if hasEnspell(actor) then + return 0, 0, 0 + end + -- Early return: Incorrect effect ID. if params.effectId == xi.effect.NONE then return 0, 0, 0 @@ -102,6 +135,11 @@ end xi.combat.action.executeAddEffectEnfeeblement = function(actor, target, fedData) local params = validateParameters(actor, target, fedData) + -- Early return: En-spell overrides innate/weapon additional effects. + if hasEnspell(actor) then + return 0, 0, 0 + end + -- Early return: Incorrect effect ID. if params.effectId == xi.effect.NONE then return 0, 0, 0 @@ -147,6 +185,11 @@ end xi.combat.action.executeAddEffectDispel = function(actor, target, fedData) local params = validateParameters(actor, target, fedData) + -- Early return: En-spell overrides innate/weapon additional effects. + if hasEnspell(actor) then + return 0, 0, 0 + end + -- Early return: Incorrect effect ID. if params.effectId ~= xi.effect.NONE then return 0, 0, 0 diff --git a/scripts/zones/Batallia_Downs/mobs/Lumber_Jack.lua b/scripts/zones/Batallia_Downs/mobs/Lumber_Jack.lua index 4d96c994db8..fe5ae8482b5 100644 --- a/scripts/zones/Batallia_Downs/mobs/Lumber_Jack.lua +++ b/scripts/zones/Batallia_Downs/mobs/Lumber_Jack.lua @@ -30,10 +30,6 @@ entity.onMobSpawn = function(mob) end entity.onAdditionalEffect = function(mob, target, damage) - if mob:hasStatusEffect(xi.effect.ENSTONE) then - return 0, 0, 0 - end - local pTable = { chance = 20, diff --git a/scripts/zones/Jugner_Forest/mobs/King_Arthro.lua b/scripts/zones/Jugner_Forest/mobs/King_Arthro.lua index 06841468a44..0b9cb45218e 100644 --- a/scripts/zones/Jugner_Forest/mobs/King_Arthro.lua +++ b/scripts/zones/Jugner_Forest/mobs/King_Arthro.lua @@ -60,20 +60,15 @@ entity.onMobSpawn = function(mob) end entity.onAdditionalEffect = function(mob, target, damage) - -- TODO: All en-spells overwrite innate additional effects. The check should probably be contained in this functions already. - if mob:hasStatusEffect(xi.effect.ENWATER) then - return 0, 0, 0 - else - local pTable = - { - chance = 25, - effectId = xi.effect.PARALYSIS, - power = 20, - duration = 60, - } + local pTable = + { + chance = 25, + effectId = xi.effect.PARALYSIS, + power = 20, + duration = 60, + } - return xi.combat.action.executeAddEffectEnfeeblement(mob, target, pTable) - end + return xi.combat.action.executeAddEffectEnfeeblement(mob, target, pTable) end entity.onMobDespawn = function(mob) diff --git a/scripts/zones/The_Shrine_of_RuAvitau/mobs/Olla_Grande.lua b/scripts/zones/The_Shrine_of_RuAvitau/mobs/Olla_Grande.lua index ed6e85205ed..38501f2b713 100644 --- a/scripts/zones/The_Shrine_of_RuAvitau/mobs/Olla_Grande.lua +++ b/scripts/zones/The_Shrine_of_RuAvitau/mobs/Olla_Grande.lua @@ -32,9 +32,6 @@ entity.onAdditionalEffect = function(mob, target, damage) return xi.combat.action.executeAddEffectDispel(mob, target, pTable) end -entity.onMobDeath = function(mob, player, optParams) -end - entity.onMobDespawn = function(mob) GetNPCByID(ID.npc.OLLAS_QM):updateNPCHideTime(xi.settings.main.FORCE_SPAWN_QM_RESET_TIME) end