传奇Legendm2引擎行会临时攻城控制面板NPC脚本功能实现与参数配置讲解

来源: 作者: 点击:
[@main]
#ACT
MESSAGE 临时攻城控制面板,可查看攻城状态、申请临时攻城、终止攻城、重置城堡归属
#IF
NOT ISADMIN
#ACT
MESSAGE 此面板仅限管理员操作,普通玩家无权限访问
BREAK
#IF
CHECKCASTLEWAR
#ACT
MESSAGE 当前沙巴克攻城战正在进行,请勿重复发起攻城
MESSAGE 1.终止本次临时攻城 2.修复城堡城门城墙 3.查看城堡当前归属行会 4.重置沙巴克归属
BREAK
#ELSEACT
MESSAGE 当前无攻城进行,可提交行会发起临时攻城
MESSAGE 1.指定行会发起临时攻城 2.修复城堡城门城墙 3.查看城堡当前归属行会 4.重置沙巴克归属
BREAK
[@发起临时攻城]
#IF
ISADMIN
NOT CHECKCASTLEWAR
#ACT
INPUTS 请输入要发起攻城的行会名称 S1
AddAttackSabukAll 0
MESSAGE 已添加全部行会参与沙巴克临时攻城,攻城即将启动
DELAYGOTO 5 @CheckCastleStart
BREAK
#ELSEACT
MESSAGE 攻城开启失败,当前已有攻城任务运行
BREAK
[@CheckCastleStart]
#IF
CHECKCASTLEWAR
#ACT
SENDMSG 0 系统通知,临时沙巴克攻城战正式开启,各行会可进入沙巴克争夺城堡
BREAK
#ELSEACT
MESSAGE 攻城指令提交成功,等待引擎加载攻城数据
BREAK
[@终止临时攻城]
#IF
ISADMIN
CHECKCASTLEWAR
#ACT
StopCastleWar
SENDMSG 0 系统通知,本次临时沙巴克攻城战已强制终止
MESSAGE 临时攻城已经关闭,沙巴克保持原有归属不变
BREAK
#ELSEACT
MESSAGE 终止操作失败,当前没有正在运行的攻城活动
BREAK
[@修复城堡城门城墙]
#IF
ISADMIN
#ACT
RepairCastle 0
MESSAGE 沙巴克城门、城墙耐久已全部修复完毕
BREAK
#ELSEACT
MESSAGE 权限不足,无法执行城堡修复指令
BREAK
[@查看城堡归属]
#IF
ISADMIN
#ACT
MESSAGE 当前沙巴克城堡归属行会:<$CASTLEGUILD(0)>
MESSAGE \(CASTLEGUILD(0)>
MESSAGE 城堡占领行会掌门人:<\)<$CASTLEGUILDMASTER(0)>
BREAK
BREAK
[@重置沙巴克归属]
#IF
ISADMIN
#ACT
INPUTS 输入要设置为沙巴克城主的行会名称 S2
ChangeSabukLord <$STR(S2)>
RepairCastle 0
SENDMSG 0 系统通知,沙巴克城堡归属已手动重置
MESSAGE 城堡归属修改完成,城门城墙耐久同步修复
BREAK
#ELSEACT
MESSAGE 行会名称输入错误或者该行会不存在,重置失败
BREAK
[@关闭面板]
#ACT
MESSAGE 关闭临时攻城控制面板
BREAK
脚本适配Legendm2引擎,面板只开放管理员权限,防止普通玩家随意操作攻城任务。核心指令包含AddAttackSabukAll用于批量添加所有行会参与沙巴克攻城,StopCastleWar强制停止正在进行的攻城战斗,RepairCastle修复沙巴克城墙与城门耐久,ChangeSabukLord修改城堡所属行会,CHECKCASTLEWAR作为条件判断当前攻城活动是否处于开启状态。

脚本文件放置到QuestDiary目录下新建攻城控制文件夹,NPC配置文件内绑定脚本入口[@main],依次添加功能按钮跳转对应标签,输入行会名称的INPUTS指令用于动态接收管理员填写的行会文本,无需修改脚本文本即可更换目标行会。面板内置状态检测逻辑,攻城进行状态下屏蔽发起攻城选项,未开启攻城状态下屏蔽终止攻城功能,避免重复执行指令产生数据异常。

临时攻城机制区别于常规固定周期攻城,不需要修改机器人定时任务,管理员可随时通过NPC面板一键开启,适合临时组织活动或者测试城堡争夺玩法。AddAttackSabukAll后面数字0代表城堡编号,沙巴克默认编号为0,如果版本内增加多城堡玩法,可以修改编号参数切换其他城堡攻城任务。

执行重置沙巴克归属时,需要确认输入行会名称完全匹配行会系统内记录名称,文字大小写、特殊符号必须保持一致,行会不存在的情况下指令不会生效,不会覆盖原有城堡归属。修改城堡归属后同步调用修复城墙指令,防止城墙破损状态遗留到下一次攻城活动。

全局通知使用SENDMSG 0发送全服文字提示,每次开启或者终止攻城都会推送系统公告,让在线玩家知晓活动状态。脚本增加权限校验NOT ISADMIN,非管理员点击NPC直接提示权限不足,无法访问任何攻城相关操作,规避误操作风险。

在测试阶段,管理员可以单独创建测试行会,使用面板发起单次临时攻城,检验夺旗、占领判定、城堡归属切换逻辑是否正常。攻城强制终止指令执行后,沙巴克不会自动变更归属,维持开战前占领行会不变,适合中途需要结束活动的场景。

可以按需扩展面板功能,增加攻城时长自定义输入,设置攻城结束自动发放行会奖励,增加攻城期间沙巴克地图专属掉落,限制攻城地图传送进出权限。如果需要仅允许单个指定行会攻城,替换AddAttackSabukAll指令,改用单行会攻城指令,限定只有输入的行会获得攻城权限。

需要留意引擎指令版本差异,部分早期Legendm2版本对城堡相关指令支持存在区别,操作无响应时核对M2程序版本。每次修改城堡归属、开启攻城前建议备份Mir200\Envir\Castle目录下城堡数据文件,防止操作失误导致城堡行会数据损坏。攻城开启之后,引擎会自动加载沙巴克地图争夺规则,城门、复活点、旗帜争夺逻辑沿用引擎原生城堡机制,不需要额外编写夺旗脚本。

使用INPUTS输入行会名称存在输入空值的情况,可以增加变量判断,检测S1、S2变量内容不为空才执行后续指令,避免空白参数传入指令造成报错。全服公告文字内容可以自行修改,调整提示语句风格,也可以增加彩色文字代码优化公告展示效果。临时攻城结束之后不会自动清除城堡归属,如需清空城主行会,在重置归属标签内输入空行会名称即可完成清除。