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

来源: 作者: 点击:
组队比武是提升服务器活跃度的常用玩法,核心是把报名、组队校验、地图传送、胜负判定、奖励发放串成一条完整链路。脚本不依赖复杂引擎扩展,用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
GETPARTYMEMBERCOUNTN10
MOVD0<USERNAME>
FORMATSTRS10队伍:%s人数:%d时间:%s
SENDMSG7报名成功,等待匹配对手。
SENDMSG20[比武]队长<USERNAME>的队伍已报名,当前人数人。
SAVELOGReportTeamBattle.txt<STR(S10)>
GOTO@AddToQueue

[@AddToQueue]
IF
CHECKGLOBALVARTEAM_QUEUE_COUNT<10
ACT
INCGLOBALVARTEAM_QUEUE_COUNT1
MOVGLOBALVARTEAM_QUEUE_<STR(GLOBALVARTEAM_QUEUE_COUNT)><USERNAME>
SENDMSG7当前排队队伍数:<STR(GLOBALVARTEAM_QUEUE_COUNT)>
GOTO@TryMatch
ELSEACT
SENDMSG7排队已满,请稍后再试。
CLOSE

[@TryMatch]
IF
EQUALGLOBALVARTEAM_QUEUE_COUNT2
ACT
MOVS20<STR(GLOBALVARTEAM_QUEUE_1)>
MOVS21<STR(GLOBALVARTEAM_QUEUE_2)>
RESETGLOBALVARTEAM_QUEUE_COUNT0
SENDMSG20[比武]匹配成功!<STR(S20)>对阵<STR(S21)>
GOTO@SendBothTeams
ELSEACT
SENDMSG7等待更多队伍报名。
CLOSE

[@SendBothTeams]
IF
ACT
SETGLOBALVARMATCH_TEAM1<STR(S20)>
SETGLOBALVARMATCH_TEAM2<STR(S21)>
SETGLOBALVARBATTLE_ACTIVE1
SENDMSG20[比武]双方即将传送至比武场,请准备战斗!
DELAYGOTO3000@TeleportTeam1
DELAYGOTO3500@TeleportTeam2

[@TeleportTeam1]
IF
ACT
PARTYMAPMOVE<STR(MATCH_TEAM1)>3100100
SENDMSG20[比武]队伍<STR(MATCH_TEAM1)>已进入比武场。

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

三、胜负判定脚本

文件路径:
Mir200EnvirMapQuest_defQFunction-0.txt

[@PlayDie]
IF
ISONMAP3
EQUALGLOBALVARBATTLE_ACTIVE1
ACT
GETPARTYNAMES30
IF
EQUALS30<STR(MATCH_TEAM1)>
ACT
INCGLOBALVARTEAM1_DEATH1
SENDMSG20[比武]队伍<STR(MATCH_TEAM1)>阵亡一人,累计<STR(GLOBALVARTEAM1_DEATH)>人。
GOTO@CheckBattleEnd
BREAK
IF
EQUALS30<STR(MATCH_TEAM2)>
ACT
INCGLOBALVARTEAM2_DEATH1
SENDMSG20[比武]队伍<STR(MATCH_TEAM2)>阵亡一人,累计<STR(GLOBALVARTEAM2_DEATH)>人。
GOTO@CheckBattleEnd
BREAK

[@CheckBattleEnd]
IF
EQUALGLOBALVARTEAM1_DEATH5
ACT
SETGLOBALVARBATTLE_ACTIVE0
SENDMSG20[比武]比赛结束!<STR(MATCH_TEAM2)>获胜!
GOTO@GiveReward2
DELAYGOTO5000@RecallAllPlayers
BREAK
IF
EQUALGLOBALVARTEAM2_DEATH5
ACT
SETGLOBALVARBATTLE_ACTIVE0
SENDMSG20[比武]比赛结束!<STR(MATCH_TEAM1)>获胜!
GOTO@GiveReward1
DELAYGOTO5000@RecallAllPlayers
BREAK

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

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

[@RecallAllPlayers]
IF
ACT
RESETGLOBALVARTEAM1_DEATH0
RESETGLOBALVARTEAM2_DEATH0
RESETGLOBALVARMATCH_TEAM1
RESETGLOBALVARMATCH_TEAM2
RESETGLOBALVARBATTLE_ACTIVE
RECALLMAP3
SENDMSG20[比武]所有参赛者已传送回安全区。

四、超时结束机制

文件路径:
Mir200EnvirRobot_defAutoRunRobot.txt

AutoRunNPCRUNONMIN1@CheckBattleTimeout

文件路径:
Mir200EnvirRobot_defRobotManage.txt

[@CheckBattleTimeout]
IF
EQUALGLOBALVARBATTLE_ACTIVE1
ACT
INCGLOBALVARBATTLE_TIMER1
IF
EQUALGLOBALVARBATTLE_TIMER5
ACT
SETGLOBALVARBATTLE_ACTIVE0
SENDMSG20[比武]比武超时,判定为平局!
RESETGLOBALVARTEAM1_DEATH0
RESETGLOBALVARTEAM2_DEATH0
RESETGLOBALVARMATCH_TEAM1
RESETGLOBALVARMATCH_TEAM2
RESETGLOBALVARBATTLE_TIMER
RESETGLOBALVARBATTLE_ACTIVE
RECALLMAP3
SENDMSG20[比武]所有参赛者已传送回安全区。

五、报名状态清理

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

文件路径:
Mir200EnvirMapQuest_defQManage.txt

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

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

六、部署步骤

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

七、注意事项

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

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

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

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

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

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

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