Ocean 2000 (Ocean II)

✅ 可玩

海洋2000

hy2000

🔑 wuyou / Mud@2026 更新 7f5fb31 2026-09-04 源码 下载 ZIP

▶ 开始游玩 · Play Now

游戏内标题为"海洋II"(Ocean II),ES2/金庸题材血统的 mudlib,和 `fqyy2`(风起云涌2)同属"海洋/hy"代码线家族——两者的 `SECURITY_D` 都指向 `adm/daemons/securd.lpc`,管理员认证也都不走常见的 wizlist 文本文件,而是靠该 daemon 里硬编码的后门 id(此处是"无忧")。它同时也是 `hy2002` 的底本:hy2002 在同一份约 10,630 个文件的地图基础上另外增加了约 3,000 个文件(新地图、新门派内容),其余部分与 hy2000 完全一致。世界在华山、武当、少林、丐帮等常规门派地图之上,还叠加了一套婚恋玩法(`d/marry/`、`d/happy/` 场景)。

English

The in-game title is Ocean II -- an ES2/Jin Yong-themed mudlib belonging to the "Ocean/hy" code family alongside fqyy2 (Storm Clouds Rising II) in this project, both routing SECURITY_D to adm/daemons/securd.lpc and both authenticating admins through a backdoor id hardcoded into that same daemon rather than a plain-text wizlist (here, "wuyou"). It is also the base for hy2002, a superset that adds roughly 3,000 more files (new maps, new sect content) on top of an otherwise identical 10,630-file map. The world layers a marriage system (d/marry/, d/happy/) on top of the standard Huashan/Wudang/Shaolin/Beggars'-Sect sect map. Registration leads to a working bulletin-board post/look chain, NPC patrols on the map from the very first zone, and a leaderboard item that spawns on every logout.

README

内容亮点

注册流程

连线后先回答"Are you using BIG5 font [Y|N]?"(本次验证选 N/GB,选 Y/BIG5 同样可正常显示,未发现编码问题)→ 英文 id(3-12 个小写英文 字母)→ 确认建立新角色(y/n)→ 中文名字(直接输入完整姓名,无需 拆分姓氏/名字)→ 密码(设定 + 确认两次)→ 天赋数值(输入 0 交由系 统随机产生,或 1-4 自选一项,随后需再输入 y 确认这组数值)→ 电子 邮件地址 → 性别(m/f)→ 进入游戏世界。

本次修复的关键 bug

深度功能测试(§10.7)修复的 bug

管理员账号 / Admin account

这份档案的管理员认证机制和本项目里大多数档案不同:adm/daemons/ securd.lpcrestore_list() 直接在代码里硬编码了一个后门 id set("wiz_status/wuyou","(admin)");不是常见的纯文本 adm/etc/wizlist 文件机制。

管理员账号通过正常注册流程创建,只要英文 id 填 wuyou 就会自动获 得 (admin) 权限,已在游戏内确认 "目前权限:(admin)" 显示正确。

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

本地运行

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

游戏端口:40174

NOTES · 移植与修复记录

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

ES2/金庸血统 mudlib,游戏内标题为"海洋II"(Ocean II)。修复的 bug:(1)过时的 MASTER_OB/SIMUL_EFUN_OB 宏指向 /adm/single/ 下的死代码副本,而不是真正的 /adm/obj/ 档案(config.fluffos 里指定的那份,§7.56 类);(2)§7.54 类的 sscanf(read_file(缺失档案)) 崩溃,出现在 logind.lpc 的 howmany_visitor()/howmany_card() 读取全新安装下不存在的 /log/mud/MUDVISITOR 和 GIFTCARD;(3)新的 §7.54 补充案例:uptime.lpc 的 LASTCRASH 显示里 write(read_file(缺失档案)) 崩溃,导致英文名字提示根本不会出现(没有编译错误,没有可捕获的异常——静默阻止了整个注册流程的开始);(4)新增 AGENTS.md §7.63:quit.lpc 的 new('/clone/topten/magic-rice') 缺少其它所有同类呼叫点(top10.lpc、topboard.lpc、topten.lpc、topdel.lpc——最后这个档案甚至留了一句注释承认这个确切的失败)都有的防御性判断 if(ob=new(...)),导致每次退出游戏都会因为对 int 0 做了一次错误的 call_other 而崩溃——已比照其它同类呼叫点的写法修复,而不是去深究 new() 失败的根本原因(深入调查确认档案本身编译干净,create() 甚至从未真正开始执行——这是一个原始档案本来就有、原作者已经在除这一处之外的所有地方都防御过的驱动/mudlib 特性)。管理员账号的引导方式偏离了常规模式:securd.lpc 在 restore_list() 里直接硬编码了一个引导用管理员 id "wuyou"(set("wiz_status/wuyou","(admin)")),而不是像本合集大多数档案那样使用纯文本的 adm/etc/wizlist 档案。管理员账号以 id "wuyou"(中文名"无忧")、密码 Mud@2026 注册,游戏内"目前权限:(admin)"显示确认生效。完整的注册→look→score→quit 流程在排版格式化前后各验证过一次,用的是真实中文名字。格式化工具发现 1 个档案(cmds/usr/setbak.lpc)在一段 heredoc 帮助文字块里有真正的损坏(每个中文字都被重新加了空格)——已用 git checkout 还原。

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

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

Re-tested against the freshly-rebuilt build-debug/src/driver(post 全库 quest_times/win_times %-operator 修复 + Warning/warning 驱动文本回退)。

发现并修复的 PROGRAMMING bug

1. log_error()adm/obj/master.lpc)完全没有严重度检查(AGENTS.md §7.34-class,与本轮 wdxtym/ffxymud/fy2mg/fys/hc/hy 同一原始形状)if (this_player(1)) efun::write(...)——不区 分巫师/玩家,也不区分警告/错误。修复:加上 strsrch(message, "arning:") == -1 判断。 2. log_file()adm/simul_efun/file.lpc)完全没有 assure_file() 保护(AGENTS.md §7.11-class 的又一确认实例):注册/登录本身只 写 log_file("USAGE", ...)(无子目录,本来就存在),不受影响, 但 nosave/CRASHES/nosave/addobj 等管理指令路径会在首次使用 时未捕获抛出。已补上 assure_file(LOG_DIR + file);(含前向声 明)。

管理员账号:核实此前的"已确认生效"记录

上一轮(2026-08-05)WASM 修复摘要明确写着"管理员账号以 id wuyou 注册,游戏内'目前权限:(admin)'显示确认生效"——git log 确认这个 存档从未被提交过,本地 work/ 目录里也不存在。按本轮 hy 学到的 教训("验证过"的记录如果只是凭存档文件内容或旧会话记忆,不能直接 信任),重新用真实注册流程创建了 wuyou/Mud@2026 账号:score 确认"目前权限:(admin)",update /adm/simul_efun/file(就是本轮改 过的文件)确认可正常重新编译。这次是真正的live 验证(不是凭 旧记录),且这份档案的管理员机制本身没有 hy/fqyy2 那种 "nosave + 硬编码单一 id 被真实玩家占用"的问题——wuyou 本身就是硬 编码授权的那个 id,直接注册就能拿到权限,机制上更简单也更可靠,此 次核实结果是正面的(此前的记录内容是真的,只是存档从未被提交,现 已一并提交存档)。

Proactive checks(无需改动)

实测过程

登录时有一个 GB/Big5 选码提示(选 g)。注册 wuyou/无忧 (英文 id → 确认建立 → 中文名,直接设定不需要二次确认 → 密码 → 确认密码 → 天赋 0 随机 → 接受 → 邮箱 → 性别)完整进入游戏,屏幕上 出现"有人使用过权限命令,立即查看 /log/nosave/promotion"(securd. lpc 的晋升日志写入,本轮修复的 log_file() 让这条路径正常工作, 未见崩溃)。adm/log/debug.log 时间戳全程未变化(Jul 30,早于本 次会话),确认无新增未捕获运行期错误。驱动最终按精确 PID kill, ps -p 确认已退出。

已清理

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

ROOM 基类冗余 replace_program(ROOM); 自崩溃地雷(详见 AGENTS.md §7.100):2867 个房间文件的 create() 里紧跟 inherit ROOM; 之后 都有这一行多余调用,永久设下"待替换"标记,第一次对该房间对象绑 定闭包就会崩溃。自带建房工具有 2 处模板(clone/misc/roommaker.lpc 简单字符串拼接写法、adm/roommaker.lpc 三处独立拼接的"Lonely"变 体)。手动修复了一处不规则格式:d/happy/workroom.lpc 的冗余调用 和一个空的尾随 // 注释共享同一行(replace_program(ROOM); //), 严格的独立成行脚本正确跳过了它。累计 2870 处 live 调用删除,和 survey 记录的数字精确吻合,修复后 0 处遗留。

验证:build-debug 驱动真实冷启动,端口 40174 正常监听, debug.log 全程干净。用这份档案自己播种的管理员账号 wuyou/Mud@2026(不是 fluffos)登录正常(落地海洋之初, look/quit),全程无新增 "cannot replace"/"cannot bind" 日志行。

§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): 5 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,round three,shop + 拜师)

新角度:扬州醉仙楼购物 + 丐帮左全拜师。2026-08-05 / 2026-08-13 两轮 都写明没测商店和拜师。这是海洋II/ES2 金庸血统,端口 40174。第一输入 是 BIG5 选单,发 g,再英文 id。管理员是硬编码的 wuyou/Mud@2026 (无忧),不是 fluffos。登录对象没有 wizpwd(player) 退出后 20 秒内不能再 login;巫师只警告。横幅里有北京时间心跳,mudclient 固定 idle 不受影响。

实测过程

管理员 wuyou / Mud@2026(权限 (admin),落地 /d/welcome/welcome)。 身上没钱。第一次 clone /clone/money/goldcmds/wiz/clone.lpc 第 58 行 write_file("/log/cmds/clone", …) 未捕获 崩溃(/log/cmds 目录不存在)。修好并 update 后 clone 成功。

goto /d/city/zuixianlou(醉仙楼,店小二 d/city/npc/xiaoer2.lpcF_DEALER)。list 烤鸡腿八十文铜板 / 牛皮酒袋一两白银 / 包子五十文 铜板。buy jitui 成功(「你从店小二那里买下了一根烤鸡腿」)。一两黄 金换成九十九两白银 + 二十文铜钱。feature/dealer.lpc 里丐帮拒买那段 是注释掉的;本轮先拜师后买,店小二没有拒。

goto /d/gaibang/inhole,左全源码是 kungfu/class/gaibang/zuo-qu.lpc (文件名少一个 n),apprentice zuo 一次成功:恭喜成为丐帮第二十代 弟子。score 称谓「丐帮第二十代弟子」、师傅左全。cmds/usr/save.lpc 真正写盘。save 后杀驱动冷启动再登录,称谓/师傅/九十九两白银/二十文铜 钱都在。烤鸡腿未进 autoload。左全只收男性。

发现并修复的 PROGRAMMING bug

1. clone 写日志不建目录就崩溃cmds/wiz/clone.lpc):裸 write_file("/log/cmds/clone", str),新鲜 work/log/ 没有 cmds/ 子目录时驱动抛「Wrong permissions for opening file … No such file or directory」,整条指令中断,金子也不会进背包。补上 assure_file("/log/cmds/clone")(与 2026-08-13 已修的 log_file() §7.11 同形)。现场 update 后再 clone 验证通过。档案是 CRLF,按 字节改的。

2. 华山收徒计数拼写(与 hy/hy2002 同形,静态对照修,本轮拜 师走的是左全不是华山): kungfu/class/huashan/{yue-buqun,yue-wife,feng-buping}.lpckungfu/class/yue-buqun.lpcd/biwu/{feng-buping,yue-buqun}.lpcquest/menpaijob/huashan/yue-buqun.lpcadd("apprentice_availavble", -1) 改成 apprentice_available