本期教程来讲讲一种很常见的类型,数组/SystemArray
上期如果有自己尝试修改技能的话,应该会发现有些技能数据并不完全是一层field套另外一层,比如攻击
可以看到,他像一个表一样把所有值按索引存放,你也可以很容易看到,在他的数据类型System.Single后面跟着一个[],这个意思是它是由单精度浮点型数值组成的一个数组/SystemArray,可以看到他的数组元素索引是从0x0到0x6,意思是index的范围是从0到6,共7个元素,对应了攻击技能有7级
对于数组,refbook里有一块专门介绍
那么首先,先拿到这个数组
假如我们想修改攻击7的倍率,那么首先拿到攻击7这个对象,攻击7的index为6,
我们看看refbook怎么写
要拿到一个数组特定index的元素,可以用
get_element(index)
或者直接像lua的table那样操作
array[index]
这两种是等价的,喜欢哪种用哪种
当然从偷懒的角度考虑肯定是后面这种方便啦
不过呢,这里不用先get再set_field("mValue",x)
虽然他的field有7个,但其余的都是static const/静态常量,像一些基本的system.Int32或者一些其他的type也是这样,使用mValue存值,其余都是静态常量,对它进行赋值修改就是直接对mValue修改,所以如果我们想修改攻7倍率,可以直接对array[6]赋值
到此简单类型数组就说完了
我们再看另一个例子,大家都爱的无限翔虫
这里先给个定义好的量,翔虫的数组
可以看到翔虫的数组有四个元素,意味着人物最多有四个翔虫
也就是两个固有+一个野生+狂龙翔
不难知道recastTimer就是剩余冷却时间
对于这四个元素,不要傻傻的一个个的get然后set
我们使用遍历来批量修改它
先看看refbook
我们可以使用get_elements()一下拿到数组里所有元素作为一个table
用这个方法得到的table,index从1开始(和lua一样),value是被转换为对象的数组元素
所以这么写
不过refbook上也有一条提示
就是如果直接对数组进行遍历的话,不能使用ipairs,否则会跳过第一个元素和最后一个元素,如果要使用ipairs,就像上面那样先用get_elements()拿到一个装有所有元素的table
而直接对数组进行操作的话,这么写
也就稍微省了一小步,看个人爱好吧