新版本沙城奖励脚本建议按“占领时立即公告+城主上线领奖+每日税箱发元宝+连胜加成+防御成员领福利”五层做,不用单一Give死写奖励,避免城主不上线就发不出去。脚本主体放Envir\QuestDiary,Market_Def建领奖NPC,Robot_def定时发每日奖,QFunction处理攻城结束事件。城堡索引按引擎写,M2城堡管理里可看到当前城名和索引。
一、占领瞬间发奖与公告
QuestDiary\沙巴克\攻城结束.txt:
[@CastleBattleEnd]
if
EQUAL SCASTLEOWNERNAME 攻城成功行会名
act
SENDMSG 1 <$SCASTLEOWNERNAME>行会已攻占沙巴克,全服发放攻城参与奖。
城主单独奖励在QFunction或QuestDiary城堡占领触发段:
[@CastleCapture]
if
act
SETCASTLEOWNERGOLD 沙巴克 元宝 5000
SENDMSG 1 <$SCASTLEOWNERNAME>行会会长获得城主元宝奖励5000。
SENDMSG 6 恭喜你成为新沙巴克城主,可找皇宫沙巴克管理员领取专属奖励。
部分引擎用SCASTLEOWNERNAME取占领行会名、SETCASTLEOWNERGOLD给城主特定货币;命令名不同就改成GM给予命令或写入城主变量后由领奖NPC发。占领触发不要放太多Give,避免上线玩家堆积领奖卡顿,只发关键货币,其余走税箱NPC。
二、城主税箱每日领奖
Market_Def\沙巴克税箱-0.txt,文件头按引擎Merchant格式写沙巴克皇宫坐标:
[@main]
领取今日城主税箱/taxbox
查看攻城连胜/winstreak
城主专属商店/shop
[@taxbox]
if
CHECKCASTLEOWNER 沙巴克
act
CHECK [999] 0
act
SET [999] 1
SAVEVAR HUMAN 城主税箱 ..\QuestDiary\沙巴克\税箱记录.txt
Give 元宝 2000
Give 城主令牌 5
Give 沙巴克宝箱 1
SENDMSG 6 城主每日税箱已领取,获得2000元宝、5个城主令牌、1个沙巴克宝箱。
elsesay
今日税箱已领取,明日再领。
elsesay
你不是当前沙巴克城主,无法领取税箱。
CHECKCASTLEOWNER后第一个#act是城主分支,#elsesay是非城主提示。变量[999]防重复领取,每天由机器人清零;若引擎不支持CHECKCASTLEOWNER,改用城堡名比较或角色变量。
三、机器人每日自动发沙城福利
Envir\Robot_def\AutoRunRobot.txt:
AutoRun NPC RUNONDAY 00:00:10 @沙城每日重置
AutoRun NPC RUNONDAY 12:00:00 @沙城在线发奖
AutoRun NPC RUNONWEEK 1:00:00 @沙城周一连胜结算
RobotManage.txt:
[@沙城每日重置]
if
act
DELUSERDATE ..\QuestDiary\沙巴克\税箱记录.txt
SENDMSG 1 沙巴克税箱已刷新,城主可前往皇宫领取。
[@沙城在线发奖]
if
CHECKCASTLEOWNER 沙巴克
act
Give 元宝 500
Give 沙巴克补给包 1
SENDMSG 6 城主在线福利已发放,感谢守护沙城。
[@沙城周一连胜结算]
if
act
CALCVAR [连胜周数] + 1
SAVEVAR GLOBAL [连胜周数] ..\QuestDiary\沙巴克\连胜数据.txt
SENDMSG 1 沙巴克连胜加成更新,当前连胜周数<$GLOBAL(连胜周数)>。
机器人清税箱用DELUSERDATE,参数和文件名按所用引擎确认;全局连胜用GLOBAL变量跨角色读取,个人税箱用HUMAN。若引擎机器人不能对单角色Give,就把在线发奖改成“城主上线触发+机器人公告提醒”。
四、连胜加爵与奖励递增
Market_Def\沙巴克管理员-0.txt:
[@main]
查看我的城主爵位/title
领取连胜累积奖励/streakreward
[@title]
if
CHECKVAR [连胜周数] > 5
act
SENDMSG 6 爵位:沙城之王,连胜超过5周。
elsesay
if
CHECKVAR [连胜周数] > 2
act
SENDMSG 6 爵位:沙城霸主,连胜超过2周。
elsesay
SENDMSG 6 爵位:新晋城主,继续努力守城。
[@streakreward]
if
CHECKCASTLEOWNER 沙巴克
CHECK [888] 0
act
CHECKVAR [连胜周数] = D0
CALCVAR D0 * 1000
act
Give 元宝 <$D0>
SET [888] 1
SAVEVAR HUMAN 连胜奖励 ..\QuestDiary\沙巴克\连胜领取.txt
SENDMSG 6 已按连胜周数发放累积元宝,本周<$D0>。
elsesay
连胜奖励已领取或你不是城主。
变量乘法、赋D0语法按引擎支持度调整;不支持就写分段:连胜1周1000、2周2000、3周以上3000加固定宝箱,避免复杂表达式不生效。
五、守城成员与参与奖
占领触发段给守城成员发奖:
[@CastleCapture]
if
CHECKCASTLEMEMBER 沙巴克
act
Give 守城积分 50
Give 沙巴克补给包 1
SENDMSG 6 守城成员奖励已发放。
elsesay
if
act
Give 攻城参与奖 1
SENDMSG 6 攻城参与者奖励已发放。
CHECKCASTLEMEMBER检测是否占领行会成员,攻城参与奖给所有在线参战者;参与判定若引擎不提供,用攻城地图在线名单或参战变量在攻城开始时写名单。
六、城主商店与税箱兑换
Market_Def\沙巴克商店-0.txt:
[@main]
购买城主专属装备/shop
用城主令牌兑换/exchange
[@exchange]
if
CHECKITEM 城主令牌 10
act
Take 城主令牌 10
Give 城主战甲 1
SENDMSG 6 消耗10个城主令牌兑换城主战甲。
elsesay
令牌不足,需要10个城主令牌。
商店也可用标准商品文件,城主令牌做活动货币,避免全部奖励都给不可交易绑定元宝。
七、掉线、换会长、未上线处理
攻城刚结束会长下线:占领触发段只发公告和城主基础货币,不做大量背包物品发放。城主上线后在皇宫NPC领税箱,用CHECKCASTLEOWNER实时校验,不依赖占领时的角色名。
会长在占领后换人:CHECKCASTLEOWNER以当前M2城堡数据为准,换会长后新会长进皇宫即可领;领奖脚本不要用旧变量写死会长名。
税箱重复领:HUMAN变量[999]每日机器人清零;换引擎不支持SAVEVAR就改用日期变量,例如CHECKLEAVEDATE比较今日日期,不符才发。
城主长期不上线:机器人只发在线福利,离线不发;领奖靠上线NPC,避免邮件/离线系统不支持导致奖励丢失。
八、完整城主领奖脚本
[@main]
城主税箱领取/tax
连胜奖励领取/streak
城主商店/shop
退出/exit
[@tax]
if
CHECKCASTLEOWNER 沙巴克
CHECK [999] 0
act
SET [999] 1
SAVEVAR HUMAN 城主税箱 ..\QuestDiary\沙巴克\税箱记录.txt
Give 元宝 2000
Give 城主令牌 5
Give 沙巴克宝箱 1
SENDMSG 6 城主税箱领取成功。
elsesay
今日已领取税箱,请明日再来。
elsesay
你不是当前沙巴克城主。
[@streak]
if
CHECKCASTLEOWNER 沙巴克
CHECK [888] 0
act
CHECKVAR [连胜周数] = D0
CALCVAR D0 * 1000
act
Give 元宝 <$D0>
SET [888] 1
SAVEVAR HUMAN 连胜奖励 ..\QuestDiary\沙巴克\连胜领取.txt
SENDMSG 6 连胜奖励发放完成。
elsesay
连胜奖励已领取或你不是城主。
[@exit]
act
Close
九、排错
领奖NPC点没反应:Merchant未注册、脚本非ANSI、[@main]无选项、NPC坐标不可走;先放安全坐标测试。
CHECKCASTLEOWNER无效:引擎不支持或城堡名写错;用M2城堡管理复制当前城名,或改SCASTLEOWNERNAME字符串比较。
占领不发奖:QFunction的城堡触发段未注册,或攻城结束后事件名不是@CastleCapture;先写一条公告测试触发是否进段。
变量不重置:机器人DELUSERDATE路径错或命令名不同;手动删税箱记录.txt后重新上线测一次。
重复领奖:SAVEVAR失败导致[999]没存盘;改用GLOBAL日期变量或每日机器人明确清名单。
守城成员没奖:CHECKCASTLEMEMBER命令不支持,改成占领行会名名单,守城开始时ADDNAMELIST,领奖时CHECKNAMELIST。
按占领公告、城主税箱、在线福利、连胜加成、成员商店五段做,新版沙巴克奖励既能给在线参与感,也不依赖城主必须在线;领奖变量每天机器人清零,换会长、掉线、未上线都由CHECKCASTLEOWNER实时校验。
传奇新版沙巴克占领奖励脚本:税箱领奖连胜加爵每日自动发放与异常处理
来源:
作者:
点击:

