当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

热血传奇服务端新增怪物全流程: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只怪→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名五处字符串必须完全对齐,错一处就断链。
[顶部]