The Story of Hero

✅ 可玩

金庸群侠传

jyqxc2

🔑 fluffos / Mud@2026 更新 66b9f4e 2026-09-04 源码 下载 ZIP

▶ 开始游玩 · Play Now

[jyqxc](../jyqxc/) 的姊妹版本(编号 086/087),逐文件比对确认二者实质上是同一份原始数据的两份几乎完整快照——`master.lpc`、 `securityd.lpc` 及整个死亡系统逐字节相同,压缩包文件名带有典型的浏览器重复下载"(1)"后缀,应是同一次下载被误判为两份独立档案。游戏内容与 jyqxc 完全一致:精简的金庸门派地图(华山、武当、少林、丐帮、 峨嵋、明教),白驼山少庄主欧阳克等原著反派直接游荡在街头,死亡后经鬼门关由黑白无常及"实习无常"接引复活。

English

A sibling archive to this project's jyqxc (numbers 086/087) carrying the same "Story of Hero" content: the same compact Jin Yong sect map (Mount Hua, Wudang, Shaolin, the Beggars' Sect, Emei, the Ming Cult), including White Camel Manor's overpowered young master Ouyang Ke roaming the streets and the Ghost Gate Pass death sequence with its uncommon third psychopomp NPC. A file-by-file diff confirmed the two are, in essence, two near-complete snapshots of the same original data rather than independently developed variants sharing only the same architecture — of roughly 3,690 files in each "work" tree, only a handful differ (a not-yet-patched login script, two runtime logs, and each one's leftover test character), while the death system and other core files are byte-for-byte identical. The archive filenames even show the classic browser double-download pattern, suggesting both came from the same original download that this project's deduplication process didn't catch.

README

内容亮点

注册流程

英文名字(3-12 个英文字母)→ 确认建立新角色(y/n)→ 中文名字(1-6 个中文字)→ 密码(至少 5 位)→ 确认密码 → 系统自动产生一组天赋数 值(膂力、悟性、根骨、身法),直接询问是否接受(y/n,不接受会重新 产生一组)→ 电子邮件地址 → 性别(m/f)→ 进入游戏世界。

本次修复的关键 bug

