Sunset Reappears: Storm Rises Again II

✅ 可玩

夕阳再现·风云再起Ⅱ

xyzxfy2

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

▶ 开始游玩 · Play Now

站点子名"风云再起Ⅱ"(域名 www.zhaoshu.net),玩家从平民少年少女出发,降生在几个随机分配的江湖城镇/据点之一(如北疆小镇、铁枪庙等),游历各地、结交门派、习练武功、行侠仗义,游戏公开声明不禁止玩家间的 PK 对战,注册时还要求同时设置"管理密码"和"登录密码"两套独立密码。与本项目中的 `xyzxfk`(疯狂江湖)同属"夕阳再现"这一支武侠 MUD 引擎家族,而且关系远比"共享引擎"来得紧密——对两者共同的世界文件逐字节比对,发现约 97% 完全相同(含 `d/city/sj.lpc` 逐字节相同),双方都只是在同一份原作地图上叠加了少量各自独立的改动(如 `xyzxfk` 多出的一条门派传送指令),更接近同一份地图的两个并行维护快照,而不是两个彻底独立的游戏,只是各自的登录、安全代码是独立实现的。这一支血统(也见于本项目的 `xyzx`/`jhfy3`/`xajh4gkb`/`xyzxyl201412`)和本项目里另一批同样打着"夕阳再现"招牌、地图却属于不相关"天涯"家族的档案(`xysylmhb`/`xyzxiiylzymh`/`yzxiiizylfy`/`xyzx3` 等)是完全不同的血统,品牌名称不能作为判断血统的依据。

English

The site's subtitle is "Storm Rises Again II" (domain www.zhaoshu.net). Players start as a commoner youth landing in one of several randomly-assigned jianghu towns/outposts (North Frontier Town, Iron Spear Temple, and others), openly permits player-vs-player combat, and requires setting two independent passwords (a recovery "admin password" plus the everyday login password) at registration. It belongs to the same Sunset Reappears family of wuxia MUD engines as this project's xyzxfk (Crazy Jianghu), and the relationship is much closer than "shared engine": a full file-level comparison of their common world files found roughly 97% byte-for-byte identical (including the shared d/city/sj.lpc), with each side layering only small independent tweaks (e.g. xyzxfk's extra guild-teleport command) on top of the same authored map — best understood as two parallel-maintained snapshots of one world rather than two fully separate games, even though each has its own distinct login/security code. This branch's map lineage (also shared with xyzx, jhfy3, xajh4gkb, and xyzxyl201412) is a different family from another cluster of similarly-branded archives in this collection whose maps actually belong to an unrelated "Tianya" family.

README

内容亮点

在线试玩

https://mudlibs.fluffos.info/xyzxfy2/

管理员账号 / Admin account

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

本地运行

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

游戏端口:40041。服务器刚启动的前 30 秒内会拒绝远程登录,本地/ 回环地址不受此限制。

NOTES · 移植与修复记录

xyzxfy2 — 夕阳再现 之「风云再起Ⅱ」

Archive: 夕阳再现-风云再起2.rar. Port: 40041. Status: done (boots clean and quick, full registration flow verified end-to-end including a real Chinese name reaching the actual game world).

What this is

"夕阳再现" ("Sunset Reappears"), subtitle "「风云再起Ⅱ」" ("Storm Rises Again II"), domain www.zhaoshu.net, ZMUD port 5555 / TOMUD port 9999 per its own connection banner. adm/obj/{master,simul_efun} layout — credits in master.c ("change by Fan@wanxia") and securityd.c ("[email protected]", "Modified by Xiang for XKX") place this in the broad Eastern-Stories/"ES"-descended family that also produced es1_win/esI/xkx2001/rzrmud/dfgs2 (archives #12/13/25/ 23/33) — but none of master.c/securityd.c/logind.c are byte-identical to any of those (all distinct md5sums), so this is its own fork, not a direct copy of a previously-processed lib.

Lineage check against archive #46 (夕阳再现-疯狂江湖.rar, being processed concurrently in this same session): adm/simul_efun/chinese.c is byte-identical between the two archives (same md5sum), confirming a shared "夕阳再现" base engine, but logind.c/master.c/securityd.c all differ — consistent with the project's general finding that similar Chinese titles/shared branding don't imply identical code (only the "chinese.c" utility file happened to survive unmodified across the two site forks; the site-specific daemons diverged).

~14,707 raw files, 13,560 after .c.lpc rename — one of the larger libs in this batch, but memory stayed healthy throughout (lpcc sweep RSS peaked ~6.7GB out of 23GB host, never approached the OOM-risk threshold in AGENTS.md §6b).

Fixes applied

1. AGENTS.md §15h (standard shape, chinese.lpc's is_chinese()): GBK lead-byte range check (str[0] > 160 && str[0] < 255, strlen>=2) → CJK codepoint range check (str[0] >= 0x4e00 && str[0] <= 0x9fff, strlen>=1). 2. AGENTS.md §15h (logind.lpc's check_legal_name()): byte-count bound strlen < 2 || > 10 → character-count bound < 1 || > 5 (matches the message's own stated "1 到 5 个中文字"); removed the i%2==0 even-byte-offset gate so every character position is checked via is_chinese(name[i..i]) instead of the old 2-byte GBK window name[i..<0]. 3. AGENTS.md §15p: /adm/daemons/network/dns_master was in adm/etc/preload — removed proactively before the first boot attempt. Checked every other preload entry's source for socket_create/ resolve() calls (fingerd, channeld, natured, monitord, storyd, autosaved, rankd, commandd, aliasd) — none use networking, confirmed safe to leave. httpd was already commented out in the shipped preload file. Booted clean in under 20 seconds. 4. Confirmed NOT needed, via source reading (all checked proactively before first boot): - §4 (lazy security-daemon load / stack-overflow recursion): master.lpc's valid_write/valid_read only ever find_object() the security daemon, never load_object()s it lazily — no reentrancy-guard fix needed. - §7 (get_root_uid/get_bb_uid): both already present and correct. - §15l (destruct(SIMUL_EFUN_OB) in master's create()): not present. - §8d/§15o (get_include_path() / local-header angle-bracket includes): convert_lib.sh's existing local-include-to-quotes pass (57 files) already neutralizes this whole class unconditionally (quotes resolve regardless of VM context), so no master.lpc get_include_path() addition was needed here. - §15n (custom securityd valid_read denying "(player)" status reads under /adm//cmds): this lib's securityd.lpc IS a genuinely custom ACL (Eastern.Stories-lineage trusted_read/ exclude_read tables), but its exclude_read/trusted_read tables never list "(player)" at all, and its valid_read returns 1 early whenever the caller has no resolvable euid (the case for essentially every pre-login compile trigger) — so the §15n failure mode never manifests here. Confirmed both by reading the source and by the clean interactive test (no "Read access denied" anywhere). - Nitan-family simul_efun-dbase architecture bug (§15): not present — adm/simul_efun/wizard.lpc only has wizhood()/wiz_level() helpers, no bare set/query/delete; feature/dbase.lpc (F_DBASE, widely inherited) implements real local set/query/delete methods directly. Correct inherit-based architecture, same as rzrmud/xkx2001. - No named.lpc daemon exists in this lib at all (grep came up empty) — the deep §15h PATH()/sliding-window fix doesn't apply. 5. Two genuine pre-existing typos fixed during the lpcc sweep triage (both matching AGENTS.md's existing "missing quote" catalog shape, §10): d/quanzhen_old/hudi4.lpc, hudi5.lpc, hudi6.lpc all had set("long", <bare Chinese text with no opening quote> (hudi5 was missing the closing quote too); kungfu/skill/qingyi-jian.lpc had "skill_name" : "大悲式, (missing closing quote before the comma). All 4 fixed and individually re-verified with a targeted lpcc compile (PASS on all 4 after the fix).

Interactive test result — full registration flow

No hidden pre-id prompts (no GB/BIG5 gate, no student age-gate). Full chain read from logind.lpc: logon() → English id (get_id) → confirm y/n (confirm_id) → Chinese name (get_name) → "管理密码"/wizpwd (a secondary backup password, new_wizpwd/confirm_wizpwd) → real login password (new_password/confirm_password) → attribute-gift selection (select_gift/get_gift, 0 = system random) → email (get_email) → gender (get_gender) → enter_world().

Verified the complete path in one continuous mudclient.py connection:

Some non-fatal 编译时段错误:... warning: Unknown #pragma, ignored lines appear in the transcript during first-time lazy compiles of inherit/char/char.lpc and its dependents (the mudlib's own error_handler mislabels compile-time *warnings* as "compile-time errors" in its Chinese message text) — cosmetic only, does not affect gameplay; the same pragma warnings appear in the clean boot log too.

Re-verification pass (QA sweep, later session)

Re-tested the full flow end-to-end this pass (feature/command.lpc's command_hook() confirmed protected nomask, not private -- §15ae does not apply). Found and fixed a real bug: adm/obj/master.lpc's log_error() showed EVERY compile-time diagnostic to the connected player unconditionally (§15w), including harmless WARNINGS (Unknown #pragma, ignored, etc) from the first-ever lazy compile of a never-preloaded room/NPC file -- confirmed live: a fresh registration showed several spurious 编译时段错误:... warning: ... lines interleaved with the real welcome banner. Fixed by gating the player-facing broadcast on the message NOT containing "warning:" (still logs everything to disk regardless, matching the established fix pattern used across this project and applied to sibling lib xyzxfk in the same pass). Re-verified with a fresh registration (qinruo/秦若, female) after restarting the driver: zero spurious messages, look/score/quit all correct (correct female-specific title "芊芊民女", landed in 铁枪庙).

Also noted: logind.lpc's logon() has a uptime() < 30 gate that rejects ALL logins (with a "游戏正在启动过程中,请稍候再login" message) for the first 30 seconds after the driver starts -- a genuine, intentional startup-settling guard, not a bug; just wait past 30s uptime before attempting to connect after a fresh boot.

Full registration + post-login-command flow now confirmed working with real Chinese names 秦朔(male, landed in 北疆小镇)/秦若(female, landed in 铁枪庙), look/score/quit all producing correct output, zero 执行时段错误 in debug.log after the fix.

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

lpcc sweep

13,560 files: 13,364 pass / 196 fail (98.6%), after fixing the 4 missing-quote typos above (raw sweep was 13,360/200 before those fixes). Notable failure categories, triaged but not further pursued:

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") — WASM garbage IPs). - band.lpc is_banned() (~L108): short-circuit return 0 for local IPs (this was the WASM login blocker). - band.lpc vaild_allow_address() (~L370): short-circuit return 1 for local IPs. 2. Uptime startup gate bypassedadm/daemons/logind.lpc logon() (~L80): uptime()<30 destruct gate now && !BAN_D->is_local_ip(str) (moved str = query_ip_number(ob) above it). Remote connections still see the startup-grace gate. 3. Anti-flood throttles exempt loopbacklogind.lpc: ban_cnt > 3 (~L142) and ip_cnt > 8 (~L227) gates now && !BAN_D->is_local_ip(...). In-game kickout/last_on retention timers left intact (game design). 4. Admin account seeded — id fluffos, registered through the real flow. NOTE: this "风云再起Ⅱ" build's registration requires TWO passwords — a 管理密码 (wizpwd) *and* a 普通密码 (login password), and forbids them being equal. Set login password (普通密码) = Mud@2026 and 管理密码 = Adm@2026. Display name 浮浮, male. Granted (admin) via adm/etc/wizlist (fluffos (admin)), read by securityd.lpc::create(). Verified after restart: score shows 「您目前权限:(admin)」, update /adm/daemons/band recompiled OK, goto worked. Save files: work/data/user/f/fluffos.o and work/data/login/f/fluffos.o (both untracked, NOT gitignored — orchestrator must git add).

Retest: fresh registration reached 北疆小镇 as (player); fluffos re-login (admin) + wizard commands OK; log/debug.log 0 runtime errors.

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

同一家族(风云再起2)。状态已从过时的 limited 修正——这份档案自己的 README 和 group_note 里从未记录过任何缺陷说明,本轮重新测试也没有发现:管理员登录(fluffos/Mud@2026)干净正常,'★ 您目前权限:(admin)',quit 正常。

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

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

按 AGENTS.md §10.7 流程做的第一轮完整交互式游玩测试。这份档案自己 的 README 已经确认与 xyzxfk(疯狂江湖,本 session 上一轮刚做过 §10.7 深挖的手足档案)共享部分底层"夕阳再现"引擎文件(d/city/ sj.lpc 逐字节相同),但登录/安全/世界内容各自独立开发——开机前直 接把上一轮在 xyzxfk 上新发现的两个严重 bug 拿来对照本档案的实际 源码,两个全部命中(细节见下)。WASM 本轮仍被跳过验证:emsdk 安装 器把工具链下载硬编码到 storage.googleapis.com,本 session 的出站 代理策略拒绝该域名(curl -sS $HTTPS_PROXY/__agentproxy/status 确 认为 403),未重试;这份档案自己 NOTES.md 里之前的 WASM 相关记录 (uptime()<30 启动门禁、query_ip_number() 驱动限制)仍然有效, 本轮只是没有重新验证这次新修的 bug 在 WASM 下同样生效。

开机前主动核对手足档案 xyzxfk 新发现的 bug:

1. AGENTS.md §7.11(已确认第 N 例,含注册路径 + 死亡路径两处)—— adm/simul_efun/file.lpclog_file()xyzxfk 修复前逐字 节相同的形状:裸 write_file(LOG_DIR + file, text),同一文件里 现成的 assure_file() 辅助函数从未被调用。adm/daemons/ logind.lpcget_gender()(注册流程最后一步,紧接着调用 enter_world())里同样有 log_file("login/newid.log", ...),而 work/log/login/ 目录在这份 work/ 树里同样不存在——这意味着 每一个新角色的注册流程本身就是坏的,和 xyzxfk 一模一样的 崩溃形状。修复:在 log_file() 内部加一行 assure_file(LOG_DIR + file)assure_file 原本定义在 log_file 后面,这个编译器 要求同文件内被调用的函数需要先声明/定义,顺手把两个函数的顺序 对调了,和 xyzxfk/jqxz2015 遇到的完全相同的编译器限制)。 adm/daemons/combatd.lpc 里也有一处独立的、不经过 log_file() 的裸 write_file("/log/nosave/KILL_PLAYER", ...)——这一处比 xyzxfk 的版本条件更窄(包在 if (userp(killer)) 里,只有"玩家 杀死玩家"才会触发,不像 xyzxfk 那样任何死亡都会触发),本档案 README 明确写了"本MUD不禁止玩家之间的PK",这是真实会被触碰到的 路径,一并加了 assure_file(...)。顺手排查了同一目录类别下的其 余 write_file("/log/...", ...) 直接调用点,全部补上 assure_file(...)cmds/{arch,adm}/shutdown.lpccmds/arch/ reboot.lpc(各一处 /log/nosave/LASTCRASHarch/adm 两份 shutdown.lpc/restoredata.lpc 逐字节相同,两份都改了)、 cmds/{arch,adm}/restoredata.lpc/log/nosave/RESTORE_PLAYER)、 cmds/usr/helpbbs.lpc/log/doc/register/<id>)。 2. AGENTS.md §8.9(已确认第 N 例)——adm/daemons/logind.lpc enter_world() 食物/饮水初始化判断 if (ob->query("age") == 14) 用的是登录桩对象 ob 而不是玩家本体 user,和 xyzxfk/三个 "夕阳再现" 手足档案(jhfy/wmkj/bixiecanyang)确认过的形状 完全一致。改成 user->query("age") == 14。 3. AGENTS.md §7.94(新增,xyzxfk 那一轮命中)——本档案检查后确 认不适用cmds/usr/inventory.lpc(以及一份 inventory2.lpc) 都以正常文件名存在,i 指令实测正常工作,没有 xyzxfk 那种"只 剩非标准扩展名备份文件"的缺失情况。 4. AGENTS.md §7.34(printf 调试残留)——本档案自己此前已经修 过:读代码确认 logind.lpcget_resp()/get_name() 没有 printf("%O\n", ob) 残留,本轮实测注册流程也没有泄漏对象引用, 未重复修改。

测试路径:读 doc/help/newbie 确认 kill/hit/fight 均可用 于练级后,在原生驱动下一次连续会话里:注册(真实中文名 沈知远,id xyzfydeep,随机天赋,需要设置"管理密码"+"普通密码"两组独立密 码)→ 完整 MOTD/权限横幅显示、落地"铁枪庙"(bug 1 注册路径的修复 验证:修复前会卡死在裸提示符,look/score/help 全部返回默认 的"什么?")→ score/i 确认食物/饮水满格(§8.9 修复验证)、i 正常工作 → kill wuya 攻击庙前的乌鸦,多回合拳脚攻防正常,组织性 学会"基本拳脚",最终被乌鸦击杀,死亡讯息只出现一次、debug.log 全程零新增错误(NPC 击杀不经过 KILL_PLAYER 那一条 userp(killer) 门槛,但确认了死亡/复活整条流程本身干净,combatd.lpc 里唯一那处 write_file 已通过代码核对方式确认修复到位——见下方"未验证"部分) → 死亡 → 鬼门关 → 白无常判词全套自动走完 → 送回"武庙" → 门派加入: 拜访"忆香亭"红花会总舵主陈家洛,apprentice 正确按代码里的正气门 槛(shen >= 50000)拒绝(合理设计,和 xyzxfk 完全一致,未强行 绕过)→ 改用管理员 setskill xyzfydeep sword 50 验证捷径路径(此 引擎家族同样没有专门的 setskill/setparty 类快捷指令外的门派赋 予手段,setskill.lpc 存在 cmds/{adm,arch} 两份逐字节相同的拷 贝,均正确操作 ob 而非 me,未发现 sjtx2 那类 me/ob 错位 bug)→ skills 确认组织性的 dodge/unarmed 和捷径赋予的 sword(50 级)同时存在 → quitdebug.log 检查(零新增错误) → 断线重连:这份档案的 logind.lpc 有一个 120 秒的"刚退出游戏,为 了减轻系统负担请过一会再连入"防洪门禁(time() - ob->query ("last_on") < 120,独立于 §1.3e 已归档的 kickout 30 分钟惩罚门 禁,同属合理的游戏设计,未做任何改动),第一次重连在门禁窗口内被 正确拒绝,等待真实的 120+ 秒后重连成功,skills/score 确认门 派归属(未加入,符合预期)、组织性+捷径两条技能、死亡次数全部正确 持久化。

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

验证通过:真实中文名注册(含两组独立密码,修复后); look/score/i 多次状态检查;食物/饮水初始化(§8.9);kill 战斗与死亡→复活完整循环;组织性技能学习;管理员捷径路径 setskill;门派加入的正气门槛正确生效(未绕过);quit 后 debug.log 检查;120 秒防洪门禁内重连正确拒绝、门禁过后重连正确成 功,全部状态正确持久化。

明确未验证(记录而非静默跳过):combatd.lpcuserp(killer) 门槛保护的 KILL_PLAYER 写入路径(真实玩家对战玩家的击杀)未通过 实机 PK 复现——构造一次真正的玩家对玩家击杀需要两个同时在线的真实 角色,超出本轮时间预算;这一处的修复只通过代码核对(和已验证过的 log_file() 通用修复、以及本轮已验证的 NPC 击杀死亡流程都用的是 同一个 assure_file() 防护模式)确认,不是独立实机复现的。cmds/ {arch,adm}/{shutdown,restoredata}.lpc/cmds/usr/helpbbs.lpc 四组 新加的 assure_file() 防护同理(管理员专用或低频功能,未逐一实机 复现)。商店购买(本轮未探索到商店所在区域)。WASM 下的重新验证 (详见上方说明,proxy 阻断)。

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

针对驱动升级(quest_times/win_times %-operator 修复 + Warning/warning 大小写回退兼容)做的重测。核对上面记录的所有修复(§7.11 log_file() 及其覆盖的注册/死亡路径、log_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 显示食物/饮水 满格,debug.log 全程干净。驱动按精确 PID 结束;测试期间产生的存 档增量(纯游戏时间计数器)已 git checkout -- 还原,本轮无需新代 码改动。

AGENTS.md §7.100 修复(2026-08-19)

jhfy3 起源发现的 ROOM 基类冗余 replace_program(ROOM); 自崩 溃地雷(详见 AGENTS.md §7.100):本 lib 5239 个房间文件的 create() 末尾(紧跟 inherit ROOM;)都有这一行多余调用,第一次对该房间对象 绑定闭包(set(..., (: ... :))edit()call_out() 闭包参数等) 会永久失败。同款地雷还烤进了自带建房工具 clone/misc/roommaker.lpc/u/fyue/misc/roommaker.lpc 的两处代码生 成模板(heredoc 与字符串拼接各一处),意味着玩家/巫师用建房工具新 建的房间也会天生带着这个地雷。

修复:脚本化删除所有 5239 个房间文件里独立成行的 replace_program(ROOM);,加上两份 roommaker 工具模板里各自手动摘 除字符串拼接里的 \treplace_program(ROOM);\n 片段,保留 inherit/setup() 不变。git diff --stat:5241 files changed, 2 insertions(+), 5243 deletions(-),与脚本自报删除行数(5241 处标准 行)+ 2 处手动摘除(roommaker 字符串拼接)精确吻合。

验证:build-debug 驱动真实冷启动,端口 40041 正常监听, debug.log 全程干净(无新增编译错误/警告);管理员 fluffos账号 goto 走访 14 个刚修复的房间(d/binghuodao/d/quanzhen_old/ d/taishan/d/baituo/d/migong/d/gaochang 等区域),look/ goto 均正常返回,无 "cannot replace"/"cannot bind" 新增日志行。 按精确 PID 结束驱动,登录产生的两处存档增量(fluffos.o 登录/用户 档案)已 git checkout -- 还原。

§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(中文名「浮浮」,男性,无门派)。