传奇攻城结束自动发放沙城主奖励脚本实现

来源: 作者: 点击:
攻城战结束后延迟5分钟,向两名沙巴克城主推送奖励领取窗口,并在全服广播彩色提示,需结合定时器、玩家状态检测与界面调用。以下为完整脚本逻辑,基于标准引擎语法,无需外部插件。

一、前置条件设置
在MapInfo.txt中确认沙巴克地图编号(通常为3);
在GuildBase.txt中开启行会攻城功能;
确保服务端支持、等变量。

二、核心触发:攻城结束事件
在QFunction-0.txt中添加攻城结束监听标签:

[@CastleWarEnd]
ACT
TIMER 300 GIVE_CASTLE_REWARD

说明:
[@CastleWarEnd] 为系统预设标签,攻城结束时自动触发;
TIMER 300 表示300秒(5分钟)后执行GIVE_CASTLE_REWARD标签。

三、奖励发放主逻辑
在QFunction-0.txt中定义GIVE_CASTLE_REWARD标签:

[GIVE_CASTLE_REWARD]
ACT
; 获取沙巴克当前行会名称
MOV S0
; 判断是否有行会占领
IFEQUAL S0 ""
BREAK
ENDIF

; 获取行会会长名称(城主1)
MOV S1
; 获取副城主(假设为行会副会长)
MOV S2

; 向城主1推送对话框
SENDMSG S1 18

; 若副城主存在,向其推送
IFNOTEQUAL S2 ""
SENDMSG S2 18
ENDIF

关键点:
返回地图3的占领行会名;
SENDMSG X 18 用于向指定玩家弹出带按钮的对话框(18为特殊消息类型);
副城主字段名可能因版本而异,若无VICEMASTER,可改用固定职位或手动配置名单。

四、玩家点击领取处理
在QFunction-0.txt中添加领取响应标签:

[@GetCastleReward]
IF
; 验证玩家是否为当前城主或副城主
EQUAL
OR
EQUAL
ACT
; 发放奖励(示例:元宝+装备)
GAMEGOLD + 5000
GIVE 沙巴克之戒 1
; 全服彩色公告
GuildNoticeMsg 9 250 ぐ【沙城奖励】:『』领取了沙巴克城主专属奖励!
CLOSE
ELSESAY
你不是现任沙城管理者,无法领取奖励。


说明:
GuildNoticeMsg 9 250 中,9表示顶部滚动公告,250为RGB颜色值(此处为红色);
CLOSE 自动关闭对话框,避免重复点击。

五、异常处理与兼容性
无占领行会:在[GIVE_CASTLE_REWARD]开头判断S0是否为空,避免空指针错误;
副城主缺失:若版本不支持VICEMASTER,可改为读取行会成员列表前两名,或仅奖励会长;
重复领取防护:在发放后设置标志位,如:

SET [CASTLE_REWARD_] 1
SAVEVAR HUMAN CASTLE_REWARD_FLAG 1

并在[@GetCastleReward]开头检查该标志。

六、测试要点
手动触发[@CastleWarEnd]模拟攻城结束;
使用两个账号分别担任会长、副会长,验证双人推送;
检查非城主玩家点击链接是否被拒绝;
确认公告颜色在客户端正常显示(部分版本需调整RGB数值)。

此方案通过系统事件+定时器+定向消息推送,实现攻城奖励自动化,符合仿盛大传奇机制,所有操作均在标准脚本框架内完成。