Sunset Reappears: Crazy Jianghu

✅ 可玩

夕阳再现·疯狂江湖

xyzxfk

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

▶ 开始游玩 · Play Now

站点子名"疯狂江湖"。属于"夕阳再现"这一支武侠 MUD 引擎家族——与本项目中的 `xyzxfy2`(风云再起Ⅱ)、`wmkj`(未明空间)、`jhfy`(江湖风云单机)、`bixiecanyang`(碧血残阳)等同源,各自是不同站点在同一套引擎基础上发展出的独立游戏世界。这一支和另一轮处理过的 `xyzx`/`jhfy3`/`xajh4gkb`/`xyzxyl201412` 是同一个真正的"夕阳再现"血统(`d/city/sj.lpc` 逐字节相同)——注意本项目里还有另一批同样打着"夕阳再现"招牌、地图却是完全不同的"天涯"家族的档案(`xysylmhb`/`xyzxiiylzymh`/`yzxiiizylfy`/`xyzx3` 等),品牌名称不能作为判断血统的依据。

English

The site's subtitle is "Crazy Jianghu." Players begin as an unknown commoner youth dropped into one of several randomly-assigned frontier towns (North Frontier Town, Iron Spear Temple, and others), then build a reputation through sects and martial training in a jianghu that allows open player-vs-player combat. It carries the genuine Sunset Reappears map lineage shared with this project's xyzxfy2, xyzx, jhfy3, xajh4gkb, and xyzxyl201412 (byte-identical d/city/sj.lpc) — a full file-level comparison against sibling xyzxfy2 found roughly 97% of their common world files are byte-for-byte identical, with only small independent additions layered on top (e.g. an extra guild-teleport command), so the two are best understood as parallel-maintained snapshots of one authored map rather than two fully independent games, despite each having its own distinct login/security code. This lineage is distinct from a same-named cluster elsewhere in this collection (xysylmhb, xyzx3, xyzxiiylzymh, etc.) whose maps actually belong to an unrelated "Tianya" family; shared branding here doesn't reliably indicate shared code. Also shares more distant roots with this project's wmkj, jhfy, and bixiecanyang.

README

内容亮点

在线试玩

https://mudlibs.fluffos.info/xyzxfk/

管理员账号 / Admin account

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

本地运行

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

游戏端口:40040

NOTES · 移植与修复记录

xyzxfk — 夕阳再现 (Sunset Reappears — "疯狂江湖" build)

Archive: 夕阳再现-疯狂江湖.rar (byte-identical duplicate: 夕阳再现-疯狂 江湖(1).rar, already listed in AGENTS.md's Duplicate archives table — only this one processed). Port: 40040. Status: done (boots clean, full registration flow verified end-to-end including a real Chinese name).

What this is

"夕阳再现" ("Sunset Reappears"), adm/obj/{master,simul_efun} layout, ~17,768 raw files — one of the larger libs processed in this session.

Fixes applied

1. AGENTS.md §15h, standard shape: is_chinese()'s GBK lead-byte check → CJK codepoint check; check_legal_name()'s byte-count bound < 2 || > 10 → character-count bound < 1 || > 5, removed the i%2==0 even-byte-offset gate. 2. Confirmed NOT needed, via source reading: no §4 fix (master.c's valid_write gates via find_object only); no named.c daemon exists in this lib. 3. Confirmed no DNS/intermud daemon to exclude — unlike most recent libs, adm/etc/preload has NO dns_master entry at all (nothing to apply AGENTS.md §15p to here). httpd is in preload, confirmed safe — its socket setup is deferred via call_out("setup", 5), non- blocking to preload.

Interactive test result — full registration flow

No hidden pre-id prompts. Verified the complete registration path in one continuous connection: id xyzfktest → confirm yreal Chinese name 秦风 → accepted, proceeds straight to "请设定您的密码:". This lib's registration prompt warns against Jin Yong novel character names, but the actual banned_name array only contains pronouns and generic words ("风云", "流氓", political figures) — no specific character name needed to be avoided this time.

Re-verification pass (QA sweep, later session)

Earlier pass's "full registration flow verified end-to-end" only actually tested through to the password-setup prompt, not an ordinary post-login command (per the project's standing §15ae policy of always testing at least one post-login command like look/score). Re-tested the whole flow end-to-end this pass:

lpcc sweep

14,105 files, 13,798 pass / 307 fail (97.8%). Largest single cluster (53 failures) is a missing GROUP_D global — not triaged individually per AGENTS.md §6b/§13. Memory stayed healthy throughout (~10-11GB free during this sweep specifically), even while running concurrently alongside several sibling libs' conversions/sweeps in the same session as part of a push to parallelize more archives at once.

Driver-rebuild retest + LPC reformat + WASM pass (this session)

WASM-enablement pass (loopback-allow + admin seed)

Applied the four standard WASM-first changes (AGENTS.md §1.3b/§1.3e/§1.5):

1. Loopback always allowed through ban/site gates - adm/daemons/band.lpc: added reusable is_local_ip(string ip) helper (returns 1 for 127.*, empty/non-string, or any string that fails sscanf("%*d.%*d.%*d.%*d") — i.e. WASM garbage IPs). - adm/daemons/band.lpc is_banned() (was ~L106): short-circuits return 0 when is_local_ip(site) — this was the WASM login blocker (is_banned() returned 1 for a malformed IP, rejecting every WASM connection with "地址不受欢迎"). - adm/daemons/band.lpc vaild_allow_address() (was ~L353): short-circuits return 1 for local IPs (bypasses per-player allow-ip restriction). 2. Uptime startup gate: none in this build (the sibling xyzxfy2 has uptime()<30; this "疯狂江湖" build does not). 3. Anti-flood throttles exempt loopbackadm/daemons/logind.lpc: logon() ban_cnt > 6 gate and get_id() ip_cnt > 6 gate both now && !BAN_D->is_local_ip(...). In-game quit/kickout 600s retention timers left intact (game design, AGENTS.md §1.3e). 4. Admin account seeded — id fluffos, registered through the real flow (浮浮, male), granted (admin) by adding fluffos (admin) to adm/etc/wizlist (read by securityd.lpc::create()). Verified after restart: update /adm/daemons/band recompiled OK, goto worked, score shows 「您目前权限:(admin)」. Save file: work/data/user/f/fluffos.o (untracked, NOT gitignored — orchestrator must git add it).

Retest: fresh registration (the fluffos registration itself) reached the world as a (player); fluffos re-login has (admin) and wizard commands work; log/debug.log clean (0 runtime errors).

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

之前被误标记为某个孤儿档案文件名的逐字节重复版本,而那个文件名根本对应不到任何已追踪的档案;这里的内容其实是一款完全独立、可以游玩的游戏(有自己的 -N 版本号、自己的端口、自己的 README)——已清除 duplicate_of。

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

深度功能测试 / Deep functional test (2026-08-07)

按 AGENTS.md §10.7 流程做的第一轮完整交互式游玩测试。这份档案自己 的血统("夕阳再现" family,AGENTS.md §11)有三个手足档案 (jhfy/wmkj/bixiecanyang)已经各自做过 §10.7 深挖,开机前先读 了这三份记录当路线图,逐条核对已知 bug 是否也存在于本档案——结果 不是简单的"移植",而是牵出了两个更严重的、之前没被发现过的新 bug。 WASM 本轮仍被跳过验证:emsdk 安装器把工具链下载硬编码到 storage.googleapis.com,本 session 的出站代理策略拒绝该域名 (curl -sS $HTTPS_PROXY/__agentproxy/status 确认为 403),未重试; 这份档案自己 NOTES.md 里之前的"WASM build tested"记录仍然有效(登录 阶段的 query_ip_number() 驱动侧限制已知且非 mudlib bug),只是本轮 没有重新用 WASM 复测这次新修的 bug。

开机前主动核对手足档案已确认的问题:

本轮独立发现并修复的两个新 bug(均为真实、可复现的严重问题):

1. log_file() 本身无防护 + 一处直接 write_file() 未防护,两条 路径同时命中缺失的 /log/nosave//log/login/ 等目录,前者 导致每一次新角色注册都会卡死,后者导致每一次死亡都会陷入无限 循环。 - adm/daemons/logind.lpcget_gender()(注册流程的最后一 步,紧接着调用 enter_world())里 log_file("login/newid.log", ...) 抛出未捕获的运行时错误(/log/login/ 目录不存在),把 get_gender() 中止在这一行——init_new_player()/enter_world() 根本没有机会执行。玩家看到的现象:天赋/邮箱/性别全部问完, 最后卡在裸的 > 提示符,look/score/help 全部返回默认 的"什么?"(指令不存在),因为这个角色物件从未真正进入游戏 世界、从未挂上任何指令目录。这不是"某个功能坏了",是每一 个新角色的注册流程本身就是坏的。 - adm/simul_efun/file.lpclog_file()(全档案通用的日志辅 助函数,get_gender() 的这次调用正是通过它)本身只是裸 write_file(LOG_DIR + file, text),同一文件里现成的 assure_file() 辅助函数从未被调用。直接在 log_file() 内部 加一行 assure_file(LOG_DIR + file),一次性覆盖它全部至少 4 个不同的 /log/{nosave,login,fight}/* 调用点(assure_file 原本定义在 log_file 后面,这个编译器要求同文件内被调用的函 数需要先声明/定义,顺手把两个函数的顺序对调了,和 jqxz2015 那 一轮遇到的完全相同的编译器限制)。 - adm/daemons/combatd.lpc 的死亡处理函数(killer_reward() 的 同类逻辑)里还有一处不经过 log_file()、直接裸调用 write_file("/log/nosave/KILL_PLAYER", ...),同样没有防护, 同样因为目录不存在而抛出未捕获错误——这一处不是 log_file() 修复能覆盖到的,必须单独处理。这里的严重后果比注册卡死更离谱: 每次玩家死亡,die() 都会在这一行中止,角色永远不会真正"死 透"(不会被移到死亡场景、不会设置鬼魂状态),但引擎的 heart_beat() 却认为角色仍在战斗,于是同一次死亡判定在每 个心跳周期反复重新触发——实测复现:用 kill 攻击一个普通 NPC,触发死亡后死亡讯息("你口中喷出几口鲜血,倒在地上,死 了!")和频道八卦讯息连续刷了几十次都不停,角色卡在原地反复 "死"而从未真正离场,debug.log 里同一条 /log/nosave/ KILL_PLAYER 错误也随之反复记录。加一行 assure_file(...) 后重启复测:同样 kill 一个 NPC,这次死亡讯息只出现一次, 角色干净地被送到"鬼门关",NPC"白无常"完整走完"阳寿未尽"的 整套判词对白,一股"阴冷的浓雾"把角色送回"武庙"(REVIVE_ROOM), score 确认"你共死亡:1 次"、精气按死亡惩罚正确减半、潜能 正确扣除。 - 顺手排查了同一目录类别下的其余 write_file("/log/...", ...) 直接调用点,全部补上 assure_file(...)cmds/arch/reboot.lpccmds/adm/shutdown.lpc(各一处 /log/nosave/LASTCRASH)、 cmds/adm/restoredata.lpc/log/nosave/RESTORE_PLAYER)、 cmds/usr/helpbbs.lpc/log/doc/register/<id>,此前也不存 在的目录)。这几处触发频率低(管理员专用指令),本轮未逐一实 机复现,但修法和已验证过的其余四处完全一致,风险为零(assure_file 是幂等的目录创建,不改变原有写入内容)。 - 归类:均为 AGENTS.md §7.11("缺失运行期目录导致 write_file 静默中止")的确认新实例,其中注册路径这一处的严重度和已归档 的 xajhxo 实例(§7.11 已有记录:注册流程被同类 bug 卡死)完 全同级,死亡路径这一处的严重度和 jqxz2008/jqxz2008dlx 已 确认的 killer_reward() 死循环完全同级——log_file() 本身缺 少防护这一具体形状,和 jqxz2015 这一轮独立发现的形状也完全 一致,§7.11 里 xajhxo 那条记录已经完整覆盖了这个教训,未再 重复添加新条目。

2. cmds/usr/inventory.lpc 整个文件不存在——i/inventory 指 令从注册那一刻起就是坏的(新分类,AGENTS.md 新增 §7.94)。 cmds/usr/ 目录下只有 inventory.C(大写扩展名)、 inventory.c.bak复件 inventory.lpc("inventory.lpc 的副本") 三份不同的历史实现,没有一份叫纯粹的 inventory.lpc。别名表 (aliasd.lpc)里 "i": "inventory" 照常存在,所以每次 i/ inventory 都会解析到一个根本不存在的指令文件,返回引擎默认的 "什么?"(指令不存在)——和普通打错字的表现完全一样,如果不是 刚好在测试这条指令,很容易被当成"这个 mud 没有背包指令"直接跳 过。没有靠猜就确定了哪一份是"真正"该有的内容:在同一份档案 的 u/isle/ToMud/inventory.lpc(一个巫师沙盒目录里的工作副本) 找到一份逐字节对应(除本项目自己的格式化差异外完全一致)的实现, 而且只有 inventory.C 使用了和这份档案 include/tomud.hCLEAN1/ADD1 宏一致的代码(.bak/复件 两个变体都没有这段 逻辑)——这才是把 inventory.C 确定为"应该被恢复的那一份"的证 据,而不是三选一的主观判断(AGENTS.md §7.94 专门记录了这条判断 依据的重要性:档案里如果同时存在多份内容不同的历史实现,选哪一 份是内容判断,但"确认某份内容在档案别处也是活代码"是可核实的事 实)。修法:把 inventory.C 的内容原样复制到新建的 cmds/usr/inventory.lpc.C/.c.bak/复件 三个旧文件不动 (无害的死代码备份,不会被引擎编译/派发)。Live 验证:修复前 i 返回"什么?";重启后同一测试角色 i 正确列出"□布衣(Cloth)", 负重百分比正常显示。

测试路径:一次连续会话里:注册(真实中文名 梁景寒,id xyzfkdeep,随机天赋)→ 卡死在裸 > 提示符(bug 1 首次复现)→ 修复+重启后重新注册,完整 MOTD/权限/上次登录信息/落地"客店"全部正常 显示 → score/i 确认食物/饮水满格(§8.9 修复)、i 正确工作 (bug 2 修复)→ 探索到"北大街",fight 对"收破烂的"(友善 NPC) 被正确拒绝(不同意较量),改用 kill 强制开战 → 战斗中触发"你的 「基本拳脚」进步了!"(组织性技能学习),继续战斗直到角色被击杀, 死亡讯息死循环(bug 2 后半段,KILL_PLAYER 写入崩溃首次复现)→ 修复+重启后重新用 kill 触发死亡,这次死亡→"鬼门关"→白无常判词 →复活送回"武庙"全程一次性走完,无重复讯息 → 门派加入:拜访 "忆香亭"红花会总舵主陈家洛,apprentice 正确按代码里的正气门槛 (shen >= 50000)拒绝(合理设计,未强行绕过)→ 改用管理员 setskill xyzfkdeep sword 50 验证捷径路径,skills 确认组织性的 parry(对练中自动习得)和捷径赋予的 sword(50 级)同时存在 → quitdebug.log 检查(用文件修改时间戳而非仅 grep 关键字确 认:quit 前后 debug.log 文件的 mtime 全程停留在修复前最后一次崩溃 的时间点,证明修复后的整个会话零新增运行时错误)→ 断线重连(nc 新连接,非同一 TCP 会话),score/skills 确认门派/技能/死亡次数/ 潜能全部正确持久化。

测试角色:id xyzfkdeep,中文名 梁景寒,密码 Xyzfk2026Test, 普通百姓(未入门派,apprentice 门槛未达到),技能 parry(组织性) + sword(捷径路径,50 级),死亡 1 次,位于武庙(REVIVE_ROOM,起始 房间为随机 4 选 1,未曾 save 过固定 startroom)。存档: work/data/{login,user}/x/xyzfkdeep.o。管理员账号 fluffos 存档 产生了正常的 food/water/mud_age 增量(无损坏,setskill.lpc 全程 正确操作 ob 而非 me),按这份档案自己既有 NOTES 里"必须提交, 不受 gitignore"的约定一并提交;adm/daemons/maxonline(本轮测试 期间因多次重启驱动被意外改写为较低的同时在线人数峰值)已用 git restore 还原到测试前的真实历史峰值。

验证通过:真实中文名注册(修复后);look/score/i 多次状 态检查;食物/饮水初始化(§8.9);inventory/i 指令本身(新 §7.94);安全对练 fight(正确拒绝)与 kill 强制开战;组织性技 能学习(战斗中自动进步);管理员捷径路径 setskill;完整死亡→鬼 门关→复活循环(含 log_file()/裸 write_file() 两条独立防护路径); 门派加入的正气门槛正确生效(未绕过);quit 后 debug.log 检查; 断线重连后状态持久化。

明确未验证(记录而非静默跳过):完整拜师流程直到正气达标(需 要大量战斗积累正气值,超出本轮时间预算,改用管理员捷径验证同一底 层技能赋予路径);商店购买(本轮未探索到商店所在区域);cmds/arch/ reboot.lpc/cmds/adm/shutdown.lpc/cmds/adm/restoredata.lpc/ cmds/usr/helpbbs.lpc 四处新加的 assure_file() 防护(管理员专用 或低频功能,未逐一实机复现,仅代码层面确认修法与已验证的四处完全 一致);WASM 下的重新验证(详见上方说明,proxy 阻断,此前已有会话 独立确认过登录阶段的 WASM 限制且与本轮修的 bug 无关)。

深度功能测试(2026-08-13,round two,新驱动重测)

针对驱动升级(quest_times/win_times %-operator 修复 + Warning/warning 大小写回退兼容)做的重测。核对上面记录的所有修复(§7.11 log_file() 及其覆盖的注册/死亡路径、§7.94 inventory.lpclog_error() severity 判断)逐项确认代码仍然生效;win_times%-operator 也 已用 to_int(query("win_times")) % 5d/city2/npc/refereew.lpc:146); feature/dbase.lpc 未发现 tybxjh/wlhd 那种密码写保护,不适用。管 理员 fluffos/Mud@2026 真实重连验证:score 显示"【玄法天君】" 头衔,食物/饮水满格,i 正确列出随身物品,debug.log 全程干净。 驱动按精确 PID 结束;测试期间产生的存档时间戳增量已 git checkout -- 还原,本轮无需新代码改动。

