实现攻城结束后5分钟自动弹出奖励领取窗口,并在领取后向全服广播彩色提示,需结合定时器、角色状态判断、界面触发与全局消息发送。以下为完整脚本逻辑,适用于Hero、GOM等主流引擎。
第一步:监听攻城结束事件
在QManage.txt或QFunction-0.txt中捕获攻城结束信号。多数引擎在攻城结束时会触发[@CastleWarEnd]标签:
[@CastleWarEnd]
; 攻城战结束,启动5分钟延迟
ACT
TIMERECALL 沙巴克奖励 300 ; 300秒=5分钟,自定义事件名“沙巴克奖励”
注:TIMERECALL为Hero/GOM支持的延时触发指令,部分引擎用DELAYCALL或RUNSCRIPT配合计时NPC。
第二步:5分钟后检测沙城主并弹窗
创建独立脚本文件(如EnvirQuestDiaryCastleReward.txt),并在TIMERECALL后执行:
[@沙巴克奖励]
; 获取当前沙巴克城主行会
ACT
MOV S1 ; 引擎内置变量,返回城主行会名称
; 若无城主(攻城失败),则跳过
IF
EQUAL S1
ACT
RETURN
; 遍历全服玩家,查找该行会掌门
KILLMONEXPRANGE 0 0 0 ; 清空临时变量(可选)
MAPALLCALL @检查是否掌门
由于无法直接遍历玩家,改用“当玩家在线且符合条件时触发”的被动方式。更可靠做法是:在QFunction-0.txt中添加登录/心跳检测,但为简化,采用以下方案:
在[@沙巴克奖励]中仅记录状态,由玩家主动触发检测:
[@沙巴克奖励]
ACT
MOV G999 1 ; 设置全局标志:可领取奖励
MOV S0 ; 保存城主行会名到G998(字符串需转存)
MOV G998
SENDMSG 0 沙巴克奖励系统已激活。
第三步:玩家进入游戏时检测资格并弹窗
在QFunction-0.txt中添加登录后检测:
[@Login]
IF
EQUAL G999 1 ; 奖励已激活
HAVEGUILD
ISGUILDMASTER
ACT
MOV S0
IF
EQUAL S0 ; 玩家行会=城主行会
ACT
OPENMERCHANT 天下第一城主奖励 ; 弹出对话框(需提前注册NPC)
但此方法依赖玩家重新登录。为实现实时弹窗,需在玩家每5秒心跳中检测(通过[@UserTimer5]):
[@UserTimer5]
IF
EQUAL G999 1
HAVEGUILD
ISGUILDMASTER
ACT
MOV S0
IF
EQUAL S0
ACT
; 防止重复弹窗
CHECKVAR HUMAN RewardClaimed == 0
ACT
SET [RewardClaimed] 1
DIALOGBOX 沙城主奖励领取确认|您作为沙巴克城主,可领取专属奖励!||
DIALOGBOX为GOM/Hero支持的客户端弹窗指令,格式:标题|内容|按钮1|按钮2。
第四步:处理领取逻辑并全服广播
在QFunction-0.txt中添加领取分支:
[@领取沙城奖]
; 再次验证身份(防作弊)
IF
EQUAL G999 1
HAVEGUILD
ISGUILDMASTER
ACT
MOV S0
IF
EQUAL S0
ACT
; 发放奖励(示例:100万金币+屠龙)
CREDITPOINT + 1000000
GIVE 40 1 ; 屠龙代码40
; 重置领取状态
MOV G999 0
; 全服彩色公告
SendCenterMsg 253 1 【沙城公告】作为沙巴克城主,已领取荣耀奖励!
; 彩色字体通过颜色代码实现(253=金色,250=红色等)
BREAK
ELSEACT
MESSAGEBOX 身份不符,无法领取奖励。
第五步:注册奖励NPC(若使用OPENMERCHANT)
在Market_def下创建CastleReward.txt:
[@main]
您已获得沙城主奖励资格!
并在!Setup.txt中注册:
NCastleReward 0 0 CastleReward.txt
关键细节说明
城主识别:返回行会名称,非角色名。必须通过ISGUILDMASTER+行会名匹配确认掌门身份。
防重复领取:使用HUMAN变量RewardClaimed标记已弹窗,避免每5秒弹一次。
全服提示颜色:SendCenterMsg第二参数为颜色ID,250-255对应不同颜色(253常用作金色公告)。
时间精度:TIMERECALL从攻城结束瞬间计时,不受服务器卡顿影响。
多城主处理:若攻城方有多个行会联合,通常仅首个占领行会为城主,脚本无需额外处理。
完整流程总结
攻城结束 → 启动5分钟定时器 → 到时设置全局可领取标志 → 在线掌门玩家触发弹窗 → 点击领取 → 验证身份 → 发放物品 → 全服彩色公告 → 清除标志。
此方案无需外部工具,纯脚本实现,兼容主流传奇服务端引擎。

