传奇家族对战服里的“马甲对战”,一般指用马甲名、家族前缀、战队编号作为参战标识,按家族或马甲分组进行对战、积分、排名和奖励结算。 脚本没有统一固定写法,GOM、GEE、3K、996 等引擎命令会有差异,下面以常见传奇引擎脚本结构为例,按报名、分组、状态触发、积分、奖励、公告六个环节写示例。实际使用时要把命令替换成当前引擎支持的写法。
报名环节主要检测玩家是否具备参战资格。可以先检测等级、行会、装备、道具或指定变量,再记录家族名或马甲编号。示例如下:
[@家族战报名]
IF
CHECKLEVEL 35
CHECKGUILD
ACT
MOV P0 1
SENDMSG 7 家族战报名成功
ELSEACT
SENDMSG 7 等级不足或未加入行会
这里 P0 只作临时示例,正式脚本建议用服务端自定义变量或数据库字段记录玩家分组信息。报名时要避免重复报名,可以加一层变量检测:
[@家族战报名]
IF
CHECKLEVEL 35
CHECKGUILD
equal P0 0
ACT
MOV P0 1
SENDMSG 7 报名成功
ELSEACT
SENDMSG 7 已报名或条件不足
马甲识别通常依赖角色名、行会名或自定义字段。传奇里马甲名常见格式为家族前缀加编号,例如 [龙魂]01、[神羽]S20、[圣殿]战士等。 如果服务端支持读取角色名或行会名,可以用字符串判断前缀;如果不支持,建议改用行会ID或自定义分组变量。
示例思路:
[@马甲识别]
IF
;检测角色名或行会名包含指定前缀
ACT
MOV P1 1
SENDMSG 7 识别为龙魂家族
ELSEACT
MOV P1 2
SENDMSG 7 识别为神羽家族
分组完成后可以进入等待区。等待区脚本需要限制玩家移动、禁止回城、禁止使用部分道具,并在倒计时结束后统一传送。
[@进入等待区]
IF
equal P0 1
ACT
MAPMOVE 家族战等待区 100 100
SENDMSG 7 已进入对战等待区
ELSEACT
SENDMSG 7 未完成报名
倒计时可以用机器人脚本或服务端定时器处理。每次倒计时减少后,向等待区玩家发送提示。倒计时结束时执行传送:
[@家族战开始]
IF
ACT
MONCLEAR 家族战等待区
MAPMOVE 家族战战场A 150 150
SENDMSG 7 家族战正式开始
战斗环节不建议完全依赖玩家互砍触发脚本,因为击杀、死亡、离线、掉线都会影响统计。更稳妥的方式是在 QFunction-0.txt 中增加死亡触发和战斗状态触发。
人物死亡触发示例:
[@PlayDie]
IF
ISONMAP 家族战战场A
ACT
SENDMSG 7 你已在家族战中阵亡
INC P9 1
这里 P9 用作死亡次数统计示例。正式脚本应改为玩家独立变量,否则多个玩家会互相覆盖。
进入战斗和结束战斗也可以用触发标签处理。比如进入战斗时禁止回城,结束战斗后恢复状态:
[@StartCombatMode]
IF
ISONMAP 家族战战场A
ACT
SENDMSG 7 已进入战斗状态
[@EndCombatMode]
IF
ISONMAP 家族战战场A
ACT
SENDMSG 7 战斗状态结束
积分统计可以按击杀、死亡、占领点位、存活时间计算。击杀统计通常放在怪物死亡或玩家死亡触发里。若引擎支持玩家被击杀触发,可直接记录击杀者和被击杀者;若不支持,则改用死亡者所在家族扣分、存活玩家加分的方式。
示例:
[@家族战积分]
IF
ISONMAP 家族战战场A
ACT
INC 家族A积分 1
SENDMSG 7 家族A获得1点积分
排名结算建议在战斗结束后统一执行,不要在战斗过程中频繁写入排名,否则容易造成脚本冲突。结算脚本可以先读取各家族积分,再发放奖励。
[@家族战结算]
IF
large 家族A积分 家族B积分
ACT
SENDMSG 7 家族A获胜
GIVE 家族战勋章 1
ELSEACT
SENDMSG 7 家族B获胜
GIVE 家族战勋章 1
奖励发放前最好增加背包检测,避免物品丢失:
[@发放奖励]
IF
CHECKBAGGAGE
ACT
SENDMSG 7 背包已满,请清理后再领取
ELSEACT
GIVE 家族战勋章 1
SENDMSG 7 奖励已发放
全服公告可以放在报名开始、战斗开始、战斗结束、奖励发放四个节点。示例:
[@家族战公告]
IF
ACT
GuildNoticeMsg 255 255 家族战报名已开启
SENDMSG 7 家族战报名已开启
地图管理要单独处理。家族战地图建议设置进入条件、退出限制和时间限制。进入时检测报名状态,退出时禁止中途领奖。
[@进入家族战地图]
IF
equal P0 1
ACT
MAPMOVE 家族战战场A 150 150
TimeRecall 30
ELSEACT
SENDMSG 7 未报名无法进入
TimeRecall 用于限制停留时间,不同引擎命令可能不同。 若引擎不支持该命令,可改用机器人脚本定时踢出玩家。
防止刷分的常见做法包括:限制同一家族成员互刷、检测连续死亡、检测长时间不移动、检测离线玩家、限制重复击杀同一目标。互刷检测可以用行会ID或家族变量判断:
[@防互刷检测]
IF
;检测击杀者与被击杀者同家族
ACT
SENDMSG 7 同家族击杀不计分
ELSEACT
INC 家族A积分 1
正式脚本里需要把“同家族”判断写成具体引擎支持的命令,例如比较行会ID、行会名或自定义分组变量。
对战服如果有多组马甲同时战斗,可以按马甲编号分组。例如马甲 01-10 为A组,11-20 为B组。分组判断可以写在报名脚本里:
[@马甲分组]
IF
;检测马甲编号
ACT
MOV P2 1
SENDMSG 7 已分入A组
ELSEACT
MOV P2 2
SENDMSG 7 已分入B组
结算时再按组别分别统计:
[@A组结算]
IF
equal P2 1
large A组积分 B组积分
ACT
GIVE A组胜利宝箱 1
SENDMSG 7 A组获胜
脚本部署位置一般分为三类。NPC对话脚本放在 Market_Def 对应NPC文件中;全局触发脚本放在 QFunction-0.txt;定时任务放在机器人脚本或定时器配置中。 修改后需要保存为 ANSI 编码,并在 M2 或对应引擎中重新加载。
调试时可以先用小号测试报名、传送、死亡触发、积分增加、奖励发放五个环节。每步都加一条 SENDMSG 提示,确认脚本执行到了哪一行。如果出现奖励重复发放,重点检查死亡触发是否被多次调用;如果积分不增加,检查地图判断和变量是否写对;如果玩家无法进入战场,检查报名变量和地图权限。
这类马甲对战脚本最关键的不是单段代码,而是报名、分组、地图、触发、积分、结算六个环节要闭环。不同引擎对变量、触发标签、行会判断、定时器支持程度不同,正式使用前必须按当前服务端版本逐条验证。
传奇家族对战服马甲对战脚本:报名分组、状态触发与奖励结算完整示例
来源:
作者:
点击:

