酒馆挑战赛按报名、进场、刷怪、计时、胜负、奖励、重置七层做。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按所用子版本命令帮助替换。
传奇LegendM2酒馆挑战赛全脚本:报名扣券进副本地图刷波计时胜负重奖积分排行榜每日重
来源:
作者:
点击:

