传奇LegendM2酒馆挑战赛全脚本:报名扣券进副本地图刷波计时胜负重奖积分排行榜每日重

来源: 作者: 点击:
酒馆挑战赛按报名、进场、刷怪、计时、胜负、奖励、重置七层做。LegendM2若带原生酒馆斗酒,可用OPENPLAYDRINK、PLAYDRINKMSG、CLOSEDRINK做比酒挑战;若做打怪闯关挑战,用Market_Def建NPC、QuestDiary存数据、Robot_def做定时刷怪和每日清档、QFunction处理击杀计数。原生酒馆相关命令在部分Legend/Blue系源码里包含SAVEHERO、GETHERO、OPENPLAYDRINK、CLOSEDRINK、PLAYDRINKMSG、OPENMAKEWINE等,具体子版本是否开放以M2命令帮助为准。

一、地图与怪物准备

新建酒馆挑战副本地图,MapInfo加行,示例用自定义号5008:

5008 酒馆挑战场 FIGHT
SAFE 50 50 8

Mir200\Map\5008.map放服务端,客户端补丁按引擎放Map/Data。副本地图建议独立、不挂常规回城,避免打完被外人进入。

MonGen.txt按波次先不常刷,改由脚本/机器人控制:

5008 50 50 酒馆醉侠 10 6 30 0 0
5008 30 30 酒馆打手 10 8 30 0 0
5008 70 70 酒馆打手 10 8 30 0 0
5008 50 80 酒馆首领 10 1 60 0 0

怪物名必须与Monster.txt/StdMon.db一致。若只做比酒不刷怪,可把副本地图改成酒馆NPC对话地图,不写MonGen,改用斗酒窗口。

二、变量与数据文件

QuestDiary\酒馆挑战\建目录,文件:

报名状态.txt 存个人报名、进场、当前波次
击杀计数.txt 存每场击杀数
每日奖励.txt 防重复领每日参与奖
排行榜.txt 存角色名、积分、胜场

个人变量用HUMAN,全局用GLOBAL。变量规划:

[1000] 报名状态,0未报、1已报、2已进场、3已结束
[1001] 当前波次,1到3
[1002] 击杀计数
[1003] 挑战积分
[1004] 胜场
[1005] 每日参与奖标记
[1006] 挑战剩余秒数,用个人定时器或机器人倒计

三、酒馆报名NPC

Market_Def\酒馆挑战总管-0.txt,Merchant按引擎格式写酒馆或土城坐标,脚本:

[@main]
查看挑战规则/rule
报名参加酒馆闯关/signup
查询我的挑战进度/progress
领取每日参与奖/daily
酒馆比酒挑战/drink
退出/exit

[@rule]
if

act

SENDMSG 6 酒馆闯关共3波,50级起报,每场扣挑战券1或元宝50;限定时间内清完3波获胜,获得积分与酒馆专属奖励。比酒挑战单独进入斗酒窗口。

[@signup]
if

CHECKLEVELEX < 50
act

SENDMSG 6 50级及以上可报名酒馆闯关。
elsesay

if

CHECK [1000] > 0
act

SENDMSG 6 你已报名或已在场,请勿重复报名。
elsesay

if

CHECKITEM 挑战券 1
act

TAKE 挑战券 1
SET [1000] 1
SET [1001] 1
SET [1002] 0
SAVEVAR HUMAN 报名状态 ..\QuestDiary\酒馆挑战\报名状态.txt
SAVEVAR HUMAN 击杀计数 ..\QuestDiary\酒馆挑战\击杀计数.txt
SENDMSG 6 报名成功,即将进入酒馆挑战场。
MAPMOVE 5008 50 50
SET [1000] 2
CALL [\酒馆挑战\刷怪.txt] @spawnwave1

elsesay

if

CHECKGAMEGOLD > 49
act

GAMEGOLD - 50
SET [1000] 1
SET [1001] 1
SET [1002] 0
SAVEVAR HUMAN 报名状态 ..\QuestDiary\酒馆挑战\报名状态.txt
SAVEVAR HUMAN 击杀计数 ..\QuestDiary\酒馆挑战\击杀计数.txt
SENDMSG 6 扣除50元宝报名,进入酒馆挑战场。
MAPMOVE 5008 50 50
SET [1000] 2
CALL [\酒馆挑战\刷怪.txt] @spawnwave1

elsesay

SENDMSG 6 需要挑战券1张或50元宝。

四、刷怪与波次控制

QuestDiary\酒馆挑战\刷怪.txt:

[@spawnwave1]
if

act

KILLMONBYNAME 5008 酒馆醉侠
KILLMONBYNAME 5008 酒馆打手
KILLMONBYNAME 5008 酒馆首领
MOBPLACE 5008 50 50 酒馆醉侠 6 0 0
MOBPLACE 5008 30 30 酒馆打手 8 0 0
MOBPLACE 5008 70 70 酒馆打手 8 0 0
SENDMSG 6 第1波已刷新:醉侠6、打手16,限定300秒清场。
SET [1006] 300
SETSCTIMER 1 1

[@spawnwave2]
if

act

KILLMONBYNAME 5008 酒馆醉侠
KILLMONBYNAME 5008 酒馆打手
MOBPLACE 5008 50 50 酒馆醉侠 10 0 0
MOBPLACE 5008 30 30 酒馆打手 12 0 0
MOBPLACE 5008 70 70 酒馆打手 12 0 0
SENDMSG 6 第2波已刷新:醉侠10、打手24,限定300秒清场。
SET [1006] 300
SETSCTIMER 1 1

[@spawnwave3]
if

act

KILLMONBYNAME 5008 酒馆醉侠
KILLMONBYNAME 5008 酒馆打手
KILLMONBYNAME 5008 酒馆首领
MOBPLACE 5008 50 80 酒馆首领 1 0 0
MOBPLACE 5008 50 50 酒馆醉侠 10 0 0
MOBPLACE 5008 30 30 酒馆打手 14 0 0
MOBPLACE 5008 70 70 酒馆打手 14 0 0
SENDMSG 6 第3波已刷新:首领1、醉侠10、打手28,限定360秒清场。
SET [1006] 360
SETSCTIMER 1 1

KILLMONBYNAME、MOBPLACE按所用Legend子版本替换;部分版本刷怪用GenMon、MOBPLACE参数顺序不同。SETSCTIMER用个人定时器倒计,定时器索引别和其他活动冲突;若子版本不支持SETSCTIMER,用Robot_def每秒段减[1006]。

五、击杀计数与波次推进

QFunction-0.txt处理怪物死亡:

[@OnKillMon]
if

CHECKMAPNAME 5008
CHECK [1000] = 2
act

CALCVAR [1002] + 1
SAVEVAR HUMAN 击杀计数 ..\QuestDiary\酒馆挑战\击杀计数.txt
CALL [\酒馆挑战\判断波次.txt] @checkwave

若引擎死亡触发器不叫@OnKillMon,用MapQuest_Def按怪物名写死亡段,或QFunction其他击杀宏。CHECKMAPNAME按实际命令替换,部分版本用CHECKMAPSAME、ISINMAP。

QuestDiary\酒馆挑战\判断波次.txt:

[@checkwave]
if

CHECK [1001] = 1
CHECKKILLMONNAME 酒馆醉侠
CHECKKILLMONNAME 酒馆打手
act

SENDMSG 6 第1波已清,5秒后进入第2波。
DELAYCALL 5 @go2
elsesay

if

CHECK [1001] = 2
CHECKKILLMONNAME 酒馆醉侠
CHECKKILLMONNAME 酒馆打手
act

SENDMSG 6 第2波已清,5秒后进入第3波。
DELAYCALL 5 @go3
elsesay

if

CHECK [1001] = 3
CHECKKILLMONNAME 酒馆首领
CHECKKILLMONNAME 酒馆醉侠
CHECKKILLMONNAME 酒馆打手
act

SENDMSG 6 第3波已清,挑战成功。
CALL [\酒馆挑战\发奖.txt] @win

CHECKKILLMONNAME仅为示意,按引擎是否提供“某地图某怪全灭”命令替换;没有全灭命令就用击杀计数比对:第1波目标击杀22、第2波目标36、第3波目标53,计数达到且当前波次一致才进下一场。

六、计时超时判负

个人定时器段,QManage或QFunction按SETSCTIMER对应索引写:

[@OnTimer1]
if

CHECK [1000] = 2
CHECK [1006] > 0
act

CALCVAR [1006] - 1
if

CHECK [1006] = 0
act

SENDMSG 6 酒馆挑战限时结束,未清完当前波次,判负。
CALL [\酒馆挑战\发奖.txt] @lose

elsesay

SENDMSG 6 当前波次剩余<$STR([1006])>秒。

