热血传奇添加怪物是一条完整数据链:客户端补丁(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只怪→Appr390~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:数据在MySQLmir2库Monster表,或GameSrv/DB/MonsterInfo.json,启动由LoadMonsterDB()载入;自定义AI还在src/M2Server/Monster/Monsters/建类继承MonsterObject重写攻击/施法。
三、刷怪配置MonGen.txt(核心落地)
路径:Mir200\Envir\MonGen.txt(GOM有时叫MonsterGen.txt,Blue叫MapMonster.txt)。
标准格式:
地图编号XY怪物名称范围数量间隔(秒)集中坐标名字颜色内功怪(0/1)国家名同国可攻(0/1)
例:
3320280上古魔神15560002490
含义:盟重(3)坐标320280周围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
MobPlace3320280上古魔神5600
或@MobPlaceGM命令、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名五处字符串必须完全对齐,错一处就断链。
一、客户端素材与Appr外观绑定
怪物图放在客户端Data\MonXX.wil(或MonXX.pak),用WIL/WZX编辑器导入站立、行走、攻击、死亡帧序列。
Appr(外观代码)计算公式:
Appr=(Mon编号-1)×10
例:素材进mon28.wil→Appr填270;mon40.wil内第5只怪→Appr390~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:数据在MySQLmir2库Monster表,或GameSrv/DB/MonsterInfo.json,启动由LoadMonsterDB()载入;自定义AI还在src/M2Server/Monster/Monsters/建类继承MonsterObject重写攻击/施法。
三、刷怪配置MonGen.txt(核心落地)
路径:Mir200\Envir\MonGen.txt(GOM有时叫MonsterGen.txt,Blue叫MapMonster.txt)。
标准格式:
地图编号XY怪物名称范围数量间隔(秒)集中坐标名字颜色内功怪(0/1)国家名同国可攻(0/1)
例:
3320280上古魔神15560002490
含义:盟重(3)坐标320280周围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
MobPlace3320280上古魔神5600
或@MobPlaceGM命令、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名五处字符串必须完全对齐,错一处就断链。

