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

传奇脚本实现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:50Y:50,地图号为3(需根据实际情况修改)。

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

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

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

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

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

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

引擎定时器配置

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

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

关键技术点解析

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