沙巴克攻城申请功能依赖QManage.txt与自定义NPC脚本联动实现。核心逻辑包含资格校验、押金扣除、名单登记三部分,需在服务端EnvirQuestDiary目录下配置对应文件。
首先创建攻城申请NPC,在Mir200EnvirMerChant.txt添加NPC坐标与名称,例如“沙城老兵 330 330”。在MapQuest_def目录新建同名文件夹“沙城老兵”,内部创建主脚本文件“MAIN.txt”。该文件内容如下:
[@main]
IF
EQUAL G100 1
SAY
当前已有行会提交攻城申请,请等待下次开放。
ELSE
你的行会是否要申请本周沙巴克攻城战?
需要缴纳100万金币作为押金。
[@ApplySiege]
IF
CHECKLEADER
ACT
GOTO @CheckGold
ELSESAY
只有行会会长才能申请攻城!
[@CheckGold]
IF
CHECKGOLD > 1000000
ACT
TAKE gold 1000000
SET G100 1
SET S100
SAVEVAR S100 ..GuildSaveSiegeGuild.txt
SENDMSG 0 行会已成功申请攻城!
CLOSE
ELSESAY
行会资金不足100万,无法申请攻城。
关键变量说明:G100为全局标志位,值为1表示已有行会申请;S100存储申请行会名称。SAVEVAR指令将行会名写入GuildSave目录下的SiegeGuild.txt,供攻城战脚本读取。
攻城战开启时需读取申请记录。在QFunction.txt的[@Timer30](每30秒检测)中加入:
IF
EQUAL G100 1
CHECKTIME 19 21
CHECKMAP 7
ACT
LOADVAR S100 ..GuildSaveSiegeGuild.txt
MAPMOVE S100 333 333
SENDMSG 5 攻城行会S100已进入沙巴克!
战斗结束后的处理在[@MapTimer_7](沙巴克地图计时器)中完成。当倒计时归零时:
IF
CHECKMAP 7
ACT
CLEARMAP 7
SET G100 0
DELFILE ..GuildSaveSiegeGuild.txt
SENDMSG 0 本周沙巴克攻城战已结束!
脚本生效前需确认三点:行会系统已启用(M2设置中勾选行会功能)、沙巴克地图编号为7、GuildSave目录存在且有写入权限。测试时先用小号创建行会,通过NPC对话触发申请流程,检查金币扣除与文件生成是否正常。

