热血传奇服务端新增怪物全流程:MonsterDB到MonGen刷新落地详解

来源: 作者: 点击:
热血传奇添加怪物是一条完整数据链:客户端补丁(MonXX.wil / Data/Monster)→ 服务端怪物库(Monster.DB / MonsterInfo)→ 刷怪配置(MonGen.txt)→ 爆率文件(Envir/MonItems/怪物名.txt)→ 特殊机制(ExtMon.txt / MapQuest.txt / NPC脚本)。任一层断链就会透明、不刷、不掉东西或直接 M2 读档崩。下面按 Hero / GOM / GEE / Blue / OpenMir2 通用顺序拆。

一、客户端素材与 Appr 外观绑定
怪物图放在客户端 Data\MonXX.wil(或 MonXX.pak),用 WIL/WZX 编辑器导入站立、行走、攻击、死亡帧序列。
Appr(外观代码)计算公式:
Appr = (Mon编号 - 1) × 10
例:素材进 mon28.wil → Appr 填 270;mon40.wil 内第 5 只怪 → Appr 390~398。
引擎靠 Appr 去客户端读对应帧,Appr 错或补丁没进登录器 → 怪物显示稻草人 / 透明 / 只有一帧。

二、怪物基础属性库(Monster.DB / MonsterInfo)
Hero / Blue 老引擎:DBC2000 打开 Mir200\Mud2\DB\Monster.DB(BDE 里 HeroDB → Monster 表),末尾加一行,核心字段:
- Name:怪物名(GBK 编码,别用 UTF-8 否则乱码)
• Appr:外观代码,对应上面算的值

• Race / RaceImg:种族/行为类型(0 人形、1 动物、2 不死、3 龙系等,决定 AI 模板)

- Level:等级
• HP / MP:生命 / 魔法

• AC / MAC:物理防御 / 魔法防御(含上下限)

• DC / MC / SC:攻击 / 魔法 / 道术(含上下限)

- Speed:移动速度;AttackSpeed:攻击间隔(ms)
• Exp:击杀经验

• Escape / AntiPoison / AntiParalysis / AntiMagic:抗逃跑 / 防毒 / 防麻 / 防火等开关位

GOM / GEE:多数改 Mir200\Envir\MonDef.txt 或 MonsterInfo.txt,字段同名,纯文本编辑。
OpenMir2:数据在 MySQL mir2 库 Monster 表,或 GameSrv/DB/MonsterInfo.json,启动由 LoadMonsterDB() 载入;自定义 AI 还在 src/M2Server/Monster/Monsters/ 建类继承 MonsterObject 重写攻击/施法。

三、刷怪配置 MonGen.txt(核心落地)
路径:Mir200\Envir\MonGen.txt(GOM 有时叫 MonsterGen.txt,Blue 叫 MapMonster.txt)。
标准格式:

地图编号 X Y 怪物名称 范围 数量 间隔(秒) 集中坐标 名字颜色 内功怪(0/1) 国家名 同国可攻(0/1)

例:

3 320 280 上古魔神 15 5 600 0 249 0

含义:盟重(3)坐标 320,280 周围 15 格内,保持 5 只,死完 600 秒补,名字颜色 249(红),非内功怪。
• 地图编号去 Envir\MapInfo.txt 查,写错不刷

- 怪物名称必须与 Monster.DB 完全一致,全角空格、制表符都会匹配失败
• 间隔 0 = 启动即刷;负数 = 不自动刷,等脚本触发

• 改完在 M2 → 刷新 → @ReloadMonGen 或重开 M2Server

四、爆率文件 MonItems
路径:Mir200\Envir\MonItems\怪物名.txt,文件名必须和 Monster.DB 的 Name 一字不差。
内容格式:

1/10 裁决之杖
1/50 骨玉权杖
1/200 屠龙
1/1 金币 1000-5000

分母越大越难掉;1/1 必掉;可写多行多物品。没建这个文件 → 打死啥都不掉。

五、特殊机制与触发
1. 抗麻 / 防火 / 禁诱惑 / 防绿毒红毒 → Envir\UserData\ExtMon.txt
格式:怪物名 防麻 防火 禁诱惑 防绿毒 防红毒(0/1 填充)
2. 死亡触发脚本 → Envir\MapQuest.txt
格式:地图编号 标识符 状态 怪物名 触发脚本段,配合 Market_Def\QFunction-0.txt 写击杀逻辑(全服公告、刷下一阶段怪、开宝箱)
3. 人形怪(带装备、放技能)→ Envir\MonUseItems\怪物名.txt

[BaseInfo]
Job=0
Gender=0
Hair=5
使用魔法=烈火剑法,半月弯刀,刺杀剑术
[UseItems]
DRESSNAME=凤天魔甲
WEAPONNAME=开天
项链NECKLACENAME=战神项链
...
DieDropUseItemRate=65535

再在 Monster.DB 里 Race 设人形、Appr 指角色外观,MonGen 正常刷。
4. NPC 脚本临时刷怪(不写 MonGen 也行)

#ACT
MobPlace 3 320 280 上古魔神 5 600

或 @MobPlace GM 命令、QFunction 里 MobPlace 动态刷 BOSS。

六、OpenMir2 / .NET 端差异
• 怪物模板:sql/mir2_data.sql 导入 Monster 表,或改 MonsterInfo.json

- 刷怪点:LoadMonGen() 读 MonGen.txt,格式同传统端
• 自定义行为:在 src/M2Server/Monster/Monsters/ 新建类 → 继承 MonsterObject → 重写 Attack()、RunAI()、Die() → 在怪物表标 Race/类名映射

- 重载:重启 GameSrv,或走管理命令重读 DB

七、常见故障归位
• 透明 / 稻草人:Appr 算错、MonXX.wil 没打进登录器、补丁路径不对

• 不刷新:地图编号错、怪物名多空格、M2 没重载 MonGen、地图 MapInfo.txt 标了不允许刷怪

- 击杀无掉落:MonItems 文件名和 DB 名不一致、爆率分母过大
• M2 启动崩:Monster.DB 字段数不对、Appr 超范围、Race 填了引擎没实现的模板

• 动作错乱:Wil 帧序列缺站立/攻击首帧、方向数不是 8 向标准

- 人形怪不拿武器:MonUseItems 里装备名不在 StdItems.DB、Job 和装备类型冲突

整套链路顺序:做客户端 MonXX.wil → 算 Appr → 写 Monster.DB / MonsterInfo → 配 ExtMon / MonUseItems → 写 MonGen.txt → 建 MonItems 爆率 → 如需死亡事件补 MapQuest + QFunction → 重载 M2 进图验证。客户端补丁、Appr、DB 名、MonGen 名、MonItems 名五处字符串必须完全对齐,错一处就断链。