新勇闯天关是BLUE引擎下的一种多时段限时闯关活动。活动在每天固定时间开放,玩家进入后逐层推进,每层消灭20个天关精灵自动传入下一层,率先到达第八关的玩家可开启天关宝藏获得稀有奖励,其他完成通关的玩家获得经验奖励。整个系统涉及入口NPC脚本、等待室传送、逐层推进检测、全局变量控制、定时器管理和名单持久化六个模块。以下从完整脚本范例入手,逐段拆解编写方法。
## 活动入口NPC完整脚本
在Market_Def目录下新建NPC脚本文件,写入以下内容:
```
[@main]
<COLOR=clYellow 勇闯天关:>每天的<COLOR=clAqua 11点、15点、22点50><开放,30分钟后关闭入口>
<COLOR=clLime 活动规则:活动共分七关,消灭每层怪物达到20个自动传入下一关。>
<COLOR=clLime 活动开始后第一个到达第八关的勇士可以开启天关宝藏。>
开启宝藏奖励范围:<COLOR=clFuchsia 海量元宝,三大特戒,皓月、传奇衣服>
其它完成通关奖励:<COLOR=clFuchsia 五亿经验+一亿内功经验>
<COLOR=252 当前获得第一名的勇士:>〖<$STR(A34)>〗
<COLOR=252 开启天关宝藏获得奖励:>〖<$STR(A67)>〗
<挑战天关/@tianguan1a>
<COLOR=clLtGray 任务提示:每次活动只有一次挑战机会,请小心哦。>
```
[@main]段展示活动介绍界面。BLUE引擎的颜色代码使用COLOR=clYellow的格式,与GOM引擎的SCOLOR参数不同。clYellow为黄色,clAqua为淡蓝色,clLime为亮绿色,clFuchsia为紫红色,clLtGray为浅灰色。<$STR(A34)>和<$STR(A67)>分别读取全局A变量中存储的第一名玩家名称和宝藏开启记录。
## 进入条件检测与等待室传送
[@tianguan1a]段是进入活动的核心判断逻辑:
```
[@tianguan1a]
#IF
equal G76 1
#ELSEACT
messagebox 勇闯天关活动尚未开始!勇闯天关活动开启时间为:每天的11点、15点、22点50开放进入,30分钟后关闭入口!
BREAK
#IF
CHECKNAMELIST ..\QuestDiary\数据整理\天关活动.txt
#ACT
messagebox 〖提示〗勇闯天关活动每次开放只有一次挑战机会!请等待下次活动开始!
BREAK
#IF
equal G76 1
#ACT
SET [52] 0
mov m1 0
mov m2 0
mov m3 0
mov m4 0
mov m5 0
mov m6 0
mov m7 0
MAPMOVE TIANGUAN1
ADDNAMELIST ..\QuestDiary\数据整理\天关活动.txt
SetScTimer 5 1
SENDMSG 7 〖提示〗:挑战活动开始!消灭每层地图内20个天关精灵将传送入下一关!
SENDMSG 0 玩家〖%s〗进入勇闯天关活动地图,终极大奖花落谁家,我们拭目以待! 0 255 30
BREAK
#ELSEACT
messagebox 勇闯天关活动入口已关闭!
BREAK
```
第一段#IF检测全局变量G76的值是否为1。G76为1表示活动已开放,不等于1则弹出MESSAGEBOX提示活动未开始。第二段检测玩家名字是否在活动名单文件中,CHECKNAMELIST命令格式为“CHECKNAMELIST 文件路径”,文件路径使用相对路径写法。如果在名单中,说明本次活动中该玩家已经进入过一次,弹出提示阻止重复进入。第三段执行进入操作:SET [52] 0重置逻辑变量,mov m1 0至mov m7 0将七个个人变量归零,MAPMOVE TIANGUAN1传送到天关第一层地图。ADDNAMELIST将玩家名字写入活动名单文件,防止重复挑战。SetScTimer 5 1启动编号为5的秒级定时器,参数1表示1秒间隔触发。
SENDMSG 7是BLUE引擎的客户端居中提示消息,SENDMSG 0是全服广播消息。消息末尾的“0 255 30”是BLUE引擎特有的前景色、背景色参数。
## 等待室传送脚本
活动正式开启前,玩家可以在等待室等待。等待室脚本使用时间检测实现自动传送:
```
[@tianguan1abbb]
#IF
equal G76 1
HOUR 10 10
MIN 57 58
#ACT
give 回城卷 1
MAPMOVE huodong
SENDMSG 0 玩家〖%s〗进入勇闯天关活动等待室,活动即将开始,终极大奖花落谁家,我们拭目以待!
SENDMSG 7 〖天关活动提示〗:进入活动地图,此地图为安全模式,请等待挑战活动开始!
messagebox 请在活动地图内稍等,挑战天关活动2分钟后开始!
BREAK
```
HOUR 10 10表示小时等于10,MIN 57 58表示分钟在57到58之间,两个条件同时满足才执行传送。BLUE引擎的HOUR和MIN命令参数格式为“HOUR 起始值 结束值”。到达指定时间后,玩家被传送到活动等待室地图huodong,并收到系统提示。
## 逐层推进与怪物清空检测
天关共分七层,每层地图配置独立的怪物。在MapQuest.txt中为每层地图绑定死亡触发:
```
TIANGUAN1 [001] 0 天关精灵 * 1:@天关一层通关
TIANGUAN2 [002] 0 天关精灵 * 1:@天关二层通关
TIANGUAN3 [003] 0 天关精灵 * 1:@天关三层通关
TIANGUAN4 [004] 0 天关精灵 * 1:@天关四层通关
TIANGUAN5 [005] 0 天关精灵 * 1:@天关五层通关
TIANGUAN6 [006] 0 天关精灵 * 1:@天关六层通关
TIANGUAN7 [007] 0 天关精灵 * 1:@天关七层通关
```
在QFunction-0.txt中添加各层的通关检测脚本,使用CheckMapSameMonCount命令检测指定地图上指定怪物的剩余数量:
```
[@天关一层通关]
#IF
CheckMapSameMonCount TIANGUAN1 天关精灵 > 0
#ACT
BREAK
#IF
CheckMapSameMonCount TIANGUAN1 天关精灵 = 0
#ACT
INC m1 1
MAPMOVE TIANGUAN2
SENDMSG 6 恭喜通过第一层!你已进入天关第二层。
SENDMSG 0 玩家〖%s〗通过了勇闯天关第一层!
BREAK
```
CheckMapSameMonCount的格式为“CheckMapSameMonCount 地图名称 怪物名称 控制符 数量”。第一段检测判断怪物是否还有存活,有则直接BREAK结束。第二段判断怪物全部清空时,INC m1 1将第一层的通关计数加1,MAPMOVE TIANGUAN2传送到第二层。
各层通关脚本结构一致,只需修改地图标识、怪物名称、个人变量编号和传送目标。最后一层通关脚本执行奖励发放:
```
[@天关七层通关]
#IF
CheckMapSameMonCount TIANGUAN7 天关精灵 > 0
#ACT
BREAK
#IF
CheckMapSameMonCount TIANGUAN7 天关精灵 = 0
#ACT
GIVE 回城卷 1
CHANGEEXP + 500000000
CHANGEIPEXP + 100000000
SENDMSG 0 玩家〖%s〗成功通关勇闯天关,获得五亿经验+一亿内功经验!
MAPMOVE 3 330 330
BREAK
```
CHANGEEXP命令直接增加角色经验值,CHANGEIPEXP增加内功经验。BLUE引擎的CHANGEEXP命令参数格式为“CHANGEEXP + 数量”,+号代表增加,-号代表减少。
## 全局变量控制活动开关
天关活动的开启和关闭通过全局变量G76控制。G76的值为1时活动开放,为0时活动关闭。这个变量需要在QManage.txt的[@OnStart]段中初始化。BLUE引擎的QManage脚本支持[@OnInit]和[@OnStart]两个新的执行时机,[@OnStart]在游戏启动时运行一次,适合用于全局自定义变量声明。
```
[@OnStart]
#ACT
VAR INTEGER GLOBAL G76
SETVAR GLOBAL G76 0
BREAK
```
VAR INTEGER GLOBAL G76声明一个全局整数型变量。SETVAR GLOBAL G76 0将变量初始值设为0,表示活动默认关闭。BLUE引擎的全局变量不再保存在!setup.txt中,改为保存到QuestParams.ini文件,旧版脚本使用SAVEVAR写入setup.txt的方式在2024年10月之后的引擎版本中可能失效。
活动定时开启通过AutoRunRobot.txt配置定时任务实现:
```
#AutoRunNPC HOUR 11 @天关开启
#AutoRunNPC HOUR 15 @天关开启
#AutoRunNPC HOUR 22 @天关开启
```
在RobotManage.txt中添加对应的执行标签:
```
[@天关开启]
#IF
CHECKGLOBALVAR G76 = 0
#ACT
SETVAR GLOBAL G76 1
SENDMSG 0 勇闯天关活动已开启!请前往天关使者处进入挑战!
SENDMSG 0 勇闯天关活动已开启!请前往天关使者处进入挑战!
BREAK
```
SETVAR GLOBAL G76 1将活动开关设为开放状态。CHECKGLOBALVAR检测当前变量值,防止重复开启。
## 活动名单持久化处理
天关活动名单文件使用ADDNAMELIST和CHECKNAMELIST命令管理。名单文件路径为“..\QuestDiary\数据整理\天关活动.txt”,路径中的“数据整理”目录需要手动创建,确保引擎对该目录有读写权限。
活动结束时需要清空名单文件,让下一轮活动可以正常开始。在RobotManage.txt中添加清理标签:
```
[@天关关闭]
#IF
CHECKGLOBALVAR G76 = 1
#ACT
SETVAR GLOBAL G76 0
CLEARNAMELIST ..\QuestDiary\数据整理\天关活动.txt
SENDMSG 0 勇闯天关活动已结束,入口已关闭。
BREAK
```
CLEARNAMELIST命令清空指定名单文件中的所有名字。定时关闭通过AutoRunRobot.txt配置:
```
#AutoRunNPC MIN 30 @天关关闭
```
MIN 30表示每30分钟触发一次关闭标签。由于活动只在特定时间开启,关闭标签需要配合时间检测使用,或者将关闭时间精确设置在活动开启后30分钟:
```
#AutoRunNPC HOUR 11 @天关关闭延时
```
在RobotManage.txt中添加延时关闭标签,通过SetScTimer设置30分钟倒计时后执行关闭。部分版本使用DelayCall命令实现延时跳转,但DelayCall在服务器重启后可能丢失,建议使用定时器方式。
## 宝藏开启与奖励发放
活动开始后第一个到达第八关的玩家可以开启天关宝藏。第八关地图设置为宝藏房间,玩家进入后通过NPC开启宝藏。宝藏开启脚本记录第一名玩家名称和奖励内容:
```
[@开启宝藏]
#IF
CheckMapHumanCount TIANGUAN8 = 1
CHECKGLOBALVAR A34 = ""
#ACT
SETVAR GLOBAL A34 <$USERNAME>
GIVE 皓月神剑 1
GIVE 传奇战甲 1
GAMEGOLD + 50000
SENDMSG 0 玩家〖%s〗率先到达第八关,成功开启天关宝藏!
SENDMSG 0 玩家〖%s〗获得海量元宝、皓月神剑和传奇战甲!
BREAK
```
CHECKGLOBALVAR A34 = ""检测全局字符变量A34是否为空,确保只有第一个到达的玩家能开启宝藏。SETVAR GLOBAL A34 <$USERNAME>将玩家名字写入全局变量。GIVE发放装备,GAMEGOLD增加元宝。A34变量名以A开头,属于BLUE引擎的全局字符型变量体系,可保存,服务器关闭后不会丢失。
## BLUE引擎适配要点
**颜色代码**。BLUE引擎使用COLOR=clYellow格式,与GOM引擎的SCOLOR=参数不同。clYellow为黄色,clAqua为淡蓝色,clLime为亮绿色,clFuchsia为紫红色,clLtGray为浅灰色。
**变量体系**。BLUE引擎的全局变量G0-G999为数字型可保存变量,A0-A99为字符型可保存变量,I0-I99为数字型不可保存变量(重启归零)。个人变量M0-M99为数字型,小退后归零。脚本中使用M1至M7记录七层的通关计数,使用G76记录活动开关,使用A34和A67记录第一名玩家和宝藏开启记录。
**定时器**。BLUE引擎使用SETSCIMER和KILLSCIMER控制定时器,与GOM引擎的SetOnTimer命令不同。SETSCIMER的参数为“定时器编号 间隔秒数”,编号5对应QFunction.txt中的[@OnTimer5]标签。活动脚本中使用SetScTimer 5 1启动秒级定时器,需要在QFunction.txt中编写对应的[@OnTimer5]处理逻辑。
**MAPMOVE命令**。BLUE引擎的MAPMOVE命令格式为“MAPMOVE 地图标识 X坐标 Y坐标”,省略坐标参数时使用地图默认出生点。地图标识建议使用英文数字编号,避免中文编码解析异常。
**SENDMSG格式**。BLUE引擎的SENDMSG命令支持在末尾添加前景色和背景色参数,格式为“SENDMSG 频道号 消息内容 前景色 背景色”。频道0为全服公告,7为客户端居中提示,6为个人系统提示。
## 部署验证步骤
脚本文件放入对应目录后,在M2控制台执行重新加载所有NPC和重载机器人脚本。用一个测试角色与NPC对话,依次验证以下环节:活动未开放时G76=0是否正确弹出MESSAGEBOX提示、活动开放后G76=1是否正确传送并写入名单文件、重复进入时CHECKNAMELIST是否正确拦截、击杀每层20只怪物后是否自动传送到下一层、最后一层通关后经验奖励是否正确发放、活动结束时名单文件是否被清空。
如果活动开放后玩家无法进入,检查G76变量在[@OnStart]段中是否正确声明并初始化,以及AutoRunRobot.txt中的定时任务是否在正确的时间点触发了[@天关开启]标签。如果逐层传送不生效,检查MapQuest.txt中的触发编号和QFunction-0.txt中的标签名是否一一对应,以及CheckMapSameMonCount命令中的地图名称与MonGen.txt中的地图标识是否一致。如果名单文件在活动结束后未被清空,检查CLEARNAMELIST命令的文件路径写法是否与ADDNAMELIST一致,路径不一致会导致清理无效。
blue传奇引擎新勇闯天关系统脚本编写与配置详解
来源:
作者:
点击:

