一、自动攻沙核心逻辑与前期准备
1. 核心逻辑
通过HERO引擎定时命令设置攻沙开启时间,开区第4天触发首次攻沙,后续每日固定时间自动开启;新增攻沙结束判定脚本,区分首沙与日常攻沙,对应发放10000元宝、3000元宝奖励;奖励通过NPC领取,绑定沙巴克城主行会,确保奖励精准发放至获胜方。
2. 前期准备
1. 数据备份:备份服务端“Mirserver\Mir200\Envir”(配置脚本文件夹)、“Mirserver\DB”(数据库文件夹),避免配置错误;
2. 工具准备:记事本/专业文本编辑器(编写脚本)、DBC数据库编辑器(核对行会数据);
3. 基础确认:确保沙巴克地图正常加载,“!Setup.txt”中已开启沙巴克攻城功能(参数“AllowSandAttack=1”)。
二、自动攻沙脚本编写(定时开启+结束判定)
1. 定时攻沙触发脚本(写入QFunction-0.txt)
实现开区4天首沙、后续每日固定时间攻沙,默认每日20:00开启,可按需调整:
;====== 自动攻沙定时配置(核心)======
[@脚本启动]
#ACT
;设置开区4天首次攻沙(0天4小时0分后触发,开区时启动脚本即生效)
TimerSet 4 0 0 @首次攻沙开启
;设置后续每日攻沙(每日20:00触发,首沙结束后自动生效)
TimerSet 0 20 0 @日常攻沙开启
BREAK
;====== 首次攻沙开启子程序 ======
[@首次攻沙开启]
#ACT
;发送全服公告
SendCenterMsg 255 0 开区首次沙巴克攻城开启!21:00结束,获胜行会奖励10000元宝 1 60
;开启沙巴克攻城(默认持续60分钟)
StartSandAttack 60
;记录首沙标识(用于奖励判定)
SetHumTimeVar 首沙标识 1
;60分钟后触发攻沙结束判定
TimerSet 0 1 0 @攻沙结束判定
BREAK
;====== 日常攻沙开启子程序 ======
[@日常攻沙开启]
#ACT
;发送全服公告
SendCenterMsg 255 0 每日沙巴克攻城开启!21:00结束,获胜行会奖励3000元宝 1 60
;开启沙巴克攻城(持续60分钟)
StartSandAttack 60
;清除首沙标识
DelHumTimeVar 首沙标识
;60分钟后触发攻沙结束判定
TimerSet 0 1 0 @攻沙结束判定
BREAK
;====== 攻沙结束判定子程序 ======
[@攻沙结束判定]
#ACT
;关闭沙巴克攻城
StopSandAttack
;获取沙巴克城主行会名称
GetSandOwnerGuildName S1
;判定是否有获胜行会(S1为空则无获胜方)
#IF
CheckStrLen <$STR(S1)> > 0
#ACT
;发送获胜公告
SendCenterMsg 255 252 恭喜<$STR(S1)>行会攻占沙巴克!可至沙巴克NPC处领取奖励 1 60
;调用奖励发放标记脚本(绑定获胜行会)
HCall @标记获胜行会
#ELSEACT
SendCenterMsg 255 0 本次沙巴克攻城无获胜行会,无奖励发放 1 60
BREAK
;====== 获胜行会标记(用于NPC领取)======
[@标记获胜行会]
#ACT
;记录获胜行会名称至全局变量,有效期24小时
SetGlobalVar 获胜行会 <$STR(S1)> 1440
;记录奖励金额(首沙10000,日常3000)
#IF
CheckHumTimeVar 首沙标识 1
#ACT
SetGlobalVar 攻沙奖励 10000 1440
#ELSE
SetGlobalVar 攻沙奖励 3000 1440
BREAK
2. 核心命令说明
1. TimerSet 日 时 分 子程序:定时触发命令,如“TimerSet 4 0 0”代表4天后触发;
2. StartSandAttack 60:开启攻沙,参数60代表持续60分钟,可调整为90(90分钟);
3. GetSandOwnerGuildName S1:获取沙巴克城主行会名称,存入变量S1;
4. SetGlobalVar 变量名 值 有效期:设置全局变量,有效期单位为分钟(1440分钟=24小时)。
三、NPC奖励脚本编写(领取触发+权限判定)
1. NPC对话脚本(写入Merchant.txt)
创建沙巴克奖励NPC(默认放在沙巴克城安全区,坐标30,30),脚本如下:
;====== 沙巴克奖励NPC(Merchant.txt中添加)======
[NPC脚本]
#TITLE 沙巴克奖励使者
#外观 301(NPC外观编号,可自行替换)
#地图 沙巴克
#坐标 30 30
#对话
您好!我是沙巴克奖励使者,<$STR(获胜行会)>行会成员可领取攻沙奖励!\
<领取奖励>\
<离开>
;====== 领取奖励触发 ======
[@领取奖励]
#IF
;判定是否为获胜行会成员
CheckGuildName <$STR(全局变量(获胜行会))>
;判定奖励未领取(避免重复领取)
CheckNotHumVar 攻沙奖励已领取 1
#ACT
;发放元宝奖励(全局变量“攻沙奖励”存储金额)
GiveGold <$STR(全局变量(攻沙奖励))>
;标记已领取(避免重复领取)
SetHumVar 攻沙奖励已领取 1
;发送领取提示
SendMsg 6 恭喜领取攻沙奖励<$STR(全局变量(攻沙奖励))>元宝!
BREAK
#ELSEIF
CheckGuildName <$STR(全局变量(获胜行会))>
CheckHumVar 攻沙奖励已领取 1
#ACT
SendMsg 6 你已领取过本次攻沙奖励,请勿重复领取!
BREAK
#ELSE
SendMsg 6 你所在行会未获得本次攻沙胜利,无法领取奖励!
BREAK
;====== 离开对话 ======
[@离开]
#ACT
CloseDialog
BREAK
2. 奖励领取限制说明
1. 行会判定:仅获胜行会成员可领取,非获胜行会成员无法触发奖励发放;
2. 重复限制:单个角色领取后标记“攻沙奖励已领取”,避免重复领取;
3. 有效期:奖励领取有效期24小时,超过时间全局变量失效,无法领取。
四、脚本配置步骤(新手可会)
1. 脚本写入与保存
1. 打开“Mirserver\Mir200\Envir\QuestDiary”,找到QFunction-0.txt,将自动攻沙脚本复制粘贴至文件末尾,保存关闭;
2. 打开同目录下Merchant.txt,将NPC奖励脚本复制粘贴至末尾,保存关闭;
3. 打开“!QuestDiary.txt”,确认已添加QFunction-0.txt(无则添加“QFunction-0.txt”),确保脚本加载。
2. 引擎配置与生效
1. 启动M2主程序,点击“选项→脚本设置→加载脚本”,分别重新加载QFunction-0.txt和Merchant.txt,确保无语法报错;
2. 打开“!Setup.txt”,添加“SandAttackReward=1”(开启攻沙奖励功能),保存后关闭;
3. 重启服务端所有组件(控制器、M2、网关),脚本正式生效。
3. 自定义调整(按需修改)
1. 攻沙时间:修改TimerSet命令参数,如“TimerSet 0 19 0”改为每日19:00开启;
2. 奖励金额:调整SetGlobalVar 攻沙奖励 后的数值,可修改首沙/日常奖励金额;
3. NPC位置:修改Merchant.txt中“#地图”“#坐标”,更换NPC摆放位置;
4. 攻沙时长:修改StartSandAttack后的参数,如“StartSandAttack 90”改为持续90分钟。
五、测试与异常排查
1. 功能测试步骤
1. 开区启动服务端,确认脚本正常加载,4天后触发首沙公告,攻沙正常开启;
2. 攻沙结束后,确认获胜行会名称已记录,全服公告正常显示;
3. 登录获胜行会角色,与NPC对话,领取奖励,确认元宝正常到账,无法重复领取;
4. 次日20:00确认日常攻沙自动开启,奖励3000元宝可正常领取,测试完成。
2. 常见异常排查
(1)自动攻沙未触发
排查:1. 确认脚本已添加到QFunction-0.txt,且“!QuestDiary.txt”已加载该文件;2. 检查M2是否开启定时脚本功能(选项→功能设置→定时脚本→启用);3. 核对TimerSet命令参数,无语法错误。
(2)奖励无法领取
排查:1. 确认获胜行会名称已记录(查看全局变量“获胜行会”);2. 核对角色所在行会与获胜行会一致,无名称拼写差异;3. 检查是否已领取奖励,删除“攻沙奖励已领取”变量即可重新测试。
(3)攻沙结束无公告
排查:1. 确认StopSandAttack命令正常执行;2. 核对GetSandOwnerGuildName命令是否获取到行会名称,无则检查沙巴克攻城是否正常结束。
六、新手注意事项
1. 开区时需确保脚本已加载,避免遗漏启动定时攻沙命令;
2. 奖励元宝需确保服务器元宝池充足,可在“!Setup.txt”中设置元宝发放上限(参数“MaxGoldGive=999999”);
3. 若需调整首沙开启时间,修改TimerSet 4 0 0中的“4”(代表4天),如改为“3”即开区3天首沙;
4. 脚本修改后需重启服务端生效,每次修改前备份对应脚本文件,避免出错。
七、常见疑问解答
1. 问:能否设置奖励仅城主领取?答:可以,在[@领取奖励]#IF中添加“CheckGuildLeader”命令,仅行会会长可领取;
2. 问:日常攻沙能否跳过周末?答:可以,添加星期检测命令,如“CheckWeekDay 6”(6=周六),跳过周六日攻沙;
3. 问:奖励能否替换为道具?答:可以,将GiveGold命令改为GiveItem 道具名称 数量,如“GiveItem 麻痹戒指 1”发放麻痹戒指。
传奇HERO引擎自动攻沙脚本 首沙10000元宝每日攻沙3000奖励配置
来源:
作者:
点击:

