Galloping Across the World

✅ 可玩

驰骋天下

cctx

🔑 fluffos / Mud@2026 更新 85d6a35 2026-09-02 源码 下载 ZIP

▶ 开始游玩 · Play Now

一个 ES2/XKX 血统的传统中文 MUD,除了华山、武当、少林、丐帮、峨嵋、 明教等常见门派场景外,还有一整片嘉峪关(西北边塞)主题地图——沙漠场景、城门、当铺一应俱全,是这一血统家族里比较少见的西北边塞题材延伸。`niaoren`(鳥人世界)是从同一套源码分支出来、重新包装成金庸题材的独立版本,两者血缘极近(注册流程里天赋选择的提示文字几乎逐字相同),详见 `niaoren/README.md`。新玩家一走出欢迎室就会遇到主动搭话的"接客童子"NPC,现场介绍吃喝取物买卖睡觉等基本生存指令,盘缠不够还会主动奉上,全程不必先去翻帮助文件。

English

A traditional ES2/XKX-lineage wuxia MUD featuring the familiar sects (Huashan, Wudang, Shaolin, Beggars' Sect, Emei, Ming Cult) alongside a distinctive northwestern frontier region around Jiayuguan, complete with desert scenes, a city gate, and a pawnshop — an unusually large excursion into frontier themes for this family of games. Newcomers are actively guided by an NPC greeter just outside the welcome room who offers basic survival commands and travel funds.

README

内容亮点

注册流程

英文名字(3-12 个英文字母)→ 确认创建(y/n)→ 中文名字 → 密码(≥5 字元)→ 确认密码 → 天赋确认(y/n)→ 电子邮件地址 → 性别(m/f)。

本次修复的关键 bug

深度功能测试新发现的 bug(详见 NOTES.md)

管理员账号 / Admin account

管理员名单存储在纯文本文件 adm/etc/wizlist 里;账号本身通过正常注 册流程创建。

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

本地运行

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

游戏端口:40161

NOTES · 移植与修复记录

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

ES2/XKX 血统代码库(襄阳关/嘉峪关场景内容)。完整 WASM 修复:(1)过时的 SIMUL_EFUN_OB 和 MASTER_OB 宏都指向了未被使用的 /adm/single/{master,simul_efun}.lpc 死代码副本,而 config.fluffos 实际使用的 master/simul_efun 文件是 /adm/obj/{master,simul_efun}.lpc(真正的 simul_efun.lpc 带有旧版本缺少的 destruct()/remove() 覆写,和 §7.58 类的 bug 是同一类,在它搞坏 quit 之前就被排查出来了);(2)adm/daemons/httpd.lpc(纯 HTTP 服务器,无条件调用 socket_*)按 §7.52 的整文件入口点掏空模式处理掉了。排版格式化工具的第三类盲点检查(CJK 重新加空格)在约 40 个"误报"(原文本来就有的装饰性房间名/诗词间距)里抓到了一处真正的损坏:d/huashan/map.lpc(一张密集的 ASCII 地图)——已直接还原,没有手工修补。管理员账号(fluffos/Mud@2026)通过真实注册流程 + adm/etc/wizlist 播种。

深度功能测试(第二轮,2026-08-03)

此前的验证只做到浅层冒烟测试。本轮启动前先主动检查了本次会话已经 反复确认过的 private command_hook 模式,提前修复了一处;随后完整 走通了注册流程,过程中又发现并修复了两个真实 bug:一处是本会话已 经在别的档案上见过的经典"调试信息泄漏",另一处是全新发现、已经写 进 AGENTS.md §8.9 的一类新 bug——多物件函式里读错了物件。

主动排查发现并修复:feature/command.lpcprivate command_hook

和本次会话在 hell/jym 上已经修过的同一个 AGENTS.md §8.3a 模式: inherit/char/char.lpc 通过 F_COMMAND 继承的 feature/command.lpccommand_hook 声明成 private nomask,在这个驱动上继承后会降 级为 DECL_HIDDEN,导致对 ORIGIN_EFUN(NPC 自己用 command() efun 说话)的分发静默失效。启动前 grep 直接命中,已去掉 private, 保留 nomask

注册流程中发现并修复:get_name() 里一行调试用的 printf("%O", ob)

adm/daemons/logind.lpcget_name() 在校验完中文名字之后有一行 printf("%O\n", ob);——这是 AGENTS.md §7.34 已经收录的经典模式( esI/xianlvqiyuan 都出现过同一类问题):原作者调试用的物件路径 打印,从未清理就随档案一起流通了出去。实测复现:注册时"您的中文名 字:"提示之后,紧接着会看到一行 /clone/user/login#1(登录物件自 己的内部路径),然后才是"请设定您的密码:"提示——每一个新玩家注册 时都会看到这行内部实现细节。已直接删除这一行,属于 AGENTS.md §7.34 明确记载的"删掉即可,从不服务于任何玩家可见目的"的一类修复,已列入 该条目"确认实例"名单。

注册流程中发现并修复:食物/饮水初始化门槛读错了物件(新增 AGENTS.md §8.9)

adm/daemons/logind.lpcenter_world()exec(user, ob) 之后 的角色进世界流程)里,食物/饮水一次性初始化的判断条件是 !user->query("food") && !user->query("water") && ob->query("age") == 14——链条里前两个条件读的都是 user(刚创建的玩家身体物件), 唯独最后一个读的是 ob(临时的登录连线物件)。clone/user/user.lpcupdate_age()(由 setup() 调用,在这个判断之前就已经执行过) 确实会把 user 自己的 age 设成 14,但整个代码库里没有任何地方给 ob 这个物件设置过 age(已通过对全代码库 set("age" 逐一核对确 认——所有命中都落在 user/NPC 类别上,登录物件类完全没有)。 ob->query("age") 因此永远回传驱动默认值 0,判断条件永远为假, max_food_capacity()/max_water_capacity() 从未真正套用到任何一 个新角色身上——每一个全新玩家一进游戏世界食物和饮水槽都是空的, 第一次 look/score 就会触发"你饿得直冒金星,实在是顶不住了"的 挨饿提示。已把 ob->query("age") 改成 user->query("age"),和判断 链条里其它条件保持对象一致。修复前后各注册一个全新角色对照验证: 修复前 score 的食物/饮水槽全空,伴随挨饿提示;修复后两条槽全满, 没有挨饿提示。

完整验证:从注册到探索

用全新账号在原生驱动上完整走通:英文 id(3-12 个英文字母)→ y 确认 → 中文名字(无泄漏问题)→ 密码 + 确认 → 天赋确认(y/n)→ 电子邮件 → 性别 → 进入"欢迎光临驰骋天下"的欢迎室,食物/饮水槽全满(如上)。 e 移动到下一个房间,"接客童子"NPC 主动搭话,介绍 eat/drink/get/ buy/sell/sleep 等基本生存指令,并主动提示"如果你没有盘缠的话,可以 问我要"——是一整条 command()-efun 驱动的 NPC 对话链路,间接印证 了 command_hook 修复的必要性。断线后用同一账号重新登录,"重新连 线完毕",直接回到游戏内状态,移动/NPC 对话依然正常。quit 干净退 出(丢下一件不值钱的布衣,"欢迎下次再来!")。debug.log 只有驱动启 动期的诊断噪音(找不到旧版二进制路径、反向地址解析被拒绝),没有 来自本次实际游玩会话的运行时错误。

未覆盖范围(诚实说明)

预算集中在验证三处修复和基础移动/NPC 对话链路,没有走到:门派拜师、 战斗系统、经济系统(buy/sell/盘缠)。这些留给下一轮,目前的验证边 界如上所述。

深度功能测试(第三轮,2026-08-18)——补完经济/战斗,发现并修复一个 §7.11 类新实例(8 个排行榜档案全部写入失败)

补完上一轮留下的门派拜师、战斗系统、经济系统测试,过程中发现并修 复一个此前未被注意到的 §7.11 类 bug。

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

第四轮回归测试(2026-08-19)——针对 §7.111/§7.112/§7.113/§7.114/§7.90 逐项核查 + 全新角色完整 §10.7 游玩,结论:全部清洁,无需修复

本轮是在 AGENTS.md 新增 §7.111–§7.114 之后对 cctx 做的一次针对性回归, cctx 此前没有被 §7.113(netdead 重连不恢复 heart_beat)的两批语料 库扫描覆盖到(不在扫描名单内),因此本轮对这一条做了最仔细的从零核查 和真实存活验证,而不是照抄扫描结论。

§7.100 sweep (2026-08-19)

Fixed the corpus-wide inherit ROOM; ... replace_program(ROOM); redundant-replace bug (AGENTS.md §7.100). 2081 live occurrences deleted: 2073 via scripted sweep (fix_710_room.py), plus 8 hand-fixed: 5 real .lpc source files under d/quanzhou/shaolin/xingsu/binaries/ (a real-content directory misleadingly named like a compiled-binaries dir — the sweep script's binaries-directory exclusion, meant to protect driver-compiled artifacts, false-negatived on it; caught by this batch's mandatory post-sweep work/-wide recheck) fixed with the same scripted logic applied directly; clone/misc/roommaker.lpc's string-builder template; d/shenlong/lwta2.lpc (call shared a line with unrelated code: setup(); replace_program(ROOM); set("outdoors", "shenlong");); d/gumu/bingqifang.lpc (space before semicolon). ~70 already-commented-out instances left untouched. Verified via build-debug driver boot: clean compile, zero new "cannot replace"/"cannot bind" debug.log lines; confirmed serving via raw-socket connect on port 40161. Pre-existing untracked test-account debris under data/{login,user}/ confirmed left untouched.

§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-08-24)——补上前三轮都推迟的最后一项空白,测试清洁,无需修复

前三轮一直把门派拜师(bai/apprentice)测试推迟,理由是师傅 NPC 都在 d/heimuya/d/huashan/d/shaolin/d/wudang 这几张离新手区很 远的地图上。本轮直接用巫师账号 goto 快速定位,补完这最后一项空白。