Knight's Dream

✅ 可玩

侠客梦

xkm

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

▶ 开始游玩 · Play Now

侠客梦与 jym(金庸梦)、xkx2000zxb 同属"侠客行I"这套底层代码库在不同站点的流通版本,共享同一套 `simul_efun` 与太湖古墓、昆仑、少林、武当、峨嵋、丐帮、日月神教、桃花岛等约五十个场景组成的地图骨架;新角色在"侠客岛"的海滩上苏醒,被一位笑呵呵的渔翁迎接,随后才踏入江湖投拜门派、闯荡声名。它最具特色的玩法是一套自定义的装备锻造系统:高等级玩家收集海底"金母"异宝、千年灵木等稀有材料后,可前往"神兵古洞"请传奇铁匠莫邪打造兵刃或防具,经过历练淬炼后再到西域一处仙洞找道士张天师,用刺杀刺客或闯迷宫换来的宝石为装备镶嵌加持;若死亡超过 200 次却仍未攒够五万点阅历,角色会被永久锁死在一间"死亡惩罚室"里。

English

A wuxia MUD from the same "Ode to Gallantry I" codebase lineage as this project's jym (Jin Yong's Dream) and xkx2000zxb -- all three are separately circulating copies of one underlying archive, sharing the same simul_efuns and the same roughly 50-zone map skeleton (Taihu Ancient Tomb, Kunlun, Shaolin, Wudang, Emei, the Beggars' Sect, the Sun-Moon Holy Cult, Peach Blossom Island, and more), though xkm's own registration flow adds two steps unique to this copy -- confirming you've read the "Xiake Meng player code of conduct" and supplying a QQ number -- so its connection sequence should not be assumed identical to jym's. New characters wash up on the beach at Xiakedao ("Isle of the Chivalrous"), greeted by a smiling fisherman, before heading out to join sects and build a reputation. Its standout mechanic is a custom equipment-forging system: high-level players who gather rare materials (a sea-bottom "Golden Mother" relic, thousand-year spirit wood) can commission the legendary smith Mo Ye to forge a weapon or suit of armor at the Mysterious-Weapon Ancient Cave, temper it through training, and pay the Taoist master Zhang Tianshi at a Western-Regions immortal's cave to socket it with gems earned by killing assassins or exploring a maze. Dying more than 200 times without reaching 50,000 combat experience permanently locks a character in a death-penalty room.

README

内容亮点

注册流程

new 触发注册 → BIG5 确认(y/n,任何非 y/yes 都视为 GB)→ 英文 id (3-8 个英文字母)→ 确认创建(y/n)→【“侠客梦”玩家守则】确认(y/n) → 中文名字(2-4 个中文字)→ 管理密码(≥5 字元)→ 确认管理密码 → 普 通密码(≥3 字元,且不能与管理密码相同)→ 确认普通密码 → 天赋接受 (y/n,无需先选 0-4,直接展示随机天赋)→ QQ 号码 → 电子邮件地址 (需 id@address 格式)→ 性别(m/f)。

本次修复的关键 bug

管理员账号 / Admin account

管理员名单存储在 adm/daemons/securityd.lpc 自身的存档文件 data/securityd.owiz_status/wiz_sites 属性里(与 jym 相同的 机制;wiz_sites 也需要一并设置成 ".*",否则会被"请从登记的地址 使用巫师帐号"拒绝登陆)。

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

在线试玩

https://mudlibs.fluffos.info/xkm/

本地运行

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

游戏端口:40191

NOTES · 移植与修复记录

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

和金庸梦(jym,147)同一血统/同一套 simul_efun 组成——用同样的方式重新实现了 efun::tail()(§6.2);启动干净。完整 WASM 修复:给 band.lpc 加了本地回环放行;修复了 logind.lpc(create()/make_body())里同样的 seteuid(getuid()) 把 euid 重置掉的 bug;修复了 check_legal_name() 过时的 GBK 字节长度界限(去掉了遗留的 +=128 字节变异,把 is_chinese() 校验改成逐字符);给 securityd.lpc 的 get_status() 加上了防重入编译崩溃保护;修复了 quit.lpc 未加保护的 environment(me) 崩溃;修复了 message.lpc 的 tell_room() exc_target=0 崩溃(AGENTS.md §7.12)。jym 里没有的新 bug:get_id() 会无条件为任何 wiz_level>0 的 id 注册 input_to("get_passwdd",...)——包括一个刚被授予巫师权限、但还没有存档档案的全新账号(正是给管理员播种时的场景)——没有检查存档档案是否存在,也没有 return,导致下一次输入被静默转发进 get_passwdd() 去校验一个从未设置过的密码,永远报"密码错误"并断开连线。已修复为在 file_size(存档文件)>=0 时才注册这个早期呼叫(匹配同一函式后面已有的正确检查),并补上缺失的 return。这是原始存档里真实存在的 bug,不是本次管理员播种过程引入的——任何给一个尚未注册的 id 授予巫师权限的真实部署都会碰到。另外发现注册流程比 jym 手足档案多了一个 QQ 号码提示和一道"玩家守则"y/n 确认步骤——已按 AGENTS.md §8.2 直接读取真实的 input_to() 调用链,而不是假设 jym 的确切发送顺序可以照搬。

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

用新注册的管理员角色(fluffos/浮浮)完整走了一遍侠客岛新手教程: follow long ba 带队依次经过沙滩→小路→迎宾馆→小路2(兵器/防具 NPC)→望海亭(背景介绍 NPC)→瀑布(藏身密道+传功 NPC)→两段甬道→ 大山洞(正殿,龙八半途会强行拉着你走,不用自己一步步移动)。全程无 崩溃,食物/饮水条满格(§8.9 不适用)。

兄弟档案排查:先看了同源档案 jym(147,同一套 simul_efun/adm/ obj 血统)已完成的 §10.7 记录,逐项在 xkm 自己的源码里核实、而不是直 接假设结论可以照搬:

战斗测试:在武当山路(/d/wudang/tyroad4)找到低难度"土匪" (combat_exp 50)NPC,kill tufei 后走完完整回合制战斗(多轮攻防、 "半昏迷状态"提示、倒地起身、最终"挣扎了几下就死了"),死后留下可拾取 的尸体。score 确认经验/阅历/属性正常增长,无异常。战斗过程中一次 kill 指令触发了 /cmds/std/kill.lpc 的一次热编译(未使用局部变量 killer 的编译期 warning,无害,且这是所有档案共享的驱动内建指令文 件,不算 xkm 自己的 bug)。

发现并修复一个此前从未被记录过的新 bug(已写入 AGENTS.md §7.83): 在大山洞读留言板(listread <N>)时,每一次 read 都会在玩家 自己的连线画面上炸出一条被拦截的运行时错误:*call_other() couldn't find object '/kungfu/condition/boardread'。追查后发现 inherit/misc/bboard.lpcdo_read() 本意是"每次读留言给 3 点 chatpts(聊天/灌水积分),但用一个叫 boardread 的 10 拍冷却条件把 连续刷分限制住",可整个 kungfu/condition/ 目录里唯独没有 boardread.lpc 这个条件精灵文件(旁边大约 50 个同类条件精灵,比如 drunk.lpc/sleep.lpc/poisoned.lpc,一个不少,就是漏了这个)。 结果是:apply_condition() 设置的冷却条件在下一次心跳时因为精灵文件 加载不到而被立刻从条件表里删除,冷却从未真正生效——意味着刷 read 可以无限刷 chatpts,而且每次都会往 log/condition.err 里写一条报 错。查看 work/log/condition.err.lpc 发现这个 bug 从 2002 年就存在, 几十个不同的真实玩家账号都触发过,是原始档案里长期存在的真 bug,不 是这次环境转换带来的。已仿照最简单的同类条件精灵 sleep.lpc 的写法 补上 kungfu/condition/boardread.lpc(读秒式倒数到 0 就让调用方回收 掉),在同一个 tmux 会话里重新 read 留言验证过:不再报错,list 显示的未读数正常清零。

门派系统:迎宾馆没有门派接引 NPC,甬道 /d/xiakedao/yongdao3 有 "雪山第十三代弟子 大人物",ask lama about 雪山 能问出完整的雪山派 背景介绍,并提示"想来我们雪山吗?先去大轮寺当喇嘛吧"——真正的拜师流 程在大轮寺(另一张地图),这次深挖没有跨图去把整个拜师流程走完,留 作后续深挖的候选项。

死亡/复活:按 AGENTS.md §7.68(现已收窄到仅 bmxkx2001 适用)的 新纪律,这次没有对 d/death/npc/{bgargoyle,wgargoyle,wgargoyle1}.lpc 里的 if (!ob || !present(ob)) return; 判定做任何改动——没有活体验证 "鬼魂在这份档案里确实无法自行移动"且"确实有其它系统会强行把鬼魂拖 走"这两个前提,就不该套用那个重试补丁,本次也没有时间走一遍真实的死 亡流程来验证这两个前提,所以维持原状。

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

§7.112 跨库扫描修复(无常 NPC 重连触发重复轮回链)

AGENTS.md §7.100 修复(2026-08-19,批次五)

ROOM 基类冗余 replace_program(ROOM); 自崩溃地雷(详见 AGENTS.md §7.100):3176 个房间文件的 create() 里紧跟 inherit ROOM; 之后 都有这一行多余调用,永久设下"待替换"标记,第一次对该房间对象绑 定闭包就会崩溃。这份档案有两处代码生成模板烤了同一个地雷:自带建 房工具 clone/misc/roommaker.lpc,以及帮派堂口建造精灵 adm/daemons/groupd.lpc(各自独立的字符串拼接模板)。另外发现 31 个帮派堂口房间源码文件放在 work/data/group/ 下(真正的 .lpc 源码, 不是存档),扫描脚本默认排除 data/ 目录(为了保护玩家 .o 存档) 误伤了这批文件——针对这个子目录单独关闭排除,手动补上。

修复:脚本化删除所有房间文件里独立成行的 replace_program(ROOM);, 加上两处模板手动摘除字符串拼接片段。git diff --stat:3176 files changed,与预期精确吻合(0 处遗留匹配,全部干净)。

验证:build-debug 驱动真实冷启动,端口 40191 正常监听, debug.log 全程干净。尝试用 README 记录的 fluffos/Mud@2026 登录, 但密码已经和存档里的哈希对不上(用 crypt 校验 password/ad_password 两个字段均不匹配)——和批次二 nt6 记录的同一类账号密码漂移问题。 未触碰玩家存档,也未继续深挖新密码,改为依赖干净冷启动(含失败登 录尝试全程 debug.log 零新增行)作为本次纯机械修复的充分验证证据。

§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.

§7.19 enable_player() reentrancy fix (2026-09-01)

Corpus-wide mechanical fix (AGENTS.md §7.19, Batch F of 6). feature/command.lpc's enable_player() had no reentrancy guard: NPC init()->setup()/reset_me() chains reach enable_player()->enable_commands(), which can synchronously re-invoke the same object's init() (driver docs BUGS note; live-verified mhxy/wuhanzhan precedent), and feature/damage.lpc's revive() / cmds/std/sleep.lpc's wakeup() re-invoke enable_player() while already living(), ruling out a bare living() guard. Fixed with the standard in_enable_player_now true reentrancy flag (mhxy's reference fix). Verified via single-file lpcc --batch PASS.

深度功能测试第三轮 / §10.7 round three (2026-09-03)

新角度:2026-08-05 走过侠客岛新手教程、武当土匪战斗、留言板 read (并修了缺失的 boardread 条件)。当时写明没走完门派拜师(只在甬道 问了雪山背景),也没测商店。死亡/复活仍未现场走完。本轮只补商店 + 拜师 + quit/重连,不重打土匪。

登录

README 写的 fluffos / Mud@2026 在 2026-08-19 的 §7.100 机械验证 里已经对不上存档哈希(密码漂移)。本轮复现:同一密码当场「密码错误!」。 在角色未在线时把 data/login/f/fluffos.opassword / ad_password 重新写成 Mud@2026 的 SHA-512 crypt,之后登录恢复为 (admin) 浮浮, 落地 /d/xiakedao/shatan。登录后 news 是分页器——后续指令会被当成 翻页,要先 q

商店(扬州打铁铺)

goto /d/city/datiepu。王铁匠 list 列出菜刀 30 文、铁棒、长剑等。 身上只有布衣和信用卡、没有现钱;buy caidao 因 id 是 cai dao 回 「你想买的东西我这里没有。」clone 一两黄金后 buy cai dao 成交: 「你从王铁匠那里买下了一柄菜刀。」sell cai dao:「你卖掉了一柄菜 刀给王铁匠。」无崩溃。编译警告(dealer.lpc 未使用局部变量)只打给 巫师,不是新 bug。

拜师

2026-08-05 提示的雪山大人物 darbaattempt_apprentice() 是 「法王可不允许我收徒」、recruit 被注释掉,是设计拒绝。改走星宿 摘星子(/kungfu/class/xingxiu/zhaixing,几乎无门槛):clonebai zhaixing →「好吧,我就收下你了。」→ 星宿派第三代弟子,师父 摘星子。quit 后重连 score 仍是星宿派。

本轮未发现新的编程 bug

log_file() 在这份档案的 adm/simul_efun/file.lpc 里已被注释掉, clone 没有踩到 fqyy2/sje 那种 /log/nosave 权限抛错。debug.loglibs/xkm/log/debug.log,开机后 mtime 对得上)无 error: / Wrong permissions。死亡/复活、大轮寺雪山拜师仍未测。

本轮修改的文件