战斗包子
Deploy传奇athome

Deploy传奇athome

Background

七八年前的时候给家父在家里部署过mir2,让他找回找回年轻的感觉,最近他又想玩了

GPT的调研报告

两条主轴: 一条是以 GOM、翎风、BLUE、GEE 等中文商用/半商用引擎为核心的“整合包—登录器—脚本—版本库”路线,强调尽快开玩、低门槛改表改脚本;

  • 翎风作为默认起点,把 BLUE 作为“你非常在意假人/假人 AI NPC 时”的备选,把 Crystal 作为后续进入代码层的第二阶段,而不是一开始就直接上 Crystal。原因很简单:翎风官网到 2026 年 5 月仍在发包,且直接提供 1.80基础服务端 MirServer,同时官方协议明确“个人学习研究及单机娱乐”场景;BLUE 则在公开论坛层面提供了更强的教程面和更明确的假人相关公开痕迹;Crystal 虽然是当前最强的开源扩展底座之一,但其构建、数据库、资源链路明显更偏开发者工作流。

另一条是以 Crystal、mir2x、OpenMir2、mir-eternal、Zircon 为代表的开源怀旧重建路线,强调源代码可控、长期可扩展、适合程序员深改。这两条路线目前都仍在更新,只是目标用户不同:前者更适合“今晚就要玩起来”,后者更适合“以后要自己改系统、改协议、改工具链”。

  • 如果目标是长期可维护、可读代码、可版本管理,Crystal 和 OpenMir2 仍是最值得优先看的开源方案;如果目标是研究协议、现代化重构或跨平台实验,mir2x 与 Unity/C++ 重建路线更有技术价值。AI 挂机与自动化在技术上完全可行,
