Wu Qing Feng Yun (Invincible Under Heaven)

✅ 可玩

无情风云

wqfy

🔑 fluffos(密码见 README) 更新 5e4a144 2026-09-04 源码 下载 ZIP

▶ 开始游玩 · Play Now

郑州风云世纪珍藏版,游戏内横幅显示为《天下无敌》,是一款以古龙小说为背景的武侠 MUD,门派/势力名称也走古龙风格("五毒教""铁旗"等),和更常见的金庸门派体系(华山、武当等)刻意区分开来;和 `zzfy3`(郑州风云3,同样打着"天下无敌"横幅)是同一套代码库,`d/marry/hongniang-zhang.lpc` 逐字节相同,此前两份档案都没有互相记录这层关系。`d/marry/` 是一套完整的结婚玩法,"红娘"NPC(`hongniang-zhang.lpc`)牵线说媒,是这批泥潭里比较少见的社交系统;注册时还要选择民族(0-3 编号),密码规则也是这批档案里最严格的一档——必须同时包含大小写字母和特殊符号,纯字母数字密码会被直接拒绝,且是单一密码+确认的简单流程,不同于仙侠系家族常见的管理密码/普通密码双密码机制。

English

The Zhengzhou Fengyun "Collector's Edition," branded in-game as "Invincible Under Heaven," is a wuxia MUD set in the world of Gu Long's novels rather than the more common Jin Yong universe, with sect and faction names to match. It shares an identical codebase with this collection's zzfy3 (Zhengzhou Fengyun 3) — a relationship not previously documented between the two archives.

README

内容亮点

本次处理内容

没有发现需要修复的程序 bug。唯一做的事情是在 /adm/etc/wizlist 里加入管理员账号(SECURITY_D 正确指向 /adm/daemons/securityd, 只有一份,没有分身档案)。

顺带一提,这份档案的密码规则比较严格:必须同时包含大写字母、小写 字母和特殊符号(数字或标点),纯字母数字密码会被拒绝——这是站方 既有设计,不是 bug。注册流程也和 099-105 号的仙侠系家族不同:只 需要单一密码 + 确认(没有管理密码/普通密码双密码机制)。

管理员账号 / Admin account

警告:对外公开架设前请务必修改此密码。

本地运行

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

游戏端口:40124

NOTES · 移植与修复记录

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

无情风云(郑州风云世纪珍藏版),游戏内横幅为《天下无敌》,古龙题材 MUD。在 WASM 下启动并完整完成注册,没有任何编译或运行时错误——没有发现任何 LPC bug。唯一采取的行动:把 fluffos (admin) 播种进 adm/etc/wizlist(SECURITY_D 正确指向 /adm/daemons/securityd,只有一份,没有诱饵副本)。备注:这里的密码策略很严格(必须同时包含大写字母、小写字母和特殊符号/数字,至少 6 位)——纯字母数字密码会被拒绝,提示"您的密码必需包含大写和小写英文字母和其它特殊符号";这是有意的站点策略,不是 bug。注册流程在一次连续的 WASM 客户端会话里完整验证过:英文 id→y/n 创建确认→中文名字(会拒绝古龙小说人物名,未测试)→单一密码+确认(不是 sjsh/tybxjh 家族那种双密码机制)→电子邮件→性别→民族选择(0-3)→带着完整角色属性表进入游戏世界,全程没有任何意外错误。管理员权限已直接通过 wizlist 指令输出"目前权限:(admin)"确认。LPC 格式化工具对全部 7339 个档案运行(写入 7310 个,24 个因为杂乱的历史代码报错,5 个未改动)。没有 :: 父类呼叫拆分命中,没有 CJK 重新加空格命中,没有 case 标签带尾随注释的候选。两个 map.lpc 档案确认内容完全相同(只是空白差异)。格式化后用同样的完整注册流程重新验证过——干净,管理员权限依然是 (admin)。

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

深度功能测试(2026-08-17,round one)——疑似严重问题,但排查未能定论,未计入 AGENTS.md

第一次对这份档案做完整 §10.7 深度游玩测试,遇到一个耗费大量时间排 查、最终没有定论的疑点,如实记录以免下次重蹈覆辙:

- 不是死循环占满 CPU——ps//proc/<pid>/stat 的 utime 增量在停 滞期间几乎不动,gdb -p <pid> -batch -ex bt 直接抓到驱动主线 程正安安稳稳地停在 epoll_pwait2(libevent 的事件循环等待处), 不是卡在某段 LPC 执行里。 - 不是全局性驱动阻塞——nc -zv在停滞期间仍能立刻连上端口(不过 这只证明 TCP 三次握手能过 accept 队列,不能证明驱动真的在处理 新连线)。 - 不是 query_ip_name() 阻塞式反向 DNS——读过 ~/src/fluffos/src/packages/core/dns.ccquery_ip_name() 本 身只查一个进程内缓存表,不做同步网络调用;真正的解析(若有) 是 dns_libevent.cc 里异步事件驱动的,不会阻塞主循环。 - 不是本档案自己的 20 秒重连冷却(quit_time 差值 < 20 秒的分 支)——特意在两次连线之间空等超过 25 秒仍然复现。 - 后续几次尝试复现时,反而先撞上了一个纯粹是我方测试脚本失误 的连环验证失败:用了太长/带数字的英文 id(这份档案的规则是"3 到 10 个英文字母",不像 hxxtjqb 是"3 到 8 个"),第一步就被拒 绝,而脚本没有检查每一步的实际回应就盲目按预设顺序继续发送后 续指令,导致连续好几条指令都被当成新的(同样无效的)英文名字 重试,看起来很像"卡住",其实只是我方脚本没有正确处理验证失败 分支——这类失误已经在别的地方发生过(telnet 客户端两次假警报), 不排除本轮最初观察到的"10 分钟无响应"里也有类似的、我还没找到 的脚本/协议误判成分。

深度功能测试(2026-08-17,round two)——上一轮的"停滞"已确认根因:不是 mudlib bug,是测试脚本本身的方法论缺陷

按上一轮末尾留下的三条建议(单一连线、逐步验证、gdb 确认)重新测 试,这次彻底查明了根因:这份档案的"停滞"从头到尾都不是 mudlib 的问题,而是测试脚本的"等到网络安静下来再继续"这个假设,本身就和 这份档案的一个正常功能互相冲突。

深度功能测试(2026-08-18,round three)——修复了错误处理器自身的崩溃 bug,其余全部验证正常

按 round two 定下的接收策略(硬性总时限的 recv_budget(),绝不"等 到安静")重新写了 Python 测试脚本,逐条注册了十几个合规英文 id 的 新角色(3-10 个纯英文字母,不带数字),系统地跑了 round two 没来 得及测的几块:

- 修复:把第 194 行的 file_name(error["object"]) 改为 objectp(error["object"]) ? file_name(error["object"]) : "(driver)", 只在 error["object"] 确实是对象时才调用 file_name(),否则 用占位字符串代替,不影响原有的正常(LPC 帧、error["object"] 是真实对象)报错路径。 - 实机验证:杀掉旧驱动进程、清空 debug.log、用修复后的代码 重新起了一份干净驱动,重复了"注册→移动→对卖菜的发起战斗→裸 flee"的整个流程;这一次 flee 本身正常走到了 notify_fail("指令格式:sbfind <物品>\n") 分支(原始的 jade-pin 冲突这次没有复现,符合上面"环境相关、偶发"的判断), 全程 debug.log 干净,没有 Bad argument/Error in mudlib error handler 之类的二次崩溃。因为没能在这次验证里重新触发第 1 条 的驱动级错误,objectp() 判空分支本身没有被直接走到过,但改 动本身是无副作用的纯防御性判空(objectp() 三元表达式),逻 辑上必然覆盖"error["object"] 不是对象"这一路径,风险很低。 - 附带发现(记录但未修)cmds/std/flee.lpc 这个文件的 实际内容其实是 sbfind(凭感觉定位物品大概方位)的逻辑(连 help 文字都写的是"指令格式: sbfind <物品>"),跟 cmds/adm/sbfind.lpc(管理员版,权限判断不同)几乎是同一份代 码的两个变体;由于 FluffOS 的 cmds/std/ 目录按文件名直接注 册动词,这意味着玩家输入 flee(战斗中最直觉的"逃跑"单词) 实际跑的是定位物品的逻辑而不是脱战。真正的脱战机制是移动指令 本身(go.lpc 里有战斗中移动的脱离判定,已验证可用),所以 这不是一个"玩家真的没法逃跑"的功能性缺口,只是命令名字和内容 对不上、错误提示会提到一个玩家从没打过的"sbfind"这个词,容易 让人困惑。git blame 确认这个文件从最早一次批量转档提交起就 长这样,判断是原始 2002 年档案自带的历史遗留(可能是命名笔 误),不是本项目转换过程引入的,按"不改设计/内容"的范围界定, 这轮没有动它,留档供以后参考。

深度功能测试(2026-08-19,round four)——用当前完整清单复测,四项全部确认已经干净,无新修复

按 AGENTS.md 当前完整目录(round three 之后新增的 §7.112~§7.114、 以及 §7.90/§7.111)逐条复查本档案,并用一个全新角色重新走了一遍完 整 §10.7 流程。结论:全部四项已有检查点都确认干净,本轮没有发现 新 bug,也没有做任何代码改动。

§7.100 跨库扫描修复(ROOM 基类同款 replace_program() 致命形状)

§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): 3 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-04,shop + 拜师)

Prior 2026-08-18 round three listed 玉龙珠宝店 and correctly refused an unaffordable buy jade ring from seller, and correctly refused apprentice mei on 寒梅先生 (cmds/std/apprentice.lpc early-return when the NPC has no family — design, not a bug). This pass completes a paid buy and a recruiting NPC.

Port 40124, build-debug driver. First send is the id (banner has no GB/BIG5 menu). Registered fluffos / Mud@2026 / name 浮浮 / email [email protected] / male / 汉族 — (admin) from adm/etc/wizlist. Password policy still requires upper+lower+special (site policy). Login prints “请敲回车键[RETURN]” then a more-pager; send RETURN/q before further commands or they are swallowed. Prompt has a live per-second clock — idle-based clients must use ≤0.45s.

Shop: clone /obj/money/gold works for (admin). goto /d/fy/yuljade 商玉龙 (F_VENDOR, already #include <dbase.h>). list shows 玉指 jade ring 1 两黄金 / 玉簪 2 两 / 玉花 2 两 / 玉镯 3 两. buy jade ring from seller deducted the gold and printed “你向商玉龙买下一个玉指.” Inventory then showed the ring plus 一文钱 change.

拜师: goto /u/wudang/zhixiao, apprentice shi on 石雁 (u/wudang/npc/master.lpc, create_family("武当派", 57, "掌门人")). attempt_apprentice() call_out("do_recruit", 2, ob) — wait ~2s. Accepted: “恭喜您成为武当派的第五十八代弟子.” score shows 武当派第五十八代弟子 / 你的师父是石雁. save then disconnect. After a full driver kill + reboot, relogin still shows 武当/石雁; 一文钱 persisted; 玉指 did not (not autoload — expected).

Bug fixed: u/wudang/npc/master.lpc recruit_apprentice() wrote add("apprentice_availavble", -1) (extra “av”) while attempt_apprentice() uses "apprentice_available". Same recruit- limit typo as nitan Huashan — the daily counter never decremented. Corrected (CRLF preserved). Same typo exists in many other masters in this tree; only the live-tested 石雁 file was patched this pass.