传奇沙城老兵申请攻城脚本核心写法

来源: 作者: 点击:
针对“沙城老兵”NPC的申请攻城功能,核心在于权限检测与引擎命令调用。以下是基于主流引擎(HeroM2/GOM/GEE)的完整脚本写法与关键参数解析。

一、基础申请脚本(HeroM2 / GOM 通用)

此脚本实现了“仅行会掌门可申请、扣除祖玛头像、加入攻城列表”的标准逻辑。
[@Main]
#if
#say
<申请攻打沙巴克/@ApplyCastleWar> 需消耗祖玛头像x1,且必须是行会掌门。\ \
<查看已申请行会/@WarList>

[@ApplyCastleWar]
#if
Not CheckGuildMaster ; 检测是否为行会掌门
#act
MessageBox 只有行会掌门才有资格申请攻城!
Break
#if
Not CheckItem 祖玛头像 1 ; 检测背包是否有祖玛头像
#act
MessageBox 申请攻城需要祖玛头像x1!
Break
#if
CheckCastleWarList <$GUILD> ; 检测是否已申请
#act
MessageBox 你的行会已经申请了本次攻城!
Break
#act
Take 祖玛头像 1 ; 扣除道具
AddToCastleWarList 沙巴克 <$GUILD> ; 加入攻城列表(关键命令)
SendMsg 5 【系统】行会【<$GUILD>】已成功申请攻打沙巴克!
SendMsg 7 【系统】行会【<$GUILD>】掌门【<$USERNAME>】提交了攻城申请。

[@WarList]
#act
GetCastleWarList ; 获取攻城行会列表
#say
已申请攻城的行会:\ \
<$CASTLEWARLIST> ; 显示列表变量


二、核心命令与参数详解

脚本中起决定性作用的是 AddToCastleWarList 命令,不同引擎的语法略有差异:

引擎 命令格式 参数说明

GOM / GEE AddToCastleWarList 城堡名称 行会名称 天数 城堡名称:通常填“沙巴克”。<br>行会名称:填 <$GUILD>(当前行会)或 *(所有行会)。<br>天数:留空则按M2设置执行,填1表示1天后攻城。

HeroM2 AddToCastleWarList 行会名称 老版本Hero引擎参数较少,默认针对沙巴克。

关键检测命令:
• CheckGuildMaster:检测点击NPC者是否为行会老大(Master)。

• CheckCastleWarList <$GUILD>:检测该行会是否已在攻城列表中,防止重复申请。

三、自动开启攻城的机器人脚本

除了NPC申请,通常还需要在 Robot_def 文件夹下的机器人脚本中配置自动开启逻辑,实现“每晚20点自动开战”:

AutoRunRobot.txt 中添加:
#AutoRun NPC RUNONDAY 20:00 @StartCastleWar


RobotManage.txt 中添加:
[@StartCastleWar]
#if
#act
StartCastleWar 120 ; 开启攻城,持续120分钟(2小时)
SendMsg 0 沙巴克攻城战现已开启,持续2小时!


四、常见报错与修复

1. 点击无反应/报错:
- 检查命令拼写:GOM引擎严格区分大小写,确保 AddToCastleWarList 无误。
◦ 检查变量:确认 <$GUILD> 变量在非行会成员点击时是否为空,建议在脚本开头增加 #if Not CheckGuildName 的容错判断。

2. 申请了但不开战:
◦ 检查M2参数:进入“选项”->“参数设置”->“城堡”,确认“攻城开始时间”是否与脚本时间冲突。

◦ 检查地图权限:确认 MapInfo.txt 中沙巴克地图(如0150)设置了 FIGHT 和 CASTLE 属性。

3. Hero引擎特殊处理:
◦ 老版本Hero可能不支持 AddToCastleWarList 直接调用,需改用 StartSabukWar 或通过 QuestDiary 文件记录申请。

总结:最核心的脚本段是 [@ApplyCastleWar] 标签下的逻辑,只要 AddToCastleWarList 命令执行成功,行会即进入攻城队列。建议在测试服先用普通行会成员账号点击,验证“权限不足”的提示是否正常,再以掌门身份测试完整流程。