jyqxc 完全相同的 bug:feature/name.lpcshort() 在没有设定 "short" 属性时会用 capitalize(query("id")) 拼出预设显示名称,但没检查 query("id") 是否为字符串。这个 lib 里约 18 个留言板(clone 自 inherit/misc/bboard.lpc)的存档文件 data/board/*.o 用的是同一 种旧式紧凑二进制存档格式(#inh/?inh 魔术字节),本驱动的 restore_object() 无法解析,抛出例外前会把该物件的整个 dbase 属 性表清空(包括刚设定好的 "id"),于是只要房间里摆了留言板,一 进房间 look 就会崩溃。修法同 jyqxc:让 short()id 不是字 符串时优雅降级。

没有发现 Chinese 姓名判断、宏定义或指令表相关的 bug。

2026-08-05 §10.7 深度测试追加修复adm/daemons/logind.lpc, 和 jyqxc 自己修复前逐字节相同的两处问题,因为两库实为同一份原始 数据的两份快照——jyqxc2 这一份此前没有回灌 jyqxc 那一轮的修 复):

两处均已现场用非管理员抛弃测试角色验证:修复前 score 食物/饮水两 栏全空,屏幕上出现裸露的 /clone/user/login#N;修复并 update /adm/daemons/logind 热编译后两栏全满,提示行消失。同一次测试还完 整走完一次真实死亡(kill NPC 欧阳克)→"鬼门关"两位鬼差 NPC 对话 链未受任何中断→reincarnate()→复活于"武庙"的全流程,并确认死亡区 的 exits/valid_leave() 没有 AGENTS.md §7.101 记录的那种遗漏形 状(唯一出口 north 与代码、房间描述"一进鬼门关就无法再回阳间了" 三者一致,是有意的单向门);死亡 NPC 档案与 jyqxc 自己已撤销的 §7.68 分析逐字节相同,现场复核未发现任何强制移走鬼魂的第二套机制, 同样判定为有意设计,不套用旧修复。详见 NOTES.md「深度功能测试 (§10.7,2026-08-05)」。

管理员账号 / Admin account

管理员名单存储在纯文本文件 adm/etc/wizlist(LF 换行,与档案里原 有条目格式一致)里,此前一轮已写好 fluffos (admin) 这一行,但 data/{login,user}/f/ 下当时并没有对应的 fluffos.o 存档——账号 从未真正走过注册流程。2026-08-05 本轮用标准 fluffos/Mud@2026 组合重新完整走了一遍正常注册流程,已在游戏内确认"目前权限: (admin)" 显示正确,并用 update <path> 验证了写 ACL 正常。

警告:这是一个公开的默认密码,仅供本地/浏览器试玩。正式对外开服前
请务必修改此密码。

本地运行

cd libs/jyqxc2
~/src/fluffos/build-debug/src/driver config.fluffos

游戏端口:40172

NOTES · 移植与修复记录

WASM 修复摘要(迁移自 meta.json 的 group_note)

金庸题材 mudlib(金庸群侠传),jyqxc 的手足代码库(86/87 编号;不是文件级完全相同的重复——大部分档案不同,但共享同一套架构/bug 面)。和 jyqxc 完全相同的 bug:feature/name.lpc 的 short() 呼叫 capitalize(query("id")) 没做保护,任何没有"id"属性的物件走到 short() 就会崩溃——这份档案里约 18 个留言板分身都会撞上,因为它们的 data/board/*.o 存档用的是同样这个驱动的 restore_object() 解析不了的旧式紧凑二进制编码(魔术字节"#inh"/"?inh"),抛出异常之前会先清空物件的 dbase 映射(包括"id")。修法完全相同:让 short() 的兜底逻辑用 stringp(id) 判断。通过 adm/etc/wizlist 把 fluffos/Mud2026Adm 播种为 (admin)。没有中文名字/宏定义/指令表相关的 bug(is_chinese() 本来就是正确的码点判断,commandd.lpc 的 sscanf 本来就匹配 .lpc)。完整的注册→look→score→quit 流程和管理员流程在排版格式化前后都验证过。格式化工具还原了 3 个损坏的 ASCII 地图档案(d/huashan/map.lpc、d/shaolin/obj/map.lpc、d/shaolin/npc/obj/map.lpc),和 jyqxc 逐字节相同的损坏模式。

§7.86 跨库扫描修复(留言板 post 崩溃)

深度功能测试(§10.7,2026-08-05)

血统确认:与 jyqxc 实质上是同一份代码,不是"架构相同、内容各异"的姊妹档

本档案自己的 README/meta.json 此前的描述("和 jyqxc 是同一套架构衍生 的姊妹版本……大部分具体文件内容不同——不是简单的重复压缩包")是错 误的,本次用 diff -rq 直接逐文件核对后推翻jyqxc(086 号, archive 金庸群侠传 (1).rar)与 jyqxc2(087 号,archive 金庸群侠 传.rar)的 work/ 目录树(各约 3690 个文件)用 diff -rq 比对, 只有 3 处差异——adm/daemons/logind.lpc(见下)、log/loglog/USAGE(纯运行期日志文件,非源码),外加各自遗留的一个测试角色 存档(jyqxc 侧的 qindongxi.o)。连 raw/jy(未转换的原始压缩包 内容)都近乎一致,只多了 jyqxc2 那份多出的一个 svr.exe(Windows 版驱动可执行档,与 mudlib 源码无关)。adm/single/master.lpcadm/daemons/securityd.lpc 逐字节完全相同(diff 输出为空)。归档 文件名 金庸群侠传.rar / 金庸群侠传 (1).rar(1) 后缀是典型的 浏览器重复下载命名模式——这两份archive 极可能就是同一次下载的两份 拷贝,只是没有被本项目原有的去重流程识别出来(去重大概率是按压缩包 本身的字节比对,而不是解压后内容比对,两份 .rar 容器本身不是逐字 节相同的)。已在 AGENTS.md §11 补充说明这第 15 个"漏网的 (1) 重复 下载"实例。结论:这不是同一引擎的独立衍生档,而是同一份原始数据 的另一份几乎完整的快照——jyqxc那一轮(本 session 更早完成)留 下的 bug 修复没有回灌到这一份,jyqxc2logind.lpc 携带的正是 jyqxc 自己修复前的原始内容。

管理员账号:README 记录与实际存档不符,已重新播种

README 此前记录的 fluffos/Mud2026Adm/(admin),adm/etc/wizlist 确实已有一行 fluffos (admin),但 work/data/login/f/work/data/user/f/ 下都没有对应的 fluffos.o 存档——上一轮只写了 权限名单,从未真正走过注册流程创建账号(这是本 session 反复遇到的同 一类"README 记录与实际存档不符"陷阱,已是第三次遇到)。本次用标准 fluffos/Mud@2026 走了一遍完整正常注册流程(英文 id → y 确认 → 中文名"风清扬" → 密码×2 → 系统随机天赋展示 → y 接受 → 邮箱 → 性别 m),目前权限:(admin) 立即生效;update /d/city/kedian 验证了写 ACL(成功触发重新编译,副作用是顺带复现了下面记录的旧式留言板存档 读取异常,被 update 自身的 CATCH() 干净拦截,未影响权限验证结 论)。已知问题:中文名字用 scripts/tmux_mud.sh(走本地 telnet 二进制)发送时,"清"字的字节被转发损坏,实际存下的名字显示 为"风�扬"——这正是 AGENTS.md §10.2 记录过的本地 telnet CJK 字节转发 损坏,不是 is_chinese() 或注册逻辑的 bug,纯粹是这次测试工具选择 的副作用,不影响本次验证的实质结论(admin 权限已确认生效),未重新 注册。

修复:§8.9 食物/饮水初始化用错对象(第十例)+ §7.34 调试残留 printf

adm/daemons/logind.lpcenter_world() 一次性携带了两个已知 bug 类的实例,和 jyqxc 自己(该 bug 类的第六例,见 AGENTS.md §8.9) 逐字节相同的错误代码:

1. §8.9if (!user->query("food") && !user->query("water") && ob->query("age") == 14) 最后一项读的是登录桩物件 ob 而不是刚 setup() 过的角色本体 user——ob"age" 属性从未被设置过, 永远是驱动默认值 0,整个门槛永久为假,新角色食物/饮水永远卡在 0。修法:ob->query("age")user->query("age")。 2. §7.34get_name() 里紧接着中文名字设定前有一行调试残留 printf("%O\n", ob);,会把登录物件的内部路径(如 /clone/user/login#0)直接印在中文名字提示的正下方。已删除。

现场验证:修复前用 fluffos 账号注册,get_name 后确实在屏幕 上看到裸露的 /clone/user/login#0score 显示食物/饮水两栏全空 (□×25)。用 update /adm/daemons/logind 热编译("成功!")后, 另注册一个非管理员测试角色"黄蓉"(英文 id testchar,用于后续死 亡测试的抛弃号),注册过程中不再出现 /clone/user/login 字样, score 显示食物/饮水两栏全满(■×25)。测试结束后已删除 work/data/login/t/testchar.owork/data/user/t/testchar.o 这两 个我方注册的存档文件,不触碰目录本身或其中任何其他既有文件。

死亡/复活系统:§7.101 形状不适用,§7.68 形状经现场验证也不适用(均为有意设计)

用非管理员测试角色"黄蓉"、set wimpy 0(关闭自动逃跑)后在北大街 (/d/city/beidajie1)主动 kill NPC 欧阳克("白驼山少庄主「玉面 蛇心」",和 jyqxc 自己 §10.7 记录的那位同一个 NPC、同一个坐标) ——欧阳克明显不是给新手陪练用的对手,几回合内就把测试角色打死,与 jyqxc 自己的记录一致(内容强度问题,非 bug,未做任何改动)。死亡 后角色被送到"鬼门关"(/d/death/gate.lpc),"实习无常" (newgargoyle.lpc)与"白无常"(wgargoyle.lpc)同时在场,全程 未主动断线或制造任何中断,完整看着两个 NPC 各自的五段对话 call_out 链跑完(约 35 秒),实习无常先完成,触发 reincarnate() + move(REVIVE_ROOM),角色被送到"武庙",重连后 score 确认精/气降到约 40%(10/25 格,符合死亡惩罚),食物/饮水 仍全满。

留言板:post/read/discard 全流程验证通过

在客店(/d/city/kedian)对 kedian_b 留言板执行了完整的 post(内建列编辑器,.结束)→ read 1 → discard 1 流程,全程无崩 溃、无残留。update /d/city/kedian 强制重新编译该房间时,触发了 kedian_b 存档的 restore_object(): Illegal file format - 1 (?inh ...) 运行期错误(旧式紧凑二进制存档,本驱动无法解析)——这正是 README 已记录的"18 个留言板受影响"的根因再现,但这次被 update 自身的 CATCH() 干净拦截,物件继续存在(id 属性因 restore 失败 而为空),后续 look/post/read 均未受影响——feature/name.lpcstringp(id) 兜底修复(已在更早一轮完成,见 README)在这个新 触发路径下同样有效,未发现需要补丁的新变体。

其余检查

修改文件:adm/daemons/logind.lpc(本次 §8.9 + §7.34 两处修复)。 新增未跟踪存档:work/data/login/f/fluffos.owork/data/user/f/fluffos.o(管理员种子账号,按 AGENTS.md §1.5 约 定提交)。测试用抛弃角色 testchar/黄蓉的存档已删除,未提交。

§7.100 扫描修复(ROOM 基类多余 replace_program()

#define ROOM "/inherit/room/room":删除 803 处多余的、独立成行的 replace_program(ROOM);(保留 inherit ROOM;),与手足档案 jyqxc/jqxz2008 系列同一血统同一形状。clone/misc/roommaker.lpc 同样有两套模板——"造一间空房间"的 heredoc 本来干净,"克隆我所在的 房间"命令的字符串拼接模板把同一枚多余的 replace_program(ROOM); 烤进了每一个新克隆的房间,已同步修正。已用 build-debug 驱动干 净启动验证(0 个新增编译错误,端口正常监听);未做完整 §10.7 深 度游玩测试。

§7.30 uninitialized-mapping accessor sweep (2026-08-20)

Corpus-wide mechanical sweep of the feature/skill.lpc shared-lineage bug (confirmed independently on xiakexing2017/jqxz2015/haiyang2 via round-four testing): 4 accessor(s) in this file returned a raw never-initialized mapping instance variable (defaults to int 0, not ([]), until first assigned), crashing any unguarded keys()/sizeof()/indexing caller for a fresh/untrained character. Fixed at the accessor level (mapp(x) ? x : ([])) per the documented remedy. Verified via lpcc --batch static compile check only (not a live boot) as part of a large mechanical sweep; not individually functionally re-tested live on this lib.

深度功能测试(2026-09-03,第三轮)

新角度:2026-08-05 第一轮覆盖了注册/食物饮水/死亡复活/留言板,没有 走商店或有机拜师。本轮只补这两条 + quit+reconnect。