传奇服务端组队比武脚本:报名匹配传送奖励全流程配置

来源: 作者: 点击:
组队比武是提升服务器活跃度的常用玩法,核心是把报名、组队校验、地图传送、胜负判定、奖励发放串成一条完整链路。脚本不依赖复杂引擎扩展,用NPC对话、逻辑变量、地图触发和QFunction全局触发即可实现。

一、比武流程设计

比武活动分为五个阶段:

报名阶段:队长带队员到NPC处报名,扣除报名消耗,记录队伍信息。
匹配阶段:凑齐两队后,标记比赛开始,将双方传送到比武地图。
对战阶段:双方在比武地图内PK,系统监控胜负条件。
结算阶段:一方全灭或超时后,判定胜负并发放奖励。
退出阶段:所有参赛者传送回安全区,清理状态变量。

二、NPC报名脚本

文件路径:
Mir200EnvirMarket_Def比武报名使者.txt

[@main]
IF
CHECKLEVELEX > 30
ELSESAY
等级不足30级,无法参加比武。\
[@exit]
ELSEACT
SAY
组队比武报名\
\
每队2至5人,由队长报名。\
报名消耗:元宝100\
\
[@TeamSign]队长报名\
[@CheckMatch]查看当前排队\
\
[@exit]

[@TeamSign]
IF
CHECKPARTY
ISPARTYLEADER
CHECKGAMEGOLD > 99
CHECK [500] 0
ELSESAY
请先组队并担任队长,或元宝不足,或已在比赛中。\
[@exit]
ELSEACT
GAMEGOLD - 100
SET [500] 1
GETPARTYMEMBERCOUNT N10
MOV D0 <USERNAME>
FORMATSTR S10 队伍:%s 人数:%d 时间:%s
SENDMSG 7 报名成功,等待匹配对手。
SENDMSG 20 [比武] 队长<USERNAME>的队伍已报名,当前人数人。
SAVELOG ReportTeamBattle.txt <STR(S10)>
GOTO @AddToQueue

[@AddToQueue]
IF
CHECKGLOBALVAR TEAM_QUEUE_COUNT < 10
ACT
INC GLOBALVAR TEAM_QUEUE_COUNT 1
MOV GLOBALVAR TEAM_QUEUE_<STR(GLOBALVAR TEAM_QUEUE_COUNT)> <USERNAME>
SENDMSG 7 当前排队队伍数:<STR(GLOBALVAR TEAM_QUEUE_COUNT)>
GOTO @TryMatch
ELSEACT
SENDMSG 7 排队已满,请稍后再试。
CLOSE

[@TryMatch]
IF
EQUAL GLOBALVAR TEAM_QUEUE_COUNT 2
ACT
MOV S20 <STR(GLOBALVAR TEAM_QUEUE_1)>
MOV S21 <STR(GLOBALVAR TEAM_QUEUE_2)>
RESET GLOBALVAR TEAM_QUEUE_COUNT 0
SENDMSG 20 [比武] 匹配成功!<STR(S20)> 对阵 <STR(S21)>
GOTO @SendBothTeams
ELSEACT
SENDMSG 7 等待更多队伍报名。
CLOSE

[@SendBothTeams]
IF
ACT
SETGLOBALVAR MATCH_TEAM1 <STR(S20)>
SETGLOBALVAR MATCH_TEAM2 <STR(S21)>
SETGLOBALVAR BATTLE_ACTIVE 1
SENDMSG 20 [比武] 双方即将传送至比武场,请准备战斗!
DELAYGOTO 3000 @TeleportTeam1
DELAYGOTO 3500 @TeleportTeam2

[@TeleportTeam1]
IF
ACT
PARTYMAPMOVE <STR(MATCH_TEAM1)> 3 100 100
SENDMSG 20 [比武] 队伍<STR(MATCH_TEAM1)>已进入比武场。

[@TeleportTeam2]
IF
ACT
PARTYMAPMOVE <STR(MATCH_TEAM2)> 3 200 200
SENDMSG 20 [比武] 队伍<STR(MATCH_TEAM2)>已进入比武场。
SENDMSG 20 [比武] 比武开始,限时5分钟!

三、胜负判定脚本

文件路径:
Mir200EnvirMapQuest_defQFunction-0.txt

[@PlayDie]
IF
ISONMAP 3
EQUAL GLOBALVAR BATTLE_ACTIVE 1
ACT
GETPARTYNAME S30
IF
EQUAL S30 <STR(MATCH_TEAM1)>
ACT
INC GLOBALVAR TEAM1_DEATH 1
SENDMSG 20 [比武] 队伍<STR(MATCH_TEAM1)>阵亡一人,累计<STR(GLOBALVAR TEAM1_DEATH)>人。
GOTO @CheckBattleEnd
BREAK
IF
EQUAL S30 <STR(MATCH_TEAM2)>
ACT
INC GLOBALVAR TEAM2_DEATH 1
SENDMSG 20 [比武] 队伍<STR(MATCH_TEAM2)>阵亡一人,累计<STR(GLOBALVAR TEAM2_DEATH)>人。
GOTO @CheckBattleEnd
BREAK

[@CheckBattleEnd]
IF
EQUAL GLOBALVAR TEAM1_DEATH 5
ACT
SETGLOBALVAR BATTLE_ACTIVE 0
SENDMSG 20 [比武] 比赛结束!<STR(MATCH_TEAM2)> 获胜!
GOTO @GiveReward2
DELAYGOTO 5000 @RecallAllPlayers
BREAK
IF
EQUAL GLOBALVAR TEAM2_DEATH 5
ACT
SETGLOBALVAR BATTLE_ACTIVE 0
SENDMSG 20 [比武] 比赛结束!<STR(MATCH_TEAM1)> 获胜!
GOTO @GiveReward1
DELAYGOTO 5000 @RecallAllPlayers
BREAK

[@GiveReward1]
IF
ACT
PARTYGIVEITEM <STR(MATCH_TEAM1)> 荣誉勋章 1
PARTYGIVEITEM <STR(MATCH_TEAM1)> 元宝 500
SENDMSG 20 [比武] 获胜队伍<STR(MATCH_TEAM1)>获得奖励!

[@GiveReward2]
IF
ACT
PARTYGIVEITEM <STR(MATCH_TEAM2)> 荣誉勋章 1
PARTYGIVEITEM <STR(MATCH_TEAM2)> 元宝 500
SENDMSG 20 [比武] 获胜队伍<STR(MATCH_TEAM2)>获得奖励!

[@RecallAllPlayers]
IF
ACT
RESET GLOBALVAR TEAM1_DEATH 0
RESET GLOBALVAR TEAM2_DEATH 0
RESETGLOBALVAR MATCH_TEAM1
RESETGLOBALVAR MATCH_TEAM2
RESETGLOBALVAR BATTLE_ACTIVE
RECALLMAP 3
SENDMSG 20 [比武] 所有参赛者已传送回安全区。

四、超时结束机制

文件路径:
Mir200EnvirRobot_defAutoRunRobot.txt

AutoRun NPC RUNONMIN 1 @CheckBattleTimeout

文件路径:
Mir200EnvirRobot_defRobotManage.txt

[@CheckBattleTimeout]
IF
EQUAL GLOBALVAR BATTLE_ACTIVE 1
ACT
INC GLOBALVAR BATTLE_TIMER 1
IF
EQUAL GLOBALVAR BATTLE_TIMER 5
ACT
SETGLOBALVAR BATTLE_ACTIVE 0
SENDMSG 20 [比武] 比武超时,判定为平局!
RESET GLOBALVAR TEAM1_DEATH 0
RESET GLOBALVAR TEAM2_DEATH 0
RESETGLOBALVAR MATCH_TEAM1
RESETGLOBALVAR MATCH_TEAM2
RESETGLOBALVAR BATTLE_TIMER
RESETGLOBALVAR BATTLE_ACTIVE
RECALLMAP 3
SENDMSG 20 [比武] 所有参赛者已传送回安全区。

五、报名状态清理

玩家中途退出或掉线时,需清理其报名标记,避免变量残留导致无法再次报名。

文件路径:
Mir200EnvirMapQuest_defQManage.txt

[@Logout]
IF
CHECK [500] 1
ACT
RESET [500] 1
SENDMSG 7 已取消您的比武报名状态。

[@Login]
IF
CHECK [500] 1
ACT
RESET [500] 1
SENDMSG 7 检测到异常退出,已清理比武报名状态。

六、部署步骤

创建比武地图,地图编号设为3,坐标(100,100)和(200,200)分别为双方出生点。
在Merchant.txt中添加比武报名使者NPC,指向脚本文件路径。
将NPC脚本放入Market_Def目录,QFunction和QManage脚本放入对应目录。
配置机器人脚本,每分钟检测一次比武超时。
在M2Server中重载NPC、QFunction、QManage和机器人脚本。
创建测试队伍,验证报名、匹配、传送、死亡判定、奖励发放和超时退出全流程。

七、注意事项

逻辑变量[500]用于标记玩家是否在比赛中,若版本已占用该编号,需替换为空闲编号。

GLOBALVAR全局变量用于跨玩家共享比赛状态,不同引擎对全局变量的支持程度不同,不支持的引擎可改用文本文件记录队伍名称。

PARTYMAPMOVE和PARTYGIVEITEM为组队相关命令,部分引擎可能不支持,需改为遍历队员逐一传送和发放奖励。

比武地图建议设置禁止回城、禁止随机、禁止使用药品等规则,可通过地图属性或脚本限制实现。

奖励物品需提前在Stditem.db中存在,否则发放会失败。荣誉勋章类物品可设为绑定,防止倒卖。

超时时间设为5分钟,可根据版本节奏调整。机器人每分钟检测一次,累计5次即判定超时。

该脚本适合用于复古版本中定期举办的小型比武活动,无需额外插件,纯脚本即可跑通报名到结算的完整流程。