经验加成这件事,先得知道正常经验是怎么发的。怪物打死以后,引擎按怪物的经验值乘上人物的经验倍率,算出一笔,发给出手的人或者周围范围内的人,再按引擎设置里的分配方式落到各自头上。要让带上某件装备才有额外经验,就是在这次正常结算之外再补一笔,或者把倍率抬上去。
补这一笔的位置只有三处:装备数据库里的隐藏属性、引擎功能设置里的套装或者元素属性、杀怪触发的脚本。前两处不写脚本,改配置就行;第三处最灵活,什么条件都能塞进去,也是做定制玩法最常用的。
先说数据库那条路。
打开物品数据库,也就是 Mir200\Mud2\DB 目录下那几个 DB 文件,用引擎带的 DB 编辑器或者通用的 DBC 工具。找到要加经验的那件装备,看有没有经验加成或者杀怪经验这一类字段。
一部分引擎在 StdItems 表里留了隐藏字段,能配一个百分比,人物戴上这件装备,杀怪经验就按这个百分比往上加。字段名各家不同,有的用 Anicount 或 Source 这类字段兼做经验值,具体含义得翻你手上那份引擎说明。填 100 一般代表加成百分之百,也就是翻倍;填 50 是加一半。这个加成是引擎自己算的,玩家一戴上就生效,一脱下就掉,不用脚本管。
另一条是套装路线。不少版本把穿齐三件加经验做成套装属性,这套配置在 M2 里,不在脚本里。打开 M2 的选项,找套装设置或者装备属性那一页,选好套装包含哪几件,在属性里勾上杀怪经验加成,填百分比。玩家穿齐了才触发,缺一件就没有。这种比单件好控制,适合做套装玩法。
数据库这条路的好处是不占脚本资源,装备在身上就一直生效,缺点是不好加额外条件。想让戴装备加经验还要限定在某个地图、某个时间段、某个活动期间,就得回到脚本。
再说脚本那条路的核心,触发点在哪。
杀怪要触发脚本,得先让引擎知道怪物死了要跑一段脚本。引擎自带的触发文件是 QFunction-0.txt,里面有一批固定名字的标签,怪物死亡那一下会调其中一个,名字一般是 [@KillMon] 或者类似的,各家有差异,翻 QFunction-0.txt 开头的注释看它认哪个。有的引擎把它放在 QManage.txt。
触发标签里能拿到的东西有限:当前人物名 <$USERNAME>,当前地图用 CHECKMAPNAME 能判,怪物名有的引擎给,有的不给。杀怪触发一般只告诉你有人杀怪了,具体是不是戴着那件装备、够不够条件,都要脚本自己判。
检测装备戴没戴,用 CHECKITEMW 命令,后面跟装备名和数量。写 CHECKITEMW 经验戒指 1 就是问身上有没有戴经验戒指。要检测背包里的用 CHECKITEM,只查背包,不查身上。这两个命令别弄混,检测佩戴用 W 那个。
给经验用 CHANGEEXP 命令,后面跟一个数。CHANGEEXP 500 就是给当前人物加五百点经验。有的引擎还认 GIVEEXP、ADDEXP 这类名字,同一件事,按版本里那份说明挑能跑通的用。
下面给一段能直接用的触发脚本,引擎按 GOM,效果是戴着经验戒指杀怪,每只额外给一百点经验。
[@KillMon]
#IF
CHECKITEMW 经验戒指 1
#ACT
CHANGEEXP 100
这只给一个人补。可如果队伍一起打,谁补谁不补、补几次,就会扯出麻烦。
杀怪触发是每个参与结算的人都跑一次,还是只给最后击杀者跑一次,取决于引擎。有的引擎每个在范围内的玩家都触发一遍,那戴着戒指的四个人就各补一百;有的一只怪只触发一次,只有补刀那个人拿到。两种都合理,看你想要哪种,但一定要自己进去打一只怪,看 SendMsg 弹几次,别凭猜。
想要按人数分摊,或者只给最后一击的人,触发标签里得拿到更细的信息,普通杀怪触发往往拿不全,就得换别的办法,比如用怪物死亡爆物的那个触发点,或者干脆用怪物的死亡脚本。
说到防重复,脚本里最怕同一只怪被触发多次。做法是给怪物加个标记,或者干脆不用全局加成,只在特定地图上用:
[@KillMon]
#IF
CHECKMAPNAME 经验副本
CHECKITEMW 经验戒指 1
#ACT
CHANGEEXP 200
这样只有进经验副本、又戴着戒指,才补两百点,出了地图再杀怪就没有。限时限图,脚本条件一拦就干净。
第三种做法是带装备打怪按倍率涨经验,不是固定补一笔,而是把经验乘以一个数。这更贴涨经验这三个字的意思。
引擎设置里有人物经验倍率的地方,M2 的功能设置或者游戏参数那一页,能配一个全局倍数,比如两倍、三倍。想让倍率跟装备挂钩,光靠这个全局值不行,得在脚本里做。
思路是:检测有没有戴装备,有就把经验按倍率算好再发。可 CHANGEEXP 只能给一个固定数,做不出这次杀怪经验乘三这种动态倍率,因为它不知道该加多少才是乘三。所以脚本里做倍率,一般不是加经验,而是改一个存储值,让引擎按这个值去乘,或者用引擎给的专门的倍率设置命令。
有的引擎里有设置人物经验倍率的命令,名字各家不同,可能是 SETEXPRATE 这类,后面跟倍率数字,比如三倍写 3。这种命令能精确做出乘三的效果,但通常只在活动时用,且要有人来关掉,一直开着会失控。做法是玩家戴上装备执行一次设倍率,脚本再用一个定时或者脱下装备的触发把倍率还原。脱下装备的触发一般在 QFunction 里也有对应标签,类似 [@TakeOffItem] 这类,名字翻文件。
用倍率那条路要小心:倍率是全局值还是人物值,各家引擎不一样。是全局的,一个人设了全服跟着乘,准出事;是人物自己的,换人、换装备、上下线都要管好,漏还原就会一直带着高倍率跑。稳妥做法是每杀一次怪重新判一次装备,戴着就设倍率,没戴就还原,把判断压在杀怪触发里,比挂在穿戴触发上更不容易漏。
第四条路,不用脚本,靠名单和次数限制来做限次活动。
比如每天前一百只怪带装备多给经验,或者戴装备每天限领一次。这种用名单文件记,跟做防重复领取一个套路。文件里一行一条,记角色名加日期,或者记角色名加已领次数。脚本在这边查名单、写名单,把加成次数卡住。
命令是 CHECKNAMELIST、ADDNAMELIST、DELNAMELIST 这一组,路径写成 ..\QuestDiary\经验活动\名单.txt 这种相对路径。文件得提前建好,空文件也行,但必须存在,目录也得一级一级建齐。编码用 ANSI 或者 GBK,别用 UTF-8,中文名读出来乱码就对不上了。
写进名单的写法:
[@KillMon]
#IF
CHECKMAPNAME 经验之地
CHECKITEMW 经验戒指 1
CHECKNAMELIST ..\QuestDiary\经验活动\今日名单.txt
#ELSESAY
今天这一份你已经领过了,或者条件不对。
BREAK
#ACT
CHANGEEXP 500
ADDNAMELIST ..\QuestDiary\经验活动\今日名单.txt
SENDMSG 7 你带着经验戒指在经验之地拿到了额外奖励。
每天开服或者零点把文件清空,第二天就是新一轮。没有变量,也不需要自己找变量号,重启重载都不怕。
调试这套功能,几个地方最容易出岔子。
第一个是触发没跑起来。脚本贴进去了,杀怪一点反应没有,先看杀怪触发那个标签名对不对,是不是写在了引擎认的那个文件里,QFunction-0.txt 还是 QManage.txt,各版本不同。名字差一个字母,引擎就当没这段。再确认文件编码是 GBK,存成 UTF-8 中文会乱码,标签里的中文匹配不上。
第二个是装备检测判错。CHECKITEMW 后面只能跟一个名字,写全称,跟数据库里的名字一模一样,差一个字、多一个空格都判成没戴。名字里带特殊符号的更要小心。想同时判两件装备,写两行 CHECKITEMW,或者分两个标签,别想着一行写两个。
第三个是经验给重了。同一次杀怪,脚本弹了两遍奖励提示,多半是触发被调了两次,原因可能是引擎对范围内多个玩家各触发一次,也可能是你同时挂了两处脚本。把 SendMsg 打开,进游戏打一只怪数提示次数,一眼看出来。
第四个是倍率没还原。用倍率那条路的,玩家脱下装备之后经验还是翻倍,去查还原那一段是不是漏了条件,或者脱装备的触发标签名字对不对。上下线也要测,有的引擎上下线不清倍率,玩家下线再上还带着。
第五个是加成叠加。数据库里配了装备加成,脚本里又补一笔,两个一起生效,经验比设计的高。做之前把引擎设置、套装、脚本三处的加成算一遍,定好哪一处出这个数,别让它们叠。
第六个是经验命令的边界。CHANGEEXP 给的是正数还是负数,能不能给负的用来扣经验,各家不一样;数值上限也可能卡住,给一个特别大的数反而溢出变负。做大批量经验,先小数值测一次,再放大。
关于玩家体验还有一条要提。杀怪给经验的加成,最后落在经验条上,别小看那条经验条,加得太多太快,等级飞涨,后面地图和装备的节奏全乱。设置加成前想清楚这是给新区冲级的,还是给老区拉开差距的。做活动的经验加成,建议跟等级挂钩,低等级加成大、高等级没有,避免高等级号囤积。条件里加一条 CHECKLEVELEX 判等级,脚本里就是多一行。
杀怪涨经验这类功能,落到配置上是三处:装备数据库、引擎经验设置、杀怪脚本。能用数据库和引擎设置解决的,就别写脚本,省心;一定要加条件的,触发脚本里先判装备、再判地图或者时间,最后才给经验,顺序反了会出现条件没到经验先发的情况。测试时进游戏实打实打几只怪,看提示弹几次、经验跳多少、脱装备还增不增,比对着脚本空想靠谱。
传奇人物佩戴指定装备击杀怪物额外获得经验功能三种实现方式与触发脚本详细配置教程
来源:
作者:
点击:

