登录奖励写MirServer\Mir200\Envir\MapQuest_Def\QManage.txt,找[@Login]段。新手首次送元宝金币装备用下面格式:
[@Login]
IFISNEWHUMAN
ACTGAMEGOLD+50000
GIVE木剑1
GIVE布衣(男)1
GIVE金创药(小量)5
ADDGUILD?不用
SENDMSG0新角色福利:元宝50000、木剑、布衣、金创药已发
BREAK
ISNEWHUMAN只对新建角色生效一次,老号重登不重复发。元宝命令不同引擎名字不同,BLUE/HERO常用GAMEGOLD,GOM/GEE可用GAMEGOLD或GAMEPOINT,先在M2查看列表信息游戏命令里搜“元宝”确认名称再写。金币用GIVE金币数量,经验用CHANGEEXP数量或ADDExp,具体以引擎命令表为准。物品名字必须和Mir200\Envir\StdItems.db或Mud2\DB\StdItems.DB完全一致,写“木剑”“布衣(男)”这种现成名最稳,自加装备先查数据库再写。
全号每人只领一次,不用ISNEWHUMAN,改个人变量:
[@Login]
IFCHECK[100]0
ACTSET[100]1
GAMEGOLD+10000
GIVE祝福油3
SENDMSG0首登礼包已发
BREAK
ELSEACT
SENDMSG0你已领过首登礼包
[100]是个人标记,0未领1已领。变量号别和别的脚本撞,单机用100到120足够。改完M2控制重新加载脚本,不加载就重启M2Server。
每日登录奖励用日期变量最省事。QManage写:
[@Login]
IFCHECKVARHUMAN日领日期0
ACTSETVARHUMAN日领日期%YYYY%-%MM%-%DD%
GAMEGOLD+2000
GIVE超级金疮药10
GIVE超级魔法药10
SENDMSG0今日登录礼:元宝2000、红蓝药各10
BREAK
%YYYY%-%MM%-%DD%按引擎支持的时间变量写,不支持就用D变量存当天数字,配合Robot定时0点清变量。部分引擎用GETDATE或%DATEDAY%,以M2脚本帮助为准。不想折腾日期,用星期变量发也行:
[@main]
星期一领金条:<领取/@mon>
星期二领金条:<领取/@tue>
[@mon]
IFDAYOFWEEKMON
CHECK[601]0
ACTGIVE金条1
SET[601]1
SENDMSG0星期一金条已发
BREAK
ELSEACT
MESSAGEBOX未到星期一或已领取
[@tue]
IFDAYOFWEEKTUE
CHECK[602]0
ACTGIVE金条1
SET[602]1
SENDMSG0星期二金条已发
BREAK
ELSEACT
MESSAGEBOX未到星期二或已领取
DAYOFWEEK关键字不同引擎可能写成dayofweek,变量[601][602]每天0点想重置就写Robot或定时脚本reset[601]7。
NPC点击领奖写Market_def对应地图NPC文本,或在QuestDiary建目录。先在Envir\Market_def\地图编号目录建NPC名.txt,首行写NPC坐标、外观、名字、头衔、可交易等;脚本体示例:
[@main]
每日礼包:<领取/@dayreward>
等级礼包:<领取/@lvreward>
[@dayreward]
IFCHECK[200]0
ACTSET[200]1
GAMEGOLD+1000
GIVE疗伤药5
SENDMSG0每日NPC礼包已发
BREAK
ELSEACT
MESSAGEBOX今天已领过,明天再来
[@lvreward]
IFCHECKLEVELEX>34
CHECK[201]0
ACTSET[201]1
GIVE战神油2
CHANGEEXP500000
SENDMSG035级礼包已发
BREAK
ELSEACT
IFCHECKLEVELEX<35
MESSAGEBOX35级以后才能领
ELSEACT
MESSAGEBOX已领过35级礼包
CHECKLEVELEX大于34就是35级起;经验命令CHANGEEXP按引擎来,有的用ADDExp,有的用GiveExp,M2命令列表搜“经验”最准。NPC文本保存ANSI,不用UTF-8,中文乱码就转ANSI。
打怪奖励分两种。简单版用任务变量:先NPC接任务,杀够数量回NPC领。
接任务NPC:
[@main]
杀野猪任务:<接取/@accept>
交任务:<领取/@submit>
[@accept]
IFCHECK[300]0
ACTSET[300]1
SET[301]0
MESSAGEBOX已接取,击杀10只野猪后回来
BREAK
ELSEACT
MESSAGEBOX任务进行中或已完成
[@submit]
IFCHECK[300]1
CHECK[301]>9
ACTTAKE不用
SET[300]0
SET[301]0
GAMEGOLD+5000
GIVE随机宝石1
SENDMSG0野猪任务完成,奖励已发
BREAK
ELSEACT
MESSAGEBOX还没杀够10只野猪
击杀计数写QFunction-0.txt或QuestDiary杀怪段,按引擎支持写法:
[@KillMonster]
IFCHECKMONNAME野猪
CHECK[300]1
ACTINC[301]1
BREAK
CHECKMONNAME不同引擎可能叫KillMonName、CheckMonName或按怪物ID,先M2看杀怪触发命令。只想杀指定BOSS发一次奖,不用任务变量,直接:
[@KillMonster]
IFCHECKMONNAME祖玛教主
CHECK[302]0
ACTSET[302]1
GAMEGOLD+20000
GIVE屠龙1
SENDMSG0首杀祖玛教主奖励已发
BREAK
部分引擎支持在Monster.DB给怪物填死亡触发标签,例如死亡执行[@OnKillBoss],QFunction里写对应标签即可;填法和字段名看所用引擎数据库说明。
在线时长奖励别用不可靠定时器硬算。通用做法:登录写变量存上线时间戳,Robot或QFunction每分钟检测,超过设定秒数且未发奖就发。
[@Login]
ACTSETVARHUMAN上线秒0
不用复杂时间,可用引擎在线秒变量;若引擎支持%ONLINETIME%直接判。
RobotManage或自定义定时段:
[@Online3h]
IFCHECKONLINETIME>10800
CHECK[400]0
ACTSET[400]1
GAMEGOLD+3000
SENDMSG0在线3小时福利:元宝3000
BREAK
CHECKONLINETIME不是所有引擎都有,GOM/GEE类常带在线时长检测,老HERO/BLUE可用个人变量在登录记系统时间、定时脚本比对。写不出来就改“每小时Robot发奖”更简单:Robot.txt配每小时执行@HourGift,脚本里CHECK[小时标记]防重复。
活动全服奖励用RobotManage自动跑。比如整点发红包:
RobotManage.txt加:
AutoRunNPCMIN60@HourMsg
对应Robot.txt:
[@HourMsg]
ACTSENDMSG0整点福利:全员元宝500已发
MAP0发奖可用GAMEGOLD全服不行,得逐人;单机人少用登录变量代替更稳。
全服每人发用G变量统计在线名单不方便,单机建议做成“整点找NPC领”或“在线达XX分钟找NPC领”,少写全服遍历。
排错按这个顺序:
1.改前备份QManage.txt、Market_def、QuestDiary相关文件,错了直接还原。
2.物品发不出来先查StdItems名字,大小写、括号、空格都要一致;自改DB后未重启M2也会读不到。
3.元宝没到查命令名,GAMEGOLD、GAMEPOINT、GAMEDIAMOND分别对应关系在M2游戏命令里看,别把金币当元宝。
4.变量不生效看是否和别的NPC重号,个人用[100]-[499]段,全局用G开头变量另写。
5.脚本保存ANSI,不用带BOM的UTF-8;#IF、#ACT、#ELSEACT成对,命令和参数空格隔开。
6.M2报行号就按行号改;不报但不触发,M2控制重新加载脚本或重启M2Server,NPC改完可用@reloadnpcall。
7.单机路径含中文、桌面、空格会导致部分老引擎读脚本异常,服务端放纯英文路径最省事。
新手直接套登录首充式礼包用QManage[@Login]+ISNEWHUMAN;做每日用NPC+[变量]或日期变量;做打怪用QFunction击杀标签+任务变量;做在线用Robot定时+在线时长命令。四套分开写,别全堆一个[@Login],后期好改。
[@Login]
IFISNEWHUMAN
ACTGAMEGOLD+50000
GIVE木剑1
GIVE布衣(男)1
GIVE金创药(小量)5
ADDGUILD?不用
SENDMSG0新角色福利:元宝50000、木剑、布衣、金创药已发
BREAK
ISNEWHUMAN只对新建角色生效一次,老号重登不重复发。元宝命令不同引擎名字不同,BLUE/HERO常用GAMEGOLD,GOM/GEE可用GAMEGOLD或GAMEPOINT,先在M2查看列表信息游戏命令里搜“元宝”确认名称再写。金币用GIVE金币数量,经验用CHANGEEXP数量或ADDExp,具体以引擎命令表为准。物品名字必须和Mir200\Envir\StdItems.db或Mud2\DB\StdItems.DB完全一致,写“木剑”“布衣(男)”这种现成名最稳,自加装备先查数据库再写。
全号每人只领一次,不用ISNEWHUMAN,改个人变量:
[@Login]
IFCHECK[100]0
ACTSET[100]1
GAMEGOLD+10000
GIVE祝福油3
SENDMSG0首登礼包已发
BREAK
ELSEACT
SENDMSG0你已领过首登礼包
[100]是个人标记,0未领1已领。变量号别和别的脚本撞,单机用100到120足够。改完M2控制重新加载脚本,不加载就重启M2Server。
每日登录奖励用日期变量最省事。QManage写:
[@Login]
IFCHECKVARHUMAN日领日期0
ACTSETVARHUMAN日领日期%YYYY%-%MM%-%DD%
GAMEGOLD+2000
GIVE超级金疮药10
GIVE超级魔法药10
SENDMSG0今日登录礼:元宝2000、红蓝药各10
BREAK
%YYYY%-%MM%-%DD%按引擎支持的时间变量写,不支持就用D变量存当天数字,配合Robot定时0点清变量。部分引擎用GETDATE或%DATEDAY%,以M2脚本帮助为准。不想折腾日期,用星期变量发也行:
[@main]
星期一领金条:<领取/@mon>
星期二领金条:<领取/@tue>
[@mon]
IFDAYOFWEEKMON
CHECK[601]0
ACTGIVE金条1
SET[601]1
SENDMSG0星期一金条已发
BREAK
ELSEACT
MESSAGEBOX未到星期一或已领取
[@tue]
IFDAYOFWEEKTUE
CHECK[602]0
ACTGIVE金条1
SET[602]1
SENDMSG0星期二金条已发
BREAK
ELSEACT
MESSAGEBOX未到星期二或已领取
DAYOFWEEK关键字不同引擎可能写成dayofweek,变量[601][602]每天0点想重置就写Robot或定时脚本reset[601]7。
NPC点击领奖写Market_def对应地图NPC文本,或在QuestDiary建目录。先在Envir\Market_def\地图编号目录建NPC名.txt,首行写NPC坐标、外观、名字、头衔、可交易等;脚本体示例:
[@main]
每日礼包:<领取/@dayreward>
等级礼包:<领取/@lvreward>
[@dayreward]
IFCHECK[200]0
ACTSET[200]1
GAMEGOLD+1000
GIVE疗伤药5
SENDMSG0每日NPC礼包已发
BREAK
ELSEACT
MESSAGEBOX今天已领过,明天再来
[@lvreward]
IFCHECKLEVELEX>34
CHECK[201]0
ACTSET[201]1
GIVE战神油2
CHANGEEXP500000
SENDMSG035级礼包已发
BREAK
ELSEACT
IFCHECKLEVELEX<35
MESSAGEBOX35级以后才能领
ELSEACT
MESSAGEBOX已领过35级礼包
CHECKLEVELEX大于34就是35级起;经验命令CHANGEEXP按引擎来,有的用ADDExp,有的用GiveExp,M2命令列表搜“经验”最准。NPC文本保存ANSI,不用UTF-8,中文乱码就转ANSI。
打怪奖励分两种。简单版用任务变量:先NPC接任务,杀够数量回NPC领。
接任务NPC:
[@main]
杀野猪任务:<接取/@accept>
交任务:<领取/@submit>
[@accept]
IFCHECK[300]0
ACTSET[300]1
SET[301]0
MESSAGEBOX已接取,击杀10只野猪后回来
BREAK
ELSEACT
MESSAGEBOX任务进行中或已完成
[@submit]
IFCHECK[300]1
CHECK[301]>9
ACTTAKE不用
SET[300]0
SET[301]0
GAMEGOLD+5000
GIVE随机宝石1
SENDMSG0野猪任务完成,奖励已发
BREAK
ELSEACT
MESSAGEBOX还没杀够10只野猪
击杀计数写QFunction-0.txt或QuestDiary杀怪段,按引擎支持写法:
[@KillMonster]
IFCHECKMONNAME野猪
CHECK[300]1
ACTINC[301]1
BREAK
CHECKMONNAME不同引擎可能叫KillMonName、CheckMonName或按怪物ID,先M2看杀怪触发命令。只想杀指定BOSS发一次奖,不用任务变量,直接:
[@KillMonster]
IFCHECKMONNAME祖玛教主
CHECK[302]0
ACTSET[302]1
GAMEGOLD+20000
GIVE屠龙1
SENDMSG0首杀祖玛教主奖励已发
BREAK
部分引擎支持在Monster.DB给怪物填死亡触发标签,例如死亡执行[@OnKillBoss],QFunction里写对应标签即可;填法和字段名看所用引擎数据库说明。
在线时长奖励别用不可靠定时器硬算。通用做法:登录写变量存上线时间戳,Robot或QFunction每分钟检测,超过设定秒数且未发奖就发。
[@Login]
ACTSETVARHUMAN上线秒0
不用复杂时间,可用引擎在线秒变量;若引擎支持%ONLINETIME%直接判。
RobotManage或自定义定时段:
[@Online3h]
IFCHECKONLINETIME>10800
CHECK[400]0
ACTSET[400]1
GAMEGOLD+3000
SENDMSG0在线3小时福利:元宝3000
BREAK
CHECKONLINETIME不是所有引擎都有,GOM/GEE类常带在线时长检测,老HERO/BLUE可用个人变量在登录记系统时间、定时脚本比对。写不出来就改“每小时Robot发奖”更简单:Robot.txt配每小时执行@HourGift,脚本里CHECK[小时标记]防重复。
活动全服奖励用RobotManage自动跑。比如整点发红包:
RobotManage.txt加:
AutoRunNPCMIN60@HourMsg
对应Robot.txt:
[@HourMsg]
ACTSENDMSG0整点福利:全员元宝500已发
MAP0发奖可用GAMEGOLD全服不行,得逐人;单机人少用登录变量代替更稳。
全服每人发用G变量统计在线名单不方便,单机建议做成“整点找NPC领”或“在线达XX分钟找NPC领”,少写全服遍历。
排错按这个顺序:
1.改前备份QManage.txt、Market_def、QuestDiary相关文件,错了直接还原。
2.物品发不出来先查StdItems名字,大小写、括号、空格都要一致;自改DB后未重启M2也会读不到。
3.元宝没到查命令名,GAMEGOLD、GAMEPOINT、GAMEDIAMOND分别对应关系在M2游戏命令里看,别把金币当元宝。
4.变量不生效看是否和别的NPC重号,个人用[100]-[499]段,全局用G开头变量另写。
5.脚本保存ANSI,不用带BOM的UTF-8;#IF、#ACT、#ELSEACT成对,命令和参数空格隔开。
6.M2报行号就按行号改;不报但不触发,M2控制重新加载脚本或重启M2Server,NPC改完可用@reloadnpcall。
7.单机路径含中文、桌面、空格会导致部分老引擎读脚本异常,服务端放纯英文路径最省事。
新手直接套登录首充式礼包用QManage[@Login]+ISNEWHUMAN;做每日用NPC+[变量]或日期变量;做打怪用QFunction击杀标签+任务变量;做在线用Robot定时+在线时长命令。四套分开写,别全堆一个[@Login],后期好改。

