mirror of
https://github.com/Shu-Ying/noname-shuying.git
synced 2026-10-11 03:20:01 +08:00
fixed # 补全部分卡牌
fixed # 修复部分已知BUG
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
# 第一章结束与战斗奖励调整(2026-10-04)
|
||||
|
||||
本说明补充现有章节、助战和奖励文档,以当前源码为准。
|
||||
|
||||
## 第一章结束
|
||||
|
||||
第一章 Boss 胜利后先完成奖励选择与结算,再播放旁白:
|
||||
|
||||
> 战斗还未完结,等待后续更新。
|
||||
|
||||
随后结束本次征程并记录通关,不进入第二章的占位内容。第一章索引保留,供结束旁白读取;章节配置通过 `endsCurrentContent` 与 `completionDialogue` 控制这一行为。
|
||||
|
||||
## 刘备和先天助战
|
||||
|
||||
显示名改为“刘备”,立绘使用 `image/character/liubei.jpg`,模式私有 ID 保持不变以兼容存档和专属卡归属。
|
||||
|
||||
先天桃园羁绊仍结识8级关羽和张飞,默认选中关羽。旧存档已结识关羽但未选择助战时补上默认选择;已选其他助战保留。默认选择只初始化一次,之后主动取消或改选不会被重置。专属开场仍不判定助战到场。
|
||||
|
||||
## 战斗奖励
|
||||
|
||||
| 战斗 | 必得奖励 | 可选卡牌 |
|
||||
| --- | --- | --- |
|
||||
| 普通 | 原配置金币 | 当前角色专属卡牌,三选一或跳过 |
|
||||
| 精英 | 原配置金币+随机一件尚未持有的遗物 | 当前角色专属卡牌,三选一或跳过;每项候选普通20%、罕见60%、稀有20% |
|
||||
| Boss | 原配置金币 | 三个不同的当前角色专属稀有牌候选,选一张或跳过 |
|
||||
|
||||
精英先按稀有度抽取,再在该等级内抽取不重复的卡牌,避免各等级牌数影响配置概率。若某等级候选耗尽,只在尚有候选的等级之间重新分配概率。Boss 专属稀有牌不足时拒绝降级,不混入遗物、属性或技能奖励。
|
||||
|
||||
精英遗物与卡牌候选一起写入结算检查点,跳过卡牌仍领取金币和遗物。遗物不重复获得;已持有全部遗物时,界面明确说明不再重复发放。
|
||||
|
||||
普通随机卡牌奖励默认只允许当前角色专属牌。特定剧情的固定卡牌与开场强化包保持原规则;斥候谢礼与伏兵战利品作为特定剧情,显式配置 `allowSharedCardRewards: true` 保留原有通用牌。其他特定奖励也可使用此标记,通过抽奖入口的 `allowSharedCards` 选项传递,不改变永久牌组本身的可获得资格。Boss 不受此标记影响,始终限定角色专属稀有牌。
|
||||
|
||||
旧存档已经生成的待领奖候选保持原样,不在恢复结算时重抽。后续新结算使用新规则。
|
||||
|
||||
本次检查针对实际游戏源码;语法、配置核对不等于实机验收。
|
||||
@@ -0,0 +1,14 @@
|
||||
# 第一章早期精英限制修正(2026-10-04)
|
||||
|
||||
本说明修正 `act1-encounters.md` 中“精英可能在前三场普通战斗完成前出现”的旧规则。
|
||||
|
||||
- 角色专属开场不占弱怪池名额。开场后前三场普通战斗仍从弱怪池抽取,胜利结算后计数。
|
||||
- 新地图开场后的前三层,随机抽到的精英改为普通战斗;事件、休息、商店仍可出现。
|
||||
- 未完成三场普通战斗时,当前可前往的随机精英节点也改为普通战斗,并使用弱怪池、普通阶级和普通战斗奖励。这些胜场计入三场名额。
|
||||
- 已有第一章地图在展示时修正前三层及当前可走的随机精英节点,保留完成记录和路线,无需重新开档。
|
||||
- 完成第三场后,后续普通战斗使用强怪池,尚未转换的后续精英节点仍使用精英池。
|
||||
- 固定内容、专属及剧情战斗、Boss、第二章和第三章保持原规则。失败或重试不增加胜场计数,已保存的重试遭遇保持原组合。
|
||||
|
||||
实现入口:`progression/encounter-progress.js` 的早期保护和计数常量,以及 `progression/state.js` 的地图生成、可选节点准备与遭遇抽取。
|
||||
|
||||
本次仅核对源码、语法及差异,未启动游戏;实机验收待用户执行。
|
||||
@@ -0,0 +1,68 @@
|
||||
# 第一章遭遇池(2026-10-03)
|
||||
|
||||
本次仅用于第一章。第二、三章仍使用各自原有配置,后续单独设计。
|
||||
|
||||
## 普通战斗阶段
|
||||
|
||||
离开角色专属开场后,前3场普通战斗从弱怪池抽取,第4场起从强怪池抽取。
|
||||
按普通战斗胜利完成结算计数,事件、休息、精英、Boss、专属及剧情战斗不计。
|
||||
失败、重试和未完成战斗不增加计数;重试保留原遭遇组合,重复结算不重复计数。
|
||||
普通遭遇条目等概率抽取,条目内部的“或”方案也等概率抽取,允许不同场重复遭遇。
|
||||
|
||||
计数存于 `run.statistics.normalBattles`。旧第一章存档缺少此字段时,
|
||||
从当前地图已完成且无固定内容的普通战斗节点恢复,不重建已走过的地图。
|
||||
旧存档已经走过的普通战斗计入阶段,不从更新后重新赠送3场弱怪。
|
||||
|
||||
## 弱怪池
|
||||
|
||||
| 遭遇 | 同场成员 |
|
||||
| --- | --- |
|
||||
| 毛绒伏地虫 | 1只毛绒伏地虫 |
|
||||
| 小啃兽 | 1只小啃兽 |
|
||||
| 缩小甲虫 | 1只缩小甲虫 |
|
||||
| 史莱姆三只 | 树叶史莱姆(小)+随机树叶/树枝史莱姆(中)+树枝史莱姆(小) |
|
||||
|
||||
## 强怪池
|
||||
|
||||
| 遭遇 | 同场成员 |
|
||||
| --- | --- |
|
||||
| 立柱构造体 | 1只立柱构造体 |
|
||||
| 中型史莱姆与飞蝇菌子 | 随机树叶/树枝史莱姆(中)+飞蝇菌子 |
|
||||
| 闪光贾克斯果与飞蝇菌子 | 闪光贾克斯果+飞蝇菌子 |
|
||||
| 雾菇 | 1只雾菇,沿用其本场召唤规则 |
|
||||
| 墨宝三只 | 3只墨宝,保留前/中/后站位 |
|
||||
| 蛮兽 | 1只蛮兽 |
|
||||
| 小啃兽双只 | 2只小啃兽 |
|
||||
| 缩小甲虫与毛绒伏地虫 | 缩小甲虫+毛绒伏地虫 |
|
||||
| 劫掠者团伙 | 从暴徒、刺客、斧手、弩手、追踪者中随机选3名,同场不重复 |
|
||||
| 史莱姆四只 | 树叶(中)+树枝(中)+树叶(小)+树枝(小) |
|
||||
| 蛇行扼杀者与同行怪物 | 下列4个方案随机取1个:贾克斯果+扼杀者;树叶(中)+扼杀者;树枝(中)+扼杀者;树叶(小)+树枝(小)+扼杀者 |
|
||||
| 藤蔓蹒跚者 | 1只藤蔓蹒跚者 |
|
||||
|
||||
## 精英与Boss
|
||||
|
||||
精英池:多尼斯异鸟、旧日雕像、异蛙寄生虫,各占一个条目。
|
||||
异蛙保留寄生与生成扭动虫的机制。
|
||||
|
||||
Boss池:墨影幻灵、仪式兽、同族神官+2名同族信徒,各占一个条目。
|
||||
同族信徒分别绑定本场神官,保留爪牙与胜利判断规则。
|
||||
|
||||
随机类型楼层的节点权重仍为普通50、精英15、事件15、休息10、商店10,
|
||||
合计100。固定开场、宝箱、休息与最终Boss楼层不参与这一概率抽取。
|
||||
精英可能在前三场普通战斗完成前出现,但不占弱池的三场名额。
|
||||
|
||||
地图普通战斗使用交叉兵器图标;精英使用紫色盾徽图标和“精英”文字;
|
||||
Boss使用独立旗帜图标。随机出现不等于每张地图必定有精英。
|
||||
|
||||
## 配置入口
|
||||
|
||||
- `content/acts/act1/encounters.js`:4个弱遭遇、12个强遭遇、3个精英、3个Boss。
|
||||
- `content/acts/act1/map.js`:地图类型权重及遭遇池ID。
|
||||
- `content/registry.js`:跨章节遭遇注册与组合验证。
|
||||
- `content/encounters.js`:从遭遇及其内部方案中抽取,并创建独立战斗计划。
|
||||
- `progression/encounter-progress.js`:普通战斗计数与旧存档恢复。
|
||||
- `battle/battle-settlement.js`:胜利结算事务中推进计数。
|
||||
|
||||
怪物生命、意图、牌堆、分裂、召唤与特殊行为沿用各自已实现的规则。
|
||||
组合成员同时上场;不把普通组中的多个成员改成精英阶级。
|
||||
本次仅做源码语法、引用和内容文件核对,行为测试及实机验收由用户执行。
|
||||
@@ -9,6 +9,8 @@
|
||||
- 本版单场累计最多 8 个席位,包含主角、初始单位、奖励支援、以后出现的援军。
|
||||
|
||||
## 配置位置
|
||||
第一章弱/强/精英/Boss遭遇配置与阶段规则见 [act1-encounters.md](act1-encounters.md)。
|
||||
|
||||
节点内容或剧情选项的 `outcome.battle` 中增加 `battlePlan`。
|
||||
Boss 也可以在大关配置的 `bossBattlePlan` 中定义。
|
||||
`units` 中每一项是一名初始角色,因此数组长度就是初始非主角人数。
|
||||
|
||||
+14
-3
@@ -9,6 +9,9 @@
|
||||
1 级为 0%,10 级为 100%。
|
||||
- 战前在地图切换助战;开战只判定一次。成功后占玩家下家,AI 自动行动。
|
||||
原有剧情与道具支援保留,原有 8 席校验和座次代码保留。
|
||||
- 第一章第一层的角色专属首战不触发羁绊助战,也不累计本场羁绊成长。
|
||||
指定助战不等于必到:8级为77.78%,10级为100%;濒死时仍须先救助。
|
||||
开战日志明确区分首战限制、濒死、配置缺失、概率未命中与实际到场。
|
||||
- 完成战斗结算:指定 NPC 到场 +50%,未到场 +25%。
|
||||
濒死、战斗配置未补齐也属于未到场。不要求 NPC 存活,不限定胜利。
|
||||
退出或重载未完成战斗不增长;重复结算不重复增长。
|
||||
@@ -29,8 +32,11 @@
|
||||
|
||||
配置位置:`bonds/definitions.js` 的 `bondDefinitions`。
|
||||
|
||||
关羽、张飞的 `portrait` 以及 10 个 `growth` 行目前均预留。
|
||||
成长数值与技能未填写完整前可以结识、选择与成长,但不能参战;
|
||||
关羽、张飞的 10 个 `growth` 行已补齐可用基础配置:40生命、4张初始手牌、
|
||||
每回合摸2张、手牌上限5、每回合3费用、`skills:[]`。当前各等级使用相同
|
||||
战斗数值,等级只影响到场概率;这不是已确认的最终平衡数值,后续可逐行调整。
|
||||
两个 NPC 的成长数组和技能数组分别创建,不共享可变状态。
|
||||
其它新增 NPC 的配置未补齐时可以结识、选择与成长,但不能参战。
|
||||
不继承原版武将技能。`deck` 和 `intents` 无需预先填写,已有默认兜底。
|
||||
`portrait` 为空时不显示原版立绘。
|
||||
|
||||
@@ -112,4 +118,9 @@ outcome: {
|
||||
`tools/test_bonds.mjs` 覆盖初始化、事件重复结识、单选、概率边界、
|
||||
成长溢出/上限、濒死/救助、独立牌组、结算重复提交和多目标意图。
|
||||
另覆盖默认牌库与意图兜底、独立循环、费用不足、自定义意图和击晕期间禁止执行。
|
||||
这些检查不等同于游戏原生战斗运行验证;空缺战斗配置待补充后再实机验收。
|
||||
这些检查不等同于游戏原生战斗运行验证。
|
||||
|
||||
2026-10-03 修复说明:此前两名 NPC 的全部成长字段为 `null`,导致
|
||||
`getBondCombat` 在概率判定前返回空,已指定的助战始终不会生成。
|
||||
现补齐基础配置,并加强等级数值边界与累计技能数组校验。
|
||||
本次仅检查源码语法和导入文件;未运行行为测试、浏览器探针或实机验收。
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# 卡牌介绍与图鉴滚动优化(2026-10-04)
|
||||
|
||||
根据 66.png 与本次要求修正此前“介绍包含当前费用”的约定。
|
||||
|
||||
## 描述
|
||||
|
||||
- 卡牌介绍去掉“梦三:”前缀,不再重复普通主动使用费用或普通响应免耗费用。
|
||||
- 费用角标与图鉴费用筛选继续保留,费用支付和卡牌效果不变。
|
||||
- X 费用保留消耗规则;X 表示本次消耗的剩余费用。获能、减费、临时免费及濒死救援等特殊机制仍需说明。
|
||||
- 已强化卡牌继续显示当前效果数值,不追加升级前后对比。
|
||||
- 模式注册的动态介绍与静态翻译统一清理;图鉴、持有牌、奖励卡片也使用同一清理入口。
|
||||
|
||||
## 图鉴与持有牌
|
||||
|
||||
- 以原有卡牌大小与网格排列计算全部行,保留完整滚动高度。
|
||||
- 只挂载可见行与上下各两行预览;继续显示的卡牌复用,离开范围后回收。
|
||||
- 滚动监听不阻塞原生滚动,并合并到每帧更新;关闭弹窗时取消更新并移除监听。
|
||||
- 图鉴介绍与搜索文本按弹窗缓存;持有牌介绍按实例缓存。搜索输入等待 140 毫秒后更新,刷新牌堆时清理旧缓存。
|
||||
- 图片异步解码,卡牌绘制范围隔离;避免滚动时重新解析全部介绍和重建全部图片。
|
||||
- 详情返回保留原滚动位置;窗口尺寸变化重算行列;方向键与 Tab 可访问尚未挂载的后续卡牌。
|
||||
- 不修改牌组、存档或抽牌顺序。战斗中分区牌堆保留原有顺序展示。
|
||||
|
||||
## 验收范围
|
||||
|
||||
仅进行源码、语法与差异核对,未运行行为测试或实机性能测试。实机应核对:暴走等普通牌介绍仅显示效果;旋风斩、倾泻等 X 牌有明确消耗说明;大量卡牌时滚动、筛选、返回详情、缩放与键盘连续浏览正常。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 仪式兽 CEREMONIAL_BEAST
|
||||
来源(2026-10-03):https://sts2.huijiwiki.com/wiki/仪式兽;https://sts2.huijiwiki.com/wiki/横冲直撞;https://sts2.huijiwiki.com/wiki/昏眩
|
||||
普通252生命,Boss,无初始能力。第一层bossEnemies追加仪式兽,保留墨影幻灵和同族小队及act1Map.boss旧兼容值。单单位Boss,不加入普通/精英池,不变更其他层及角色专属开局。
|
||||
第一阶段:首行动跺地,获得150层横冲直撞;之后重复18伤害并自身力量+2。阶段二:野兽咆哮(昏眩)→踩踏15→碾碎17且自身力量+3→野兽咆哮。固定选择不消耗随机数;原生费用不足仍推进,击晕advance/retry沿用现有体系。
|
||||
横冲直撞非护甲、不吸收伤害、不逐回合衰减;普通252最大生命的阈值150,明确覆盖最大生命按150/252等比取整。阶段一获得状态后必须发生damageEnd且伤害为正、角色存活、生命≤层数才触发;此前低血量不自动触发,loseHp不触发。移除横冲直撞、无论原力量正负重置0、跳过一次意图和原生出牌阶段;恢复后从野兽咆哮开始,不重复跺地。第二阶段不返回阶段一。
|
||||
阶段切换中止当前意图后续目标/增益,避免反伤在横冲直撞途中击晕后仍获得力量。死亡、换场、会话结束同样中止后续效果。存活Boss仍阻止胜利。
|
||||
昏眩是负面状态,不是晕眩卡;人工制品拦截一次施加。每位存活敌对角色独立至多主动使用1张实体/虚拟牌,零费牌同样计入,多目标仍算一张,失败/取消及响应不计数。useCard0在费用扣除前拒绝第二张强制使用,useCard1幂等计数,cardEnabled/cardEnabled2同步限制;自身回合结束/死亡/会话结束解除。梦三响应体系无STS对应,本实现不封锁闪/无懈响应。
|
||||
Boss费用4,抽3,上限7;意图费用1,仍保留原生出牌。力量沿用每段攻击与原生攻击牌,不重复加算。永久牌组不变;独立不透明3:4密林立绘,基于网页原画二次绘制。
|
||||
进阶A8 HP262,A9跺地160、横冲直撞20、踩踏17、碾碎19/+4,仅记录,不混入普通数值;多人没有自动新增血量缩放规则,仅跟随实际maxHp比例。
|
||||
原画https://huiji-public.huijistatic.com/sts2/uploads/8/80/Ceremonial_beast.png,版权归原权利方;文本CC BY-NC-SA4.0。提示词:D:\noname\resources\app\.codex-artifacts\mengsan-hand-fan-20261001\beast-prompts.json(built-in image_gen)。
|
||||
所有隔离检查不能称为实机验收。
|
||||
@@ -0,0 +1,52 @@
|
||||
# 梦三安装、卸载与发布修复记录(2026-10-04)
|
||||
|
||||
本文件对应 `install-uninstall-release-review-20261004.md` 的问题修复。修改的是实际游戏源码;没有执行真实安装、卸载、标签推送或发布。
|
||||
|
||||
## 已修复的流程
|
||||
|
||||
| 原问题 | 当前处理 |
|
||||
| --- | --- |
|
||||
| Gitea 在标签推送后生成清单,客户端无法从标签读取同一清单 | 发布流程只校验标签中已提交的清单;缺少清单、版本不符、资源哈希不符或内部导入缺失都会停止发布。 |
|
||||
| 写入失败仍报告安装完成 | 统一识别字符串、Error、FileError 和写入事件错误;每次写入后读取并逐字节比对,模块完成后再校验全部文件的 SHA-256。 |
|
||||
| 删除失败、网络失败或手机端提前回调 | 等待真实删除完成,再确认文件不存在;检查失败不会当成文件缺失;文件操作有超时处理。 |
|
||||
| 卸载中断后仍注册残缺模式 | 删除前原子保存 `uninstalling` 和拥有的文件清单;重启后暂停注册,管理按钮可继续卸载。全部删除确认后才保存 `disabled`。 |
|
||||
| 旧版清单不可用时改用最新版卸载,遗漏旧资源 | 正常安装保存本地所有权清单;完整 ZIP 也附带模块与迁移清单。卸载优先使用这些记录。明确的旧版本无法取回完整清单时停止操作,不猜测所有权。 |
|
||||
| 回滚失败后仍删除恢复文件 | 每次操作使用独立临时目录;回滚失败时保留目录及旧文件,尽可能写入 `recovery.json`,安装记录保留恢复目录。 |
|
||||
|
||||
安装、更新和查漏补缺共享模块状态处理:首次文件改动前保存 `installing`;文件与安装记录均完成后才标为 `installed`。中断或最终记录保存失败时,保持待修复状态。回滚完整且此前已有可靠安装记录时,恢复此前状态。用户存档没有被删除。
|
||||
|
||||
IndexedDB 的两项安装配置在同一个事务中提交,并等待 `oncomplete`;本地存储环境一次写入配置字典。数据库写入失败不会切换到其他存储后端,也不会继续删文件。
|
||||
|
||||
网络响应丢失或写入超时可能留下未结束的文件操作,此时本次会话停止进一步文件改动,提示重启后修复,避免后到的回调覆盖另一次操作。恢复文件不被后续更新覆盖。
|
||||
|
||||
## 发布资源范围
|
||||
|
||||
清单生成器排除本地《杀戮尖塔 2》解包目录、`mengsan/assets/sts2`、依赖目录、运行日志、临时文件和环境配置;扫描时跳过这些目录,不再遍历其中数万个文件。
|
||||
|
||||
当前工作区资源清单:主包 278 个文件,梦三 457 个文件,共 735 个资源文件。旧版迁移清单记录 500 个已知梦三路径。版本暂保留 `2.0.1.1-rc.1`,没有替用户决定新发布版本或创建标签。
|
||||
|
||||
## Gitea 正式发布步骤
|
||||
|
||||
1. 设定正式要发布的版本号,更新 `extension.js` 中的版本,并提交全部运行源码、素材和发布工具。特别注意新增的梦三运行文件;只提交原先已跟踪文件会遗漏它们。
|
||||
2. 运行 `tools/generate_manifest.bat`,或者在扩展仓库中运行:
|
||||
|
||||
```text
|
||||
python tools/prepare_release_manifest.py --root . --version 你的版本号
|
||||
```
|
||||
|
||||
工具要求源码已经提交,从 Git 快照生成和校验清单,避免 Windows 换行格式与标签内容不同。它不会创建标签、提交或推送。
|
||||
3. 提交 `dist/manifest.json`、`dist/modules/mengsan.json` 和 `dist/modules/mengsan.legacy.json`。主清单原有忽略规则仍存在,新仓库首次纳入主清单时需要明确加入该文件。
|
||||
4. 从包含这些清单的提交创建全新的对应版本标签,再推送。Gitea 工作流会对标签导出的文件重新校验,通过后才打包和发布。
|
||||
|
||||
GitHub 发布工作流继续从已提交的 Git 快照生成清单,在生成后和标签打包前各校验一次。两种完整 ZIP 都包含模块清单及旧版迁移清单,供本地所有权识别使用。
|
||||
|
||||
`tools/generate_manifest.py` 仍可生成工作区检查清单;这种清单不能直接当成正式标签清单,发布使用上述快照工具或 GitHub 工作流。
|
||||
|
||||
## 本次检查与验收边界
|
||||
|
||||
- 修改后的 JavaScript 和三个 Python 工具通过语法检查。
|
||||
- 两份工作流中的 PowerShell 脚本、内嵌 Python 打包脚本通过语法检查。
|
||||
- 当前工作区的版本、文件集合、大小、SHA-256、模块归属、迁移清单及内部相对导入检查通过。
|
||||
- 安装、更新、查漏补缺和卸载的成功、失败、中断路径做了源码复核;没有执行游戏运行时探针或模拟验收。
|
||||
|
||||
实机仍需验证正常安装后重启、卸载后重启、安装中断后修复、卸载中断后续删,以及已有角色存档在卸载和重装后仍可使用。本次静态结果不代表这些实机流程已经验收。
|
||||
@@ -0,0 +1,78 @@
|
||||
# 梦三安装、卸载与发布前审查(2026-10-04)
|
||||
|
||||
结论:当前存在发布前应处理的问题,不能把语法检查通过视为安装、卸载验收通过。本次只审查实际源码与本地发布材料,没有修改安装器,没有执行真实安装、卸载、更新、断网模拟或发布操作。
|
||||
|
||||
## 发现的问题
|
||||
|
||||
### 1. P1:当前 Gitea 发布材料不能直接用于客户端安装
|
||||
|
||||
位置:`.gitea/workflows/release.yml:61`、`update.js:238`、`tools/UPDATE.md:20`。
|
||||
|
||||
Gitea 工作流在标签已经创建后,克隆标签,在临时目录生成清单并上传附件;它不会把生成的清单写回标签。客户端却从该标签的 raw 路径读取 `dist/manifest.json` 和模块清单,不读取附件。
|
||||
|
||||
当前本地 `dist/manifest.json` 仍是 2.0.1.1,缺少 `update_channels` 与 `modules`;本地 `dist/modules` 不存在。如果从这种源码状态创建新版 Gitea 标签,附件即使生成成功,客户端也会在清单校验或获取模块清单时失败。
|
||||
|
||||
发布前必须把同版本的主包清单、模块清单和迁移清单提交到标签所指向的提交;Gitea 工作流也应先核对标签内清单,而不是仅核对临时生成的附件。GitHub 工作流已包含先生成并提交清单、再创建标签的步骤,两条流程不能混为一谈。
|
||||
|
||||
### 2. P1:非 Error 类型的写入失败被当成成功
|
||||
|
||||
位置:`update.js:470`;适配证据:引擎 `noname/init/browser.js:128`、`noname/init/cordova.js:287`。
|
||||
|
||||
包装器只拒绝 `result instanceof Error`。浏览器端写入失败传回字符串,Cordova 的文件错误可以是含 code 的对象,写入结束回调也可能通过事件目标携带错误。这些情况都会进入 resolve。
|
||||
|
||||
如果临时下载已成功,而最后覆盖真实文件失败,`updateAllFiles` 不会再读取真实目标做哈希校验,仍可能推进安装版本并提示完成。应规范化各端错误,并在真实文件写入后读取校验;只有最终资源校验成功才标记安装完成。
|
||||
|
||||
### 3. P1:删除错误被丢弃,浏览器异常还可能一直占用操作锁
|
||||
|
||||
位置:`update.js:483`;适配证据:引擎 `noname/init/node.js:186`、`noname/init/browser.js:138`、`noname/init/cordova.js:300`。
|
||||
|
||||
删除包装器忽略回调参数,也没有向支持第三个参数的浏览器实现传入错误回调。浏览器本地文件服务请求失败时,默认错误处理不会结算包装器的 Promise,安装或卸载可以一直停住,finally 无法释放锁。
|
||||
|
||||
删除后虽然有存在性检查,但 `safeCheckFile` 又把检查错误当成缺失;删除失败同时检查失败时仍可能提示卸载成功。Cordova 实现还在实际删除完成前调用回调,因此立即检查也有误报失败的竞态。
|
||||
|
||||
应可靠等待删除完成,传播删除与检查错误,仅把确定的“文件不存在”当作可忽略结果。
|
||||
|
||||
### 4. P1:卸载部分失败后仍保留已安装状态
|
||||
|
||||
位置:`update.js:1194`、`extension.js:253`。
|
||||
|
||||
卸载按列表直接删除,直到全部成功才设置 disabled。若前面若干文件已删除,后续文件因锁定、权限等原因失败,catch 仅提示失败,安装版本仍保持原值。
|
||||
|
||||
重启后启动逻辑仍按这个版本判断模块可用;若入口仍在而依赖文件已被删除,会注册一个无法正常进入的梦三模式。卸载应有可恢复的处理中状态:处理中不注册模式,重试时继续使用原所有权清单,全部删除成功才完成卸载。
|
||||
|
||||
### 5. P2:读取旧版清单失败后用新版清单卸载,可能遗漏旧文件
|
||||
|
||||
位置:`update.js:1173`、`update.js:1180`。
|
||||
|
||||
已安装模块标签不可用,或切换到没有该旧标签的下载源时,会回退到主包版本或最新模块清单。新版清单没有旧版已经移除的路径,这些文件就不会被删除;循环结束后仍设置 disabled 并提示文件已卸载。
|
||||
|
||||
应在安装或成功更新时保存本地模块所有权清单,卸载依据实际安装的清单。无法取得准确所有权时,不应把仅删除新版路径说成完整卸载;不能用递归删除整个目录代替,以免删除用户自行放入的文件。
|
||||
|
||||
### 6. P2:回滚失败后仍删除唯一旧文件备份
|
||||
|
||||
位置:`update.js:826`、`update.js:832`。
|
||||
|
||||
回写旧文件失败只记录到控制台,finally 仍删除 old 下的备份。例如真实目标被锁定或空间不足导致恢复失败,而临时目录可以正常删除,此时旧版本的恢复副本会被清除。
|
||||
|
||||
应跟踪未恢复的文件,保留对应备份与恢复信息,明确提示恢复未完成,不能执行无条件清理。
|
||||
|
||||
## 核对正常路径的结果
|
||||
|
||||
- 安装下载先做 SHA-256 和大小校验,随后才进入真实文件替换。
|
||||
- 主包与梦三使用独立清单;disabled 状态下主包更新和查漏补缺不会主动安装梦三。
|
||||
- 模块清单校验限制文件属于 `mengsan/`,拒绝路径穿越;正常卸载按清单删除,不递归清空模块目录。
|
||||
- 卸载入口没有清除梦三征程存档或通关记录。
|
||||
- 安装、卸载取消确认后会进入 finally,释放菜单操作锁。
|
||||
- 模式使用延迟加载;只有进入梦三时才导入完整模式。
|
||||
- 明确成功的普通安装或更新会在资源步骤后保存模块版本;存在上述跨端错误回调问题,因此该顺序本身不足以保证资源已正确落盘。
|
||||
|
||||
## 本次静态核对
|
||||
|
||||
- `extension.js`、`menu.js`、`update.js`、`mengsan/register.js` 语法检查通过。
|
||||
- 扫描梦三源码 398 条显式相对模块引用,未发现目标文件缺失;这不覆盖运行时动态路径和网络清单。
|
||||
- 最近新增的描述模块、虚拟网格模块、地图存档清理模块和刘备立绘在实际目录中存在。
|
||||
- 当前梦三目录有 267 个未跟踪文件,近期新增的运行时代码和资源也在其中。发布工作流基于 Git 标签打包,发布前必须把需要发布的文件纳入提交,不能只核对本地目录存在。
|
||||
|
||||
## 修复后的实机验收范围
|
||||
|
||||
首次安装、卸载后重装、已安装版本升级、旧整包迁移、保留存档后重装、取消操作、写入失败、删除失败、断网重试,以及 Windows、浏览器文件服务与支持的手机端。还需分别验证 GitHub 和 Gitea 标签内 raw 清单与发布附件、资源文件完全对应。
|
||||
@@ -0,0 +1,35 @@
|
||||
# 地图存档与阵亡处理规则(2026-10-04)
|
||||
|
||||
本说明修正此前的战斗重试、持久化待领奖与失败恢复规则,以当前源码为准。
|
||||
|
||||
## 存档位置
|
||||
|
||||
- 自动存档保存征程角色、成长、牌组、金币和已经提交的地图进度。
|
||||
- 不保存当前战斗、重试节点、重试遭遇、未确认的奖励选择或本场助战到场状态。
|
||||
- 战斗结算候选与已选结果只在内存保存。过关并完成奖励选择后,一次性提交奖励、战后成长与完成节点。
|
||||
- 战斗中卡牌带来的永久成长先更新内存,随过关结果保存,不单独覆盖地图存档。
|
||||
- 战斗中或领奖确认前读档,回到上一次保存的地图;未完成节点仍可重新选择。
|
||||
- 读取旧存档时忽略 `battleFlow`、`bondBattle` 与战斗临时卡牌效果 `sharedBattleCardEffects`,不自动进入旧战斗或失败弹窗。以后写入存档也不保留这些字段。
|
||||
|
||||
## 角色阵亡
|
||||
|
||||
阵亡后显示两个选项,无倒计时,也不自动提交失败:
|
||||
|
||||
1. **重新开始**:结束旧征程,以阵亡角色重新创建第一章征程,初始牌组、金币、生命、先天羁绊等按该角色的新征程配置初始化,不再次选择武将。
|
||||
2. **返回主菜单**:结束旧征程、清除当前征程存档,并打开游戏模式选择菜单。
|
||||
|
||||
只在玩家点击其中一个选项后提交变更。等待选择期间,上一次地图存档一直保留,玩家无需抢在失败写档前读档。阵亡界面不提供绕过这两个选项的额外流程菜单。
|
||||
|
||||
旧征程的结束记录与存档替换或清除在同一事务中写入。写入失败时保持旧存档;内存中已选的新征程和奖励结果不重新计算,重试保存不会重复发奖或重复创建征程。重复提交使用同一已提交结果。
|
||||
|
||||
## 核对入口
|
||||
|
||||
- `progression/map-checkpoint.js`、`progression/mode-storage.js`:地图存档字段清理、旧档读取与事务写入。
|
||||
- `battle/battle-settlement.js`:内存结算、同角色重开与最终提交。
|
||||
- `battle/battle-flow.js`:阵亡等待选择及结算、清理顺序。
|
||||
- `mode.js`:阵亡按钮、地图恢复、主菜单及战斗中成长延后保存。
|
||||
- `ui/flow-ui.js`:阵亡界面关闭额外流程菜单。
|
||||
|
||||
实机验收建议:战斗中读档应回地图;阵亡弹窗停留后读档仍可继续原征程;点击重新开始应沿用当前角色从头开始;点击返回主菜单后旧征程应结束;过关奖励选择或跳过后再次读档不应重复发奖。
|
||||
|
||||
本次仅核对实际源码、语法和差异,未启动游戏或运行行为测试。
|
||||
@@ -0,0 +1,12 @@
|
||||
# 判定使用公共牌堆(2026-10-04)
|
||||
|
||||
本说明补充个人牌堆规则,以当前源码为准。
|
||||
|
||||
- 玩家摸牌、弃牌、个人牌堆洗牌继续使用个人抽牌堆与个人弃牌堆。
|
||||
- 普通判定从公共牌堆取判定牌,公共牌堆不足时沿用原生公共洗牌流程,不消耗个人牌堆或触发个人牌堆不足失败。
|
||||
- 创建判定事件时,默认判定牌结算位置使用公共弃牌堆。判定、判定回调和对应的处理区清理均使用公共节点,避免公共判定牌被个人弃牌堆收录。
|
||||
- 判定中触发的独立摸牌或弃牌事件仍按其所属角色处理,不因父事件是判定而被改为公共摸牌或弃牌。
|
||||
- 原生改判、获取判定牌及明确指定结算位置的技能保持原有处理;玩家自己的改判牌仍由个人牌堆的归属回收逻辑处理。
|
||||
- 接管只作用于梦三战斗会话,结束后恢复原有牌堆访问和角色判定方法,不修改全局引擎文件。
|
||||
|
||||
实现入口:`cards/personal-piles.js`。本次仅检查实际源码与语法,未运行游戏验收。
|
||||
@@ -0,0 +1,13 @@
|
||||
# 同族小队 THE KIN
|
||||
|
||||
2026-10-03来源:https://sts2.huijiwiki.com/wiki/同族小队
|
||||
首领遭遇由1名同族神官KIN_PRIEST和2名同族信徒KIN_FOLLOWER组成,不是一个融合角色。注册mengsan_kin_priest_shuying / mengsan_kin_follower_shuying。
|
||||
普通神官HP190;信徒58~59,入场使用征程随机源独立抽取,默认资料值59;覆盖HP不消耗随机数。进阶A8神官199/信徒62~63,A9法球9及仪式/舞蹈3只记录,不混入当前普通数值。
|
||||
第一层act1Map.boss保留墨影幻灵作为旧配置兼容值,新增bossEnemies=[墨影幻灵,同族神官],等权种子选择。神官条目自动展开三单位kin-group;信徒不单独加入首领/普通/精英池。专属开局、其他层和奖励保持不变。现有墨影幻灵保留;旧墨影单一首领测试新增对应池选择适配,旧报告不覆盖。
|
||||
网页SVG神官:开始→脆弱法球8+1脆弱→虚弱法球8+1虚弱→灵魂光束3×3→黑暗仪式自身力量+2→脆弱法球。信徒:开始→快斩5→回旋镖2×2→力量之舞自身力量+2→快斩。两个信徒同一起始动作,没有虚构错位开场、召唤/复活、群体力量/治疗、阶段切换。
|
||||
爪牙不单独阻止胜利:所属神官被击杀即可获胜,无需击败存活信徒;不额外发第二份奖励。与普通敌人混合时普通敌人仍须击败。绑定关卡单位ID,不串到另一神官;孤立信徒整回合取消、抽牌0,不能继续原生出牌。神官死亡即时清空所属信徒意图,没有杀死信徒的副作用或复活逻辑。
|
||||
沿用梦三神官Boss抽3/上限7/费用4,信徒普通抽1/上限3/费用2,每次意图消耗1费用,随后保留原生出牌;费用不足不发动但推进循环;击晕advance/retry沿用同一恢复。力量按每段攻击和原生攻击牌生效,脚本不重复加。脆弱/虚弱通过已有人工制品拦截入口,伤害先结算,目标存活才施加;虚弱是weak,不误标成易伤。伤害作用所有存活敌对角色,沿用逐目标护甲与状态。
|
||||
固定循环不抽随机数;战斗结束、源死亡、换场后停止后续攻击及增益。三角色状态分别记录,会话清理与旧会话保护,永久牌组不变。
|
||||
两张独立3:4不透明密林立绘,基于各自网页原画。原画URL:https://huiji-public.huijistatic.com/sts2/uploads/a/a4/Kin_priest.png;https://huiji-public.huijistatic.com/sts2/uploads/5/51/Kin_follower.png(返回WEBP,保存真实扩展名)。
|
||||
内置image_gen提示词:D:\noname\resources\app\.codex-artifacts\mengsan-hand-fan-20261001\kin-prompts.json
|
||||
原画版权归原权利方,网页文本CC BY-NC-SA4.0。隔离行为检查不是实机验收。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 墨影幻灵 VANTOM
|
||||
|
||||
2026-10-03 来源:https://sts2.huijiwiki.com/wiki/墨影幻灵;https://sts2.huijiwiki.com/wiki/滑溜;https://sts2.huijiwiki.com/wiki/伤口
|
||||
角色 mengsan_vantom_shuying,Vantom / HEALTH / MONSTER_TYPES。普通HP173,第一层act1Map.boss由re_lvbu改为此首领,普通池与精英池不变,专属开局及其他层不变。A8生命183、A9墨迹8/长枪7×2/肢解30只记录,不混入当前普通数值。
|
||||
网页正文及滑溜说明写开场9层,更新历史0.104.0写9→8(9),来源矛盾,本次正文优先采用9。滑溜仅初始获得,不每回合刷新;每次实际生命损失最多1,实际掉血才消耗1层,完全格挡和取消事件不消耗;多段逐段消耗。沿用墨宝同一原生changeHp限幅,保留正常护甲消耗、loseHp与非攻击伤害规则。
|
||||
SVG:开始→墨迹(7)→墨水长枪(6×2)→肢解(26+个人弃牌堆3伤口)→准备(+2永久力量)→墨迹。固定循环不抽随机数。力量叠加每段脚本攻击及原生攻击牌,准备不附加格挡。没有阶段转换、召唤墨宝、额外被动;轶事不当作战斗机制。
|
||||
沿用梦三Boss抽3/手牌上限7/费用4,意图消耗1费用,随后保留原生出牌阶段;脚本攻击作用所有存活敌对角色,逐目标状态计算,护甲原生抵扣。费用不足推进循环但不攻击、不塞牌、不加力量;击晕advance/retry保持原生流程。
|
||||
伤口是不能被打出的状态牌,只有unplayable;没有虚无、消耗、掉血、抽牌或升级机制。肢解全部伤害结算完后只给仍存活的敌对角色个人弃牌堆加入3张,角色死亡、源死亡、结束或换场不继续;不污染公共牌堆和永久牌组。本人及支援各自牌堆、唯一ID;无个人牌堆则跳过。
|
||||
独立密林Boss3:4不透明立绘;伤口独立5:7宣纸水墨卡面,fullimage和本地选择器,无文字牌框。原画:https://huiji-public.huijistatic.com/sts2/uploads/f/f0/Vantom.png;https://huiji-public.huijistatic.com/sts2/uploads/a/a4/Wound.png
|
||||
生成提示词:D:\noname\resources\app\.codex-artifacts\mengsan-hand-fan-20261001\vantom-prompts.json
|
||||
原画版权归原权利方,网页文本CC BY-NC-SA4.0。隔离验证不是实机验收。
|
||||
Reference in New Issue
Block a user