传奇行会攻城申请脚本编写方法详解

来源: 作者: 点击:
行会攻城申请功能通过QFunction脚本实现,需检测玩家是否为行会掌门、目标地图是否可申请、当前是否处于申请时段,并记录攻城信息。以下为完整脚本结构。

一、基础申请条件检测
在NPC对话标签中加入以下判断:

[@ApplyCastleWar]
IF
EQUAL GUILDNAME NULL
ACT
SENDMSG 7 你尚未加入行会!
Break

IF
EQUAL GUILDOWNERNAME
ACT
SENDMSG 7 只有行会掌门才能申请攻城!
Break

IF
CHECKGUILDLAW
ACT
SENDMSG 7 行会处于法律纠纷状态,无法申请!
Break

说明:GUILDNAME为空表示未加入行会;GUILDOWNERNAME必须等于当前角色名;CHECKGUILDLAW检测行会是否有未处理的宣战或违规。

二、攻城地图与时间限制
假设仅允许申请沙巴克(地图0),且每周仅周三、周六可申请:

IF
CHECKWEEKDAY 3
CHECKWEEKDAY 6
ACT
GOTO @CheckMap

ELSEACT
SENDMSG 7 攻城申请仅限每周三、六开放!
Break

[@CheckMap]
IF
CHECKCASTLEWAR 0
ACT
SENDMSG 7 沙巴克已有攻城申请!
Break

IF
CHECKITEM 金条 10
ACT
Take 金条 10
GuildWarCastle 0
SENDMSG 1 行会已成功申请沙巴克攻城!
Break

ELSEACT
SENDMSG 7 申请需缴纳10根金条!

关键指令:
CHECKWEEKDAY 3/6:检测是否为周三或周六(1=周一,7=周日);
CHECKCASTLEWAR 0:检测0号城堡(沙巴克)是否已被申请;
GuildWarCastle 0:正式提交攻城申请,绑定当前行会至该城堡。

三、多城堡支持写法
若服务器开放多个攻城地图(如0=沙巴克,1=祖玛神殿),需动态选择:

[@SelectCastle]
SAY
请选择要申请的城堡:


[@Apply0]
IF
CHECKCASTLEWAR 0
ACT
SENDMSG 7 沙巴克已被申请!
Break
GOTO @PayFee0

[@Apply1]
IF
CHECKCASTLEWAR 1
ACT
SENDMSG 7 祖玛神殿已被申请!
Break
GOTO @PayFee1

[@PayFee0]
IF
CHECKITEM 金条 10
ACT
Take 金条 10
GuildWarCastle 0
SENDMSG 1 成功申请沙巴克攻城!
Break
ELSEACT
SENDMSG 7 金条不足!

[@PayFee1]
IF
CHECKITEM 金条 20
ACT
Take 金条 20
GuildWarCastle 1
SENDMSG 1 成功申请祖玛神殿攻城!
Break
ELSEACT
SENDMSG 7 需20根金条!


四、攻城状态查询与取消
添加查询功能便于管理:

[@CheckWarStatus]
IF
HAVEGUILDCASTLE
ACT
SENDMSG 1 你的行会正在防守!
Break

IF
HAVEGUILDAPPLYCASTLE
ACT
SENDMSG 1 你的行会已申请攻城!
Break

ELSEACT
SENDMSG 7 当前行会无攻城相关状态。

注:HAVEGUILDCASTLE检测是否拥有城堡;HAVEGUILDAPPLYCASTLE检测是否有待攻城申请。

五、注意事项
GuildWarCastle指令执行后,系统自动在攻城日(通常为申请后第三天)晚上开启战斗;
申请费用物品(如金条)必须存在于背包,仓库物品不计入;
若服务端启用了攻城冷却(如失败后7天内不可再申请),需额外添加变量记录时间;
所有地图编号(0、1等)必须与MapInfo.txt中定义的城堡地图一致;
脚本需放入QFunction-0.txt,并在NPC文件中调用对应标签(如@ApplyCastleWar)。

以上脚本适用于标准Mir2引擎,实际部署前应确认服务端是否支持CHECKWEEKDAY、GuildWarCastle等指令。部分版本可能需替换为自定义变量模拟星期检测。