没有个人定时器就用Robot_def每秒全图扫描5008在线玩家,减少[1006];人数多会有性能压力,少量服可用。判负后清怪、送回主城、置[1000]=3。

七、胜负重奖

QuestDiary\酒馆挑战\发奖.txt:

[@win]
if

act

KILLMONBYNAME 5008 酒馆醉侠
KILLMONBYNAME 5008 酒馆打手
KILLMONBYNAME 5008 酒馆首领
CALCVAR [1003] + 30
CALCVAR [1004] + 1
SET [1000] 3
GIVE 酒馆荣誉点 30
GIVE 陈年烧酒 2
GIVE 酒馆宝箱 1
MAPMOVE 回城图号 回城X 回城Y
SAVEVAR HUMAN 报名状态 ..\QuestDiary\酒馆挑战\报名状态.txt
SAVEVAR HUMAN 击杀计数 ..\QuestDiary\酒馆挑战\击杀计数.txt
CALL [\酒馆挑战\排行榜.txt] @uprank

SENDMSG 0 <$USERNAME>完成酒馆闯关3波,获得30积分、酒馆荣誉点、烧酒与宝箱。

[@lose]
if

act

KILLMONBYNAME 5008 酒馆醉侠
KILLMONBYNAME 5008 酒馆打手
KILLMONBYNAME 5008 酒馆首领
CALCVAR [1003] + 5
SET [1000] 3
GIVE 酒馆荣誉点 5
MAPMOVE 回城图号 回城X 回城Y
SAVEVAR HUMAN 报名状态 ..\QuestDiary\酒馆挑战\报名状态.txt
SENDMSG 6 挑战失败,返还参与积分5、酒馆荣誉点5,可重新报名。

胜场发高积分、败场发保底积分;酒馆专属烧酒用于比酒或兑换。若做绑定性防倒卖,StdItems里酒类按引擎设置绑定字段。

八、比酒挑战独立段

若Legend子版本支持斗酒,报名NPC加:

[@drink]
if

CHECKITEM 烧酒 1
act

OPENPLAYDRINK 0 酒馆酒仙 DRINK
SENDMSG 6 已打开斗酒窗口,提交烧酒开始比酒。
elsesay

SENDMSG 6 需要烧酒1瓶。

斗酒过程用PLAYDRINKMSG发上下提示,CLOSEDRINK关窗;NPC醉或玩家醉的回调段按引擎原生斗酒事件写,玩家胜出发奖,NPC胜发安慰奖。HERO系斗酒资料示例用StdMode=60烧酒、OPENPLAYDRINK 头像 名称 DRINK、醉酒度红线判定NPC醉酒度大于人物则玩家胜,Legend不完全等同,命令以所用M2帮助为准。 酿酒可用OPENMAKEWINE、GETGOODMAKEWINE补充烧酒产出,没有该命令就只用普通物品烧酒。

九、进度查询与每日奖

[@progress]
if

CHECK [1000] > 0
act

SENDMSG 6 报名状态<STR([1000])>,当前波次<STR([1001])>,击杀<STR([1002])>,积分<STR([1003])>,胜场<$STR([1004])>。
elsesay

SENDMSG 6 尚未报名酒馆挑战。

[@daily]
if

CHECK [1005] = 0
act

SET [1005] 1
GIVE 酒馆荣誉点 10
SAVEVAR HUMAN 每日奖励 ..\QuestDiary\酒馆挑战\每日奖励.txt
SENDMSG 6 领取每日酒馆参与奖,获得酒馆荣誉点10。
elsesay

SENDMSG 6 今日每日参与奖已领取。

十、排行榜

QuestDiary\酒馆挑战\排行榜.txt:

[@uprank]
if

act

MOV S0 <$USERNAME>
MOV D0 <$STR([1003])>
WRITELINETOLIST ..\QuestDiary\酒馆挑战\排行榜.txt <S0>=<D0>
SENDMSG 6 排行榜已更新。

读取前三名:

[@showrank]
if

act

GETSORTNAME 酒馆积分 1 S1
GETSORTNAME 酒馆积分 2 S2
GETSORTNAME 酒馆积分 3 S3
SENDMSG 6 酒馆挑战榜:1.<S1> 2.<S2> 3.<$S3>。

GETSORTNAME仅在你所用Legend版本支持排行榜系统时使用;不支持就用WRITELINETOLIST写文本,另写排序NPC读取前几行,或定期用脚本比较变量重排。