§7.100 跨库扫描修复(ROOM 冗余 replace_program() 关闭包炸弹,2026-08-19)

同一形状覆盖到几乎所有房间基类(机制详见 AGENTS.md §7.100)。本库属 于该扫描已知最大规模的 10 个库之一。二进制模式脚本机械删除了 5760 处独立、未注释的 replace_program(ROOM); 整行(其中 d/party/ actionavailable xiao cangtian,0/ 这个名字带空格逗号的异常目录下 32 个房间文件也在其中——目录名本身是一个已有的、和本次修复无关的历史 遗留问题,未做处理,超出本次任务范围)。另外手工清理了造房工具代码 生成模板里内嵌的同一形状,本库有两份完全同形状的拷贝 (clone/misc/roommaker.lpcu/fyue/misc/roommaker.lpc,各 1 处 字符串拼接)。删除总计 5762 行,与本次扫描 FINDINGS.md 记录的 xyzxfk 存活命中数完全一致。

验证:干净启动一次真实调试驱动,端口 40040 正常监听, work/log/debug.log 全程无新增内容。用已播种的 fluffos/Mud@2026 管理员账号连线,在北疆小镇/巴依家小院/巴依家客厅之间往返走了十余个 房间(含 NPC),look/who 均正常,未见任何 "cannot replace"/"cannot bind" 或崩溃迹象。测试产生的 data/{login,user}/f/fluffos.o 存档 时间戳 diff 已 git checkout 撤销,不提交。驱动按精确 PID kill。

§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-13 第二轮只做了重连,没测商店和拜师。本轮用既有 fluffos/Mud@2026(中文名「浮浮」,男性,无门派)。