[Skill Parity] 取消召唤 (Unsummon) 与 投掷 (Throw) 在不满足使用条件时不应播放人物动作与法术效果 #441
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题描述 (Bug Description)
在当前游戏中,当玩家右键使用 取消召唤 (Unsummon, Skill ID 3) 或 投掷 (Throw, Skill ID 2) 技能时,即使当前环境处于完全不适用的无效状态,角色依然会强制播放动作并产生视觉法术效果:
sc),甚至触发法术层 Overlay;sc),并向鼠标方向发射虚假的投射物。在原版 Diablo II 1.13c 中,这类前置条件未满足的非法指令属于静默拒绝或仅播放提示音(Refusal),绝对不播放任何人物动作,更不会产生任何法术特效或投射物。
原版 1.13c 地面真理 (Diablo II 1.13c Ground Truth Invariants)
取消召唤 (Unsummon, Skills.txt ID 3):
Skills.txt:TargetPet: 1,TargetAlly: 0,TargetCorpse: 0,srvdofunc: 4。unsummonable === true的实体)生效。投掷 (Throw, Skills.txt ID 2):
Skills.txt:skill: Throw,Id: 2。jave、飞刀tkni、飞斧taxa)或投掷药剂(tpot),且堆叠数量quantity > 0。th或sc),不发射投射物。缺陷代码定位与根因分析 (Root Cause Analysis)
动作与特效触发时机颠倒 (Execution Order Inversion):
在
src/scene/act-scene.ts(第 1235-1253 行) 的castSkill函数中:castSkill在进入第 6 步的具体技能分发与条件校验(如是否有弹药、是否有目标)之前,就在第 4b 步和第 5 步无条件对所有非 0 技能触发了施法动作 (sc) 和施法光效!缺失针对 Throw (2) 和 Unsummon (3) 的适用性合法校验:
skillId === 2:未校验weaponInfo.isThrowable以及quantity > 0;skillId === 3:未校验场上是否存在属于玩家的unsummonable随从;修复建议 (Proposed Fix)
在
castSkill的动作播放(4b)与特效生成(5)之前,对投掷和取消召唤进行前置合法性检查:th(若存在)或a1,而非通用的魔法施法动作sc。