十一、机器人定时与每日重置

Robot_def\AutoRunRobot.txt:

AutoRun NPC RUNONDAY 00:00:05 @酒馆每日重置

AutoRun NPC RUNONDAY 12:00:00 @酒馆中午提醒

AutoRun NPC RUNONDAY 20:00:00 @酒馆自动开赛

RobotManage.txt:

[@酒馆每日重置]
if

act

DELUSERDATE ..\QuestDiary\酒馆挑战\每日奖励.txt
SET [1005] 0
SENDMSG 1 酒馆挑战每日数据已重置,每日参与奖可重新领取。

[@酒馆中午提醒]
if

act

SENDMSG 1 酒馆挑战每日12点开放报名,50级起可找酒馆挑战总管。

[@酒馆自动开赛]
if

act

SENDMSG 1 酒馆挑战晚间场开启,报名后进入5008自动刷3波。

DELUSERDATE按子版本替换成DELNAMELIST或删除HUMAN变量文件;机器人只做全服提醒和清每日标记,个人波次、击杀、积分按角色保存,不靠机器人全量重算。

十二、防刷规则

重复报名:signup段CHECK [1000]>0直接拦,进场置2、结束置3,重新报名前机器人不清[1000]个人状态,仅清每日[1005]。

中途掉线:QFunction登录段检测[1000]=2且最后地图5008,可按需求自动送回主城并判负,或保留状态重传;保留状态要防地图无人导致怪物堆积,建议掉线超时被清场后按lose处理。

代刷积分:击杀只统计5008地图、[1000]=2期间;比酒和打怪分开变量,不互加积分。

元宝/挑战券双通道:优先扣挑战券,无券扣元宝;两样都没有不让进。TAKE和GAMEGOLD前置校验,避免负数。

波次跳关:判断波次只认当前[1001],达到目标击杀数才DELAYCALL下一波;用全灭命令最稳,用计数要按每波怪物总数硬比对。

十三、StdItems酒类与材料

烧酒、陈年烧酒按引擎物品建表。斗酒烧酒参考资料用StdMode=60,其他子版本以物品规则为准。 挑战券建独立消耗品,酒馆荣誉点建可累积货币或普通物品,酒馆宝箱建开启后出烧酒、荣誉点、随机酒馆装备。MonItems给首领加烧酒和宝箱,给小怪加挑战券低概率产出,形成报名材料闭环。

十四、排错

NPC无反应:Market_Def文件名、Merchant注册、ANSI编码、[@main]选项都查;中文乱码多是UTF-8,改ANSI另存。

进图不刷怪:5008未在MapInfo加载、MOBPLACE命令名不对、KILLMONBYNAME清旧怪失败;GM手动MOBPLACE 5008测试,能刷再接NPC。

击杀不计数:QFunction死亡段未触发、CHECKMAPNAME地图号错、[1000]未置2;手动设[1000]=2进5008杀一只,看击杀计数文件是否变。

波次不推进:全灭判断命令不支持,改计数比对;DELAYCALL段名写错,spawnwave2/spawnwave3要在刷怪.txt存在且被#CALL路径正确。

定时器不倒计:SETSCTIMER索引与OnTimer段不对应,或子版本用全局OnTimer而非个人;改用机器人每秒段或活动专用定时器索引。

判负不送回:MAPMOVE回城图号未加载、坐标不可走;先GM命令行传回城图测试。

比酒打不开:OPENPLAYDRINK/CLOSEDRINK未在该Legend子版本开放,查M2命令帮助;不支持就删除[@drink],只做打怪闯关。

排行榜空:GETSORTNAME未建排行系统就改文本;WRITELINETOLIST路径不存在要先建目录,写权限不足会导致不落盘。

机器人不执行:AutoRunRobot标签与RobotManage标签不一致、机器人总开关未开、时间格式错误;先手动执行@酒馆每日重置验证清档,再查定时。

按报名扣券、进场刷三波、击杀计数、个人定时器限时、胜发30积分与酒馆宝箱、负发保底、机器人清每日、排行榜落盘这套写,LegendM2酒馆挑战可同时容纳打怪闯关和斗酒比拼;原生酒馆命令不全就用Market_Def+QuestDiary+Robot补齐,所有OPENPLAYDRINK、SETSCTIMER、MOBPLACE、GETSORTNAME按所用子版本命令帮助替换。