血腥魔人活动属于定时开放型的限时地图活动,玩家消耗元宝进入专属地图刷怪打宝,怪物按固定周期刷新,活动状态由全局变量控制。整个脚本涉及入口NPC、全局变量定义、定时器刷怪、怪物死亡检测和爆率配置五个模块。以下从完整脚本范例入手,逐段拆解Hero引擎下的编写方法。
## 入口NPC脚本
在Market_Def目录下新建一个NPC脚本文件,写入以下内容:
```
[@main]
<温馨提示/SCOLOR=252>:请保护好ID密码!
<◆关闭对话◆/@exit>
<当前等级/SCOLOR=254>:<$LEVEL>级
<元宝/SCOLOR=254>:<$GAMEGOLD>个
<★★★★★★★★★★★★★★★★★★★★★/SCOLOR=250>
<★/SCOLOR=250><╔═╗/AUTOCOLOR=155,168,253,115,125><★/SCOLOR=250><╔═╗/AUTOCOLOR=155,168,253,115,125>
<★/SCOLOR=250><适合110以上玩家打宝><★/SCOLOR=250>
<★/SCOLOR=250><║/AUTOCOLOR=155,168,253,115,125>血<║/AUTOCOLOR=155,168,253,115,125>
<★/SCOLOR=250><║/AUTOCOLOR=155,168,253,115,125>腥<║/AUTOCOLOR=155,168,253,115,125>
<★/SCOLOR=250><║/AUTOCOLOR=155,168,253,115,125>通<║/AUTOCOLOR=155,168,253,115,125>
<★/SCOLOR=250><║/AUTOCOLOR=155,168,253,115,125>道<║/AUTOCOLOR=155,168,253,115,125>
<★/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
mapmove xr011 16 13
SENDMSG 0 玩家[%s]勇敢进入血腥通道!!暴率超高哦!想要装备的请跟上!
#ELSESAY
对不起,您的等级不足110级或元宝不足1800。
```
这段脚本的逻辑链条分三层:[@main]展示活动介绍界面,[@恶魔峡谷]列出怪物和爆物品信息,[@血腥通道]执行实际进入判断。进入条件使用CHECKLEVELEX检测等级是否大于109级,CHECKGAMEGOLD检测元宝是否超过1799,两项条件同时满足才扣除1800元宝并通过mapmove传送到地图xr011的坐标16,13。
SENDMSG 0的全服广播格式中,%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_BloodEvilAlive 0
SETG_BloodEvilAllowed 1
SETG_BloodEvilCount 0
```
SETG命令用于操作全局变量,与HUMAN变量不同,GLOBAL变量的值在所有玩家之间共享,适合用于控制活动开关和怪物存活状态。
## 定时刷怪脚本
在QFunction.txt中编写定时器脚本,实现小怪每20分钟刷新一批、BOSS每60分钟刷新一次的节奏:
```
[@BloodEvilTimer]
#IF
CHECKVARG_BloodEvilAllowed = 1
#ACT
TIMER1 1200000
BREAK
[@TimerEvent1]
#IF
CHECKVARG_BloodEvilAllowed = 1
#ACT
CheckRangeMonCount xr011 16 13 60 < 80
MonGen 血腥士兵 30 16 13
MonGen 血腥射手 30 16 13
MonGen 血腥变异蛾 20 16 13
SETG_BloodEvilCount + 1
SENDMSG 0 血腥通道的小怪已刷新,请各位勇士速速前往!
#ELSEACT
SENDMSG 0 血腥通道怪物数量已满,本批次刷新取消。
BREAK
```
TIMER1 1200000中的时间单位是毫秒,1200000毫秒等于20分钟。CheckRangeMonCount命令检测指定地图坐标范围内指定怪物的数量,格式为“CheckRangeMonCount 地图号 X坐标 Y坐标 范围 数量条件”,这里检测xr011地图16,13坐标周围60格内怪物是否少于80只,少于80只才执行MonGen刷新。
MonGen命令的参数依次为怪物名称、数量、X坐标、Y坐标。小怪刷新三种类型各30、30、20只,总计80只,与检测条件形成闭环。
BOSS刷新使用独立定时器:
```
[@BloodEvilBossTimer]
#IF
CHECKVARG_BloodEvilAllowed = 1
#ACT
TIMER2 3600000
BREAK
[@TimerEvent2]
#IF
CHECKVARG_BloodEvilAlive = 0
#ACT
MonGen 血腥龙头老大 1 16 13
SETG_BloodEvilAlive 1
SENDMSG 0 血腥通道的BOSS血腥龙头老大已刷新,击杀可获大量稀有装备!
#ELSEACT
SENDMSG 0 血腥通道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_BloodEvilAlive 0
SENDMSG 0 血腥通道的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_BloodEvilAllowed 1
SENDMSG 0 血腥魔人活动已开启!请前往活动NPC处进入地图。
SAVEVARG_BloodEvilAllowed ..\QuestDiary\数据文件\BloodEvil.txt
BREAK
[@关闭活动]
#IF
CHECKLEVELEX > 0
#ACT
SETG_BloodEvilAllowed 0
CLEARTIMER 1
CLEARTIMER 2
SENDMSG 0 血腥魔人活动已关闭,地图内怪物将在下次维护时清理。
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\数据文件\”的相对写法,部分引擎对绝对路径的解析存在兼容性问题。
添加最新传奇血腥魔人活动脚本Hero引擎
来源:
作者:
点击:

