From a663f09b446b4e30744b3af89d99508397d50531 Mon Sep 17 00:00:00 2001 From: Sennar1593 <90145418+Sennar1593@users.noreply.github.com> Date: Tue, 21 May 2024 22:25:05 +0200 Subject: [PATCH] Update automatonweaponskills.lua Solve issue where automaton ws could crash the server under certain cirscustamces --- scripts/globals/automatonweaponskills.lua | 36 ++++++++++------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/scripts/globals/automatonweaponskills.lua b/scripts/globals/automatonweaponskills.lua index c08fa16dcc4..08fbf3845f3 100644 --- a/scripts/globals/automatonweaponskills.lua +++ b/scripts/globals/automatonweaponskills.lua @@ -1,10 +1,12 @@ -- Uses a mixture of mob and player WS formulas -require("scripts/globals/weaponskills") -require("scripts/globals/magicburst") -require("scripts/globals/status") -require("scripts/globals/utils") -require("scripts/globals/magic") -require("scripts/globals/msg") +require('scripts/globals/weaponskills') +require('scripts/globals/magicburst') +require('scripts/globals/utils') +require('scripts/globals/magic') + +-- TODO: Consolidate this with weaponskills +xi = xi or {} +xi.autows = xi.autows or {} local function getAutoHitRate(attacker, defender, capHitRate, bonus, melee) local acc = (melee and attacker:getACC() or attacker:getRACC()) + (bonus or 0) @@ -163,14 +165,10 @@ local function getMeleeCRatio(attacker, defender, params, ignoredDef) return pdif, pdifcrit end --- params contains: ftp100, ftp200, ftp300, str_wsc, dex_wsc, vit_wsc, int_wsc, mnd_wsc, canCrit, crit100, crit200, crit300, acc100, acc200, acc300, ignoresDef, ignore100, ignore200, ignore300, atkmulti, kick, accBonus, weaponType, weaponDamage -function doAutoPhysicalWeaponskill(attacker, target, wsID, tp, primaryMsg, action, taChar, wsParams, skill) +-- params contains: ftpMod, str_wsc, dex_wsc, vit_wsc, int_wsc, mnd_wsc, critVaries, accVaries, ignoredDefense, atkmulti, kick, accBonus, weaponType, weaponDamage +xi.autows.doAutoPhysicalWeaponskill = function(attacker, target, wsID, tp, primaryMsg, action, taChar, wsParams, skill) -- Determine cratio and ccritratio - local ignoredDef = 0 - if wsParams.ignoresDef ~= nil and wsParams.ignoresDef then - ignoredDef = xi.weaponskills.calculatedIgnoredDef(tp, target:getStat(xi.mod.DEF), wsParams.ignored100, wsParams.ignored200, wsParams.ignored300) - end - + local ignoredDef = xi.weaponskills.calculatedIgnoredDef(tp, target:getStat(xi.mod.DEF), wsParams.ignoredDefense) local cratio, ccritratio = getMeleeCRatio(attacker, target, wsParams, ignoredDef) -- Set up conditions and wsParams used for calculating weaponskill damage @@ -188,6 +186,7 @@ function doAutoPhysicalWeaponskill(attacker, target, wsID, tp, primaryMsg, actio } local calcParams = {} + calcParams.wsID = wsID calcParams.weaponDamage = xi.weaponskills.getMeleeDmg(attacker, attack.weaponType, wsParams.kick) calcParams.attackInfo = attack calcParams.fSTR = utils.clamp(attacker:getStat(xi.mod.STR) - target:getStat(xi.mod.VIT), -10, 10) @@ -252,14 +251,10 @@ function doAutoPhysicalWeaponskill(attacker, target, wsID, tp, primaryMsg, actio return finaldmg, calcParams.criticalHit, calcParams.tpHitsLanded, calcParams.extraHitsLanded, calcParams.shadowsAbsorbed end --- params contains: ftp100, ftp200, ftp300, str_wsc, dex_wsc, vit_wsc, int_wsc, mnd_wsc, canCrit, crit100, crit200, crit300, acc100, acc200, acc300, ignoresDef, ignore100, ignore200, ignore300, atkmulti, accBonus, weaponDamage -function doAutoRangedWeaponskill(attacker, target, wsID, wsParams, tp, primaryMsg, skill, action) +-- params contains: ftpMod, str_wsc, dex_wsc, vit_wsc, int_wsc, mnd_wsc, critVaries, accVaries, ignoredDefense, atkmulti, accBonus, weaponDamage +xi.autows.doAutoRangedWeaponskill = function(attacker, target, wsID, wsParams, tp, primaryMsg, skill, action) -- Determine cratio and ccritratio - local ignoredDef = 0 - if wsParams.ignoresDef ~= nil and wsParams.ignoresDef then - ignoredDef = xi.weaponskills.calculatedIgnoredDef(tp, target:getStat(xi.mod.DEF), wsParams.ignored100, wsParams.ignored200, wsParams.ignored300) - end - + local ignoredDef = xi.weaponskills.calculatedIgnoredDef(tp, target:getStat(xi.mod.DEF), wsParams.ignoredDefense) local cratio, ccritratio = getRangedCRatio(attacker, target, wsParams, ignoredDef) -- Set up conditions and wsParams used for calculating weaponskill damage @@ -280,6 +275,7 @@ function doAutoRangedWeaponskill(attacker, target, wsID, wsParams, tp, primaryMs local calcParams = { + wsID = wsID, weaponDamage = { wsParams.weaponDamage or rangedDamage }, attackInfo = attack, fSTR = utils.clamp(attacker:getStat(xi.mod.STR) - target:getStat(xi.mod.VIT), -10, 10),