火龙珠是游戏内常见的经验道具,拾取或者双击使用之后,可以修改角色获取经验的速度,搭建者可以通过脚本灵活控制倍率生效时长、生效范围,还能设置不同等级区间的经验增减规则,避免等级快速膨胀。
先理清基础逻辑,火龙珠生效本质是给角色添加标记,当角色击杀怪物获取经验时,脚本检测身上的标记状态,以此判断是否乘以经验倍率。标记分为两种方式,一种是角色计时器绑定,设置持续时间,时间结束自动取消经验加成;另一种是永久标记,需要手动指令清除,一般选择计时器方案,方便控制火龙珠持续时长。
道具数据库先做好火龙珠基础配置,打开Items.db,新增火龙珠物品,物品类型选择可双击使用,设置物品外观、重量,耐久设置为0。双击触发脚本段填写[@火龙珠使用],物品描述写明使用后获得经验加成效果。做好数据库保存,加载物品数据库,让游戏内可以正常刷出和双击使用火龙珠。
编写火龙珠双击触发脚本。
[@火龙珠使用]
#IF
CHECKTIMER 1
#ACT
SENDMSG 7 当前已有经验加成效果,无法重复使用火龙珠。
#ELSEACT
SetTimer 1 1800
SENDMSG 7 成功使用火龙珠,接下来30分钟击杀怪物获得多倍经验。
ADDVAR HUMAN 火龙珠倍率 2
这段脚本里,CHECKTIMER用来检测角色是否已经存在计时器,防止重复叠加火龙珠效果。SetTimer后面数字代表计时器编号与生效秒数,1800秒等于30分钟。ADDVAR定义角色变量火龙珠倍率,数值2代表2倍经验,修改这个数字就可以调整经验快慢。
计时器到期清除变量脚本,新建文本文件存放定时器检测段。
[@火龙珠时间结束]
#IF
Timer 1
#ACT
SENDMSG 7 火龙珠效果已经消失,经验恢复正常获取。
SETVAR HUMAN 火龙珠倍率 1
ClearTimer 1
怪物击杀经验触发段,在[@OnKillMon]编写经验计算逻辑,击杀怪物获取原始经验之后读取火龙珠倍率变量,重新计算最终获得经验。
[@OnKillMon]
#IF
ISADMIN < 1
#ACT
CALCVAR HUMAN 怪物原始经验 = $MONGEXP
CALCVAR HUMAN 最终经验 = $HUMAN(怪物原始经验) * $HUMAN(火龙珠倍率)
SENDMEXP $HUMAN(最终经验)
脚本完成之后,需要设置变量初始值,角色上线时判断火龙珠倍率变量是否存在,不存在就默认赋值1,代表正常经验。
[@OnPlayerLogin]
#IF
!VAR HUMAN 火龙珠倍率
#ACT
SETVAR HUMAN 火龙珠倍率 1
多档位火龙珠扩展写法,可以制作多种火龙珠,初级、中级、高级,对应不同经验倍率和持续时间。初级火龙珠1.5倍经验持续一小时,中级2倍经验持续一小时,高级3倍经验持续四十分钟。不同道具双击调用不同脚本段,设置对应的变量数值和计时器时长。
增加等级限制判断,避免低等级玩家依靠火龙珠快速冲到满级。在火龙珠双击脚本增加等级判断。
#IF
CHECKTIMER 1
#ELSEACT
CHECKLEVELEX > 50
#ACT
SENDMSG 7 你的等级超过50级,无法使用火龙珠。
#ELSEACT
SetTimer 1 1800
ADDVAR HUMAN 火龙珠倍率 2
经验获取阶段同样增加等级区间限制,高等级击杀怪物时,倍率自动衰减。在[@OnKillMon]增加判断,角色等级大于45级,倍率强制降低。
#IF
CHECKLEVELEX > 45
#ACT
CALCVAR HUMAN 最终经验 = $HUMAN(怪物原始经验) * 1.2
#ELSEACT
CALCVAR HUMAN 最终经验 = $HUMAN(怪物原始经验) * $HUMAN(火龙珠倍率)
需要注意引擎变量的运算规则,部分引擎不支持小数运算,倍率只能使用整数,想要1.5倍经验,可以采用原始经验除以2再加上原始经验的写法,规避小数计算报错。
CALCVAR HUMAN 临时经验 = $HUMAN(怪物原始经验) / 2
CALCVAR HUMAN 最终经验 = $HUMAN(怪物原始经验) + $HUMAN(临时经验)
额外增加限制规则,火龙珠经验加成只对野外怪物生效,副本怪物、任务怪不享受加成。在怪物击杀段增加地图判断,读取角色当前地图编号,非指定地图,倍率强制等于1。
#IF
ISONMAP 5
#ACT
SETVAR HUMAN 火龙珠倍率 1
测试流程,保存脚本文件,重载M2脚本,进入游戏刷出火龙珠,双击道具查看提示信息,击杀怪物观察经验数值变化。等待计时器到期,再次击杀怪物确认经验恢复基础数值。测试重复双击火龙珠,确认不会叠加多层效果。更换不同等级角色测试,校验等级限制是否正常触发。
常见问题排查,双击火龙珠没有任何提示,优先检查物品数据库的双击脚本段名称是否和脚本内标记一致,物品编号冲突也会导致脚本不触发。经验数值没有变化,查看角色变量是否成功赋值,M2日志查看变量读取是否正常。计时器到期效果不消失,检查计时器编号有没有和其他功能共用,编号冲突会造成计时器无法清除。
还可以增加中断机制,角色小退不会清除火龙珠计时器,部分引擎小退计时器会重置,需要提前确认引擎特性。如果想要小退保留火龙珠时间,就不能使用角色计时器,改用数据库记录开始时间戳,全局定时脚本轮询对比当前时间,判断效果是否到期。这种方案资源占用更高,适合长时间持续的经验增益道具。
爆率配置方面,把火龙珠添加到怪物爆率文件,选择合适的怪物产出,低倍率火龙珠放置普通怪物掉落,高倍率火龙珠放在BOSS产出。可以搭配活动系统,定时投放火龙珠,控制游戏内经验道具存量,稳定角色升级节奏。
整套脚本依靠变量控制经验倍率,想要调快升级,只需要提高火龙珠倍率变量数值;想要放慢升级,降低倍率或者增加等级衰减规则,修改参数不需要改动大量代码,维护起来简单。整套逻辑可以和其他经验增益道具共用变量体系,多个经验道具互不干扰。

