当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇单机奖励脚本编写教程登录送元宝新手礼包NPC每日打怪在线时长完整示例

热度:
登录奖励写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],后期好改。
[顶部]