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

添加最新传奇血腥魔人活动脚本Hero引擎

热度:
血腥魔人活动属于定时开放型的限时地图活动,玩家消耗元宝进入专属地图刷怪打宝,怪物按固定周期刷新,活动状态由全局变量控制。整个脚本涉及入口NPC、全局变量定义、定时器刷怪、怪物死亡检测和爆率配置五个模块。以下从完整脚本范例入手,逐段拆解Hero引擎下的编写方法。

##入口NPC脚本

在Market_Def目录下新建一个NPC脚本文件,写入以下内容:

```
[@main]
<温馨提示/SCOLOR=252>:请保护好ID密码!
<◆关闭对话◆/@exit>

<当前等级/SCOLOR=254>:<$LEVEL>级
<元宝/SCOLOR=254>:<$GAMEGOLD>个

<★★★★★★★★★★★★★★★★★★★★★/SCOLOR=250>
<★/SCOLOR=250><╔═╗/AUTOCOLOR=155168253115125><★/SCOLOR=250><╔═╗/AUTOCOLOR=155168253115125>
<★/SCOLOR=250><适合110以上玩家打宝><★/SCOLOR=250>
<★/SCOLOR=250><║/AUTOCOLOR=155168253115125>血<║/AUTOCOLOR=155168253115125>
<★/SCOLOR=250><║/AUTOCOLOR=155168253115125>腥<║/AUTOCOLOR=155168253115125>
<★/SCOLOR=250><║/AUTOCOLOR=155168253115125>通<║/AUTOCOLOR=155168253115125>
<★/SCOLOR=250><║/AUTOCOLOR=155168253115125>道<║/AUTOCOLOR=155168253115125>
<★/SCOLOR=250><★★★★★★★★★★★★★★★★★★★★★/SCOLOR=250>

<★→/SCOLOR=250><我要进去/@恶魔峡谷><←★/SCOLOR=250>

[@恶魔峡谷]
<[怪物介绍]>:血腥士兵血腥射手血腥变异蛾血腥魔人树妖血腥龙头老大等等
<[刷新时间]>:小怪20分钟,BOSS-60分钟
<[可爆物品]>:可爆蓝龙青龙紫龙倚天主宰.帝王.材料.大量元宝等等
<[进入条件]>:花费1800元宝24小时开放,进入后每两秒扣2元宝
<[危险指数]>:<☆☆☆☆☆☆☆☆/SCOLOR=253>
<[确定进入]/@血腥通道>
<返回上页/@main>

[@血腥通道]
#IF
CHECKLEVELEX>109
CHECKGAMEGOLD>1799
#ACT
GAMEGOLD-1800
mapmovexr0111613
SENDMSG0玩家[%s]勇敢进入血腥通道!!暴率超高哦!想要装备的请跟上!
#ELSESAY
对不起,您的等级不足110级或元宝不足1800。
```

这段脚本的逻辑链条分三层:[@main]展示活动介绍界面,[@恶魔峡谷]列出怪物和爆物品信息,[@血腥通道]执行实际进入判断。进入条件使用CHECKLEVELEX检测等级是否大于109级,CHECKGAMEGOLD检测元宝是否超过1799,两项条件同时满足才扣除1800元宝并通过mapmove传送到地图xr011的坐标1613。

SENDMSG0的全服广播格式中,%s会自动替换为触发脚本的玩家名称,颜色参数0代表白色消息。

##全局变量定义与初始化

血腥魔人活动需要三个全局变量来控制运行状态。在M2Server的变量配置文件中添加以下定义:

```
[GlobalVar]
G_BloodEvilAlive=0
G_BloodEvilAllowed=1
G_BloodEvilCount=0
```

G_BloodEvilAlive记录BOSS是否存活,G_BloodEvilAllowed控制是否允许刷新,G_BloodEvilCount统计已刷新的怪物批次数。变量命名中所有字母必须大写,否则Hero引擎无法正确解析。

变量初始化需要放在QManage.txt的[@Login]触发段中,确保服务器启动时状态正常:

```
[@Login]
#IF
ISNEWHUMAN
#ACT
SETG_BloodEvilAlive0
SETG_BloodEvilAllowed1
SETG_BloodEvilCount0
```

SETG命令用于操作全局变量,与HUMAN变量不同,GLOBAL变量的值在所有玩家之间共享,适合用于控制活动开关和怪物存活状态。

##定时刷怪脚本

在QFunction.txt中编写定时器脚本,实现小怪每20分钟刷新一批、BOSS每60分钟刷新一次的节奏:

```
[@BloodEvilTimer]
#IF
CHECKVARG_BloodEvilAllowed=1
#ACT
TIMER11200000
BREAK

[@TimerEvent1]
#IF
CHECKVARG_BloodEvilAllowed=1
#ACT
CheckRangeMonCountxr011161360<80
MonGen血腥士兵301613
MonGen血腥射手301613
MonGen血腥变异蛾201613
SETG_BloodEvilCount+1
SENDMSG0血腥通道的小怪已刷新,请各位勇士速速前往!
#ELSEACT
SENDMSG0血腥通道怪物数量已满,本批次刷新取消。
BREAK
```

TIMER11200000中的时间单位是毫秒,1200000毫秒等于20分钟。CheckRangeMonCount命令检测指定地图坐标范围内指定怪物的数量,格式为“CheckRangeMonCount地图号X坐标Y坐标范围数量条件”,这里检测xr011地图1613坐标周围60格内怪物是否少于80只,少于80只才执行MonGen刷新。

MonGen命令的参数依次为怪物名称、数量、X坐标、Y坐标。小怪刷新三种类型各30、30、20只,总计80只,与检测条件形成闭环。

BOSS刷新使用独立定时器:

```
[@BloodEvilBossTimer]
#IF
CHECKVARG_BloodEvilAllowed=1
#ACT
TIMER23600000
BREAK

[@TimerEvent2]
#IF
CHECKVARG_BloodEvilAlive=0
#ACT
MonGen血腥龙头老大11613
SETG_BloodEvilAlive1
SENDMSG0血腥通道的BOSS血腥龙头老大已刷新,击杀可获大量稀有装备!
#ELSEACT
SENDMSG0血腥通道BOSS尚未被击杀,本批次刷新取消。
BREAK
```

BOSS定时器每3600000毫秒即60分钟触发一次,触发时先检测G_BloodEvilAlive是否为0。BOSS存活时该变量为1,刷新被阻止;BOSS死亡后变量归零,下一周期恢复刷新。这个机制避免了BOSS未被击杀时重复生成的问题。

##怪物死亡检测

怪物被击杀后需要清除存活标记,让下一轮刷新可以正常执行。在MapInfo.txt中为xr011地图绑定死亡触发:

```
xr011血腥通道ONKILLMON(@BloodEvilKill)
```

然后在QFunction.txt中添加死亡触发处理脚本:

```
[@BloodEvilKill]
#IF
CHECKMONNAME血腥龙头老大
#ACT
SETG_BloodEvilAlive0
SENDMSG0血腥通道的BOSS已被击杀,下一轮刷新即将开始!
SAVEVARG_BloodEvilAlive..\QuestDiary\数据文件\BloodEvil.txt
BREAK
```

CHECKMONNAME检测被击杀的怪物名称是否为血腥龙头老大,匹配则将G_BloodEvilAlive重置为0。SAVEVAR命令将变量值持久化存储到指定文件路径,确保服务器重启后变量状态不会丢失。

##怪物爆率配置

在Mir200\Envir\MonItems目录下为血腥通道的每种怪物创建独立的爆率文件。文件名必须与怪物名称完全一致,包括大小写,否则引擎无法加载。

以“血腥龙头老大.txt”为例:

```
1/1金币5000
1/2元宝50
1/4元宝100
1/50蓝龙1
1/100青龙1
1/200紫龙1
1/500倚天1
1/800主宰1
1/800帝王1
1/10材料包1
```

爆率格式中,斜杠左侧数字代表分母,右侧为掉落数量。1/50表示50次击杀中有1次掉落蓝龙。爆率数字越大代表掉落概率越低,写入时不要使用百分比格式,引擎无法识别百分号。

小怪爆率文件内容相应降低:

```
1/1金币200
1/4元宝10
1/20材料包1
1/2000蓝龙1
1/5000青龙1
```

##活动开关与维护

需要一个管理员NPC来手动控制活动的开启和关闭:

```
[@活动控制]
#IF
CHECKLEVELEX>0
#ACT
SETG_BloodEvilAllowed1
SENDMSG0血腥魔人活动已开启!请前往活动NPC处进入地图。
SAVEVARG_BloodEvilAllowed..\QuestDiary\数据文件\BloodEvil.txt
BREAK

[@关闭活动]
#IF
CHECKLEVELEX>0
#ACT
SETG_BloodEvilAllowed0
CLEARTIMER1
CLEARTIMER2
SENDMSG0血腥魔人活动已关闭,地图内怪物将在下次维护时清理。
SAVEVARG_BloodEvilAllowed..\QuestDiary\数据文件\BloodEvil.txt
BREAK
```

CLEARTIMER命令用于停止指定编号的定时器,参数与TIMER启动时的编号对应。关闭活动时同步清除定时器,防止活动关闭后怪物仍在后台刷新。

##部署验证要点

脚本文件放入Market_Def目录后,在M2控制台执行重新加载所有NPC。用一个110级以上的角色测试完整流程:与NPC对话确认界面显示正常,元宝不足时确认拦截生效,进入地图后确认每两秒扣减元宝,等待20分钟观察小怪是否刷新,击杀BOSS后确认G_BloodEvilAlive变量是否归零。

如果小怪不刷新,优先检查CheckRangeMonCount的坐标和范围参数是否与MonGen的刷新坐标匹配,两者偏差过大会导致检测结果始终为“怪物数量已满”。如果BOSS不刷新,检查G_BloodEvilAlive变量的初始值是否为0,初始值非0会直接阻止首次刷新。变量文件的路径建议统一使用“..\QuestDiary\数据文件\”的相对写法,部分引擎对绝对路径的解析存在兼容性问题。
[顶部]