From a8fc29e87a32a3803aa670de44488daf1bc89881 Mon Sep 17 00:00:00 2001 From: sruon Date: Sat, 18 Apr 2026 00:47:49 -0600 Subject: [PATCH] Mobskills only trigger resonance on main target --- src/map/entities/battleentity.cpp | 18 +++++++++++------- src/map/entities/charentity.cpp | 3 ++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/map/entities/battleentity.cpp b/src/map/entities/battleentity.cpp index ad528a07b76..8d64db04ba1 100644 --- a/src/map/entities/battleentity.cpp +++ b/src/map/entities/battleentity.cpp @@ -2847,18 +2847,22 @@ void CBattleEntity::OnMobSkillFinished(CMobSkillState& state, action_t& action) result.resolution = ActionResolution::Hit; } - if (result.resolution != ActionResolution::Miss && result.resolution != ActionResolution::Parry) + if (first) { - if (first && PTargetFound->health.hp > 0 && PSkill->getPrimarySkillchain() != 0) + bool isNegated = result.resolution == ActionResolution::Miss || result.resolution == ActionResolution::Parry; + if (!isNegated) { - const auto effect = battleutils::GetSkillChainEffect(PTargetFound, PSkill->getPrimarySkillchain(), PSkill->getSecondarySkillchain(), PSkill->getTertiarySkillchain()); - if (effect != ActionProcSkillChain::None) + if (PTargetFound->health.hp > 0 && PSkill->getPrimarySkillchain() != 0) { - result.recordSkillchain(effect, battleutils::TakeSkillchainDamage(this, PTargetFound, result.param, nullptr)); + const auto effect = battleutils::GetSkillChainEffect(PTargetFound, PSkill->getPrimarySkillchain(), PSkill->getSecondarySkillchain(), PSkill->getTertiarySkillchain()); + if (effect != ActionProcSkillChain::None) + { + result.recordSkillchain(effect, battleutils::TakeSkillchainDamage(this, PTargetFound, result.param, nullptr)); + } } - - first = false; } + + first = false; } if (PSkill->getValidTargets() & TARGET_ENEMY) diff --git a/src/map/entities/charentity.cpp b/src/map/entities/charentity.cpp index dfb72a5b472..eae2afce695 100644 --- a/src/map/entities/charentity.cpp +++ b/src/map/entities/charentity.cpp @@ -1623,7 +1623,8 @@ void CCharEntity::OnWeaponSkillFinished(CWeaponSkillState& state, action_t& acti // On retail, weaponskills will contain 0x08, 0x10 (HIT, ABILITY) on hit and may include the following: // 0x01, 0x02, 0x04 (MISS, GUARDED, BLOCK) // TODO: refactor this so lua returns the number of hits so we don't have to check the reaction bits. - if (actionResult.resolution != ActionResolution::Miss) + bool isNegated = actionResult.resolution == ActionResolution::Miss || actionResult.resolution == ActionResolution::Parry; + if (!isNegated) { int wspoints = settings::get("map.WS_POINTS_BASE");