登录奖励写MirServer\Mir200\Envir\MapQuest_Def\QManage.txt,找[@Login]段。新手首次送元宝金币装备用下面格式:
[@Login]
IF ISNEWHUMAN
ACT GAMEGOLD +50000
GIVE 木剑 1
GIVE 布衣(男) 1
GIVE 金创药(小量) 5
ADDGUILD ?不用
SENDMSG 0 新角色福利:元宝50000、木剑、布衣、金创药已发
BREAK
ISNEWHUMAN只对新建角色生效一次,老号重登不重复发。元宝命令不同引擎名字不同,BLUE/HERO常用GAMEGOLD,GOM/GEE可用GAMEGOLD或GAMEPOINT,先在M2查看列表信息游戏命令里搜“元宝”确认名称再写。金币用GIVE 金币 数量,经验用CHANGEEXP 数量或ADDExp,具体以引擎命令表为准。物品名字必须和Mir200\Envir\StdItems.db或Mud2\DB\StdItems.DB完全一致,写“木剑”“布衣(男)”这种现成名最稳,自加装备先查数据库再写。
全号每人只领一次,不用ISNEWHUMAN,改个人变量:
[@Login]
IF CHECK [100] 0
ACT SET [100] 1
GAMEGOLD +10000
GIVE 祝福油 3
SENDMSG 0 首登礼包已发
BREAK
ELSEACT
SENDMSG 0 你已领过首登礼包
[100]是个人标记,0未领1已领。变量号别和别的脚本撞,单机用100到120足够。改完M2控制重新加载脚本,不加载就重启M2Server。
每日登录奖励用日期变量最省事。QManage写:
[@Login]
IF CHECKVAR HUMAN 日领日期 0
ACT SETVAR HUMAN 日领日期 %YYYY%-%MM%-%DD%
GAMEGOLD +2000
GIVE 超级金疮药 10
GIVE 超级魔法药 10
SENDMSG 0 今日登录礼:元宝2000、红蓝药各10
BREAK
%YYYY%-%MM%-%DD%按引擎支持的时间变量写,不支持就用D变量存当天数字,配合Robot定时0点清变量。部分引擎用GETDATE或%DATEDAY%,以M2脚本帮助为准。不想折腾日期,用星期变量发也行:
[@main]
星期一领金条:<领取/@mon>
星期二领金条:<领取/@tue>
[@mon]
IF DAYOFWEEK MON
CHECK [601] 0
ACT GIVE 金条 1
SET [601] 1
SENDMSG 0 星期一金条已发
BREAK
ELSEACT
MESSAGEBOX 未到星期一或已领取
[@tue]
IF DAYOFWEEK TUE
CHECK [602] 0
ACT GIVE 金条 1
SET [602] 1
SENDMSG 0 星期二金条已发
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]
IF CHECK [200] 0
ACT SET [200] 1
GAMEGOLD +1000
GIVE 疗伤药 5
SENDMSG 0 每日NPC礼包已发
BREAK
ELSEACT
MESSAGEBOX 今天已领过,明天再来
[@lvreward]
IF CHECKLEVELEX > 34
CHECK [201] 0
ACT SET [201] 1
GIVE 战神油 2
CHANGEEXP 500000
SENDMSG 0 35级礼包已发
BREAK
ELSEACT
IF CHECKLEVELEX < 35
MESSAGEBOX 35级以后才能领
ELSEACT
MESSAGEBOX 已领过35级礼包
CHECKLEVELEX大于34就是35级起;经验命令CHANGEEXP按引擎来,有的用ADDExp,有的用GiveExp,M2命令列表搜“经验”最准。NPC文本保存ANSI,不用UTF-8,中文乱码就转ANSI。
打怪奖励分两种。简单版用任务变量:先NPC接任务,杀够数量回NPC领。
接任务NPC:
[@main]
杀野猪任务:<接取/@accept>
交任务:<领取/@submit>
[@accept]
IF CHECK [300] 0
ACT SET [300] 1
SET [301] 0
MESSAGEBOX 已接取,击杀10只野猪后回来
BREAK
ELSEACT
MESSAGEBOX 任务进行中或已完成
[@submit]
IF CHECK [300] 1
CHECK [301] > 9
ACT TAKE 不用
SET [300] 0
SET [301] 0
GAMEGOLD +5000
GIVE 随机宝石 1
SENDMSG 0 野猪任务完成,奖励已发
BREAK
ELSEACT
MESSAGEBOX 还没杀够10只野猪
击杀计数写QFunction-0.txt或QuestDiary杀怪段,按引擎支持写法:
[@KillMonster]
IF CHECKMONNAME 野猪
CHECK [300] 1
ACT INC [301] 1
BREAK
CHECKMONNAME不同引擎可能叫KillMonName、CheckMonName或按怪物ID,先M2看杀怪触发命令。只想杀指定BOSS发一次奖,不用任务变量,直接:
[@KillMonster]
IF CHECKMONNAME 祖玛教主
CHECK [302] 0
ACT SET [302] 1
GAMEGOLD +20000
GIVE 屠龙 1
SENDMSG 0 首杀祖玛教主奖励已发
BREAK
部分引擎支持在Monster.DB给怪物填死亡触发标签,例如死亡执行[@OnKillBoss],QFunction里写对应标签即可;填法和字段名看所用引擎数据库说明。
在线时长奖励别用不可靠定时器硬算。通用做法:登录写变量存上线时间戳,Robot或QFunction每分钟检测,超过设定秒数且未发奖就发。
[@Login]
ACT SETVAR HUMAN 上线秒 0
不用复杂时间,可用引擎在线秒变量;若引擎支持%ONLINETIME%直接判。
RobotManage或自定义定时段:
[@Online3h]
IF CHECKONLINETIME > 10800
CHECK [400] 0
ACT SET [400] 1
GAMEGOLD +3000
SENDMSG 0 在线3小时福利:元宝3000
BREAK
CHECKONLINETIME不是所有引擎都有,GOM/GEE类常带在线时长检测,老HERO/BLUE可用个人变量在登录记系统时间、定时脚本比对。写不出来就改“每小时 Robot发奖”更简单:Robot.txt配每小时执行@HourGift,脚本里CHECK [小时标记]防重复。
活动全服奖励用RobotManage自动跑。比如整点发红包:
RobotManage.txt加:
AutoRun NPC MIN 60 @HourMsg
对应Robot.txt:
[@HourMsg]
ACT SENDMSG 0 整点福利:全员元宝500已发
MAP 0 发奖可用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],后期好改。
传奇单机奖励脚本编写教程登录送元宝新手礼包NPC每日打怪在线时长完整示例
来源:
作者:
点击:

