传奇脚本实现BOSS死亡倒计时刷新及数量限制逻辑

来源: 作者: 点击:
在传奇引擎的脚本编写中,要实现BOSS死亡后触发固定时长倒计时,并在倒计时结束后刷新,同时严格限制地图内同一时间只存在一只BOSS,核心在于利用全局变量进行状态标记与计时。单纯依靠引擎自带的刷新配置文件无法满足“死后倒计时”这一动态需求,必须通过QManage.txt(人物上线/全局脚本)或地图触发脚本来配合定时器指令完成。

核心变量与逻辑设计

实现该功能需要定义两个关键的整型全局变量(G变量):
G(100):作为“刷新状态标记”。0代表冷却中(不刷),1代表允许刷新。
G(101):作为“倒计时计数器”。用于存储剩余的等待秒数。

逻辑流程如下:
检测阶段:脚本每隔一定时间(如1秒)运行一次。
存在性检查:首先检测地图上是否存在蚩尤。如果存在,不做任何操作,直接退出脚本(确保不会刷出第二只)。
状态判断:如果地图上不存在蚩尤,检查G(100)。
若G(100)为0(冷却中):执行倒计时逻辑,G(101)减1。当G(101)减至0时,将G(100)设为1(允许刷新)。
若G(100)为1(允许刷新):执行刷怪指令,并在刷怪后立即将G(100)重置为0,同时重置G(101)为1800秒(30分钟),进入下一轮冷却。

脚本代码实现

以下代码应放置在QManage.txt中,并配合引擎的[@Main]或自定义定时器循环调用。假设蚩尤的刷新坐标为X:50, Y:50,地图号为3(需根据实际情况修改)。

; 脚本名称:QManage.txt
; 功能:蚩尤BOSS死亡倒计时刷新控制

[@Main]
; 1. 检测地图上是否已有蚩尤 (假设怪物名为 蚩尤, 地图号为 3)
; CheckMonCount 地图号 数量
IF
CheckMonCount 3 蚩尤 > 0
ACT
; 如果地图上已经有蚩尤,什么都不做,直接重置变量防止重复刷
GVAR G100 = 0
GVAR G101 = 0
BREAK

; 2. 如果地图上没有蚩尤,检查是否处于冷却时间
; G100 = 0 表示冷却中, G100 = 1 表示冷却结束可以刷
IF
EQUAL G100 0
ACT
; --- 进入倒计时逻辑 ---
; G101 存储剩余秒数,30分钟 = 1800秒
; 如果G101为0,说明是刚服重启或初始状态,需要初始化
CALCVAR G101 = 0 + 1800
; 设置状态为冷却中
MOV G100 0
GOTO @CountDown

ELSEACT
; --- 倒计时递减逻辑 ---
; 每秒减少1秒
CALCVAR G101 = G101 - 1
GOTO @CountDown

; --- 倒计时结束判断 ---
[@CountDown]
IF
SMALL G101 1
ACT
; 倒计时结束,允许刷新
MOV G100 1
GOTO @SpawnBoss
ELSEACT
; 倒计时未结束,不刷新,等待下一次循环
; 可选:此处可添加提示语告诉玩家还有多久刷新
; SENDMSG 6 蚩尤正在沉睡,剩余时间:%d 秒. G101
BREAK

; --- 执行刷新 ---
[@SpawnBoss]
IF
; 双重保险:再次确认地图上没怪
CheckMonCount 3 蚩尤 = 0
ACT
; 刷新蚩尤,数量1只,坐标(50, 50)
MonGen 蚩尤 1 50 50
; 发送全服提示
SENDMSG 7 蚩尤已苏醒,速去挑战!
; 重置状态为冷却中(虽然上面逻辑会自动处理,但显式重置更稳妥)
MOV G100 0
; 重置倒计时为30分钟(1800秒)
MOV G101 1800
BREAK

引擎定时器配置

脚本写好后,必须让引擎每秒执行一次该逻辑。在M2Server引擎的“M2选项”或“脚本设置”中,找到“QManage触发间隔”或“自定义脚本定时器”。

设置触发脚本:选择QManage.txt。
设置触发时间:1000(毫秒)。
确保[@Main]标签存在,因为这是引擎默认调用的入口。

关键技术点解析

防重复刷新:脚本第一行CheckMonCount是核心。只要地图上检测到怪物,脚本就会通过BREAK直接跳出,不再执行后续的倒计时或刷新逻辑。这保证了无论脚本运行多少次,只要BOSS活着,就不会刷出第二只。
掉线/重启保护:使用G变量(全局变量)而非临时变量,是因为G变量在服务端重启前会一直保存在内存中。如果服务器重启,EQUAL G100 0和SMALL G101 1的判断逻辑会自动将时间重置为30分钟,防止服务器重启后BOSS立即刷新导致逻辑混乱。如果需要更高级的“记忆”功能(即服务器重启后继续之前的倒计时),则需要将时间戳写入数据库(DB变量),但这对于普通单机或简单设置来说过于复杂,上述G变量方案已足够应对常规需求。
时间计算:30分钟换算为秒是1800。脚本通过每秒减1的方式模拟倒计时。如果希望缩短测试时间,可以将1800改为60(1分钟)进行测试。