From 9c11383d3a16254ce536a0ebf2e3698b57d79914 Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Fri, 10 May 2024 11:38:58 +0200 Subject: [PATCH 1/5] Delete "canOverwrite" function --- scripts/actions/spells/songs/foe_requiem.lua | 7 ++---- .../actions/spells/songs/foe_requiem_ii.lua | 7 ++---- .../actions/spells/songs/foe_requiem_iii.lua | 7 ++---- .../actions/spells/songs/foe_requiem_iv.lua | 7 ++---- .../actions/spells/songs/foe_requiem_v.lua | 7 ++---- .../actions/spells/songs/foe_requiem_vi.lua | 7 ++---- .../actions/spells/songs/foe_requiem_vii.lua | 7 ++---- scripts/globals/magic.lua | 22 ------------------- tools/ci/lua.sh | 1 - 9 files changed, 14 insertions(+), 58 deletions(-) diff --git a/scripts/actions/spells/songs/foe_requiem.lua b/scripts/actions/spells/songs/foe_requiem.lua index 4d3cb3ef171..08c7587fc25 100644 --- a/scripts/actions/spells/songs/foe_requiem.lua +++ b/scripts/actions/spells/songs/foe_requiem.lua @@ -48,13 +48,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/actions/spells/songs/foe_requiem_ii.lua b/scripts/actions/spells/songs/foe_requiem_ii.lua index e5b40c68301..58a76a7009a 100644 --- a/scripts/actions/spells/songs/foe_requiem_ii.lua +++ b/scripts/actions/spells/songs/foe_requiem_ii.lua @@ -48,13 +48,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/actions/spells/songs/foe_requiem_iii.lua b/scripts/actions/spells/songs/foe_requiem_iii.lua index 4fe7515a6be..62244832670 100644 --- a/scripts/actions/spells/songs/foe_requiem_iii.lua +++ b/scripts/actions/spells/songs/foe_requiem_iii.lua @@ -48,13 +48,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/actions/spells/songs/foe_requiem_iv.lua b/scripts/actions/spells/songs/foe_requiem_iv.lua index 957c25d7b6a..0de990de2e5 100644 --- a/scripts/actions/spells/songs/foe_requiem_iv.lua +++ b/scripts/actions/spells/songs/foe_requiem_iv.lua @@ -48,13 +48,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/actions/spells/songs/foe_requiem_v.lua b/scripts/actions/spells/songs/foe_requiem_v.lua index 1f278a5285a..c3a6d433b0e 100644 --- a/scripts/actions/spells/songs/foe_requiem_v.lua +++ b/scripts/actions/spells/songs/foe_requiem_v.lua @@ -48,13 +48,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/actions/spells/songs/foe_requiem_vi.lua b/scripts/actions/spells/songs/foe_requiem_vi.lua index 1141d91db7d..a14467da8de 100644 --- a/scripts/actions/spells/songs/foe_requiem_vi.lua +++ b/scripts/actions/spells/songs/foe_requiem_vi.lua @@ -53,13 +53,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/actions/spells/songs/foe_requiem_vii.lua b/scripts/actions/spells/songs/foe_requiem_vii.lua index 0282b96a074..4e32c4333e0 100644 --- a/scripts/actions/spells/songs/foe_requiem_vii.lua +++ b/scripts/actions/spells/songs/foe_requiem_vii.lua @@ -48,13 +48,10 @@ spellObject.onSpellCast = function(caster, target, spell) end -- Try to overwrite weaker slow / haste - if canOverwrite(target, effect, power) then - -- overwrite them - target:delStatusEffect(effect) - target:addStatusEffect(effect, power, 3, duration) + if target:addStatusEffect(effect, power, 3, duration) then spell:setMsg(xi.msg.basic.MAGIC_ENFEEB) else - spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) -- no effect + spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) end return effect diff --git a/scripts/globals/magic.lua b/scripts/globals/magic.lua index 5970b0ac5f1..d0392e2a426 100644 --- a/scripts/globals/magic.lua +++ b/scripts/globals/magic.lua @@ -980,26 +980,6 @@ function handleThrenody(caster, target, spell, basePower, baseDuration, modifier return xi.effect.THRENODY end --- Returns true if you can overwrite the effect --- Example: canOverwrite(target, xi.effect.SLOW, 25) -function canOverwrite(target, effect, power, mod) - mod = mod or 1 - - local statusEffect = target:getStatusEffect(effect) - - -- effect not found so overwrite - if statusEffect == nil then - return true - end - - -- overwrite if its weaker - if statusEffect:getPower() * mod > power then - return false - end - - return true -end - function calculateDuration(duration, magicSkill, spellGroup, caster, target, useComposure) local casterJob = caster:getMainJob() @@ -1059,5 +1039,3 @@ function calculateDuration(duration, magicSkill, spellGroup, caster, target, use return math.floor(duration) end - -xi.ma = xi.magic diff --git a/tools/ci/lua.sh b/tools/ci/lua.sh index aee1e808f15..da93dad8b09 100755 --- a/tools/ci/lua.sh +++ b/tools/ci/lua.sh @@ -81,7 +81,6 @@ global_objects=( adjustForTarget calculateDuration calculateMagicDamage - canOverwrite doEnspell finalMagicAdjustments finalMagicNonSpellAdjustments From 9d2a75f3e8f1c124c1127572209ca39280caa438 Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Fri, 10 May 2024 12:04:31 +0200 Subject: [PATCH 2/5] Delete "getMagicResist" function --- scripts/globals/magic.lua | 34 +++++++++++-------------- scripts/globals/mobskills.lua | 7 ++--- scripts/globals/spells/damage_spell.lua | 2 +- tools/ci/lua.sh | 1 - 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/scripts/globals/magic.lua b/scripts/globals/magic.lua index d0392e2a426..640a7f453a7 100644 --- a/scripts/globals/magic.lua +++ b/scripts/globals/magic.lua @@ -1,3 +1,4 @@ +require('scripts/globals/combat/magic_hit_rate') require('scripts/globals/jobpoints') require('scripts/globals/magicburst') require('scripts/globals/utils') @@ -468,8 +469,8 @@ params.skillType = $3 params.bonus = $4 params.effect = $5 ]] -function applyResistanceEffect(caster, target, spell, params) - local diff = params.diff or (caster:getStat(params.attribute) - target:getStat(params.attribute)) +function applyResistanceEffect(actor, target, spell, params) + local diff = params.diff or (actor:getStat(params.attribute) - target:getStat(params.attribute)) local skill = params.skillType local bonus = params.bonus local effect = params.effect @@ -479,10 +480,10 @@ function applyResistanceEffect(caster, target, spell, params) -- If Stymie is active, as long as the mob is not immune then the effect is not resisted if skill == xi.skill.ENFEEBLING_MAGIC and - caster:hasStatusEffect(xi.effect.STYMIE) and + actor:hasStatusEffect(xi.effect.STYMIE) and target:canGainStatusEffect(effect) then - caster:delStatusEffect(xi.effect.STYMIE) + actor:delStatusEffect(xi.effect.STYMIE) return 1 -- Fealty allows the PLD to resist all status inflicting spells except Threnody and Requiem elseif @@ -497,16 +498,16 @@ function applyResistanceEffect(caster, target, spell, params) if skill == xi.skill.SINGING and - caster:hasStatusEffect(xi.effect.TROUBADOUR) + actor:hasStatusEffect(xi.effect.TROUBADOUR) then - if math.random(0, 99) < caster:getMerit(xi.merit.TROUBADOUR) - 25 then + if math.random(0, 99) < actor:getMerit(xi.merit.TROUBADOUR) - 25 then return 1.0 end end local element = spell:getElement() local percentBonus = 0 - local magicaccbonus = getSpellBonusAcc(caster, target, spell, params) + local magicaccbonus = getSpellBonusAcc(actor, target, spell, params) if diff > 10 then magicaccbonus = magicaccbonus + 10 + (diff - 10) / 2 @@ -522,23 +523,23 @@ function applyResistanceEffect(caster, target, spell, params) percentBonus = percentBonus - xi.magic.getEffectResistance(target, effect) end - local magicHitRate = getMagicHitRate(caster, target, skill, element, percentBonus, magicaccbonus) + local magicHitRate = getMagicHitRate(actor, target, skill, element, percentBonus, magicaccbonus) - return getMagicResist(caster, target, skill, element, magicHitRate) + return xi.combat.magicHitRate.calculateResistRate(actor, target, skill, element, magicHitRate, 0) end -- Applies resistance for things that may not be spells - ie. Quick Draw -function applyResistanceAbility(player, target, element, skill, bonus) +function applyResistanceAbility(actor, target, element, skill, bonus) local magicHitRate = getMagicHitRate(player, target, skill, element, 0, bonus) - return getMagicResist(player, target, skill, element, magicHitRate) + return xi.combat.magicHitRate.calculateResistRate(actor, target, skill, element, magicHitRate, 0) end -- Applies resistance for additional effects -function applyResistanceAddEffect(player, target, element, bonus) - local magicHitRate = getMagicHitRate(player, target, 0, element, 0, bonus) +function applyResistanceAddEffect(actor, target, element, bonus) + local magicHitRate = getMagicHitRate(actor, target, 0, element, 0, bonus) - return getMagicResist(player, target, xi.skill.NONE, element, magicHitRate) + return xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) end function getMagicHitRate(caster, target, skillType, element, percentBonus, bonusAcc) @@ -592,11 +593,6 @@ function getMagicHitRate(caster, target, skillType, element, percentBonus, bonus return calculateMagicHitRate(magicacc, magiceva, percentBonus, caster:getMainLvl(), target:getMainLvl()) end --- Returns resistance value from given magic hit rate (p) -function getMagicResist(caster, target, skill, element, magicHitRate) - return xi.combat.magicHitRate.calculateResistRate(caster, target, skill, element, magicHitRate, 0) -end - -- Returns the amount of resistance the target has to the given effect local effectToResistanceMod = { diff --git a/scripts/globals/mobskills.lua b/scripts/globals/mobskills.lua index aec03c53300..d74c25e6b17 100644 --- a/scripts/globals/mobskills.lua +++ b/scripts/globals/mobskills.lua @@ -4,6 +4,7 @@ -- What is known is that they roughly follow player Weaponskill calculations (pDIF, dMOD, ratio, etc) so this is what -- this set of functions emulates. ----------------------------------- +require('scripts/globals/combat/magic_hit_rate') require('scripts/globals/magicburst') require('scripts/globals/magic') require('scripts/globals/utils') @@ -322,7 +323,7 @@ end -- effect = xi.effect.WHATEVER if enfeeble -- statmod = the stat to account for resist (INT, MND, etc) e.g. xi.mod.INT -- This determines how much the monsters ability resists on the player. -xi.mobskills.applyPlayerResistance = function(mob, effect, target, diff, bonus, element) +xi.mobskills.applyPlayerResistance = function(actor, effect, target, diff, bonus, element) local percentBonus = 0 local magicaccbonus = 0 @@ -340,9 +341,9 @@ xi.mobskills.applyPlayerResistance = function(mob, effect, target, diff, bonus, percentBonus = percentBonus - xi.magic.getEffectResistance(target, effect) end - local magicHitRate = getMagicHitRate(mob, target, 0, element, percentBonus, magicaccbonus) + local magicHitRate = getMagicHitRate(actor, target, 0, element, percentBonus, magicaccbonus) - return getMagicResist(mob, target, xi.skill.NONE, element, magicHitRate) + return xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) end xi.mobskills.mobAddBonuses = function(caster, target, dmg, ele, skill) -- used for SMN magical bloodpacts, despite the name. diff --git a/scripts/globals/spells/damage_spell.lua b/scripts/globals/spells/damage_spell.lua index 45074f2ac3e..94320634b4f 100644 --- a/scripts/globals/spells/damage_spell.lua +++ b/scripts/globals/spells/damage_spell.lua @@ -411,7 +411,7 @@ xi.spells.damage.calculateSDT = function(target, spellElement) -- https://www.bg-wiki.com/ffxi/Resist for some SDT info. -- *perhaps this simply means there is a cap/clamp limiting it there. - return sdt + return utils.clamp(sdt, 0, 3) end -- This function is used to calculate Resist tiers. The resist tiers work differently for enfeebles (which usually affect duration, not potency) than for nukes. diff --git a/tools/ci/lua.sh b/tools/ci/lua.sh index da93dad8b09..2adc47c63bc 100755 --- a/tools/ci/lua.sh +++ b/tools/ci/lua.sh @@ -91,7 +91,6 @@ global_objects=( getBaseCureOld getElementalDamageReduction getMagicHitRate - getMagicResist handleThrenody isValidHealTarget From 15e38357889c7cb392d27a211ce8ec5a64256a0e Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Fri, 10 May 2024 12:19:25 +0200 Subject: [PATCH 3/5] Delete "calculateMagicHitRate" function --- scripts/globals/magic.lua | 13 ++----------- .../zones/Nyzul_Isle/mobs/Amnaf_Psycheflayer.lua | 2 +- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/scripts/globals/magic.lua b/scripts/globals/magic.lua index 640a7f453a7..f2cc917f57a 100644 --- a/scripts/globals/magic.lua +++ b/scripts/globals/magic.lua @@ -224,15 +224,6 @@ local function getSpellBonusAcc(caster, target, spell, params) return magicAccBonus end -local function calculateMagicHitRate(magicacc, magiceva, percentBonus, casterLvl, targetLvl) - --add a scaling bonus or penalty based on difference of targets level from caster - local levelDiff = utils.clamp(casterLvl - targetLvl, -5, 5) - - local p = 70 - 0.5 * (magiceva - magicacc) + levelDiff * 3 + percentBonus - - return utils.clamp(p, 5, 95) -end - local function calculateMagicBurst(caster, spell, target, params) local burst = 1.0 local skillchainburst = 1.0 @@ -590,7 +581,7 @@ function getMagicHitRate(caster, target, skillType, element, percentBonus, bonus local maccFood = magicacc * (caster:getMod(xi.mod.FOOD_MACCP) / 100) magicacc = magicacc + utils.clamp(maccFood, 0, caster:getMod(xi.mod.FOOD_MACC_CAP)) - return calculateMagicHitRate(magicacc, magiceva, percentBonus, caster:getMainLvl(), target:getMainLvl()) + return xi.combat.magicHitRate.calculateMagicHitRate(magicacc, magiceva) end -- Returns the amount of resistance the target has to the given effect @@ -598,7 +589,7 @@ local effectToResistanceMod = { [xi.effect.SLEEP_I ] = xi.mod.SLEEPRES, [xi.effect.SLEEP_II ] = xi.mod.SLEEPRES, - [xi.effect.LULLABY ] = xi.mod.LULLABYRES, + [xi.effect.LULLABY ] = xi.mod.SLEEPRES, [xi.effect.POISON ] = xi.mod.POISONRES, [xi.effect.PARALYSIS ] = xi.mod.PARALYZERES, [xi.effect.BLINDNESS ] = xi.mod.BLINDRES, diff --git a/scripts/zones/Nyzul_Isle/mobs/Amnaf_Psycheflayer.lua b/scripts/zones/Nyzul_Isle/mobs/Amnaf_Psycheflayer.lua index b0357a8844d..e199f9d6663 100644 --- a/scripts/zones/Nyzul_Isle/mobs/Amnaf_Psycheflayer.lua +++ b/scripts/zones/Nyzul_Isle/mobs/Amnaf_Psycheflayer.lua @@ -27,7 +27,7 @@ entity.onSpikesDamage = function(mob, target, damage) -- Amnaf's Ice Spikes from blm spell will process first on retail. -- In battleutils.cpp the spike effect is checked before trying to process onSpikesDamage() -- thus no status effect = no proc, but 2 spike effects can't coexist.. - local resist = getEffectResistance(target, xi.effect.CURSE_I) + -- local resist = getEffectResistance(target, xi.effect.CURSE_I) -- NO, dont ever uncomment this. local rnd = math.random (1, 100) -- This res check is a little screwy till we get the server's resistance handling closer to retail. -- looks like applyResistanceAddEffect() doesn't even handle status resistance, only elemental. From 7707c27bdba059b638158ed94c61d5f12ef296ea Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Fri, 10 May 2024 13:52:06 +0200 Subject: [PATCH 4/5] Delete "getMagicHitRate" function --- scripts/globals/combat/magic_hit_rate.lua | 23 ++++ scripts/globals/magic.lua | 144 ++++++---------------- scripts/globals/mobskills.lua | 26 ++-- 3 files changed, 74 insertions(+), 119 deletions(-) diff --git a/scripts/globals/combat/magic_hit_rate.lua b/scripts/globals/combat/magic_hit_rate.lua index 1ed08c25241..64aad18de75 100644 --- a/scripts/globals/combat/magic_hit_rate.lua +++ b/scripts/globals/combat/magic_hit_rate.lua @@ -284,6 +284,29 @@ local function magicAccuracyFromFood(actor, magicAccPreFood) return magicAcc end +-- Global function to calculate magicc accuracy for addiional effects. (No stat, no magic burst bonuses) +xi.combat.magicHitRate.calculateNonSpellMagicAccuracy = function(actor, target, spellGroup, skillType, spellElement, bonusMacc) + local finalMagicAcc = 0 + + local magicAccBase = actor:getMod(xi.mod.MACC) + actor:getILvlMacc(xi.slot.MAIN) + local magicAccSkill = magicAccuracyFromSkill(actor, skillType) + local magicAccElement = magicAccuracyFromElement(actor, spellElement) + local magicAccEffects = magicAccuracyFromStatusEffects(actor, spellGroup, skillType, spellElement) + local magicAccMerits = magicAccuracyFromMerits(actor, skillType, spellElement) + local magicAccJobPoints = magicAccuracyFromJobPoints(actor, spellGroup, skillType) + local magicAccDay = magicAccuracyFromDayElement(actor, spellElement) + local magicAccWeather = magicAccuracyFromWeatherElement(actor, spellElement) + + -- Add up all magic accuracy before calculating food mAcc % + local magicAccPreFood = magicAccBase + magicAccSkill + magicAccElement + magicAccEffects + magicAccMerits + magicAccJobPoints + magicAccDay + magicAccWeather + bonusMacc + local magicAccFood = magicAccuracyFromFood(actor, magicAccPreFood) + + -- Add up food magic accuracy. + finalMagicAcc = magicAccPreFood + magicAccFood + + return finalMagicAcc +end + -- Global function to calculate total magicc accuracy. xi.combat.magicHitRate.calculateActorMagicAccuracy = function(actor, target, spellGroup, skillType, spellElement, statUsed, bonusMacc) local finalMagicAcc = 0 diff --git a/scripts/globals/magic.lua b/scripts/globals/magic.lua index f2cc917f57a..11e6540fbaa 100644 --- a/scripts/globals/magic.lua +++ b/scripts/globals/magic.lua @@ -460,128 +460,58 @@ params.skillType = $3 params.bonus = $4 params.effect = $5 ]] -function applyResistanceEffect(actor, target, spell, params) - local diff = params.diff or (actor:getStat(params.attribute) - target:getStat(params.attribute)) - local skill = params.skillType - local bonus = params.bonus - local effect = params.effect - local family = spell:getSpellFamily() - - if effect ~= nil then -- Dispel's script doesn't have an "effect" to send here, nor should it. - -- If Stymie is active, as long as the mob is not immune then the effect is not resisted - if - skill == xi.skill.ENFEEBLING_MAGIC and - actor:hasStatusEffect(xi.effect.STYMIE) and - target:canGainStatusEffect(effect) - then - actor:delStatusEffect(xi.effect.STYMIE) - return 1 - -- Fealty allows the PLD to resist all status inflicting spells except Threnody and Requiem - elseif - target:hasStatusEffect(xi.effect.FEALTY) and - family ~= xi.magic.spellFamily.FOE_REQUIEM and - not (family >= xi.magic.spellFamily.FIRE_THRENODY and - family <= xi.magic.spellFamily.DARK_THRENODY) - then - return 0 - end - end - if - skill == xi.skill.SINGING and - actor:hasStatusEffect(xi.effect.TROUBADOUR) - then - if math.random(0, 99) < actor:getMerit(xi.merit.TROUBADOUR) - 25 then - return 1.0 +-- TODO: This must be destroyed +function applyResistanceEffect(actor, target, spell, params) + local spellFamily = spell:getSpellFamily() or 0 + local skillType = params.skillType or 0 + local element = spell:getElement() or 0 + local statUsed = params.attribute or 0 + local bonusMacc = params.bonus or 0 + + -- GUESS stat if it isnt fed with params. + if statUsed == 0 then + if skillType == xi.skill.SINGING then + statUsed = xi.mod.CHR + else + statUsed = xi.mod.INT end end - local element = spell:getElement() - local percentBonus = 0 - local magicaccbonus = getSpellBonusAcc(actor, target, spell, params) - - if diff > 10 then - magicaccbonus = magicaccbonus + 10 + (diff - 10) / 2 - else - magicaccbonus = magicaccbonus + diff - end - - if bonus ~= nil then - magicaccbonus = magicaccbonus + bonus + -- Is enfeeble? + local isEnfeeble = false + local effect = params.effect or 0 + if effect > 0 then + isEnfeeble = true end - if effect ~= nil then - percentBonus = percentBonus - xi.magic.getEffectResistance(target, effect) - end - - local magicHitRate = getMagicHitRate(actor, target, skill, element, percentBonus, magicaccbonus) + -- TODO: Convert enfeebling songs. + local magicAcc = xi.combat.magicHitRate.calculateActorMagicAccuracy(actor, target, spellFamily, skillType, element, statUsed, bonusMacc) + local magicEva = xi.combat.magicHitRate.calculateTargetMagicEvasion(actor, target, element, isEnfeeble, 0, 0) -- true = Is an enfeeble. + local magicHitRate = xi.combat.magicHitRate.calculateMagicHitRate(magicAcc, magicEva) + local resistRate = xi.combat.magicHitRate.calculateResistRate(actor, target, skillType, element, magicHitRate, 0) - return xi.combat.magicHitRate.calculateResistRate(actor, target, skill, element, magicHitRate, 0) + return resistRate end -- Applies resistance for things that may not be spells - ie. Quick Draw -function applyResistanceAbility(actor, target, element, skill, bonus) - local magicHitRate = getMagicHitRate(player, target, skill, element, 0, bonus) +function applyResistanceAbility(actor, target, element, skillType, bonusMacc) + local magicAcc = xi.combat.magicHitRate.calculateNonSpellMagicAccuracy(actor, target, 0, skillType, element, bonusMacc) + local magicEva = xi.combat.magicHitRate.calculateTargetMagicEvasion(actor, target, element, false, 0, 0) -- false = not an enfeeble. + local magicHitRate = xi.combat.magicHitRate.calculateMagicHitRate(magicAcc, magicEva) + local resistRate = xi.combat.magicHitRate.calculateResistRate(actor, target, skillType, element, magicHitRate, 0) - return xi.combat.magicHitRate.calculateResistRate(actor, target, skill, element, magicHitRate, 0) + return resistRate end -- Applies resistance for additional effects -function applyResistanceAddEffect(actor, target, element, bonus) - local magicHitRate = getMagicHitRate(actor, target, 0, element, 0, bonus) - - return xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) -end - -function getMagicHitRate(caster, target, skillType, element, percentBonus, bonusAcc) - -- resist everything if real magic shield is active (see effects/magic_shield) - if target:hasStatusEffect(xi.effect.MAGIC_SHIELD) then - local magicshieldsub = target:getStatusEffect(xi.effect.MAGIC_SHIELD) - - if magicshieldsub:getSubPower() == 0 then - return 0 - end - end - - if bonusAcc == nil then - bonusAcc = 0 - end - - local magicacc = caster:getMod(xi.mod.MACC) + caster:getILvlMacc() - - -- Get the base acc (just skill + skill mod (79 + skillID = ModID) + magic acc mod) - if skillType ~= 0 then - magicacc = magicacc + caster:getSkillLevel(skillType) - else - -- for mob skills / additional effects which don't have a skill - magicacc = magicacc + utils.getSkillLvl(1, caster:getMainLvl()) - end - - local resMod = 0 -- Some spells may possibly be non elemental, but have status effects. - if element ~= xi.element.NONE then - resMod = target:getMod(xi.magic.resistMod[element]) - - -- Add acc for elemental affinity accuracy and element specific accuracy - local affinityBonus = AffinityBonusAcc(caster, element) - local elementBonus = caster:getMod(spellAcc[element]) - - bonusAcc = bonusAcc + affinityBonus + elementBonus - end - - magicacc = magicacc + caster:getMerit(xi.merit.MAGIC_ACCURACY) - - magicacc = magicacc + caster:getMerit(xi.merit.NIN_MAGIC_ACCURACY) - - -- Base magic evasion (base magic evasion plus resistances(players), plus elemental defense(mobs) - local magiceva = target:getMod(xi.mod.MEVA) + resMod - - magicacc = magicacc + bonusAcc - - -- Add macc% from food - local maccFood = magicacc * (caster:getMod(xi.mod.FOOD_MACCP) / 100) - magicacc = magicacc + utils.clamp(maccFood, 0, caster:getMod(xi.mod.FOOD_MACC_CAP)) +function applyResistanceAddEffect(actor, target, element, bonusMacc) + local magicAcc = xi.combat.magicHitRate.calculateNonSpellMagicAccuracy(actor, target, 0, xi.skill.NONE, element, bonusMacc) + local magicEva = xi.combat.magicHitRate.calculateTargetMagicEvasion(actor, target, element, false, 0, 0) -- false = not an enfeeble. + local magicHitRate = xi.combat.magicHitRate.calculateMagicHitRate(magicAcc, magicEva) + local resistRate = xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) - return xi.combat.magicHitRate.calculateMagicHitRate(magicacc, magiceva) + return resistRate end -- Returns the amount of resistance the target has to the given effect diff --git a/scripts/globals/mobskills.lua b/scripts/globals/mobskills.lua index d74c25e6b17..bcadfc12194 100644 --- a/scripts/globals/mobskills.lua +++ b/scripts/globals/mobskills.lua @@ -323,27 +323,29 @@ end -- effect = xi.effect.WHATEVER if enfeeble -- statmod = the stat to account for resist (INT, MND, etc) e.g. xi.mod.INT -- This determines how much the monsters ability resists on the player. -xi.mobskills.applyPlayerResistance = function(actor, effect, target, diff, bonus, element) - local percentBonus = 0 - local magicaccbonus = 0 +xi.mobskills.applyPlayerResistance = function(actor, effect, target, diff, bonusMacc, element) + local isEnfeeble = false - if diff > 10 then - magicaccbonus = magicaccbonus + 10 + (diff - 10) / 2 - else - magicaccbonus = magicaccbonus + diff + if not bonusMacc then + bonusMacc = 0 end - if bonus then - magicaccbonus = magicaccbonus + bonus + if diff > 10 then + bonusMacc = bonusMacc + 10 + (diff - 10) / 2 + else + bonusMacc = bonusMacc + diff end if effect then - percentBonus = percentBonus - xi.magic.getEffectResistance(target, effect) + isEnfeeble = true end - local magicHitRate = getMagicHitRate(actor, target, 0, element, percentBonus, magicaccbonus) + local magicAcc = xi.combat.magicHitRate.calculateNonSpellMagicAccuracy(actor, target, 0, xi.skill.NONE, element, bonusMacc) + local magicEva = xi.combat.magicHitRate.calculateTargetMagicEvasion(actor, target, element, false, 0, 0) -- false = not an enfeeble. + local magicHitRate = xi.combat.magicHitRate.calculateMagicHitRate(magicAcc, magicEva) + local resistRate = xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) - return xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) + return resistRate end xi.mobskills.mobAddBonuses = function(caster, target, dmg, ele, skill) -- used for SMN magical bloodpacts, despite the name. From bf21763d51370011321fd453a6299294035876ed Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Fri, 10 May 2024 13:52:36 +0200 Subject: [PATCH 5/5] Delete "applyResistance" function --- scripts/actions/spells/black/absorb-acc.lua | 2 +- scripts/actions/spells/black/absorb-agi.lua | 2 +- scripts/actions/spells/black/absorb-chr.lua | 2 +- scripts/actions/spells/black/absorb-dex.lua | 2 +- scripts/actions/spells/black/absorb-int.lua | 2 +- scripts/actions/spells/black/absorb-mnd.lua | 2 +- scripts/actions/spells/black/absorb-str.lua | 2 +- scripts/actions/spells/black/absorb-tp.lua | 2 +- scripts/actions/spells/black/absorb-vit.lua | 2 +- scripts/actions/spells/black/aspir.lua | 2 +- scripts/actions/spells/black/aspir_ii.lua | 2 +- scripts/actions/spells/black/bio.lua | 2 +- scripts/actions/spells/black/bio_ii.lua | 2 +- scripts/actions/spells/black/bio_iii.lua | 2 +- scripts/actions/spells/black/bio_iv.lua | 2 +- scripts/actions/spells/black/drain.lua | 2 +- scripts/actions/spells/black/drain_ii.lua | 2 +- scripts/actions/spells/black/impact.lua | 2 +- scripts/actions/spells/blue/1000_needles.lua | 2 +- scripts/actions/spells/blue/blank_gaze.lua | 2 +- scripts/actions/spells/blue/cold_wave.lua | 2 +- scripts/actions/spells/blue/enervation.lua | 2 +- .../actions/spells/blue/feather_tickle.lua | 2 +- scripts/actions/spells/blue/geist_wall.lua | 2 +- .../actions/spells/blue/light_of_penance.lua | 2 +- .../actions/spells/blue/rending_deluge.lua | 2 +- scripts/actions/spells/songs/foe_requiem.lua | 2 +- .../actions/spells/songs/foe_requiem_ii.lua | 2 +- .../actions/spells/songs/foe_requiem_iii.lua | 2 +- .../actions/spells/songs/foe_requiem_iv.lua | 2 +- .../actions/spells/songs/foe_requiem_v.lua | 2 +- .../actions/spells/songs/foe_requiem_vi.lua | 2 +- .../actions/spells/songs/foe_requiem_vii.lua | 2 +- scripts/actions/spells/songs/magic_finale.lua | 2 +- scripts/actions/spells/white/dia.lua | 2 +- scripts/actions/spells/white/dia_ii.lua | 2 +- scripts/actions/spells/white/dia_iii.lua | 2 +- scripts/actions/spells/white/diaga.lua | 2 +- scripts/actions/spells/white/diaga_ii.lua | 2 +- scripts/actions/spells/white/diaga_iii.lua | 2 +- scripts/globals/bluemagic.lua | 6 +- scripts/globals/combat/magic_hit_rate.lua | 2 +- scripts/globals/job_utils/dancer.lua | 4 +- scripts/globals/magic.lua | 145 +----------------- scripts/globals/mobskills.lua | 13 +- tools/ci/lua.sh | 2 - 46 files changed, 55 insertions(+), 197 deletions(-) diff --git a/scripts/actions/spells/black/absorb-acc.lua b/scripts/actions/spells/black/absorb-acc.lua index 681eff4af0c..a38d7bee6f5 100644 --- a/scripts/actions/spells/black/absorb-acc.lua +++ b/scripts/actions/spells/black/absorb-acc.lua @@ -19,7 +19,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-agi.lua b/scripts/actions/spells/black/absorb-agi.lua index a4d03014a11..df522c83b6e 100644 --- a/scripts/actions/spells/black/absorb-agi.lua +++ b/scripts/actions/spells/black/absorb-agi.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-chr.lua b/scripts/actions/spells/black/absorb-chr.lua index e3a16591380..419fa12f31e 100644 --- a/scripts/actions/spells/black/absorb-chr.lua +++ b/scripts/actions/spells/black/absorb-chr.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-dex.lua b/scripts/actions/spells/black/absorb-dex.lua index ca089570c0f..189ca7f72aa 100644 --- a/scripts/actions/spells/black/absorb-dex.lua +++ b/scripts/actions/spells/black/absorb-dex.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-int.lua b/scripts/actions/spells/black/absorb-int.lua index 5fe8c21c1ae..6290ae5033a 100644 --- a/scripts/actions/spells/black/absorb-int.lua +++ b/scripts/actions/spells/black/absorb-int.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-mnd.lua b/scripts/actions/spells/black/absorb-mnd.lua index 65a1d78e34b..3f5c7998b55 100644 --- a/scripts/actions/spells/black/absorb-mnd.lua +++ b/scripts/actions/spells/black/absorb-mnd.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-str.lua b/scripts/actions/spells/black/absorb-str.lua index 45d340d9bd8..b859d4bfeef 100644 --- a/scripts/actions/spells/black/absorb-str.lua +++ b/scripts/actions/spells/black/absorb-str.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/absorb-tp.lua b/scripts/actions/spells/black/absorb-tp.lua index cd0637156a1..acb45856647 100644 --- a/scripts/actions/spells/black/absorb-tp.lua +++ b/scripts/actions/spells/black/absorb-tp.lua @@ -16,7 +16,7 @@ spellObject.onSpellCast = function(caster, target, spell) local params = {} params.attribute = xi.mod.INT params.skillType = xi.skill.DARK_MAGIC - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) --get the resisted damage dmg = dmg * resist diff --git a/scripts/actions/spells/black/absorb-vit.lua b/scripts/actions/spells/black/absorb-vit.lua index 9bfd55f4f74..4d2813d1a03 100644 --- a/scripts/actions/spells/black/absorb-vit.lua +++ b/scripts/actions/spells/black/absorb-vit.lua @@ -22,7 +22,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.DARK_MAGIC params.bonus = 0 params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist <= 0.125 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) else diff --git a/scripts/actions/spells/black/aspir.lua b/scripts/actions/spells/black/aspir.lua index 7b94923f77a..a999cadf50a 100644 --- a/scripts/actions/spells/black/aspir.lua +++ b/scripts/actions/spells/black/aspir.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.attribute = xi.mod.INT params.skillType = xi.skill.DARK_MAGIC params.bonus = 1.0 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) --get the resisted damage dmg = dmg * resist --add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/aspir_ii.lua b/scripts/actions/spells/black/aspir_ii.lua index 89a66f3740d..96d552c7fa4 100644 --- a/scripts/actions/spells/black/aspir_ii.lua +++ b/scripts/actions/spells/black/aspir_ii.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.attribute = xi.mod.INT params.skillType = xi.skill.DARK_MAGIC params.bonus = 1.0 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) --get the resisted damage dmg = dmg * resist --add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/bio.lua b/scripts/actions/spells/black/bio.lua index aca15392a1d..fa73ad751ea 100644 --- a/scripts/actions/spells/black/bio.lua +++ b/scripts/actions/spells/black/bio.lua @@ -25,7 +25,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 15, should always do at least 1 dmg = utils.clamp(dmg, 1, 15) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/bio_ii.lua b/scripts/actions/spells/black/bio_ii.lua index 35fd5b29c55..51fae705724 100644 --- a/scripts/actions/spells/black/bio_ii.lua +++ b/scripts/actions/spells/black/bio_ii.lua @@ -25,7 +25,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 30, should always do at least 1 dmg = utils.clamp(dmg, 1, 30) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/bio_iii.lua b/scripts/actions/spells/black/bio_iii.lua index 5ebfe09bf10..e7f717efebb 100644 --- a/scripts/actions/spells/black/bio_iii.lua +++ b/scripts/actions/spells/black/bio_iii.lua @@ -25,7 +25,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 62, should always do at least 1 dmg = utils.clamp(dmg, 1, 62) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/bio_iv.lua b/scripts/actions/spells/black/bio_iv.lua index a4efcb53b90..309d3452d05 100644 --- a/scripts/actions/spells/black/bio_iv.lua +++ b/scripts/actions/spells/black/bio_iv.lua @@ -24,7 +24,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 80, should always do at least 1 dmg = utils.clamp(dmg, 1, 80) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/drain.lua b/scripts/actions/spells/black/drain.lua index f364880897d..189eb52e2fa 100644 --- a/scripts/actions/spells/black/drain.lua +++ b/scripts/actions/spells/black/drain.lua @@ -29,7 +29,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.attribute = xi.mod.INT params.skillType = xi.skill.DARK_MAGIC params.bonus = 1.0 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) --get the resisted damage dmg = dmg * resist --add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/drain_ii.lua b/scripts/actions/spells/black/drain_ii.lua index a8bf1bfe48e..7cc89eff5e5 100644 --- a/scripts/actions/spells/black/drain_ii.lua +++ b/scripts/actions/spells/black/drain_ii.lua @@ -29,7 +29,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.attribute = xi.mod.INT params.skillType = xi.skill.DARK_MAGIC params.bonus = 1.0 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) --get the resisted damage dmg = dmg * resist --add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/black/impact.lua b/scripts/actions/spells/black/impact.lua index 25329673e03..c1ffaf5a7a2 100644 --- a/scripts/actions/spells/black/impact.lua +++ b/scripts/actions/spells/black/impact.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.resistBonus = 1.0 params.skillType = xi.skill.ELEMENTAL_MAGIC - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) local duration = 180 * resist -- BG wiki suggests only duration gets effected by resist, not stat amount. -- Todo: loop to avoid repeatedly doing same thing for each stat diff --git a/scripts/actions/spells/blue/1000_needles.lua b/scripts/actions/spells/blue/1000_needles.lua index 51824cecec1..be858a8937c 100644 --- a/scripts/actions/spells/blue/1000_needles.lua +++ b/scripts/actions/spells/blue/1000_needles.lua @@ -43,7 +43,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.chr_wsc = 1.0 local damage = 1000 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist == 1 then local targets = spell:getTotalTargets() damage = damage / targets diff --git a/scripts/actions/spells/blue/blank_gaze.lua b/scripts/actions/spells/blue/blank_gaze.lua index e36b7385aa2..24bd5cef688 100644 --- a/scripts/actions/spells/blue/blank_gaze.lua +++ b/scripts/actions/spells/blue/blank_gaze.lua @@ -27,7 +27,7 @@ spellObject.onSpellCast = function(caster, target, spell) local resistThreshold = 0.25 local effect = xi.effect.NONE - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist >= resistThreshold then spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) diff --git a/scripts/actions/spells/blue/cold_wave.lua b/scripts/actions/spells/blue/cold_wave.lua index 5499f30f21e..5cea0a26e9f 100644 --- a/scripts/actions/spells/blue/cold_wave.lua +++ b/scripts/actions/spells/blue/cold_wave.lua @@ -27,7 +27,7 @@ spellObject.onSpellCast = function(caster, target, spell) local tick = 3 local duration = 60 local resistThreshold = 0.5 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Cannot apply if target has Burn if target:getStatusEffect(xi.effect.BURN) ~= nil then diff --git a/scripts/actions/spells/blue/enervation.lua b/scripts/actions/spells/blue/enervation.lua index a2ab7295418..6f80a0b7f44 100644 --- a/scripts/actions/spells/blue/enervation.lua +++ b/scripts/actions/spells/blue/enervation.lua @@ -28,7 +28,7 @@ spellObject.onSpellCast = function(caster, target, spell) local resistThreshold = 0.5 local returnEffect = xi.effect.DEFENSE_DOWN - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist >= resistThreshold then local actionOne = target:addStatusEffect(xi.effect.DEFENSE_DOWN, 10, 0, duration * resist) diff --git a/scripts/actions/spells/blue/feather_tickle.lua b/scripts/actions/spells/blue/feather_tickle.lua index 39b77121d21..dfe50ba5f0c 100644 --- a/scripts/actions/spells/blue/feather_tickle.lua +++ b/scripts/actions/spells/blue/feather_tickle.lua @@ -26,7 +26,7 @@ spellObject.onSpellCast = function(caster, target, spell) local power = 1500 local resistThreshold = 0.5 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist >= resistThreshold then if target:getTP() == 0 then spell:setMsg(xi.msg.basic.MAGIC_NO_EFFECT) diff --git a/scripts/actions/spells/blue/geist_wall.lua b/scripts/actions/spells/blue/geist_wall.lua index 21bc01664b0..9842478c68a 100644 --- a/scripts/actions/spells/blue/geist_wall.lua +++ b/scripts/actions/spells/blue/geist_wall.lua @@ -27,7 +27,7 @@ spellObject.onSpellCast = function(caster, target, spell) local resistThreshold = 0.25 local effect = xi.effect.NONE - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist >= resistThreshold then effect = target:dispelStatusEffect() spell:setMsg(xi.msg.basic.MAGIC_ERASE) diff --git a/scripts/actions/spells/blue/light_of_penance.lua b/scripts/actions/spells/blue/light_of_penance.lua index 36f2249e1a8..a73875f56fe 100644 --- a/scripts/actions/spells/blue/light_of_penance.lua +++ b/scripts/actions/spells/blue/light_of_penance.lua @@ -27,7 +27,7 @@ spellObject.onSpellCast = function(caster, target, spell) local duration = 30 local returnEffect = xi.effect.BLINDNESS - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist >= 0.5 then spell:setMsg(xi.msg.basic.MAGIC_TP_REDUCE) -- this doesn't seem to do much diff --git a/scripts/actions/spells/blue/rending_deluge.lua b/scripts/actions/spells/blue/rending_deluge.lua index 7388c5b5ce8..8077bfd712b 100644 --- a/scripts/actions/spells/blue/rending_deluge.lua +++ b/scripts/actions/spells/blue/rending_deluge.lua @@ -41,7 +41,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.mnd_wsc = 0.0 params.chr_wsc = 0.0 - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) if resist > 0.0625 then target:dispelStatusEffect() end diff --git a/scripts/actions/spells/songs/foe_requiem.lua b/scripts/actions/spells/songs/foe_requiem.lua index 08c7587fc25..cb41fbe61fd 100644 --- a/scripts/actions/spells/songs/foe_requiem.lua +++ b/scripts/actions/spells/songs/foe_requiem.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/foe_requiem_ii.lua b/scripts/actions/spells/songs/foe_requiem_ii.lua index 58a76a7009a..da0d66345ff 100644 --- a/scripts/actions/spells/songs/foe_requiem_ii.lua +++ b/scripts/actions/spells/songs/foe_requiem_ii.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/foe_requiem_iii.lua b/scripts/actions/spells/songs/foe_requiem_iii.lua index 62244832670..8a9227034d9 100644 --- a/scripts/actions/spells/songs/foe_requiem_iii.lua +++ b/scripts/actions/spells/songs/foe_requiem_iii.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/foe_requiem_iv.lua b/scripts/actions/spells/songs/foe_requiem_iv.lua index 0de990de2e5..5437d392228 100644 --- a/scripts/actions/spells/songs/foe_requiem_iv.lua +++ b/scripts/actions/spells/songs/foe_requiem_iv.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/foe_requiem_v.lua b/scripts/actions/spells/songs/foe_requiem_v.lua index c3a6d433b0e..1b023abdfac 100644 --- a/scripts/actions/spells/songs/foe_requiem_v.lua +++ b/scripts/actions/spells/songs/foe_requiem_v.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/foe_requiem_vi.lua b/scripts/actions/spells/songs/foe_requiem_vi.lua index a14467da8de..79ca0eb33b5 100644 --- a/scripts/actions/spells/songs/foe_requiem_vi.lua +++ b/scripts/actions/spells/songs/foe_requiem_vi.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/foe_requiem_vii.lua b/scripts/actions/spells/songs/foe_requiem_vii.lua index 4e32c4333e0..ffb9b667978 100644 --- a/scripts/actions/spells/songs/foe_requiem_vii.lua +++ b/scripts/actions/spells/songs/foe_requiem_vii.lua @@ -21,7 +21,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.skillType = xi.skill.SINGING params.bonus = 0 params.effect = nil - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) -- resist message return 1 diff --git a/scripts/actions/spells/songs/magic_finale.lua b/scripts/actions/spells/songs/magic_finale.lua index 9ba18c031e2..f3f3728f9ff 100644 --- a/scripts/actions/spells/songs/magic_finale.lua +++ b/scripts/actions/spells/songs/magic_finale.lua @@ -18,7 +18,7 @@ spellObject.onSpellCast = function(caster, target, spell) params.bonus = caster:getMod(xi.mod.FINALE_EFFECT) + caster:getMod(xi.mod.ALL_SONGS_EFFECT) params.effect = nil - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) local effect = xi.effect.NONE if resist > 0.0625 then diff --git a/scripts/actions/spells/white/dia.lua b/scripts/actions/spells/white/dia.lua index 65cea22d61f..f2ce9ed7a53 100644 --- a/scripts/actions/spells/white/dia.lua +++ b/scripts/actions/spells/white/dia.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 2, should always do at least 1 dmg = utils.clamp(dmg, 1, 2) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/white/dia_ii.lua b/scripts/actions/spells/white/dia_ii.lua index 270345fa821..3c14cad8ca0 100644 --- a/scripts/actions/spells/white/dia_ii.lua +++ b/scripts/actions/spells/white/dia_ii.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 8, should always do at least 1 dmg = utils.clamp(dmg, 1, 8) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/white/dia_iii.lua b/scripts/actions/spells/white/dia_iii.lua index cc6024e7030..ef3684969bf 100644 --- a/scripts/actions/spells/white/dia_iii.lua +++ b/scripts/actions/spells/white/dia_iii.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 32, should always do at least 1 dmg = utils.clamp(dmg, 1, 32) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/white/diaga.lua b/scripts/actions/spells/white/diaga.lua index 80398cbe7e8..7dfea3c3285 100644 --- a/scripts/actions/spells/white/diaga.lua +++ b/scripts/actions/spells/white/diaga.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 12, should always do at least 1 dmg = utils.clamp(dmg, 1, 12) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/white/diaga_ii.lua b/scripts/actions/spells/white/diaga_ii.lua index 3443530104b..b2b0e4b075a 100644 --- a/scripts/actions/spells/white/diaga_ii.lua +++ b/scripts/actions/spells/white/diaga_ii.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 40, should always do at least 1 dmg = utils.clamp(dmg, 1, 40) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/actions/spells/white/diaga_iii.lua b/scripts/actions/spells/white/diaga_iii.lua index 532df426c91..6f4416858d6 100644 --- a/scripts/actions/spells/white/diaga_iii.lua +++ b/scripts/actions/spells/white/diaga_iii.lua @@ -23,7 +23,7 @@ spellObject.onSpellCast = function(caster, target, spell) -- Softcaps at 60, should always do at least 1 dmg = utils.clamp(dmg, 1, 60) -- Get resist multiplier (1x if no resist) - local resist = applyResistance(caster, target, spell, params) + local resist = applyResistanceEffect(caster, target, spell, params) -- Get the resisted damage dmg = dmg * resist -- Add on bonuses (staff/day/weather/jas/mab/etc all go in this function) diff --git a/scripts/globals/bluemagic.lua b/scripts/globals/bluemagic.lua index df8ed5262df..3ed05826e3f 100644 --- a/scripts/globals/bluemagic.lua +++ b/scripts/globals/bluemagic.lua @@ -329,7 +329,7 @@ xi.spells.blue.useMagicalSpell = function(caster, target, spell, params) local finaldmg = math.floor(finalD * xi.spells.damage.calculateMTDR(spell)) -- Resistance - finaldmg = math.floor(finaldmg * applyResistance(caster, target, spell, params)) + finaldmg = math.floor(finaldmg * applyResistanceEffect(caster, target, spell, params)) -- MAB/MDB/weather/day/affinity/burst effect on damage finaldmg = math.floor(addBonuses(caster, spell, target, finaldmg)) @@ -345,7 +345,7 @@ xi.spells.blue.useDrainSpell = function(caster, target, spell, params, softCap, dmg = utils.clamp(dmg, 0, softCap) end - dmg = dmg * applyResistance(caster, target, spell, params) + dmg = dmg * applyResistanceEffect(caster, target, spell, params) dmg = addBonuses(caster, spell, target, dmg) dmg = adjustForTarget(target, dmg, spell:getElement()) @@ -404,7 +404,7 @@ xi.spells.blue.useBreathSpell = function(caster, target, spell, params, isConal) dmg = dmg * (1 + (caster:getMod(xi.mod.BREATH_DMG_DEALT) / 100)) -- Resistance - local resistance = applyResistance(caster, target, spell, params) + local resistance = applyResistanceEffect(caster, target, spell, params) dmg = math.floor(dmg * resistance) -- Final damage diff --git a/scripts/globals/combat/magic_hit_rate.lua b/scripts/globals/combat/magic_hit_rate.lua index 64aad18de75..9abdc371d16 100644 --- a/scripts/globals/combat/magic_hit_rate.lua +++ b/scripts/globals/combat/magic_hit_rate.lua @@ -284,7 +284,7 @@ local function magicAccuracyFromFood(actor, magicAccPreFood) return magicAcc end --- Global function to calculate magicc accuracy for addiional effects. (No stat, no magic burst bonuses) +-- Global function to calculate magic accuracy for some non-spell magic actions. (No stat diff, no magic burst bonuses). xi.combat.magicHitRate.calculateNonSpellMagicAccuracy = function(actor, target, spellGroup, skillType, spellElement, bonusMacc) local finalMagicAcc = 0 diff --git a/scripts/globals/job_utils/dancer.lua b/scripts/globals/job_utils/dancer.lua index 050f2f10f05..da36f3a2046 100644 --- a/scripts/globals/job_utils/dancer.lua +++ b/scripts/globals/job_utils/dancer.lua @@ -371,7 +371,7 @@ xi.job_utils.dancer.useDesperateFlourishAbility = function(player, target, abili bonus = 50 - target:getMod(xi.mod.GRAVITYRES), } - local resistRate = applyResistance(player, target, spell, params) + local resistRate = applyResistanceEffect(player, target, spell, params) if resistRate > 0.25 then target:delStatusEffectSilent(xi.effect.WEIGHT) target:addStatusEffect(xi.effect.WEIGHT, 50, 0, 60 * resistRate) @@ -421,7 +421,7 @@ xi.job_utils.dancer.useViolentFlourishAbility = function(player, target, ability local cRatio, _ = xi.weaponskills.cMeleeRatio(player, target, params, 0, 1000) local dmg = baseDmg * xi.weaponskills.generatePdif(cRatio[1], cRatio[2], true) - if applyResistance(player, target, spell, params) > 0.25 then + if applyResistanceEffect(player, target, spell, params) > 0.25 then target:addStatusEffect(xi.effect.STUN, 1, 0, 2) else ability:setMsg(xi.msg.basic.JA_DAMAGE) diff --git a/scripts/globals/magic.lua b/scripts/globals/magic.lua index 11e6540fbaa..967eb2ccbb3 100644 --- a/scripts/globals/magic.lua +++ b/scripts/globals/magic.lua @@ -30,7 +30,6 @@ xi.magic.dayStrong = { xi.day.FIRESDAY, xi.day.ICEDAY, xi.magic.singleWeatherStrong = { xi.weather.HOT_SPELL, xi.weather.SNOW, xi.weather.WIND, xi.weather.DUST_STORM, xi.weather.THUNDER, xi.weather.RAIN, xi.weather.AURORAS, xi.weather.GLOOM } xi.magic.doubleWeatherStrong = { xi.weather.HEAT_WAVE, xi.weather.BLIZZARDS, xi.weather.GALES, xi.weather.SAND_STORM, xi.weather.THUNDERSTORMS, xi.weather.SQUALL, xi.weather.STELLAR_GLARE, xi.weather.DARKNESS } local elementalObi = { xi.mod.FORCE_FIRE_DWBONUS, xi.mod.FORCE_ICE_DWBONUS, xi.mod.FORCE_WIND_DWBONUS, xi.mod.FORCE_EARTH_DWBONUS, xi.mod.FORCE_LIGHTNING_DWBONUS, xi.mod.FORCE_WATER_DWBONUS, xi.mod.FORCE_LIGHT_DWBONUS, xi.mod.FORCE_DARK_DWBONUS } -local spellAcc = { xi.mod.FIREACC, xi.mod.ICEACC, xi.mod.WINDACC, xi.mod.EARTHACC, xi.mod.THUNDERACC, xi.mod.WATERACC, xi.mod.LIGHTACC, xi.mod.DARKACC } local strongAffinityDmg = { xi.mod.FIRE_AFFINITY_DMG, xi.mod.ICE_AFFINITY_DMG, xi.mod.WIND_AFFINITY_DMG, xi.mod.EARTH_AFFINITY_DMG, xi.mod.THUNDER_AFFINITY_DMG, xi.mod.WATER_AFFINITY_DMG, xi.mod.LIGHT_AFFINITY_DMG, xi.mod.DARK_AFFINITY_DMG } local strongAffinityAcc = { xi.mod.FIRE_AFFINITY_ACC, xi.mod.ICE_AFFINITY_ACC, xi.mod.WIND_AFFINITY_ACC, xi.mod.EARTH_AFFINITY_ACC, xi.mod.THUNDER_AFFINITY_ACC, xi.mod.WATER_AFFINITY_ACC, xi.mod.LIGHT_AFFINITY_ACC, xi.mod.DARK_AFFINITY_ACC } xi.magic.resistMod = { xi.mod.FIRE_MEVA, xi.mod.ICE_MEVA, xi.mod.WIND_MEVA, xi.mod.EARTH_MEVA, xi.mod.THUNDER_MEVA, xi.mod.WATER_MEVA, xi.mod.LIGHT_MEVA, xi.mod.DARK_MEVA } @@ -38,7 +37,6 @@ xi.magic.specificDmgTakenMod = { xi.mod.FIRE_SDT, xi.mod.ICE_SDT, xi.magic.absorbMod = { xi.mod.FIRE_ABSORB, xi.mod.ICE_ABSORB, xi.mod.WIND_ABSORB, xi.mod.EARTH_ABSORB, xi.mod.LTNG_ABSORB, xi.mod.WATER_ABSORB, xi.mod.LIGHT_ABSORB, xi.mod.DARK_ABSORB } local nullMod = { xi.mod.FIRE_NULL, xi.mod.ICE_NULL, xi.mod.WIND_NULL, xi.mod.EARTH_NULL, xi.mod.LTNG_NULL, xi.mod.WATER_NULL, xi.mod.LIGHT_NULL, xi.mod.DARK_NULL } local blmMerit = { xi.merit.FIRE_MAGIC_POTENCY, xi.merit.ICE_MAGIC_POTENCY, xi.merit.WIND_MAGIC_POTENCY, xi.merit.EARTH_MAGIC_POTENCY, xi.merit.LIGHTNING_MAGIC_POTENCY, xi.merit.WATER_MAGIC_POTENCY } -local rdmMerit = { xi.merit.FIRE_MAGIC_ACCURACY, xi.merit.ICE_MAGIC_ACCURACY, xi.merit.WIND_MAGIC_ACCURACY, xi.merit.EARTH_MAGIC_ACCURACY, xi.merit.LIGHTNING_MAGIC_ACCURACY, xi.merit.WATER_MAGIC_ACCURACY } xi.magic.barSpell = { xi.effect.BARFIRE, xi.effect.BARBLIZZARD, xi.effect.BARAERO, xi.effect.BARSTONE, xi.effect.BARTHUNDER, xi.effect.BARWATER } xi.magic.dayWeak = { xi.day.WATERSDAY, xi.day.FIRESDAY, xi.day.ICEDAY, xi.day.WINDSDAY, xi.day.EARTHSDAY, xi.day.LIGHTNINGDAY, xi.day.DARKSDAY, xi.day.LIGHTSDAY } @@ -88,142 +86,6 @@ local function AffinityBonusAcc(caster, ele) return bonus end --- Returns the bonus magic accuracy for any spell -local function getSpellBonusAcc(caster, target, spell, params) - local magicAccBonus = 0 - local castersWeather = caster:getWeather() - local skill = spell:getSkillType() - local spellGroup = spell:getSpellGroup() - local element = spell:getElement() - local casterJob = caster:getMainJob() - - if - caster:hasStatusEffect(xi.effect.ALTRUISM) and - spellGroup == xi.magic.spellGroup.WHITE - then - magicAccBonus = magicAccBonus + caster:getStatusEffect(xi.effect.ALTRUISM):getPower() - end - - if - caster:hasStatusEffect(xi.effect.FOCALIZATION) and - spellGroup == xi.magic.spellGroup.BLACK - then - magicAccBonus = magicAccBonus + caster:getStatusEffect(xi.effect.FOCALIZATION):getPower() - end - - -- Apply Divine Emblem to Flash - if - caster:hasStatusEffect(xi.effect.DIVINE_EMBLEM) and - skill == xi.skill.DIVINE_MAGIC - then - magicAccBonus = magicAccBonus + 100 -- TODO: Confirm this with retail - end - - -- Apply Dark Seal to Dark Magic - -- http://wiki.ffo.jp/html/3247.html - -- Similar to Elemental Seal but only for Dark Magic - if - caster:hasStatusEffect(xi.effect.DARK_SEAL) and - skill == xi.skill.DARK_MAGIC - then - magicAccBonus = magicAccBonus + 256 - end - - local skillchainTier, _ = xi.magicburst.formMagicBurst(element, target) - - -- Add acc for skillchains - if skillchainTier > 0 then - magicAccBonus = magicAccBonus + 25 - end - - -- Add acc for klimaform - if element > 0 then - if - caster:hasStatusEffect(xi.effect.KLIMAFORM) and - ( - castersWeather == xi.magic.singleWeatherStrong[element] or - castersWeather == xi.magic.doubleWeatherStrong[element] - ) - then - magicAccBonus = magicAccBonus + 15 - end - end - - switch(casterJob): caseof - { - [xi.job.WHM] = function() - magicAccBonus = magicAccBonus + caster:getJobPointLevel(xi.jp.WHM_MAGIC_ACC_BONUS) - end, - - [xi.job.BLM] = function() - -- Add MACC for BLM Elemental Magic Merits - if skill == xi.skill.ELEMENTAL_MAGIC then - magicAccBonus = magicAccBonus + caster:getMerit(xi.merit.ELEMENTAL_MAGIC_ACCURACY) - end - - -- BLM Job Point: MACC Bonus +1 - magicAccBonus = magicAccBonus + caster:getJobPointLevel(xi.jp.BLM_MAGIC_ACC_BONUS) - end, - - [xi.job.DRK] = function() - -- Add MACC for Dark Seal - if - skill == xi.skill.DARK_MAGIC and - caster:hasStatusEffect(xi.effect.DARK_SEAL) - then - magicAccBonus = magicAccBonus + 256 - end - end, - - [xi.job.RDM] = function() - -- Add MACC for RDM group 1 merits - if element >= xi.element.FIRE and element <= xi.element.WATER then - magicAccBonus = magicAccBonus + caster:getMerit(rdmMerit[element]) - end - - -- RDM Job Point: During saboteur, Enfeebling MACC +2 - if - skill == xi.skill.ENFEEBLING_MAGIC and - caster:hasStatusEffect(xi.effect.SABOTEUR) - then - local jpValue = caster:getJobPointLevel(xi.jp.SABOTEUR_EFFECT) - - magicAccBonus = magicAccBonus + (jpValue * 2) - end - - -- RDM Job Point: Magic Accuracy Bonus, All MACC + 1 - magicAccBonus = magicAccBonus + caster:getJobPointLevel(xi.jp.RDM_MAGIC_ACC_BONUS) - end, - - [xi.job.NIN] = function() - -- NIN Job Point: Ninjitsu Accuracy Bonus - if skill == xi.skill.NINJUTSU then - magicAccBonus = magicAccBonus + caster:getJobPointLevel(xi.jp.NINJITSU_ACC_BONUS) - end - end, - - [xi.job.BLU] = function() - -- BLU MACC merits - nuke acc is handled in bluemagic.lua - if skill == xi.skill.BLUE_MAGIC then - magicAccBonus = magicAccBonus + caster:getMerit(xi.merit.MAGICAL_ACCURACY) - end - end, - - [xi.job.SCH] = function() - if - (spellGroup == xi.magic.spellGroup.WHITE and caster:hasStatusEffect(xi.effect.PARSIMONY)) or - (spellGroup == xi.magic.spellGroup.BLACK and caster:hasStatusEffect(xi.effect.PENURY)) - then - local jpValue = caster:getJobPointLevel(xi.jp.STRATEGEM_EFFECT_I) - - magicAccBonus = magicAccBonus + jpValue - end - end, - } - - return magicAccBonus -end - local function calculateMagicBurst(caster, spell, target, params) local burst = 1.0 local skillchainburst = 1.0 @@ -445,11 +307,6 @@ end -- -- Output: -- The factor to multiply down damage (1/2 1/4 1/8 1/16) - In this format so this func can be used for enfeebs on duration. - -function applyResistance(caster, target, spell, params) - return applyResistanceEffect(caster, target, spell, params) -end - -- USED FOR Status Effect Enfeebs (blind, slow, para, etc.) -- Output: -- The factor to multiply down duration (1/2 1/4 1/8 1/16) @@ -867,7 +724,7 @@ function handleThrenody(caster, target, spell, basePower, baseDuration, modifier params.skillType = xi.skill.SINGING params.bonus = staff - local resm = applyResistance(caster, target, spell, params) + local resm = applyResistanceEffect(caster, target, spell, params) if resm < 0.5 then spell:setMsg(xi.msg.basic.MAGIC_RESIST) diff --git a/scripts/globals/mobskills.lua b/scripts/globals/mobskills.lua index bcadfc12194..be02ea04829 100644 --- a/scripts/globals/mobskills.lua +++ b/scripts/globals/mobskills.lua @@ -326,6 +326,13 @@ end xi.mobskills.applyPlayerResistance = function(actor, effect, target, diff, bonusMacc, element) local isEnfeeble = false + if + effect and + effect > 0 + then + isEnfeeble = true + end + if not bonusMacc then bonusMacc = 0 end @@ -336,12 +343,8 @@ xi.mobskills.applyPlayerResistance = function(actor, effect, target, diff, bonus bonusMacc = bonusMacc + diff end - if effect then - isEnfeeble = true - end - local magicAcc = xi.combat.magicHitRate.calculateNonSpellMagicAccuracy(actor, target, 0, xi.skill.NONE, element, bonusMacc) - local magicEva = xi.combat.magicHitRate.calculateTargetMagicEvasion(actor, target, element, false, 0, 0) -- false = not an enfeeble. + local magicEva = xi.combat.magicHitRate.calculateTargetMagicEvasion(actor, target, element, isEnfeeble, 0, 0) -- false = not an enfeeble. local magicHitRate = xi.combat.magicHitRate.calculateMagicHitRate(magicAcc, magicEva) local resistRate = xi.combat.magicHitRate.calculateResistRate(actor, target, xi.skill.NONE, element, magicHitRate, 0) diff --git a/tools/ci/lua.sh b/tools/ci/lua.sh index 2adc47c63bc..23d7804c40d 100755 --- a/tools/ci/lua.sh +++ b/tools/ci/lua.sh @@ -75,7 +75,6 @@ global_objects=( addBonuses addBonusesAbility - applyResistance applyResistanceAbility applyResistanceEffect adjustForTarget @@ -90,7 +89,6 @@ global_objects=( getCureFinal getBaseCureOld getElementalDamageReduction - getMagicHitRate handleThrenody isValidHealTarget