From b598214cb58b79cb95989813dbff2c3376672975 Mon Sep 17 00:00:00 2001 From: WinterSolstice8 <60417494+wintersolstice8@users.noreply.github.com> Date: Fri, 15 May 2026 20:13:24 -0600 Subject: [PATCH] [core] Use slot to determine delay for TP return --- src/map/utils/battleutils.cpp | 17 +++++++++++------ src/map/utils/battleutils.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/map/utils/battleutils.cpp b/src/map/utils/battleutils.cpp index ce1889d0dfe..c1fb655909a 100644 --- a/src/map/utils/battleutils.cpp +++ b/src/map/utils/battleutils.cpp @@ -1864,7 +1864,7 @@ auto GetBaseRangedDelay(CBattleEntity* PEntity) -> uint16 return baseDelay; } -auto CalculateTPFromDamageDealt(CBattleEntity* PAttacker, bool isZanshin) -> int32 +auto CalculateTPFromDamageDealt(CBattleEntity* PAttacker, const bool& isZanshin, const SLOTTYPE& slot) -> int32 { if (PAttacker == nullptr) { @@ -1872,9 +1872,14 @@ auto CalculateTPFromDamageDealt(CBattleEntity* PAttacker, bool isZanshin) -> int return 0; } - int32 tpReturn = luautils::callGlobal("xi.combat.tp.getSingleMeleeHitTPReturn", PAttacker, isZanshin); - - return tpReturn; + if (slot == SLOT_RANGED || slot == SLOT_AMMO) + { + return luautils::callGlobal("xi.combat.tp.getSingleRangedHitTPReturn", PAttacker); + } + else + { + return luautils::callGlobal("xi.combat.tp.getSingleMeleeHitTPReturn", PAttacker, isZanshin); + } } auto CalculateTPFromDamageTaken(CBattleEntity* PAttacker, CBattleEntity* PDefender, int32 damage, uint16 delay) -> int32 @@ -2267,7 +2272,7 @@ int32 TakePhysicalDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, PHY { bool isZanshin = physicalAttackType == PHYSICAL_ATTACK_TYPE::ZANSHIN; - int16 attackerTPReturn = CalculateTPFromDamageDealt(PAttacker, isZanshin); + int16 attackerTPReturn = CalculateTPFromDamageDealt(PAttacker, isZanshin, static_cast(slot)); PAttacker->addTP((int16)(tpMultiplier * attackerTPReturn)); } @@ -2396,7 +2401,7 @@ int32 TakeWeaponskillDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, if (primary) // Calculate TP Return from WS { - int16 baseTp = CalculateTPFromDamageDealt(PAttacker, false); + int16 baseTp = CalculateTPFromDamageDealt(PAttacker, false, static_cast(slot)); standbyTp = bonusTP + (int16)((tpMultiplier * baseTp)); } diff --git a/src/map/utils/battleutils.h b/src/map/utils/battleutils.h index a8fd0d819d4..6a8abfb5923 100644 --- a/src/map/utils/battleutils.h +++ b/src/map/utils/battleutils.h @@ -180,7 +180,7 @@ bool CanUseWeaponskill(CCharEntity* PChar, CWeaponSkill* PSkill); int16 CalculateBaseTP(CBattleEntity* PEntity, int32 delay); auto GetBaseDelay(CBattleEntity* PEntity) -> uint16; // get base delay of entity, melee only auto GetBaseRangedDelay(CBattleEntity* PEntity) -> uint16; // get base delay of entity, ranged only -auto CalculateTPFromDamageDealt(CBattleEntity* PAttacker, bool isZanshin) -> int32; +auto CalculateTPFromDamageDealt(CBattleEntity* PAttacker, const bool& isZanshin, const SLOTTYPE& slot) -> int32; auto CalculateTPFromDamageTaken(CBattleEntity* PAttacker, CBattleEntity* PDefender, int32 damage, uint16 delay) -> int32; void GenerateCureEnmity(CBattleEntity* PSource, CBattleEntity* PTarget, int32 amount, int32 fixedCE = 0, int32 fixedVE = 0); void GenerateInRangeEnmity(CBattleEntity* PSource, int32 CE, int32 VE);