传奇攻沙结束自动弹窗奖励与全服公告脚本

来源: 作者: 点击:
实现逻辑与文件配置

该功能需结合Robot机器人脚本与NPC触发脚本实现。核心流程为:攻城结束5分钟后,机器人自动检测当前沙城主并对其执行特定脚本标签,强制弹出大对话框;城主领取后,使用SendCenterMsg命令向全服发送彩色居中公告。

涉及文件清单:
• Robot.txt 与 RobotManage.txt:位于Mir200\Envir\Robot_def\,用于定时触发。

- QManage.txt:位于Mir200\Envir\MapQuest_def\,用于处理登录触发与机器人调用。
- QFunction-0.txt:位于Mir200\Envir\Market_Def\,用于处理点击对话框按钮事件。

第一步:机器人定时检测脚本

在Robot.txt中设置攻城结束后5分钟(假设攻城22:00结束,则设为22:05)执行检测任务。
# Robot.txt 内容
# 设置每天22:05分执行一次“攻沙奖励检测”标签
5 22 * * * @攻沙奖励检测


在RobotManage.txt中编写具体的检测逻辑:
[@攻沙奖励检测]
#IF
; 检测今日是否已发放过奖励(防止重复弹窗)
CHECKVAR GLOBAL $今日沙城奖励发放 != 1
; 检测当前是否有沙巴克占领行会
CHECKCASTLEMASTEREX
#ACT
; 获取当前沙城主的名字并存入全局变量
GETCASTLEMASTERNAME $STR(G999)
; 对全服玩家执行“@攻沙奖励触发”标签(仅沙城主会响应)
Gmexecute 开始提问 @攻沙奖励触发
; 标记奖励已触发,防止重复
CALCVAR GLOBAL $今日沙城奖励发放 = 1
SAVEVAR GLOBAL $今日沙城奖励发放 ..\QuestDiary\全局变量.txt
#ELSEACT
; 可选:无沙城主或已发放时的处理
; SENDMSG 0 今日攻沙奖励条件未满足或已领取。 0


第二步:强制弹出城主领取对话框

在QManage.txt的[@Login]部分下方,或在QFunction-0.txt中,添加被机器人调用的标签。
[@攻沙奖励触发]
#IF
; 关键判断:检查触发者是否为当前沙城主
ISCASTLEMASTER
; 可选:检查此人今日是否已领过(使用个人变量)
CHECK [801] 0
#ACT
; 强制弹出大对话框(参数根据你的素材调整)
OPENMERCHANTBIGDLG 0 801 1 4 0 0 0
; 设置一个标志,防止短时间内重复弹窗
SET [801] 1
BREAK


对话框脚本(BigDlg)内容:
此部分需配合自定义大对话框素材(编号801)。脚本写在QFunction-0.txt中。
[@领取沙城奖励]
#IF
ISCASTLEMASTER
CHECK [802] 0 ; 检查最终领取标志
#ACT
; 发放奖励(示例:100万元宝)
GAMEGOLD + 1000000
; 设置已领取标志
SET [802] 1

; !!!核心:全服彩色居中公告!!!
; 格式:SendCenterMsg 前景色 背景色 文字 模式(1=全服) 显示时间
SendCenterMsg 251 0 【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝! 1 5
SendCenterMsg 253 0 【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝! 1 5
SendCenterMsg 254 0 【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝! 1 5

; 关闭对话框
CloseBigDialogBox
#ELSEACT
MESSAGEBOX 领取失败:您不是沙城主或已领取过奖励。


第三步:重置与维护脚本

为避免次日无法领取,需在凌晨通过机器人重置变量。

在Robot.txt中添加:
# 每天凌晨0点重置奖励发放状态
0 0 * * * @重置攻沙奖励


在RobotManage.txt中添加:
[@重置攻沙奖励]
#ACT
; 重置全局发放标记
CALCVAR GLOBAL $今日沙城奖励发放 = 0
SAVEVAR GLOBAL $今日沙城奖励发放 ..\QuestDiary\全局变量.txt
; 清理全服玩家的个人领取标记(需配合GMEXECUTE或循环)
Gmexecute Reset [802]
BREAK


关键命令解析与避坑指南

1. 强制弹窗命令:OPENMERCHANTBIGDLG是Hero引擎通用命令,参数801为自定义大对话框图片编号,需在NewopUI.Pak或补丁中制作对应素材。
2. 全服彩色公告:SendCenterMsg命令的模式参数必须设为1(全服广播)。多行不同颜色的SendCenterMsg可实现滚屏彩色效果。%s会自动替换为玩家名字。
3. 权限判断:所有领取环节必须严格使用ISCASTLEMASTER检测,防止非城主玩家通过命令直接调用@领取沙城奖励标签作弊。
4. 变量冲突:脚本中使用的G999、[801]、[802]为示例变量,部署前需检查版本中这些变量是否已被其他系统占用,建议使用冷门编号(如G950-G999)。

效果验证流程

1. 设置攻城时间为22:00结束。
2. 等待22:05分,观察沙城主屏幕是否自动弹出领取窗口。
3. 点击领取后,观察自己及其他玩家屏幕中央是否出现彩色公告。
4. 小退重登后,检查是否因[802]标志存在而无法重复领取。