路线 现状判断 代表项目/引擎 典型用户规模与场景 主要技术栈 优点 短板与风险 可信度与证据
传统复古单机 仍是中文圈主流入口 翎风、GOM、BLUE、GEE、V8/HERO 遗留生态 个人怀旧、局域网、两三人小圈子;B 站相关教程常见 1k–1.5 万播放 Windows、本地 DB/网关/登录/游戏进程、登录器、微端、完整客户端 上手快、资料多、改表改脚本门槛低 黑盒多、版本包来源复杂、资产版权风险高 高 / 中
单机化客户端 技术存在,但多数仍是“本地化网游” localhost 配置、微端、本地登录器、本地服务端 演示、调试、离线体验、局域网测试 客户端连 127.0.0.1,本地 DB/Login/Gate/Game 服务 体验贴近官服/私服,迁移成本低 很少是真正纯离线;客户端分发与素材复制风险高
开源服务端 当前最稳健的“可维护路线” Crystal、OpenMir2、mir2x 开发者、小型社区服、协议研究与二开 C#/.NET、C++23/SDL/Lua/FLTK、Git、编译链、数据库 代码可读、便于协作与版本管理 编译与资产链更复杂;开源代码不等于拥有官方资产权利
AI 与自动化 技术可行,但公网服风险最高 OpenCV / YOLO / OCR / LLM + 截屏 / 输入注入 本地刷图试验、辅助脚本、研究型 PoC MSS / 截屏、模板匹配、目标检测、OCR、PyAutoGUI / SendInput 降低重复劳动,可做 PoC UI 脆弱、延迟与误识别明显;易触发行为分析与反作弊 高 / 中
怀旧重建 仍活跃但明显小众 Unity 重建、mir2x、各类 alt versions 协议 / 渲染研究、跨平台实验、学术 / 工程练手 C++ / Unity / C#、自定义工具链、重建客户端 / 协议 / 资源格式 技术价值最高、可摆脱传统黑盒引擎 工时大、反馈慢;若混用原始资产仍有授权风险
flowchart LR
    A[传统复古单机] --> B[本地服务端栈]
    B --> C[DB / Login / Gate / Game]
    A --> D[完整客户端与补丁]
    E[单机化客户端] --> B
    E --> F[127.0.0.1 回环]
    G[开源服务端] --> H[Crystal / OpenMir2 / mir2x]
    H --> B

    O[怀旧重建] --> P[协议/资源/渲染重写]
    O --> Q[Unity / C++ / C#]
项目名 类型 语言/引擎 仓库/官网名称 最近可见活动 Star / 下载 / 热度 主要贡献者 / 团队 证据
GOM 引擎 商业 GameOfMir GameOfMir 官网 2026-05-18 有“最新免费引擎(922京版)更新” 官方未公开 Star;官网仍持续更新 GameOfMir 团队 26
翎风引擎 商业 LFM2 翎风官网 下载页显示 翎风引擎 [20260508],并持续维护更新日志 官方未公开 Star;中文资料与迁移教程仍多 翎风团队 27
BLUE 引擎 商业 BlueM2 BLUE 官方论坛 2026-05-19 仍有签到与技术答疑;2026-03-20 仍发布 SQL 搭建教程 2026-05-19 签到帖有数千级回复;论坛日更明显 BLUE 官方论坛 / 版主群体 28
Crystal 开源 C# / .NET Suprcode/Crystal 2026-05-06 提交 1.6k★ / 848 forks Suprcode、JevLOMCN、daneo1989 3
mir2x 开源 C++23 / SDL / Lua / FLTK etorth/mir2x 2026-04-25 提交 494★ / 214 forks etorth 29
OpenMir2 开源 C# mirbeta/OpenMir2 2024-02-14 最后一批高密度提交可见 344★ / 148 forks mirbeta 30
Crystal.Database 开源资料库 数据库 / 资源配套 Suprcode/Crystal.Database 2024-08-30 提交 154★ / 150 forks JevLOMCN 31
GEE 引擎 商业 GeeM2 GEE 官网 / GEE 助手生态 官方站点仍可见;外围更新列表到 2024-07-10 官方未公开 Star;聚合站转载有 3.31K 浏览 GEE 团队 32
V8M2 社区 遗留商业 / 社区 V8M2 v8m2.com / LSP 社区 社区站点可见 2025 年帖子;B 站相关教程约 1.5 万播放 玩法资料仍活跃,但更多作为迁移目标存在 社区维护者 33
HERO 引擎 遗留商业 HeroM2 HERO 官网导览 / 教程生态 2024 年公开资料显示官网重新可见、支持三端与 Lua;教程仍在更新 2024 教程约 2.8k 阅读、相关文章约 3.98K 浏览 HERO 团队 34

需求

  1. 老头想立刻玩
  2. 老头要游戏里有假人

落地

客户端和服务端

既然着急玩,自然先搞最简单的方式了

方案 数据库与免 SQL 是否含登录器 Windows / 安卓 公开体积 常见问题 可信来源
翎风官方引擎 + 官方 1.80 基础服务端 通常按 SQLite .db 路线使用,适合免外置数据库;公开页没有逐字写默认库型,但官方页直接提供 SQLite 编辑器,社区实操也围绕该路线展开 通常有,社区实操里可直接打开登录器配置器 Win:是;安卓:未明确 引擎 201.59M + 基础服务端 54.8M;另需官方客户端下载器 123.7M 登录器配置、补丁路径、客户端版本对应问题较常见 官方下载页、社区教程与实操帖

https://www.lfm2.com/?utm_source=chatgpt.com 下载: 引擎 基础服务端 登录器 SQLite工具

https://mir2.sdo.com/?utm_source=chatgpt.com

假人

公开实现/模块 是否存在 代表证据 实现方式判断 适配引擎 扩展性与二开难度 典型场景 可信度
BLUE 官方假人/辅机/真人假人数据 存在 官方帖提到“真人数据、假人数据无缝转换”,更新日志出现 DummyOptionMask;7bbz 教程列出 OFFLINEPLAYEX、GuardPos、FakePlayer。3 典型为脚本命令 + 定时器 + 角色数据复用 + 行为开关 BLUE 扩展性高于纯整合包,二开中等;需要熟悉命令体系和数据库 造人气、攻沙、离线打怪、陪练、交易市场氛围
翎风 Dummy 假人系统 存在 2024/2025 两篇中文教程公开展示 DummyNameList.txt、LOADDUMMYCONFIGFILE、攻击模式切换、读取配置文件。17 明显属于“配置文件 + QManage 脚本 + 行为参数”模式 翎风 扩展性较好,二开中等偏低;适合脚本党 单机陪玩、练级、攻城热闹感、自动捡物 中高
翎风假人捡物/穿戴扩展 存在 公开教程展示 SetDummyPickItemFile、SetDummyPickItem 等命令。18 规则列表 + 开关控制 + 指定对象定制 翎风 很适合局部扩展,难度低于重写 AI 提升假人“像真人”的拾取与养成行为
巅峰假人第二季等打包式假人系统 存在,但多为整合包 / 销售页证据 销售页写有默认 400 假人、内置 1000 名单、组队交易、后台控制;B 站与 NGA 有用户讨论“巅峰 2 代假人”。19 更像完整脚本产品而非公开仓库;核心逻辑未开源 常见于 V8M2 / GOM / 复古整合包 能用但黑盒;二开难度取决于是否带明文脚本 想快速得到“城里很热闹”的本地怀旧体验 低至中
GOM 假人相关系统 存在,但近三年原始公开证据弱于 BLUE / 翎风 旧有 GOM 假人脚本与 64GM 推荐位存在,但近三年更常见的是版本库“带假人”标签,而非官方公开文档。20 多半仍是脚本 / 控制后台 / 配置文件体系 GOM 取决于你拿到的是明文脚本还是黑盒包 本地热闹感、自动回收、组队打怪 中低

2026-06-01 翎风本地假人实测

这套 D:\MirServer 的翎风服务端已经自带 Dummy 假人系统,不需要额外下载假人插件。核心文件如下:

1
2
3
4
5
6
7
8
9
D:\MirServer\Mir200\Envir\DummyNameList.txt
D:\MirServer\Mir200\Envir\DummyHeroNameList.txt
D:\MirServer\Mir200\Envir\DummyConfig\TestWarrior.txt
D:\MirServer\Mir200\Envir\MapQuest_Def\QManage.txt
D:\MirServer\Mir200\Envir\Robot.txt
D:\MirServer\Mir200\Envir\Robot_def\AutoRunRobot.txt
D:\MirServer\Mir200\Envir\Robot_def\RobotManage.txt
D:\MirServer\Mir200\Envir\UserCmd.txt
D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt

本次测试用 DummyNameList.txt 放了 3 个测试假人:

1
2
3
Dummy001
Dummy002
Dummy003

并新建了一个最小配置文件:

1
D:\MirServer\Mir200\Envir\DummyConfig\TestWarrior.txt

登录触发放在 QManage.txt[@Login] 最前面:

1
2
3
4
5
6
7
8
9
[@Login]
#IF
ISDUMMY
#ACT
SETDUMMYCONFIGFILENAME ..\DummyConfig\TestWarrior.txt
LOADDUMMYCONFIGFILE
ChangeAttatckMode 1
DUMMYSTART
BREAK

DUMMYSTART 会让假人开始自动打怪和移动,所以假人不一定会停在登录坐标。测试时用的是:

1
DUMMYLOGON 3 330 330 3

其中 3 是盟重省,330 330 是初始坐标,最后的 3 是登录 3 个假人。实测上线后服务器在线人数会多 3 个,但假人可能已经走开。

为了方便手动测试,额外在 UserCmd.txt 加了:

1
假人    6

并在 QFunction-0.txt 加了:

1
2
3
4
5
6
[@UserCmd6]
#IF
#ACT
DUMMYLOGON 3 330 330 3
SENDMSG 7 已请求登录3个测试假人
BREAK

进游戏后可以用管理员角色执行:

1
2
3
4
5
@重读功能
@重读登陆
@重读机器人配置
@重读机器人脚本
@假人

如果 @假人 生效,会提示“已请求登录3个测试假人”。如果重读没有生效,重启一次 M2Server 后再执行 @假人

定位或管理假人可以用现有 GM 命令:

1
2
3
4
@查看 Dummy001
@跟踪 Dummy001
@传唤 Dummy001
@T Dummy001

含义分别是查看、飞到角色身边、把角色拉到身边、踢下线。

注意:测试时曾在 AutoRunRobot.txt 加过自动触发行:

1
#AutoRun NPC SEC 15 @启动测试假人

对应 RobotManage.txt

1
2
3
4
5
6
[@启动测试假人]
#IF
#ACT
DUMMYLOGON 3 330 330 3
SENDMSG 0 Test dummy login requested.
BREAK

这会每 15 秒刷一次全服消息 Test dummy login requested.。正式使用时建议删除或注释 AutoRunRobot.txt 里的这行,只保留 @假人 手动命令,避免反复刷屏和重复请求登录。

方案2

GEE 引擎 + Mir2-GeeM2 GitHub 配置仓,更适合“我要 1.76 怀旧味道,而且希望我的底版不是纯黑箱”的用户。Mir2-GeeM2 仓库明确写了它是基于官方 2005 年泄露的 1.76 服务端制作的配置文件,遵照官方/韩服思路扩展,适合单机或小圈子,而且 README 直接给了单机测试方法。

按公开资料可执行的步骤如下:

从 GEE 官方页获取最新引擎包。当前搜索可见官方页给出的版本是 GEE v4.8.2(稳定版);同时,公开帮助文档示例又持续引用 geem2.com,所以实践中建议把官方搜索结果页 + 官方帮助文档页一起留档,避免只认一个域名。

下载 Mir2-GeeM2 GitHub 仓库。仓库作者给出的单机测试方法非常明确:下载任意 GeeM2/V8M2/翎风 引擎服务端;替换 Mir200 文件夹为仓库目录;把 GEEM2.db 复制到 Mud2/DB 并覆盖;在引擎控制台的配置向导重新保存并生成配置文件;启动服务器;下载官方客户端;把登录器放进客户端并覆盖 map 文件夹;然后注册角色开玩。

如果你更想减少 GEE 官方站访问波动带来的干扰,也可以用翎风引擎承载这套 Mir2-GeeM2 配置,因为该仓库说明本来就把 GeeM2/V8M2/翎风都列为可选承载引擎。这也是为什么这条路线在“怀旧 + 可改造”上会比纯闭源一键端更强。

GEE 路线的首次备份建议更保守:在任何转换数据库、升级 64 位引擎、重做登录器前,先存一份“全量 MirServer 压缩包 + 客户端补丁包 + 当前 GEEM2.db 哈希记录”。GEE 帮助文档和社区资料都表明,新版引擎经常伴随 UI、数据库驱动和登录器配置器一起变,混搭极易出错。

一个很全的MIR工具网站

https://www.mircoding.com/download/diban

############### 以下为codex帮忙记录的过程 ###############

2026-05-31 本地部署排障记录

这次把服务端彻底重新部署到 D:\MirServer,客户端使用 D:\work_console\MirDev\传奇1.80客户端,确认服务端和客户端都走 1.80,不再混用 1.76 或 17 周年客户端。

今天踩到的坑

  1. 不要盲目把所有绝对路径改成相对路径。翎风这一套老工具链里,DBServer、LoginSrv、GameCenter、登录器配置器等组件对工作目录和绝对路径很敏感。路径要按文档和实际配置项逐个确认,不能批量替换。

  2. ExtIPaddr 不是摆设。D:\MirServer\Config.ini 里的外网 IP 会被 GameCenter 用来生成网关信息,例如 DBServer\!serverinfo.txt。本机测试时如果它生成成 127.0.0.1 192.168.0.1 7200,客户端选完角色后就可能跳去连 192.168.0.1:7200,表现就是能登录、能选人,但进游戏黑屏。单机本机测试应确保对客户端下发的是 127.0.0.1

  3. 登录器配置里的客户端文件名要和真实文件一致。当前登录器配置使用的是 Client.dat,所以客户端目录里必须有 Client.dat。这次用 Mir.exe 复制出 Client.dat 后,登录器才能正常启动到后续流程。

  4. mir.datClient.dat、登录器 exe 和服务端版本要成套。只要其中一个是旧包、空文件、或者来自另一个客户端,就会出现“登录器找不到东西”“选人后黑屏”“点提交无反应”等看起来很玄学的问题。

  5. 账号注册、角色创建、进入游戏是三段链路,不是一个动作。账号在 Account.DB,角色在 ApexMir.DB,真正出生点、血蓝、等级等数据通常要等 M2 成功初始化并保存后才完整。只看注册界面成功不代表角色已经能进游戏。

  6. 新角色默认无敌的根因是 D:\MirServer\Mir200\!setup.txt 里的 StartPermission=10Command.ini@无敌@管理@观察 等 GM 指令权限也是 10,所以新角色一出生就是 GM 权限。登录脚本里还有 ISADMIN 分支,因此新角色会被当管理员处理。把 StartPermission 改成 0 后,新建角色才是普通玩家。

  7. AdminList.txt 仍然会让指定角色拥有管理员行为。以后如果某个角色异常无敌、能用 GM 指令,要同时查 StartPermissionCommand.ini 的权限配置、以及 Mir200\Envir\AdminList.txt

以后排障的闭环顺序

  1. 先看进程和端口:DBServerLoginSrvLoginGateSelGateRunGateM2ServerGameCenter 是否都来自同一个 D:\MirServer,端口 7000、7100、7200、5000、5100/6000、5500/5600 是否正常。

  2. 再看登录器配置:客户端目录、Client.datmir.dat、登录器 exe 是否在同一个 1.80 客户端目录下。

  3. 再看服务端下发地址:检查 Config.iniDBServer\!serverinfo.txt,本机测试不要让客户端跳到不可达的局域网或外网 IP。

  4. 最后查数据库和脚本:账号查 DBServer\FDB\Account.DB,角色查 DBServer\FDB\ApexMir.DB,出生和权限查 Mir200\!setup.txtMir200\Command.iniMir200\Envir\AdminList.txtMir200\Envir\QuestDiary\游戏登陆\登陆脚本.txt

这次留下的经验

老传奇服务端的问题不能只看一个界面现象。点登录没反应、选人后黑屏、注册成功但角色异常、挨打不掉血,背后分别可能是登录器文件、网关地址、M2 初始化、GM 权限脚本的问题。以后每次改配置都要确认“配置文件 -> 生成文件 -> 进程日志/端口 -> 客户端表现 -> 数据库结果”这一整条链路,不能只改一个 ini 就认为生效。

当前 Command.ini 指令权限速查

来源:D:\MirServer\Mir200\Command.ini。下表只列出在 [Permission] 中明确配置了权限的指令,按权限从低到高排序。当前已经把 StartPermission 改为 0,所以新建普通角色默认只能使用权限 0 的指令。

权限 配置项 游戏内命令
0 AddFriend @AddFriend
0 AllowMsg @拒绝私聊
0 BanNationChat @允许国家聊天
0 Date @查看时间
0 DelFriend @DelFriend
0 Friend @Friend
0 LetNation @加入国家
0 LockLogin @锁定
0 PrvMsg @拒绝
0 SendTopChatBoardMsg @传1
0 SETCOLORSAY @设置聊天字体颜色
0 表情 @表情
0 留言 @留言
3 Map @Map
3 Who @Who
5 Total @Total
6 GMRedMsgCmd @!
6 MoveMax 未在 [Command] 配置别名
6 PositionMoveMax 未在 [Command] 配置别名
10 AddGameGold 未在 [Command] 配置别名
10 AddGold @加钱
10 AddGuild @创建行会
10 AddToItemEvent @AddToItemEvent
10 AddToItemEventAspieces @AddToItemEventAsPieces
10 AdjuestExp @调整经验
10 AdjuestTestLevel @AdjustTestLevel
10 AdjuestTLevel @调级
10 Announcement @Announcement
10 Attack @Attack
10 BackStep @弹开
10 Ball @Ball
10 BonusPoint @调整属性点
10 ChangeDearName @DearName
10 ChangeGameDiamond @调整金刚石
10 ChangeGameGird @调整灵符
10 ChangeGameGlory @调整荣誉值
10 ChangeGate @整体切换连接
10 ChangeGender @改变性别
10 ChangeItemName @ChangeItemName
10 ChangeJob @改变职业
10 ChangeLuck @ChangeLuck
10 ChangeMasterName @MasterName
10 ChangeNGLevel @调整内功等级
10 ChangeSabukLord @改变城主
10 ChangeUserFull @CHGUSERFULL
10 ChangeWeaponDura @ChangeWeaponDura
10 ChangeZenFastStep @CHGZENFASTSTEP
10 ClearBag @清理垃圾
10 ClearMission @清除标志
10 ClearMon @ClearMon
10 ClearPlacingItem @ClearPlacingItem
10 CloseUserShop @CloseUserShop
10 ColorSay @允许彩色字体聊天
10 ContestPoint @ContestPoint
10 CreditPoint @调整声望
10 DelBonuPoint @删除属性点
10 DelDenyAccountLogon @DelDenyAccountLogon
10 DelDenyCharNameLogon @DelDenyCharNameLogon
10 DelDenyIPLocalLogon @DelDenyIPLocalLogon
10 DelDenyIPLogon @DelDenyIPLogon
10 DeleteAllItemEvent @DeleteAllItemEvent
10 DeleteItem @删除物品
10 DeleteSkill @删除技能
10 DelGameGold @DelGamePoint
10 DelGold @减钱
10 DelGuild @删除行会
10 DelMachineIDLogon @DelMachineIDLogon
10 DelNpc @DelNpc
10 DelSellPlayer @DelSellPlayer
10 DelUserShop @DelUserShop
10 DenyAccountLogon @DenyAccountLogon
10 DenyCharNameLogon @DenyCharNameLogon
10 DenyIPaddrLogon @DenyIPLogon
10 DenyIPLocalLogon @DenyIPLocalLogon
10 DenyMachineIDLogon @DenyMachineIDLogon
10 DisableFilter @禁用脏话
10 DisableSendMsg @DisableSendMsg
10 DisableSendMsgList @DisableSendMsgList
10 EnableSendMsg @EnableSendMsg
10 EndContest @EndContest
10 FireBurn @FireBurn
10 Flag @showflag
10 ForcedWallConQuestWar @攻城
10 FreePenalty @清除PK
10 GameGold @调整元宝
10 GameGoldEx @GameGoldEx
10 GameMaster @管理
10 GamePoint @调整泡点
10 GameWen @GameWen
10 GiveMine @GiveMine
10 Gsa @gsa
10 Hair @发型
10 HumanCount @附近人数
10 HumanLocal @IP
10 Hunger @Hunger
10 IncPkPoint @增加PK
10 Info @查看
10 ItemEventList @ItemEventList
10 ItemEventTerm @ItemEventTerm
10 Kick @T
10 Kill @干掉
10 Level @Level
10 Level0 @Level0
10 LotteryTicket @LotteryTicket
10 LoyaltyPoint @调整忠诚度
10 LuckPoint @LuckyPoint
10 MachineID @机器码
10 MakeMax 未在 [Command] 配置别名
10 MakeMin 未在 [Command] 配置别名
10 MapInfo @MapInfo
10 MapMove @移动地图
10 Mission @Mission
10 Mob @Mob
10 MobCount @查看怪物
10 MobLevel @附近玩家
10 MobNpc @MobNpc
10 MobPlace @MobPlace
10 MoveMin 未在 [Command] 配置别名
10 NameColor @NameColor
10 NGLevel @NGLevel
10 NpcScript @NpcScript
10 ObServer @观察
10 OpDeleteSkill @OPDeleteSkill
10 OpenUserShop @OpenUserShop
10 OpTraining @增加技能
10 OXQuizRoom @OXQuizRoom
10 PkPoint @查看PK
10 PositionMoveMin 未在 [Command] 配置别名
10 ReAlive @复活
10 Recall @传唤
10 RecallMob @BB
10 ReConnection @切换连接
10 RefineWeapon @刀
10 ReGoto @跟踪
10 ReleaseShutup @ReleaseShutup
10 ReloadAbuse @重读脏话
10 ReloadAdmin @重读管理
10 ReloadChatbox @ReloadChatbox
10 ReloadDiary @ReloadDiary
10 ReloadFunction @ReloadFunction
10 ReloadGuild @ReloadGuild
10 ReloadGuildAll @ReloadGuildAll
10 ReloadItemDB @重读物品数据库
10 ReloadLineNotice @重读公告
10 ReloadMagicDB @重读技能数据库
10 ReloadManage @重读登陆
10 ReloadMonitems @重读爆率
10 ReloadMonsterDB @重读怪物数据库
10 ReloadNpc @重读商人
10 ReloadRobot @重读机器人脚本
10 ReloadRobotManage @重读机器人配置
10 RemoteMsg @RemoteMsg
10 ReNewLevel @转生
10 RestBonuPoint @还原属性点
10 SabukWallGold @SabukWallGold
10 SbkDoor @SbkDoor
10 SetFlag @setflag
10 SetMapMode @SetMapMode
10 SetOpen @setopen
10 SetPermission @给予权限
10 SetUnit @setunit
10 SetUserShopName @SetUserShopName
10 ShowDenyAccountLogon @ShowDenyAccountLogon
10 ShowDenyCharNameLogon @ShowDenyCharNameLogon
10 ShowDenyIPLocalLogon @ShowDenyIPLocalLogon
10 ShowDenyIPLogon @ShowDenyIPLogon
10 ShowEffect @ShowEffect
10 ShoweMapMode @ShowMapMode
10 ShowMachineIDLogon @ShowMachineIDLogon
10 ShowMapMode @ShowMapMode
10 ShowOpen @showopen
10 ShowUnit @showunit
10 Shutup @Shutup
10 ShutupList @ShutupList
10 SpiritStart @祈祷生效
10 SpiritStop @停止叛变
10 StartContest @StartContest
10 StartIngGiftNO @StartingGiftNo
10 StartItemEvent @StartItemEvent
10 StartQuest @开始提问
10 StorageClearPassword @清除玩家仓库密码
10 SuperMake @Supermake
10 SuperMan @无敌
10 SuperTing @移动范围
10 TakeUserItem @TakeUserItem
10 TestGa @Testga
10 TestGoldChange @Test_GOLD_Change
10 TestStatus @TestStatus
10 Ting @Ting
10 Training @技能等级
10 Transparecy @Transparency
10 UnlockSellPlayer @UnlockSellPlayer
10 ViewWhisper @私聊

另外,[Command] 中还有一些只配置了命令别名、没有在 [Permission] 中显式声明权限的项。排障时不要默认它们就是 GM 指令,需要结合引擎默认规则或实测确认。

未显式权限配置项 游戏内命令
AddGamePoint @AddGamePoint
AllowDearRecall @允许夫妻传送
AllowFarMsg @拒绝千里传音
AllowGroupCall @允许天地合一
AllowGuildReCall @允许行会合一
AllowMasterRecall @允许师徒传送
AllSysMsg @传
AttackMode @AttackMode
Auth @联盟
AuthAlly @允许联盟
AuthCancel @取消联盟
BanGuildChat @允许行会聊天
ChangeMasterrName @MasterName
CHGUSERFULL @CHGUSERFULL
CHGZENFASTSTEP @CHGZENFASTSTEP
CryChat @CryChat
Dear @查询伴侣
DearRecall @夫妻传送
DisableHorseInvite @禁止邀请上马
EndGuild @退出门派
GroupCall @天地合一
GuildReCall @行会合一
HeroFealty @改变忠诚
HeroLevel @HeroLevel
LetChallenge @允许挑战
LetGuild @允许加入门派
LetShout @拒绝组队聊天
LetTrade @允许交易
Make @make
Master @查询师徒
MasterRecall @师徒传送
MemberFunc @MemberFunc
MemberFuncEx @MemberFuncEx
Move @gmov
OpenSellPlayer @角色交易
PasswordLock @PasswordLock
PasswordUnLock @开锁
PositionMove @gmmove
PublicChat @PublicChat
RELOADMINMAP @重读小地图
Rest @rest
RestHero @RestHero
Searching @探测
SHOWFLAG @showflag
SignMove @SignMove
StorageChgPassword @修改密码
StorageLock @锁定仓库
StorageSetPassword @设置密码
StorageUnLock @仓库开锁
StorageUserClearPassword @清除密码
TakeOffHorse @下马
TakeOnHorse @骑马
TESTFIRE @TestFire
UserMove @Move
ViewDiary @Diary
招募队员 @招募队员

NPC 新建与调整记录

二福 NPC 对话截图

这次新增了一个名为 二福 的 NPC,用来验证服务端自定义链路,并作为后续本地测试助手。NPC 声明和脚本分离:声明负责让 NPC 出现在地图上,脚本负责点击后的对话与功能。

文件 作用 本次改动
Mir200\Envir\MerChant.txt 声明可点击 NPC 的脚本路径、地图、坐标、显示名、外观 新增 测试/二福 0 333 270 二福 0 1 0
Mir200\Envir\Market_Def\测试\二福-0.txt 二福 在地图 0 上的对话脚本 增加状态查看、回比奇、礼包、测试传送
Mir200\Envir\QuestDiary\数据文件\二福礼包.TXT 记录已领取礼包的角色名 用于保证每个角色只能领一次礼包

MerChant.txt 的基本格式可以按当前服务端理解为:

1
脚本路径  地图号  X  Y  显示名称  方向/状态  外观编号  城堡/归属标记

脚本文件命名规则是:脚本路径 + "-" + 地图号 + ".txt"。例如 测试/二福 放在地图 0,对应脚本就是:

1
Mir200\Envir\Market_Def\测试\二福-0.txt

当前 二福 支持四个功能:

功能 脚本入口 说明
查看状态 @status 显示角色名、等级、经验、PK 值、声望、登录时间、在线时长、在线人数
回到比奇 @home 执行 MAPMOVE 0 333 270 4,回到 NPC 附近
领取新手礼包 @gift / @getgift 背包至少 5 格;给金币、红蓝药、木剑、蜡烛;用名单文件限制每角色一次
测试传送 @teleport 提供比奇、边界村、银杏山谷、盟重、白日门几个测试传送点

调整 NPC 后,最稳的生效方式是重启 M2。调试时也可以在游戏内用 GM 指令:

1
@重读商人

这条指令对应 Command.ini 中的 ReloadNpc=重读商人,权限是 10。如果只是改脚本内容,通常重读商人即可;如果涉及地图、坐标、NPC 声明行为异常,重启 M2 更稳。

这次的 Git 提交记录:

1
2
3ee98e6 feat: add Efu test NPC
0852657 feat: expand Efu helper NPC

二福之家地图修改记录

地图部分先到这里。本轮在原有“二福”测试 NPC 的基础上,补了一张独立的自定义测试地图 ERFU_HOME,用来验证地图注册、NPC 挂载、跨地图传送、即时刷怪和清怪脚本这些基础链路。

文件 作用 本次改动
Mir200\Map\ERFU_HOME.map 自定义地图文件 新增“二福之家”测试地图
Mir200\Envir\MapInfo.txt 地图注册表 新增 [ERFU_HOME 二福之家] DAY FIGHT,让服务端识别并加载该地图
Mir200\Envir\MerChant.txt NPC 声明 ERFU_HOME10,11 增加 NPC“二福”,脚本路径仍为 测试/二福
Mir200\Envir\Market_Def\测试\二福-0.txt 比奇地图上的二福脚本 增加“进入二福之家”入口,执行 MAPMOVE ERFU_HOME 10 13 1
Mir200\Envir\Market_Def\测试\二福-ERFU_HOME.txt 二福之家内的二福脚本 新增地图内菜单、讲笑话、召唤鸡、开启稻草人训练、清理怪物和返回主城传送

MapInfo.txt 中的地图声明格式这次可以先按下面理解:

1
[地图编号 地图显示名] 地图参数

所以:

1
[ERFU_HOME 二福之家] DAY FIGHT

表示新增一个编号为 ERFU_HOME、显示名为“二福之家”的地图,并打开白天与可战斗参数。地图文件名需要和地图编号对应,也就是:

1
Mir200\Map\ERFU_HOME.map

这里最开始踩过一个坑:只把地图放进服务端的 Mir200\Map 还不够,客户端也必须有同名地图文件。否则服务端已经能执行 MAPMOVE ERFU_HOME,但客户端没有对应地图资源,进图时就会表现为地图加载异常、黑屏或看不到正确地形。

本地测试时需要同时确认两边:

1
2
服务端:D:\MirServer\Mir200\Map\ERFU_HOME.map
客户端:客户端目录\Map\ERFU_HOME.map

如果修改了地图文件本身,也要同步更新客户端 Map 目录里的副本;只改 MapInfo.txt、NPC 脚本或刷怪逻辑时,通常不需要重新复制地图文件。

NPC 脚本命名仍然沿用之前总结的规则:脚本路径 + "-" + 地图编号 + ".txt"。因此同一个 测试/二福 NPC 放到 ERFU_HOME 后,对应脚本就是:

1
Mir200\Envir\Market_Def\测试\二福-ERFU_HOME.txt

当前“二福之家”内的二福支持这些测试功能:

功能 脚本入口 说明
讲个笑话 @joke 验证普通 NPC 对话跳转
召唤几只鸡 @spawn_chicken 执行 MONGENEX ERFU_HOME 10 15 鸡 4 5,验证即时刷怪
开启稻草人小活动 @event_straw CLEARMAPMON ERFU_HOME 清图,再刷 8 个稻草人
清理本地图怪物 @clear_mobs 执行 CLEARMAPMON ERFU_HOME
传送菜单 @teleport 可回比奇、盟重、白日门

原比奇二福 NPC 增加了入口:

1
2
3
4
5
6
7
<进入二福之家/@tp_efu_home>\

[@tp_efu_home]
#ACT
MAPMOVE ERFU_HOME 10 13 1
SENDMSG 6 二福:欢迎来到二福之家。
BREAK

这张地图现在更像一个可控的小实验室:玩家从比奇二福进入,在地图里直接验证刷怪、清怪、传送和 NPC 脚本跳转。后续如果继续扩展,可以在这里加固定刷怪点、活动奖励、触发器或完整任务链。

这次地图相关的 Git 提交记录:

1
8efa167 feat: add ERFU_HOME map

自定义装备测试记录

本轮验证了装备库新增、NPC 发放、穿戴属性、装备外观和衣服翅膀特效。实际使用的物品库是 SQLite:

1
2
源码库:Mud2\DB\ApexM2.DB
运行库:D:\MirServer\Mud2\DB\ApexM2.DB

修改时需要同时写入源码库和运行库。运行中的服务端测试前至少执行:

1
@重读物品数据库

NPC 脚本改动则执行:

1
@重读商人

如果涉及 UserCmd.txt 这类命令映射,重启 M2 最稳。

已验证物品

物品 Idx StdMode 关键字段 结论
二福木剑 324 5 Shape=1, Looks=30 可作为普通自定义武器发放和穿戴
二福试炼剑 325 5 Shape=26, Looks=57, HP=50, MP=30, Light=1 可复用屠龙外观,并带基础数值
二福传送戒指 326 22 Shape=112, Looks=172 可复用传送戒指特殊壳
云影战衣(男) 510 10 Shape=6, Looks=85, Anicount=1002 普通衣服位可穿,可触发外观链路
云影战衣(女) 511 11 Shape=6, Looks=88, Anicount=1002 普通衣服位可穿,可触发外观链路

字段经验

StdMode 决定物品类型。武器用 5,男衣服用 10,女衣服用 11,戒指用 22。这几个在当前端上已验证可用。

Shape 控制穿戴后的外观。武器、衣服最直接;首饰类则常用于特殊功能壳。

Looks 控制背包和装备栏图标。

Anicount 可用于衣服/武器外观特效。衣服翅膀特效按本地 LFM2 文档走 HumEffect*.wzl/wil,例如 HumEffect2 对应 1000-1024,本次 1002 验证成功。

Light 用于装备栏内观发光,不等同于人物外观翅膀。

Job 建议显式设置。普通全职业可用 99,避免空值导致部分装备类型判断异常。

翅膀素材经验

只改 DB 的 Anicount 不够,客户端必须有对应素材文件。最初只改:

1
Anicount=1002

没有效果,原因是客户端 Data 目录缺少 HumEffect2 资源。

本次从本机大客户端包中抽取:

1
D:\work_console\MirDev\Legend of mir-≮无极传奇≯ Mir.17WuJi.Com★★★★游戏QQ交流群:340370791.rar

提取并放入当前客户端:

1
2
3
4
D:\work_console\MirDev\传奇1.80客户端\Data\HumEffect2.wzl
D:\work_console\MirDev\传奇1.80客户端\Data\HumEffect2.wzx
D:\work_console\MirDev\传奇1.80客户端\Data\HumEffect2.wil
D:\work_console\MirDev\传奇1.80客户端\Data\HumEffect2.wix

当前客户端本身是 .wil/.wix 体系;只放 .wzl/.wzx 时未生效。额外复制成 .wil/.wix 后,云影战衣Anicount=1002 翅膀效果生效。

测试翅膀时必须关闭并重新打开客户端。客户端资源通常启动时加载,只重读服务端数据库不够。

给翅膀测试装备

翅膀不是单独挂载的道具,本次走的是“普通衣服 + Anicount 特效”的方式。给玩家测试时实际发的是衣服:

1
2
男角色:云影战衣(男)
女角色:云影战衣(女)

NPC 脚本里发放可以写:

1
2
3
4
#ACT
GIVE 云影战衣(男) 1
GIVE 云影战衣(女) 1
SENDMSG 6 已发放云影战衣,请按角色性别穿戴测试翅膀。

关键点:

  • 男衣服必须是 StdMode=10,女衣服必须是 StdMode=11
  • Anicount=1002 只负责触发翅膀特效,客户端仍必须有 HumEffect2.wil/.wix 或对应资源。
  • 改 DB 后需要 @重读物品数据库;改客户端素材后必须重开客户端。

自定义装备翅膀动画效果

装备传送经验

武器双击优先是穿戴,不适合直接做双击使用触发。保留 二福试炼剑 为武器时,采用自定义命令实现:

1
2
Mir200\Envir\UserCmd.txt
二福传送 5

对应 QFunction-0.txt

1
2
3
4
5
6
7
8
9
10
11
[@UserCmd5]
#IF
CHECKTAKEONITEM 二福试炼剑
#ACT
MAPMOVE ERFU_HOME 10 13 1
SENDMSG 6 二福试炼剑:已传送至二福之家。
BREAK
#ELSESAY
需要佩戴二福试炼剑,才能使用二福传送。\
\
<关闭/@exit>

玩家佩戴 二福试炼剑 后输入:

1
@二福传送

即可传送到 ERFU_HOME

不通的路径

StdMode=66/67 时装衣服在当前客户端/登录器上没有成功穿戴。ShowFashion 1GiveOnItem 18、补齐 Job=99 后仍不通。当前结论是:时装栏链路未接通,后续不要优先走这条路。

要快速验证新衣服外观,优先用普通衣服位:

1
2
男衣服:StdMode=10
女衣服:StdMode=11

再改 ShapeLooksAnicount

引擎内置提示与显示类问题怎么改

遇到游戏里反复出现某类系统提示、显示文案不合适、数值显示不符合预期时,优先按这个顺序排查:

  1. 先搜脚本目录,看是不是 NPC、机器人或触发脚本发出来的。
1
Select-String -Path D:\MirServer\Mir200\Envir\**\*.txt -Pattern '要查的提示文字' -Encoding Default
  1. 如果脚本里搜不到,再搜引擎配置和字符串模板。
1
Select-String -Path D:\MirServer\Mir200\!setup.txt,D:\MirServer\Mir200\String.ini -Pattern '关键字' -Encoding Default
  1. 找到开关、间隔、倍率、模板后,再决定是关掉、调频率、改倍率,还是只改显示文字。

这次“当前在线人数”就是典型的引擎内置提示,不是假人脚本触发。配置在:

1
D:\MirServer\Mir200\!setup.txt

相关项:

1
2
3
SendOnlineCount=1
SendOnlineCountRate=20
SendOnlineTime=5000

含义:

1
2
3
SendOnlineCount=1      开启在线人数提示
SendOnlineTime=5000 每 5000 毫秒提示一次
SendOnlineCountRate=20 在线人数显示倍率

如果不想一直刷,把开关关掉:

1
SendOnlineCount=0

如果只是想显示真实人数,保留提示但把倍率改成 1 倍:

1
2
SendOnlineCount=1
SendOnlineCountRate=10

这类倍率在当前引擎里通常按 10 = 1倍 理解,所以 20 = 2倍。例如 M2 日志真实统计是:

1
在线数: 4 离线数: 0 假人数: 3

游戏里可能显示为:

1
当前在线人数: 8

这不是人数真的翻倍,而是显示倍率造成的。

相关文字模板在:

1
D:\MirServer\Mir200\String.ini

对应行:

1
2
3
SendOnlineCountMsg=当前在线人数: %c
SendOnlineCountMsg2=当前在线人数: %d
OnlineCountMsg=在线数: %d 离线数: %d 假人数: %d

本次实际处理是不让它刷,因此已把 !setup.txt 改成:

1
2
3
SendOnlineCount=0
SendOnlineCountRate=20
SendOnlineTime=5000

只关闭提示,不改倍率和文字。修改前备份:

1
D:\MirServer\Mir200\!setup.txt.bak_before_disable_online_count

这类 !setup.txt 配置通常需要重启 M2Server 后生效;String.ini 文案修改也建议重启或使用引擎支持的重读命令后再验证。

智能假人:妮娅交互拟真性记录

当前已验证翎风端内置 Dummy 假人可用,妮娅能作为服务端假人出现在游戏里。

不要把 @妮娅 + SENDMSG 当成正式聊天方案。实机表现是系统消息样式,例如聊天框里显示“系统:妮娅:…”,并不会像普通玩家一样从妮娅头顶冒字。

当前更适合的路线:

1
2
3
4
5
server_fake_ai 智能层
-> 读取 NiaEvents.txt / 日志 / 数据库
-> 生成妮娅记忆和下一阶段台词
-> 导出到 D:\MirServer\Mir200\Envir\DummyConfig\Nia.txt 的 [Say]
-> 让内置 Dummy 系统自己随机发言

关键文件:

1
2
3
4
5
6
D:\MirServer\Mir200\Envir\DummyNameList.txt
D:\MirServer\Mir200\Envir\DummyConfig\Nia.txt
D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt
D:\MirServer\Mir200\Envir\QuestDiary\数据文件\NiaEvents.txt
D:\MirServer\Mir200\Envir\QuestDiary\数据文件\NiaReply.txt
D:\work_console\MirDev\server_fake_ai\scripts\nia_tick.ps1

测试期把 Nia.txt 里的发言频率调高,便于观察:

1
SayRate=30

@妮娅 目前只保留为调试入口:记录一次玩家互动事件,并提示观察假人头顶随机说话。正式方向应继续研究 Dummy 自身 [Say]、行为配置和假人生命周期事件,而不是继续堆 SENDMSG

2026-06-05 更正:妮娅头顶说话的稳定方式

前面关于 SENDMSG 的判断需要更正。实机反复验证后,当前翎风端可以直接让假人以角色身份冒头顶字:

1
妮娅.SENDMSG 8 说话内容

已验证现象:

  • 玩家自己执行 SENDMSG 8 ... 时,玩家头顶会显示文字。
  • 脚本执行 妮娅.SENDMSG 8 ... 时,妮娅头顶会显示文字。
  • 这条链路不依赖怪物、不依赖 DummyConfig 的 [Say] 战斗触发,也不依赖自定义插件。

@妮娅 当前绑定在:

1
2
D:\MirServer\Mir200\Envir\UserCmd.txt
D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt

当前稳定写法是:首句直接执行,后续句子用 DELAYGOTO 链接。不要先 GOTO 到另一个标签再发第一句,因为这条路径在当前脚本上下文里曾出现不触发。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[@UserCmd7]
#IF
#ACT
CLEARDELAYGOTO
妮娅.SENDMSG 8 我听见你了,先别急。
DELAYGOTO 1200 @NiaReplyFollow1
BREAK

[@NiaReplyFollow1]
#IF
#ACT
妮娅.SENDMSG 8 我会留在这里,记一下刚才发生的事。
DELAYGOTO 1800 @NiaReplyFollow2
BREAK

[@NiaReplyFollow2]
#IF
#ACT
妮娅.SENDMSG 8 下一步我先观察周围,不乱跑。
BREAK

生效方式:

1
@重读功能

如果角色权限不够或重读无效,就一键重启服务端。@重读商人 不会刷新这个用户命令脚本。

结论:妮娅的短期交互出口先定为 假人名.SENDMSG 8 文本DummyConfig/Nia.txt[Say] 仍可用于战斗/巡逻时的环境台词,但不再作为玩家主动互动的主路径。

2026-06-05 妮娅交互:前缀变量化与台词池

@妮娅 已从固定三句改成脚本内随机台词池。当前仍使用已验证的说话出口:

1
妮娅.SENDMSG 8 文本

为了避免以后多假人时把名字写死在每句台词里,脚本现在先设置显示名变量:

1
2
MOV S90 妮娅
妮娅.SENDMSG 8 <$STR(S90)>:我听见你了,先别急。

注意:妮娅.SENDMSG 这个对象命令目标仍暂时保留硬编码,因为还没验证对象名前缀是否支持变量。当前可维护边界是:

  • 发言目标:仍用已验证的 妮娅.SENDMSG 8
  • 显示前缀:统一用 MOV S90 妮娅
  • 台词正文:不再写假人名。

当前新增维护文件:

1
2
D:\MirServer\Mir200\Envir\QuestDiary\AI\NiaReplyPool.txt
D:\MirServer\Mir200\Envir\QuestDiary\AI\NiaMemoryPlan.txt

NiaReplyPool.txt 是台词维护清单。当前没有找到并验证稳定的“从文本随机读行”脚本命令,所以 QFunction-0.txt 里暂时手动镜像这些台词,用引擎原生 RANDOM 做随机分支。

NiaMemoryPlan.txt 记录事件字段设计。当前 @妮娅 会向:

1
D:\MirServer\Mir200\Envir\QuestDiary\数据文件\NiaEvents.txt

追加结构化事件:

1
2
player\_interaction|agent=妮娅|player=玩家名|phase=start|map=地图|x=坐标X|y=坐标Y
player\_interaction|agent=妮娅|player=玩家名|phase=done|reply=回复类型|map=地图|x=坐标X|y=坐标Y

后续外部智能层按 agent + player 聚合互动次数、最近地图和回复类型,再生成下一轮候选台词。短期原则:游戏内脚本负责可靠触发和记录,复杂记忆不要塞进 QFunction。

2026-06-05 更正:SENDMSG 文本不展开字符串变量

实测发现:

1
妮娅.SENDMSG 8 <$STR(S90)>:台词

头顶字只显示冒号及之后内容,说明 SENDMSG 8 的文本参数里不能依赖 <$STR(S90)> 展开。后续不要再把显示前缀变量直接塞进 SENDMSG 文本。

当前改为生成器方案:

1
2
D:\MirServer\Set-NiaAgent.ps1
D:\work\_console\MirDev\MirServer\Set-NiaAgent.ps1

用法:

1
.\Set-NiaAgent.ps1 '妮娅'

生成器会读取:

1
Mir200\Envir\QuestDiary\AI\NiaReplyPool.txt

然后重写 QFunction-0.txt@妮娅 段,生成稳定的运行脚本:

1
妮娅.SENDMSG 8 妮娅:我听见你了,先别急。

这样运行脚本里虽然是实际名字,但名字来源集中在一键生成入口。以后换假人名,不要手改每句台词,直接运行生成器。

注意:生成器内部已避免在 PowerShell 源码中直接写 数据文件 这类中文路径,防止脚本源码编码导致路径乱码。最终 QFunction-0.txt 里应检查为:

1
..\QuestDiary\数据文件\NiaEvents.txt

2026-06-05 妮娅记忆 V0 闭环

已完成第一版外部智能层闭环,不接 LLM、不接客户端、不改协议。

当前数据流:

1
2
3
4
5
6
玩家 @妮娅
-> QFunction-0.txt 写入 NiaEvents.txt
-> server\_fake\_ai 读取事件
-> SQLite player\_contacts 记录玩家互动次数
-> 生成 NiaReplyPool.txt
-> Set-NiaAgent.ps1 重写 @妮娅 台词

一键同步入口:

1
D:\work\_console\MirDev\server\_fake\_ai\scripts\nia\_tick.ps1

当前已实测从 NiaEvents.txt 聚合出玩家 二福 的互动次数,并生成记忆台词:

1
2
3
妮娅:二福,我记得你。这是我们第 6 次见面。
妮娅:你又来了,二福。我已经见过你 6 次。
妮娅:二福,我认得你的名字,之前你找过我。

玩家侧验证流程:

1
2
@重读功能
@妮娅

如果 @重读功能 权限不够或没有刷新,就一键重启服务端后再试。

已知限制:当前事件里的地图坐标仍记录为 %m/%x/%y,外部智能层会显示为“未知位置”。后续需要单独验证翎风脚本里正确的地图/坐标变量写法。

2026-06-05 妮娅主动性 V0:想法入口

新增游戏内命令:

1
@妮娅想法

命令映射:

1
2
Mir200\Envir\UserCmd.txt
妮娅想法 8

对应脚本入口:

1
2
Mir200\Envir\Market\_Def\QFunction-0.txt
[@UserCmd8]

当前用途:让妮娅说出自己的当前目标、关系判断和最近位置记忆。例如:

1
2
3
妮娅:当前目标:记住二福,维持连续关系。
妮娅:我已经见过二福 10 次,这个人需要优先识别。
妮娅:我刚才把 盟重省(402,348) 记成最近见面点。

台词来源:

1
Mir200\Envir\QuestDiary\AI\NiaThoughtPool.txt

外部智能层生成该文件后,仍由:

1
Set-NiaAgent.ps1

统一写回 QFunction-0.txt。当前实机运行脚本已生成成功;运行目录下的 D:\MirServer\Set-NiaAgent.ps1 曾因文件占用未能同步覆盖,但不影响当前实机脚本,server\_fake\_ai 默认使用工作副本里的生成器。

@妮娅想法 会写入事件:

1
2
thought\_request
thought\_done

这两个事件只表示玩家查看妮娅想法,不增加 player\_contacts.interaction\_count。普通关系互动仍然只由 @妮娅player\_interaction phase=start 计数。

2026-06-05 规则式智能假人里程碑与下一阶段

当前可以把妮娅定义为:

1
Milestone 1:规则式服务端智能假人闭环

已验证能力:

1
2
3
4
5
假人真实存在于服务端
@妮娅 能头顶说话
能记录玩家名、见面次数、地图和坐标
server\_fake\_ai 能读取事件并生成下一轮台词
@妮娅想法 能表达当前目标和计划

新增文档:

1
2
D:\work\_console\MirDev\server\_fake\_ai\docs\lfm2\_dummy\_arrangement.md
D:\work\_console\MirDev\server\_fake\_ai\docs\milestone\_2\_sensing.md

下一阶段优先做感知能力,而不是先堆行为能力。原因是:

1
2
3
没有感知,LLM 只能根据空上下文编台词;
先做行为,容易退化成更复杂的规则挂机;
感知层做好后,可以同时服务规则 Planner 和 LLM Planner。

Milestone 2 暂定为:

1
世界感知层 V0

目标是生成统一的 WorldSnapshot,至少包含:

1
2
3
4
5
6
7
8
妮娅是否在线
妮娅最近地图和坐标
最近互动玩家
互动次数
最近事件
等级/HP/MP(待验证 DB 实时性)
背包/装备摘要(待验证)
附近怪物/玩家摘要(待验证)

脚本事件里地图坐标必须使用:

1
2
3
4
<$MAP>
<$MapTitle>
<$X>
<$Y>

不要再用 %m/%x/%y 写入 AddTextList,否则会原样写进事件文件。

2026-06-05 WorldSnapshot V0

Milestone 2 已开始落地,新增统一世界快照输出:

1
D:\work_console\MirDev\server_fake_ai\data\world_snapshot.json

生成命令:

1
python D:\work_console\MirDev\server_fake_ai\src\smart_dummy_runtime.py snapshot

或者随主循环生成:

1
D:\work_console\MirDev\server_fake_ai\scripts\nia_tick.ps1

当前 world_snapshot.json 已能输出:

1
2
3
4
5
6
7
8
9
10
11
12
agent
online
map
map_title
x
y
last_known_place
last_player
interaction_count
recent_events
planner_brief
unknown_fields

当前实测状态示例:

1
2
3
4
妮娅在线
最近位置:盟重省(399,345)
最近互动玩家:二福
互动次数:11

当前仍明确标记未知:

1
2
3
4
5
6
level
hp
mp
inventory_summary
equipment_summary
nearby_summary

这一步的意义是:后续 LLM 不直接读原始日志,而是读 world_snapshot.jsonplanner_brief,再生成计划或台词。未知字段保持 null,不编造。

2026-06-05 DB 感知 V0

ApexMir.DB 已确认是 SQLite:

1
D:\MirServer\DBServer\FDB\ApexMir.DB

可只读访问,主要表:

1
2
3
Human
HumanAbil
HumanItems

已接入 WorldSnapshot

1
D:\work_console\MirDev\server_fake_ai\data\world_snapshot.json

当前能读取最近互动玩家 二福 的角色状态:

1
2
3
4
5
6
等级 50
HP 576/556
MP 711/701
金币 10029932
物品数量 19
物品样本:云影战衣(女)、铁剑、等待添加、云影幻衣(女)、短剑

物品名解析方式:

1
HumanItems.DBIndex -> D:\MirServer\Mud2\DB\ApexM2.DB.StdItems.Idx

当前结论:没有在 Human 表里找到 妮娅,说明翎风内置假人不一定作为普通角色持久化进 Human/HumanAbil/HumanItems

因此当前 WorldSnapshot 中:

1
2
3
4
妮娅 level:来自 DummyConfig/Nia.txt,当前 35
妮娅 HP/MP:未知
妮娅 背包/装备:未知
最近玩家 DB 状态:可读

注意不要把“玩家 DB 可读”误认为“假人 DB 一定可读”。下一步如果要拿妮娅 HP/MP,需要继续找假人运行态来源,例如 M2 内部状态、脚本变量、假人专用命令或可控探针。

本文作者:战斗包子
本文链接:https://paipai121.github.io/2026/05/21/游戏衍生/Deploy传奇athome/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可