天地结晶是雪域地图配套的经验储存机制,玩家在指定地图击杀怪物获得经验时,同步将经验存入结晶容器,消耗对应资源可以释放结晶内存储的经验,离开限定地图后结晶内储存数据自动清空。HERO引擎没有原生内置天地结晶组件,全部依靠人物变量、地图判断、杀怪触发、物品双击脚本组合实现整套逻辑,修改配置前备份QFunction、MapInfo、StdItems.DB文件,防止参数写错造成服务端读取异常。
物品数据库StdItems.DB添加天地结晶记录,使用DBC2000打开数据库,新增一条物品记录,物品名称填写天地结晶,StdMode设置为0,AniCount填写自定义编号,用于QFunction捕捉双击事件,Weight设置1,持久上限设置1,持久设置1,价格设置基础数值,需要设置不可丢弃、不可交易、死亡不掉落,对应的DB字段勾选绑定属性。天地结晶作为标记道具,不存放实际经验数值,经验总量保存在人物私有变量内,道具仅作为UI标识和双击释放的触发载体,删除道具不会直接清空变量,需要脚本同步清理变量数据。
MapInfo.txt配置雪域限定地图,开启结晶收集开关,单条地图配置增加标记参数,用于脚本识别是否开启天地结晶功能。地图记录示例,雪域一层 121 121 0 121 0 0 0 0 0 0 0 0,额外增加地图标记,在QFunction内使用CHECKMAPNAME判断玩家所在地图,只有进入该地图,杀怪才会执行结晶经验累加逻辑。离开地图包含小退、回城、随机传送、被怪物传送,只要地图名称不再匹配,就触发清空结晶存储变量,弹出提示清空全部累积经验。可以设置多层雪域地图共用同一套结晶变量,角色在多个雪域地图切换时,结晶经验持续累加,不会在地图之间切换就清空。
杀怪经验捕获脚本写在QFunction-0.txt的[@OnKillMon]段,HERO引擎杀怪完成后触发该段,读取本次击杀获得的经验值,增加到人物变量。脚本先判断当前地图是否属于雪域地图,判断成功后读取本次获得经验存入S变量,使用CALC计算命令把本次经验追加到人物变量M0,M0用来存放结晶总经验。可以分开设置普通经验和内功经验两个独立变量M0、M1,分别存储,实现经验和内功经验分开累计。增加结晶上限判定,设置变量上限,达到上限后不再继续累加经验,弹出提示结晶已满,需要释放经验之后才可以继续收集。[@OnKillMon]
#IF
CHECKMAPNAME 雪域一层
#ACT
GETMONEEXP S0
CALC M0 + <$S0>
SENDMSG 7 \(S0>
SENDMSG 7 天地结晶已累积经验:<\)<$M0>
BREAK
#ELSEACT
BREAK
这段脚本实现杀怪自动累加,GETMONEEXP读取本次杀怪获得经验,CALC执行变量加法,M0为本角色独立变量,不同玩家之间变量互不干扰。
双击天地结晶释放经验,使用物品AniCount编号绑定[@OnUseItem],双击道具触发释放逻辑。脚本先判断结晶变量是否大于0,再判断玩家是否还在雪域地图,离开雪域地图禁止释放。设置释放消耗规则,每消耗固定数量元宝释放对应数额经验,可设置阶梯式释放比例,结晶存储总量越高,单位元宝兑换经验越多。执行释放时使用CHANGEEXP增加人物经验,释放完成后扣除对应元宝,并且减去已经释放的结晶经验数值。[@OnUseItem]
#IF
CHECKITEM 天地结晶 1
LARGE M0 0
CHECKMAPNAME 雪域一层
#ACT
;每100000结晶经验消耗1元宝
CALC S1 = <$M0>/100000
CHECKGOLDPOINT <$S1>
#ACT
GOLDPOINT - <$S1>
CHANGEEXP + <$M0>
SENDMSG 6 消耗<$S1>\(S1>元宝,释放结晶经验<\)<$M0>
CALC M0 = 0
BREAK
#ELSEACT
SENDMSG 6 结晶经验不足或者不在雪域地图,无法释放
BREAK
可以增加分段释放选项,支持全部释放或者释放部分结晶经验,增加输入数值弹窗,由玩家自定义本次释放数量。
进出地图触发脚本,在QManage登录脚本和QFunction地图跳转事件内增加检测。[@OnMapMove]角色切换地图时触发,判断离开雪域地图时,执行变量清零。[@OnMapMove]
#IF
ISMAPLEAVE 雪域一层
#ACT
CALC M0 = 0
CALC M1 = 0
SENDMSG 6 离开雪域地图,天地结晶内经验全部清空
BREAK
角色小退下线同样需要清理结晶变量,在[@OnLogout]登录退出事件内,增加地图判断,若下线时处于雪域地图,直接清空M0、M1变量,避免玩家下线卡变量保留结晶经验。
M2管理器配套参数调整,打开M2,选项-功能设置-人物变量,开启人物私有变量持久保存开关,关闭则人物下线变量直接清空。如果需要下线保留结晶数据,开启变量保存,退出雪域地图时强制清零。经验倍率设置,结晶累积的经验可以设置独立倍率,不与人物双倍经验卷冲突,在杀怪触发段做二次倍率CALC计算。HERO引擎内置经验获取存在上限,单次CALC数值过大容易出现变量溢出,需要在脚本增加分段限制,单次累加数值超过上限时做截断处理。
界面文字提示设置,在M2游戏提示信息内配置结晶状态提示,结晶按照存储总量分为多个阶段,空结晶、低容量、半满、已满四个状态,每一次杀怪后根据M0数值,SENDMSG发送不同颜色文字提示。满结晶状态可以设置文字高亮提示,提示玩家结晶已满,需要释放经验才能继续收集。可以增加定时提示脚本,每隔固定时间,向玩家发送当前结晶存储数值,无需双击道具查看。
爆率与道具刷新设置,天地结晶道具可以进入地图自动发放,在[@OnMapEntry]进入雪域地图触发,判断身上是否拥有天地结晶,没有则给予道具。[@OnMapEntry]
#IF
CHECKMAPNAME 雪域一层
NOT CHECKITEM 天地结晶 1
#ACT
GIVE 天地结晶 1
SENDMSG 6 进入雪域,获得天地结晶,击杀怪物累积经验
BREAK
#ELSEACT
BREAK
玩家身上已经持有结晶,不再重复发放,防止背包多件结晶道具造成重复触发。离开地图时,使用TAKE命令回收天地结晶道具,配合变量清零,保证玩家离开雪域地图后道具自动回收。
权限与防刷校验,脚本内增加多层判断,防止玩家跨地图刷结晶经验。CHECKHUMANISDEAD死亡状态禁止释放结晶经验,CHECKHUMANONHORSE骑马状态可设置禁止释放。增加冷却变量M2,每次释放结晶后给M2赋值冷却时间,使用TIMER定时器计时,冷却未结束不能再次双击释放,短时间重复点击不会重复扣取资源。增加等级限制,低于设定等级的角色进入雪域地图,不会发放结晶,也不会触发经验累加。
调试与排错要点,修改脚本后在M2重载QFunction和QManage,不需要重启服务端。测试场景分为进入地图、杀怪累加、双击释放、地图切换、小退下线,分别查看M2日志窗口,观察变量M0数值变化。HERO引擎人物变量区分大小写,变量名称写错会导致数据无法保存。CALC计算除法时,除数不能为0,脚本需要提前判断数值,防止脚本报错。人物变量数值过大,超过引擎数值上限,会出现数值归零或者负数,需要在脚本增加上限拦截。素材缺失会导致客户端不显示天地结晶图标,需要将对应wil素材导入客户端补丁,登录器加载补丁文件。
扩展功能拓展,增加内功经验独立存储,M1变量存放内功经验,释放时使用CHANGEINNEREXP命令增加内功经验。增加结晶暴击释放,释放时有概率触发倍率加成,随机放大本次释放经验。增加结晶保护机制,玩家在雪域地图内被击杀,保留部分结晶经验,不全量清空。增加NPC释放入口,玩家可以到指定NPC处释放结晶,不局限于双击道具释放。所有新增逻辑编写完成后,多账号并行测试,多玩家同时进入雪域地图,确认人物私有变量不会互相覆盖冲突。调试稳定之后,保存整套脚本、DB记录、MapInfo配置文件备份,后续修改前保留旧版本文件。
传奇HERO引擎天地结晶经验存储功能物品数据库与全套脚本配置教程
来源:
作者:
点击:

