Visitar URL original
fix(character): 修复新杀谋周瑜【英谋】阴状态结算死循环 by MaxFreedomPollard · Pull Request #4556 · libnoname/noname · GitHub
Skip to content

fix(character): 修复新杀谋周瑜【英谋】阴状态结算死循环 - #4556

Merged
mengxinzxz merged 1 commit into
libnoname:mainfrom
MaxFreedomPollard:fix/dcsbyingmou-infinite-loop
Oct 25, 2026
Merged

mengxinzxz merged 1 commit into
libnoname:mainfrom
MaxFreedomPollard:fix/dcsbyingmou-infinite-loop

Conversation

@MaxFreedomPollard

Copy link
Copy Markdown
Contributor

变更内容

  • 修复新杀谋周瑜【英谋】(dcsbyingmou)阴状态的结算死循环:使用角色手中仍有【杀】或伤害类锦囊牌,但没有一张能对目标使用时(例如目标已被前一张牌击杀,或目标没有手牌、使用角色只剩【火攻】),while (true) 循环既不用牌也不退出。该分支内没有 await,因此是同步死循环,游戏直接卡死。
  • 现在没有可对目标使用的牌时退出循环。弃牌条件(没有【杀】和伤害类锦囊牌时弃牌)以及“未因此受到伤害则造成1点火焰伤害”的结算均保持不变。

该问题由 #4040 引入:此前 getCards 的过滤条件中包含 canUse,没有可用牌时会走到 break;#4040 将 canUse 的判断移到循环内部后,缺少了对应的退出分支。

验证方式

  • 用 Node 22 写了一个临时脚本(未提交),导入 apps/core/character/xianding/skill.js 中真实的 dcsbyingmou.content,用桩对象模拟各角色(其中 canUse 按 lib.filter.targetEnabled 的规则对已死亡目标返回 false):
    • 第一张【杀】击杀目标,手中还剩一张【杀】:修改前死循环(getCards 被调用超过 10000 次后由脚本中断),修改后正常结束,剩余的【杀】留在手中,不追加火焰伤害;
    • 目标没有手牌,使用角色只有【火攻】:修改前死循环,修改后正常结束,不弃牌,谋周瑜对目标造成1点火焰伤害;
    • 伤害牌均可使用,以及没有伤害牌(弃牌至与谋周瑜相同并造成火焰伤害)两种情况:修改前后结果一致。
  • node --check 通过。本地无法安装依赖,未运行 pnpm lint(其检查范围为 apps/core/noname/**,不包含本次修改的文件),也未在游戏客户端中实际对局验证。

关联 issue

Closes #4523

🤖 Generated with Claude Code

阴状态下,使用角色手中仍有【杀】或伤害类锦囊牌,但均不能对目标使用时
(如目标已被此前的牌击杀),循环既不用牌也不退出,且该分支内没有 await,
导致同步死循环、游戏卡死。没有可对目标使用的牌时退出循环。

Fixes libnoname#4523

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mengxinzxz
mengxinzxz merged commit dd7e042 into libnoname:main Oct 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

谋周瑜“英谋”阴状态击杀目标后可能进入死循环

2 participants