针对“沙城老兵”NPC的申请攻城功能,核心在于权限检测与引擎命令调用。以下是基于主流引擎(HeroM2/GOM/GEE)的完整脚本写法与关键参数解析。
一、基础申请脚本(HeroM2/GOM通用)
此脚本实现了“仅行会掌门可申请、扣除祖玛头像、加入攻城列表”的标准逻辑。
[@Main]
#if
#say
<申请攻打沙巴克/@ApplyCastleWar>需消耗祖玛头像x1,且必须是行会掌门。\\
<查看已申请行会/@WarList>
[@ApplyCastleWar]
#if
NotCheckGuildMaster;检测是否为行会掌门
#act
MessageBox只有行会掌门才有资格申请攻城!
Break
#if
NotCheckItem祖玛头像1;检测背包是否有祖玛头像
#act
MessageBox申请攻城需要祖玛头像x1!
Break
#if
CheckCastleWarList<$GUILD>;检测是否已申请
#act
MessageBox你的行会已经申请了本次攻城!
Break
#act
Take祖玛头像1;扣除道具
AddToCastleWarList沙巴克<$GUILD>;加入攻城列表(关键命令)
SendMsg5【系统】行会【<$GUILD>】已成功申请攻打沙巴克!
SendMsg7【系统】行会【<$GUILD>】掌门【<$USERNAME>】提交了攻城申请。
[@WarList]
#act
GetCastleWarList;获取攻城行会列表
#say
已申请攻城的行会:\\
<$CASTLEWARLIST>;显示列表变量
二、核心命令与参数详解
脚本中起决定性作用的是AddToCastleWarList命令,不同引擎的语法略有差异:
引擎命令格式参数说明
GOM/GEEAddToCastleWarList城堡名称行会名称天数城堡名称:通常填“沙巴克”。<br>行会名称:填<$GUILD>(当前行会)或*(所有行会)。<br>天数:留空则按M2设置执行,填1表示1天后攻城。
HeroM2AddToCastleWarList行会名称老版本Hero引擎参数较少,默认针对沙巴克。
关键检测命令:
•CheckGuildMaster:检测点击NPC者是否为行会老大(Master)。
•CheckCastleWarList<$GUILD>:检测该行会是否已在攻城列表中,防止重复申请。
三、自动开启攻城的机器人脚本
除了NPC申请,通常还需要在Robot_def文件夹下的机器人脚本中配置自动开启逻辑,实现“每晚20点自动开战”:
AutoRunRobot.txt中添加:
#AutoRunNPCRUNONDAY20:00@StartCastleWar
RobotManage.txt中添加:
[@StartCastleWar]
#if
#act
StartCastleWar120;开启攻城,持续120分钟(2小时)
SendMsg0沙巴克攻城战现已开启,持续2小时!
四、常见报错与修复
1.点击无反应/报错:
-检查命令拼写:GOM引擎严格区分大小写,确保AddToCastleWarList无误。
◦检查变量:确认<$GUILD>变量在非行会成员点击时是否为空,建议在脚本开头增加#ifNotCheckGuildName的容错判断。
2.申请了但不开战:
◦检查M2参数:进入“选项”->“参数设置”->“城堡”,确认“攻城开始时间”是否与脚本时间冲突。
◦检查地图权限:确认MapInfo.txt中沙巴克地图(如0150)设置了FIGHT和CASTLE属性。
3.Hero引擎特殊处理:
◦老版本Hero可能不支持AddToCastleWarList直接调用,需改用StartSabukWar或通过QuestDiary文件记录申请。
总结:最核心的脚本段是[@ApplyCastleWar]标签下的逻辑,只要AddToCastleWarList命令执行成功,行会即进入攻城队列。建议在测试服先用普通行会成员账号点击,验证“权限不足”的提示是否正常,再以掌门身份测试完整流程。
一、基础申请脚本(HeroM2/GOM通用)
此脚本实现了“仅行会掌门可申请、扣除祖玛头像、加入攻城列表”的标准逻辑。
[@Main]
#if
#say
<申请攻打沙巴克/@ApplyCastleWar>需消耗祖玛头像x1,且必须是行会掌门。\\
<查看已申请行会/@WarList>
[@ApplyCastleWar]
#if
NotCheckGuildMaster;检测是否为行会掌门
#act
MessageBox只有行会掌门才有资格申请攻城!
Break
#if
NotCheckItem祖玛头像1;检测背包是否有祖玛头像
#act
MessageBox申请攻城需要祖玛头像x1!
Break
#if
CheckCastleWarList<$GUILD>;检测是否已申请
#act
MessageBox你的行会已经申请了本次攻城!
Break
#act
Take祖玛头像1;扣除道具
AddToCastleWarList沙巴克<$GUILD>;加入攻城列表(关键命令)
SendMsg5【系统】行会【<$GUILD>】已成功申请攻打沙巴克!
SendMsg7【系统】行会【<$GUILD>】掌门【<$USERNAME>】提交了攻城申请。
[@WarList]
#act
GetCastleWarList;获取攻城行会列表
#say
已申请攻城的行会:\\
<$CASTLEWARLIST>;显示列表变量
二、核心命令与参数详解
脚本中起决定性作用的是AddToCastleWarList命令,不同引擎的语法略有差异:
引擎命令格式参数说明
GOM/GEEAddToCastleWarList城堡名称行会名称天数城堡名称:通常填“沙巴克”。<br>行会名称:填<$GUILD>(当前行会)或*(所有行会)。<br>天数:留空则按M2设置执行,填1表示1天后攻城。
HeroM2AddToCastleWarList行会名称老版本Hero引擎参数较少,默认针对沙巴克。
关键检测命令:
•CheckGuildMaster:检测点击NPC者是否为行会老大(Master)。
•CheckCastleWarList<$GUILD>:检测该行会是否已在攻城列表中,防止重复申请。
三、自动开启攻城的机器人脚本
除了NPC申请,通常还需要在Robot_def文件夹下的机器人脚本中配置自动开启逻辑,实现“每晚20点自动开战”:
AutoRunRobot.txt中添加:
#AutoRunNPCRUNONDAY20:00@StartCastleWar
RobotManage.txt中添加:
[@StartCastleWar]
#if
#act
StartCastleWar120;开启攻城,持续120分钟(2小时)
SendMsg0沙巴克攻城战现已开启,持续2小时!
四、常见报错与修复
1.点击无反应/报错:
-检查命令拼写:GOM引擎严格区分大小写,确保AddToCastleWarList无误。
◦检查变量:确认<$GUILD>变量在非行会成员点击时是否为空,建议在脚本开头增加#ifNotCheckGuildName的容错判断。
2.申请了但不开战:
◦检查M2参数:进入“选项”->“参数设置”->“城堡”,确认“攻城开始时间”是否与脚本时间冲突。
◦检查地图权限:确认MapInfo.txt中沙巴克地图(如0150)设置了FIGHT和CASTLE属性。
3.Hero引擎特殊处理:
◦老版本Hero可能不支持AddToCastleWarList直接调用,需改用StartSabukWar或通过QuestDiary文件记录申请。
总结:最核心的脚本段是[@ApplyCastleWar]标签下的逻辑,只要AddToCastleWarList命令执行成功,行会即进入攻城队列。建议在测试服先用普通行会成员账号点击,验证“权限不足”的提示是否正常,再以掌门身份测试完整流程。

