Hero引擎每小时定时刷怪脚本 未击杀不重复刷新配置指南

来源: 作者: 点击:
一、原有脚本问题分析

1. 核心问题症结

原有脚本仅通过CheckRangeMonCountEx函数判断指定坐标范围内(勋章地图20,23处)“全部都爆”怪物数量是否为0,未添加定时触发逻辑,且未限定“每小时”的时间周期。当前脚本可能被高频触发(如玩家靠近、特定事件触发),导致每小时内多次刷怪,或到点必刷,无视怪物是否存活,与“每小时定时刷怪、未击杀则下小时不刷”的需求不符。

2. 关键缺失模块

缺失定时触发机制,无小时级时间判断逻辑,无法实现“每小时整点/准点刷怪”;未添加全局怪物存活判断(仅判断指定坐标),若怪物离开检测范围未被击杀,脚本会误判为已击杀并重新刷怪;无刷怪记录标记,无法留存上小时怪物存活状态,导致下小时重复刷新。

二、核心实现逻辑(先懂原理再配脚本)

1. 定时触发逻辑

利用Hero引擎的全局定时器功能,设置每3600秒(1小时)触发一次刷怪检测,确保刷怪周期严格为1小时,避免高频触发或触发不及时。

2. 怪物存活判断逻辑

采用“双检测”机制:一是通过CheckMonCount函数判断全地图目标怪物是否存活(避免坐标检测遗漏);二是搭配变量记录怪物刷新状态,若上小时怪物未击杀,变量值保持为1,下小时触发时直接跳过刷怪;若怪物被击杀,变量重置为0,执行刷怪操作。

3. 状态留存逻辑

使用全局变量(如@MonsterSpawnFlag)记录刷怪状态,变量值1代表“当前有未击杀怪物”,0代表“怪物已击杀/可刷新”。刷怪时将变量设为1,怪物死亡时触发脚本将变量设为0,确保跨小时状态可追溯。

三、完整脚本配置(直接复制可用)

1. 定时触发脚本(全局定时器配置)

首先配置全局定时器,实现每小时准点触发刷怪检测,需在服务端脚本文件(如Mir200\Envir\Market_Def\QFunction-0.txt)中添加以下内容:

// 全局定时刷怪触发脚本(每3600秒触发一次)
[@Timer1]
#IF
// 定时器周期设置为3600秒(1小时),首次触发延迟0秒(服务器启动后立即生效)
Timer 1 3600 0
#ACT
// 调用刷怪检测脚本
GmExecute @CheckMonsterSpawn
BREAK

// 刷怪检测核心脚本(判断怪物存活+执行刷怪)
[@CheckMonsterSpawn]
#IF
// 检测全地图“全部都爆”怪物数量是否为0(判断是否存活)
CheckMonCount 全部都爆 = 0
// 检测全局变量,确认上小时无未击杀怪物(0为可刷新)
CheckVar @MonsterSpawnFlag = 0
#ACT
// 记录刷怪状态,标记为“已刷新,待击杀”
SetVar @MonsterSpawnFlag 1
// 执行刷怪(地图:xunzhang 坐标:20,23 怪物名称:全部都爆 数量:1 模式:1(定点刷怪))
MonGen 全部都爆 1 1 xunzhang 20 23
// 发送全服提示
SendCenterMsg 250 252 天降财神活动已经开启,需要高级勋章的速度搞快 1 30
#ELSE
// 若怪物未击杀或状态异常,发送提示(可选,可删除)
SendCenterMsg 250 252 上小时怪物未被击杀,本次暂停刷新 1 30
BREAK

2. 怪物死亡触发脚本(状态重置)

配置怪物死亡时的状态重置脚本,确保怪物被击杀后,下小时可正常刷新,需在同一脚本文件中添加:

// 怪物死亡触发脚本(重置刷新状态)
[@怪物死亡触发]
#IF
// 判断死亡怪物是否为目标怪物(全部都爆)
CheckKillMonName 全部都爆
#ACT
// 重置全局变量,标记为“可刷新”
SetVar @MonsterSpawnFlag 0
// 发送击杀提示(可选,可删除)
SendCenterMsg 250 252 天降财神已被击杀,下小时准时刷新 1 30
BREAK

3. 脚本补充说明

脚本中“xunzhang”为地图名称,需替换为实际刷怪地图的正确名称(如“Map001”“勋章地图”);坐标“20,23”可根据需求调整为目标刷怪点位;定时器周期“3600”为秒数,若需调整刷怪周期(如每2小时),可修改为7200;变量“@MonsterSpawnFlag”为全局变量,无需提前创建,脚本首次执行时会自动生成。

四、引擎配置步骤(确保脚本生效)

1. 开启全局定时器功能

第一步:启动M2主程序,进入“选项-功能设置-脚本设置”;第二步:找到“全局定时器启用”选项,勾选启用,设置定时器触发间隔(默认1秒,无需修改);第三步:保存配置,重启M2主程序,确保定时器功能生效。

2. 配置脚本文件路径

确认脚本添加至正确的文件中:Hero引擎默认读取Mir200\Envir\Market_Def\QFunction-0.txt文件中的全局脚本,若添加至其他QFunction文件(如QFunction-1.txt),需在M2中配置文件优先级,避免脚本无法被读取。

3. 测试脚本触发效果

第一步:重启服务端,进入游戏前往目标地图(如勋章地图),确认初始无“全部都爆”怪物;第二步:等待定时器触发(或手动执行GmExecute @CheckMonsterSpawn命令),查看是否刷出怪物,且全服提示正常;第三步:不击杀怪物,等待1小时后,查看是否重复刷新(正常应不刷新,且提示“上小时怪物未被击杀”);第四步:击杀怪物后,确认变量已重置,下小时可正常刷新。

五、常见问题排查(脚本不生效/刷新异常)

1. 脚本不触发

成因:全局定时器未启用;脚本文件路径错误;定时器周期设置错误(如单位设为分钟)。解决办法:重新检查M2中定时器启用状态;确认脚本添加至QFunction-0.txt;核对定时器周期为3600秒(单位为秒,不可修改为其他单位)。

2. 未击杀仍重复刷新

成因:未添加怪物死亡触发脚本,变量未重置;怪物存活判断用了坐标检测(CheckRangeMonCountEx),怪物离开范围后误判为已击杀。解决办法:添加怪物死亡触发脚本,确保击杀后变量重置;将CheckRangeMonCountEx替换为CheckMonCount(全地图检测)。

3. 刷怪周期不准确

成因:服务器时间同步异常;定时器被其他脚本占用。解决办法:同步服务器时间,确保时间准确;检查其他脚本是否使用了相同编号的定时器(如Timer1),若冲突可修改定时器编号(如Timer2)。

4. 变量不生效

成因:变量名称错误(如少写@符号);Hero引擎未启用全局变量功能。解决办法:核对变量名称(必须带@前缀);进入M2“选项-功能设置-变量设置”,勾选“启用全局变量”,保存后重启服务端。

六、优化拓展(根据需求调整)

1. 新增刷怪前倒计时提示

若需在刷怪前10分钟发送倒计时提示,可在[@CheckMonsterSpawn]脚本前添加:

// 刷怪倒计时提示脚本(每小时50分触发)
[@Timer2]
#IF
Timer 2 3600 3540(延迟3540秒,即59分钟后触发,每小时循环)
#ACT
SendCenterMsg 250 252 天降财神将于10分钟后刷新,准备就绪! 1 30
BREAK

2. 限定刷怪时间段

若需仅在指定时间段(如10:00-22:00)刷怪,可在[@CheckMonsterSpawn]脚本的#IF条件中添加时间判断:

#IF
CheckTime 10:00 22:00(判断当前时间是否在10点至22点之间)
CheckMonCount 全部都爆 = 0
CheckVar @MonsterSpawnFlag = 0
#ACT
// 原有刷怪操作
BREAK

3. 多地图轮流刷怪

若需在多个地图轮流刷怪(每小时换一个地图),可新增地图变量控制,示例:

[@CheckMonsterSpawn]
#IF
CheckMonCount 全部都爆 = 0
CheckVar @MonsterSpawnFlag = 0
CheckVar @MapIndex = 0(地图索引,0为第一个地图)
#ACT
SetVar @MonsterSpawnFlag 1
MonGen 全部都爆 1 1 地图1 20 23
SetVar @MapIndex 1(下次刷怪切换至第二个地图)
#ELSEIF
CheckMonCount 全部都爆 = 0
CheckVar @MonsterSpawnFlag = 0
CheckVar @MapIndex = 1
#ACT
SetVar @MonsterSpawnFlag 1
MonGen 全部都爆 1 1 地图2 30 40
SetVar @MapIndex 0(重置索引,循环切换)
BREAK

七、总结

实现Hero引擎“每小时定时刷怪、未击杀则下小时不刷”的核心,在于“定时触发+全局存活检测+状态变量留存”三者结合。原有脚本缺失定时与状态留存模块,导致刷新异常,按本文提供的完整脚本配置,配合引擎定时器设置,即可满足需求。若遇到异常,优先排查定时器启用状态、变量配置及怪物存活判断函数,基本可快速解决问题。