很多刚接触脚本开发的人,拿到legendm2引擎的版本,最容易踩坑的地方就是变量体系。它的变量命名规则、作用范围和其他引擎有不少细节差异,很多人直接照搬其他引擎的写法,最后要么脚本运行报错,要么变量数据混乱,甚至导致服务器启动失败。把这套变量体系的每个细节摸透,是写好稳定脚本的基础。
首先要区分标识和变量,很多新手会把这两类东西混为一谈。标识的格式是[001]到[499],它本质上是一个布尔状态标记,初始值都是关闭状态,不会因为人物下线、服务器重启就自动重置。常用的操作命令是Check [001] 0,用来检测当前标识是否处于关闭状态,Set [001] 1,用来把标识设置为开启状态。这里有个实用的批量重置命令reset,比如reset [100] 7,就会把100到106这连续7个标识全部重置回初始的关闭状态,不用一行行写Set命令,能节省不少脚本篇幅。
接下来是个人变量,这类变量只和当前操作的玩家账号绑定,不同玩家之间的数据完全独立,互不干扰。P0到P9是对话级私人数字变量,只要玩家关闭当前对话的NPC,所有P变量就会自动重置为0,它的作用范围只在当前的单次NPC对话流程里,非常适合做临时的对话流程计数,比如做答题NPC的时候,用P变量记录玩家当前答对的题目数量,对话结束自动清零,不用额外手动重置。D0到D9是会话级私人数字变量,只要玩家不下线,所有NPC都能读取和修改这个玩家的D变量,下线之后数据自动清空。M0到M99和N0到N99这两类私人数字变量,同样不会保存到玩家存档里,M变量在玩家切换地图的时候会自动清空,N变量在玩家小退的时候就会归0,适合用来做短周期的临时状态标记。S0到S99是私人字符型变量,用来存储玩家专属的字符串内容,比如临时记录玩家输入的自定义名字、临时拼接的任务道具清单,同样是下线不保存,小退之后数据自动清空。
然后是全局变量,这类变量不属于任何单个玩家,整个服务器里所有玩家读取到的都是同一个值。I0到I99是全局数字变量,数据不会自动保存,服务器重启之后所有值自动重置为0,适合用来做全服临时活动的计数,比如当天全服BOSS击杀总次数、全服参与活动的玩家人数,服务器重启之后活动自然重置,不用额外写清零脚本。G0到G99是可保存的全局数字变量,服务器关闭的时候引擎会自动把所有G变量的数据写入对应的存档文件,下次启动的时候自动读取恢复,哪怕服务器重启,之前的数值也不会丢失,适合用来存储全服累计的永久数据,比如全服历史最高等级、沙巴克累计占领天数、全服累计发放的奖励总数量。A0到A99是可保存的全局字符型变量,同样支持服务器重启后保留数据,用来存储全服共享的长文本内容,比如全服排行榜的玩家名单、自定义的全服活动公告内容,不用额外读写外部文本文件,运行效率更高。
变量之间的运算操作,legendm2引擎有一套完整的命令体系,支持数字变量的各类基础运算。small命令用来检测变量是否小于指定数值,large命令检测变量是否大于指定数值,equal命令检测变量是否等于指定数值。mov命令用来给变量赋值,inc命令给变量做加法运算,dec命令做减法运算,mul命令做乘法运算,div命令做除法运算,percent命令用来计算变量的百分比结果。变量之间的互相操作也可以直接实现,比如把M88的数值赋值给G88,直接写mov G88 <$STR(M88)>就能完成,不需要额外中转其他变量。还有两个实用的特殊命令,sum命令可以实现多个变量的累加,先把目标变量清零,再依次把需要累加的变量传入sum命令,就能自动完成求和。movr命令可以给变量随机赋值一个不超过指定上限的正数,做随机抽奖、随机掉落的脚本时用起来非常方便。
自定义变量部分,legendm2引擎支持用户自己创建不同属性的变量,分为个人变量、行会变量、公共变量三类。自定义变量的命名不要以P、G、M、I、D、N、S、A这些系统自带的变量前缀开头,避免和系统变量冲突。检测自定义变量的数值要用CHECKVAR命令,比如CHECKVAR HUMAN 累计击杀数 > 5,就能检测当前玩家的自定义个人变量是否大于5。修改自定义变量的数值要用CALCVAR命令,CALCVAR HUMAN 累计击杀数 + 3,就能直接给这个变量加3,不用额外写其他复杂逻辑。
实际写脚本的时候要注意变量的生命周期匹配,需要永久保留的数据就用G类和A类全局变量,只在本次活动生效的临时数据就用I类全局变量,只在单次NPC对话里用到的临时计数就用P变量,不要混用不同生命周期的变量,不然很容易出现数据异常。很多脚本运行出现莫名其妙的bug,比如活动计数不对、玩家状态标记混乱,大多都是变量类型选错,没有搞清楚变量的作用范围和重置规则,把这些细节全部捋顺之后,写出来的脚本稳定性会高很多。
legendm2传奇引擎脚本变量完整解析与实战开发实用指南
来源:
作者:
点击:

