传奇家族对战脚本的核心是“家族报名、宣战、开战、夺旗/占城、奖励结算、全服公告”五段流程。不同引擎命令差异较大,LEG、GEE、GOM、996 等引擎部分功能需要以当前引擎 M2 帮助和插件说明为准。
一、家族城堡争霸脚本结构
脚本通常分为四个文件:
NPC 脚本:用于报名、宣战、查看家族信息。
QFunction-0.txt:用于杀敌、夺旗、死亡、攻城开始/结束触发。
QManage.txt:用于登录刷新家族状态。
攻城触发脚本:用于攻城开始、结束、占领城堡时发放奖励。
二、家族报名脚本
家族争霸开始前,需要先登记家族信息。
[@main]
IF
CHECKGUILDNAME
ACT
GOTO @已加入家族
ELSESAY
你还没有加入家族,无法参与城堡争霸。\
<离开/@exit>
[@已加入家族]
IF
EQUAL <FAMILYWAR> 0
ACT
GOTO @可报名
ELSESAY
你已经报名本次家族争霸。\
<查看规则/@规则>\
<离开/@exit>
[@可报名]
SAY
家族城堡争霸即将开启。\
报名后不可随意退出。\
\
<报名参战/@报名>\
<查看规则/@规则>\
<离开/@exit>
[@报名]
IF
CHECKGUILDNAME
CHECKBAGGAGE
ACT
MOV <FAMILYWAR> 1
SET [101] 1
SENDMSG 0 家族【<GUILDNAME>】已报名城堡争霸,请准备集结!
GOTO @报名成功
ELSESAY
报名失败,请检查背包空间或家族状态。
[@报名成功]
SAY
报名成功。\
开战时请前往城堡战场。\
<离开/@exit>
[@规则]
SAY
必须加入家族才能报名。\
开战后进入城堡地图。\
占领城堡核心区域获胜。\
获胜家族获得专属奖励。\
<返回/@main>
三、家族宣战脚本
家族报名完成后,可以由家族掌门发起宣战。
[@宣战]
IF
CHECKISGUILDMASTER
EQUAL <FAMILYWAR> 1
ACT
GOTO @输入对手家族
ELSESAY
只有家族掌门可以发起宣战,或你尚未报名。
[@输入对手家族]
SAY
请输入要宣战的家族名称。\
<输入/@输入家族名>
[@输入家族名]
IF
ACT
MOV S10 <INPUTSTR>
GOTO @确认宣战
[@确认宣战]
IF
ACT
MOV <TARGETGUILD> <STR(S10)>
MOV <WARSTATE> 1
SENDMSG 0 【家族争霸】家族【<GUILDNAME>】向家族【<TARGETGUILD>】发起城堡宣战!
GOTO @宣战成功
[@宣战成功]
SAY
宣战成功。\
等待系统开启城堡战场。\
<离开/@exit>
四、强制开启城堡战场
如果引擎支持手动触发攻城,可以在 GM 面板或定时脚本中调用开战命令。ESP 插件类引擎可使用 ESPLaunchCastlBattle 命令强制开启攻城战,第一个参数为城堡名称,第二个参数为持续分钟数。
示例:
ESPLaunchCastlBattle 家族城堡 30
开战成功后,QFunction-0.txt 中的 @BeginCastle 会被触发。
[@BeginCastle]
ACT
SENDMSG 0 【家族城堡争霸】战场已开启,所有报名家族请进入城堡地图!
MOV <WARSTART> 1
MOV <WARTIME> 30
五、夺旗占领脚本
家族争霸常用夺旗或占城两种判定方式。
夺旗写法:
[@PickUpItemX]
IF
EQUAL <WARSTART> 1
CHECKITEM 家族战旗 1
ACT
MOV <FLAGHOLDER> <USERNAME>
MOV <FLAGGUILD> <GUILDNAME>
SENDMSG 0 【夺旗】家族【<GUILDNAME>】的<USERNAME>夺下家族战旗!
BREAK
占城写法:
[@CastleOccupied]
IF
ACT
SENDMSG 0 【城堡占领】家族【<GUILDNAME>】成功占领家族城堡!
MOV <WINNERGUILD> <GUILDNAME>
MOV <CASTLEOWNER> 1
LEG 等引擎的行会领地争夺、宣战、结盟功能需要以对应引擎说明为准。
六、杀敌积分脚本
家族战中击杀敌对家族成员可以增加积分。
[@OnKillPlayer]
IF
EQUAL <WARSTART> 1
ACT
INC <KILLSCORE> 1
INC <GUILDSCORE> 1
SENDMSG 6 你击败一名敌对家族成员,积分+1
BREAK
如果引擎不支持 @OnKillPlayer,可改为在 QFunction-0.txt 中通过玩家死亡或自定义按钮触发。
七、战斗结束与奖励结算
攻城时间结束后,需要判定获胜家族并发放奖励。
[@EndCastle]
IF
EQUAL <CASTLEOWNER> 1
ACT
SENDMSG 0 【家族争霸结束】家族【<WINNERGUILD>】获得本次城堡争霸胜利!
CALL [家族战奖励发放.txt] @发放胜利奖励
MOV <WARSTART> 0
MOV <CASTLEOWNER> 0
MOV <FLAGHOLDER>
MOV <FLAGGUILD>
BREAK
IF
ACT
SENDMSG 0 【家族争霸结束】本次城堡争霸未产生获胜家族。
MOV <WARSTART> 0
MOV <CASTLEOWNER> 0
MOV <FLAGHOLDER>
MOV <FLAGGUILD>
[@发放胜利奖励]
IF
CHECKGUILDNAME <WINNERGUILD>
ACT
GIVE 家族勋章 1
GIVE 城堡令牌 1
GAMEGOLD +5000
SENDMSG 6 你获得家族争霸胜利奖励。
BREAK
八、定时结束战场
如果引擎没有自动结束事件,可以用定时器脚本倒计时结束。
[@战场倒计时]
IF
EQUAL <WARSTART> 1
ACT
DEC <WARTIME> 1
SENDMSG 0 家族城堡争霸剩余时间:<STR(WARTIME)>分钟
GOTO @战场倒计时
ELSEACT
GOTO @EndCastle
九、调试要点
报名、宣战、开战、结束必须使用独立变量,避免互相覆盖。
开战触发要确认 QFunction-0.txt 中对应标签是否生效。
夺旗物品名必须与数据库一致。
奖励发放前必须再次判断获胜家族。
战场结束后要清空所有临时变量。
脚本修改后需要重新加载或重启服务端。
ESPLaunchCastlBattle 等命令只在支持该插件的引擎中生效。
传奇家族城堡争霸超酷对战脚本:宣战报名、夺旗占领、攻沙触发、奖励结算与全服公告实
来源:
作者:
点击:

