实现逻辑与文件配置
该功能需结合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分执行一次“攻沙奖励检测”标签
522***@攻沙奖励检测
在RobotManage.txt中编写具体的检测逻辑:
[@攻沙奖励检测]
#IF
;检测今日是否已发放过奖励(防止重复弹窗)
CHECKVARGLOBAL$今日沙城奖励发放!=1
;检测当前是否有沙巴克占领行会
CHECKCASTLEMASTEREX
#ACT
;获取当前沙城主的名字并存入全局变量
GETCASTLEMASTERNAME$STR(G999)
;对全服玩家执行“@攻沙奖励触发”标签(仅沙城主会响应)
Gmexecute开始提问@攻沙奖励触发
;标记奖励已触发,防止重复
CALCVARGLOBAL$今日沙城奖励发放=1
SAVEVARGLOBAL$今日沙城奖励发放..\QuestDiary\全局变量.txt
#ELSEACT
;可选:无沙城主或已发放时的处理
;SENDMSG0今日攻沙奖励条件未满足或已领取。0
第二步:强制弹出城主领仍话框
在QManage.txt的[@Login]部分下方,或在QFunction-0.txt中,添加被机器人调用的标签。
[@攻沙奖励触发]
#IF
;关键判断:检查触发者是否为当前沙城主
ISCASTLEMASTER
;可选:检查此人今日是否已领过(使用个人变量)
CHECK[801]0
#ACT
;强制弹出大对话框(参数根据你的素材调整)
OPENMERCHANTBIGDLG080114000
;设置一个标志,防止短时间内重复弹窗
SET[801]1
BREAK
对话框脚本(BigDlg)内容:
此部分需配合自定义大对话框素材(编号801)。脚本写在QFunction-0.txt中。
[@领取沙城奖励]
#IF
ISCASTLEMASTER
CHECK[802]0;检查最终领取标志
#ACT
;发放奖励(示例:100万元宝)
GAMEGOLD+1000000
;设置已领取标志
SET[802]1
;!!!核心:全服彩色居中公告!!!
;格式:SendCenterMsg前景色背景色文字模式(1=全服)显示时间
SendCenterMsg2510【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝!15
SendCenterMsg2530【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝!15
SendCenterMsg2540【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝!15
;关闭对话框
CloseBigDialogBox
#ELSEACT
MESSAGEBOX领取失败:您不是沙城主或已领取过奖励。
第三步:重置与维护脚本
为避免次日无法领取,需在凌晨通过机器人重置变量。
在Robot.txt中添加:
#每天凌晨0点重置奖励发放状态
00***@重置攻沙奖励
在RobotManage.txt中添加:
[@重置攻沙奖励]
#ACT
;重置全局发放标记
CALCVARGLOBAL$今日沙城奖励发放=0
SAVEVARGLOBAL$今日沙城奖励发放..\QuestDiary\全局变量.txt
;清理全服玩家的个人领取标记(需配合GMEXECUTE或循环)
GmexecuteReset[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]标志存在而无法重复领取。
该功能需结合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分执行一次“攻沙奖励检测”标签
522***@攻沙奖励检测
在RobotManage.txt中编写具体的检测逻辑:
[@攻沙奖励检测]
#IF
;检测今日是否已发放过奖励(防止重复弹窗)
CHECKVARGLOBAL$今日沙城奖励发放!=1
;检测当前是否有沙巴克占领行会
CHECKCASTLEMASTEREX
#ACT
;获取当前沙城主的名字并存入全局变量
GETCASTLEMASTERNAME$STR(G999)
;对全服玩家执行“@攻沙奖励触发”标签(仅沙城主会响应)
Gmexecute开始提问@攻沙奖励触发
;标记奖励已触发,防止重复
CALCVARGLOBAL$今日沙城奖励发放=1
SAVEVARGLOBAL$今日沙城奖励发放..\QuestDiary\全局变量.txt
#ELSEACT
;可选:无沙城主或已发放时的处理
;SENDMSG0今日攻沙奖励条件未满足或已领取。0
第二步:强制弹出城主领仍话框
在QManage.txt的[@Login]部分下方,或在QFunction-0.txt中,添加被机器人调用的标签。
[@攻沙奖励触发]
#IF
;关键判断:检查触发者是否为当前沙城主
ISCASTLEMASTER
;可选:检查此人今日是否已领过(使用个人变量)
CHECK[801]0
#ACT
;强制弹出大对话框(参数根据你的素材调整)
OPENMERCHANTBIGDLG080114000
;设置一个标志,防止短时间内重复弹窗
SET[801]1
BREAK
对话框脚本(BigDlg)内容:
此部分需配合自定义大对话框素材(编号801)。脚本写在QFunction-0.txt中。
[@领取沙城奖励]
#IF
ISCASTLEMASTER
CHECK[802]0;检查最终领取标志
#ACT
;发放奖励(示例:100万元宝)
GAMEGOLD+1000000
;设置已领取标志
SET[802]1
;!!!核心:全服彩色居中公告!!!
;格式:SendCenterMsg前景色背景色文字模式(1=全服)显示时间
SendCenterMsg2510【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝!15
SendCenterMsg2530【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝!15
SendCenterMsg2540【系统】恭喜沙巴克城主【%s】领取了攻沙奖励100万元宝!15
;关闭对话框
CloseBigDialogBox
#ELSEACT
MESSAGEBOX领取失败:您不是沙城主或已领取过奖励。
第三步:重置与维护脚本
为避免次日无法领取,需在凌晨通过机器人重置变量。
在Robot.txt中添加:
#每天凌晨0点重置奖励发放状态
00***@重置攻沙奖励
在RobotManage.txt中添加:
[@重置攻沙奖励]
#ACT
;重置全局发放标记
CALCVARGLOBAL$今日沙城奖励发放=0
SAVEVARGLOBAL$今日沙城奖励发放..\QuestDiary\全局变量.txt
;清理全服玩家的个人领取标记(需配合GMEXECUTE或循环)
GmexecuteReset[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]标志存在而无法重复领取。

