数组:修订间差异

来自RustedWarfare Wiki
标签移动版编辑 移动版网页编辑 高级移动版编辑
(大更改,需要修正)
标签移动版编辑 移动版网页编辑 可视化编辑
第45行: 第45行:
===跨单位引用===
===跨单位引用===


要引用其他单位的内存,可以使用<code>readUnitMemory</code> ,格式为<code>单位引用.readUnitMemory('名称',type='类型',index='下标')</code> 。
要引用其他单位的内存,可以使用<code>readUnitMemory</code>  


'''警告:截止1.15正式版,跨单位数组引用在下标中包含逻辑时只会返回第0项,为游戏bug'''
<code>单位引用.readUnitMemory('名称',type='类型',index='下标')</code>
{{折叠|readUnitMemory例子|<pre>
 
这是它的其他写法
 
readUnitMemory('名称',type='类型')['下标']
 
readUnitMemory('名称',type='类型')[('数学运算下标')]
 
readUnitMemory('名称',type='类型').get('下标'){{折叠|readUnitMemory例子|<pre>
self.customTarget1.readUnitMemory('a',type='number',index=114)
self.customTarget1.readUnitMemory('a',type='number',index=114)
</pre>}}
</pre>
}}
警告:截止1.15版,跨单位数组引用在下标中包含逻辑时。由于游戏bug,单位参考将被重定向。
 
如:
 
customTarget1.readUnitMemory("obj",type="unit").get(memory.index)
 
customTarget1.readUnitMemory("obj",type="unit").get(self.hp)
 
customTarget1.readUnitMemory("obj",type="unit").get(memory.unit.readUnitMemory("index",type="float"))
 
实现运行(伪代码)
 
customTarget1.memory.obj.get(customTarget1.memory.index)
 
customTarget1.memory.obj.get(customTarget1.hp)
 
customTarget1.memory.obj.get(customTarget1.memory.unit.memory.index)
 
index/thisIndex方法不受此影响。
 
可用的方案:
 
1.复制数组
 
2.修改内存单位数据
 
clipboard.zip已使用改方案作为内核
 
 
3.三重定向到自己的内存,需要内存单位持有自己。


==修改==
在[action]中,可以通过<code>setUnitMemory</code>来直接修改内存的值,格式为<code>setUnitMemory:名称[下标]=值</code> 。
在[action]中,可以通过<code>setUnitMemory</code>来直接修改内存的值,格式为<code>setUnitMemory:名称[下标]=值</code> 。



2023年8月5日 (六) 13:57的版本

数组(array)是铁锈1.15p11加入的一种数据结构。

数组可以存储多个同种类型的元素,在铁锈中,数组存储数量最大值为10000。

支持的类型

数组支持的类型
boolean 布尔值
float 浮点数(更新日志未提到)
number 整数
unit 单位

定义

普通内存一样,在[core]节中,可以使用defineUnitMemory@memory来定义数组,数组名字可以包含中文。

通过defineUnitMemory定义

在[core]节中添加: defineUnitMemory:类型 名称[]

通过@memory定义

@memory是defineUnitMemory的快捷方式,通常由多行多个@memory组成。

单个@memory的格式为: @memory 名称:类型[]

@memory的例子
@memory dir:float[]
@memory amo:number[]
@memory armor_f:unit[]

引用

下标

下标是一个整数,用来索引数组的特定项。在铁锈中,数组下标从0开始。

单位内部引用

要引用单位内部的自定义内存,可以直接使用 memory.名称[下标]

跨单位引用

要引用其他单位的内存,可以使用readUnitMemory

单位引用.readUnitMemory('名称',type='类型',index='下标')

这是它的其他写法

readUnitMemory('名称',type='类型')['下标']

readUnitMemory('名称',type='类型')[('数学运算下标')]

readUnitMemory('名称',type='类型').get('下标')

readUnitMemory例子
self.customTarget1.readUnitMemory('a',type='number',index=114)

警告:截止1.15版,跨单位数组引用在下标中包含逻辑时。由于游戏bug,单位参考将被重定向。

如:

customTarget1.readUnitMemory("obj",type="unit").get(memory.index)

customTarget1.readUnitMemory("obj",type="unit").get(self.hp)

customTarget1.readUnitMemory("obj",type="unit").get(memory.unit.readUnitMemory("index",type="float"))

实现运行(伪代码)

customTarget1.memory.obj.get(customTarget1.memory.index)

customTarget1.memory.obj.get(customTarget1.hp)

customTarget1.memory.obj.get(customTarget1.memory.unit.memory.index)

index/thisIndex方法不受此影响。

可用的方案:

1.复制数组

2.修改内存单位数据

clipboard.zip已使用改方案作为内核


3.三重定向到自己的内存,需要内存单位持有自己。

在[action]中,可以通过setUnitMemory来直接修改内存的值,格式为setUnitMemory:名称[下标]=值

当修改的下标在数组中不存在时,数组大小将会更改为修改的下标。

setUnitMemory例子
# [action] 中
setUnitMemory:a[1]=1,b=memory.b[memory.a[1]]+1

和内存一样,数组也可以通过[core]updateUnitMemory来更新。

专用用法

  • 数组名.size/数组名.length 返回数组大小(元素个数)
  • 数组名=null 清空数组,大小变为0
  • 数组名.contains("数据") 检测数组中是否包含这个数据
  • [action]shrinkArrays 移除数组中空的部分
shrinkArrays例子

array a=1,2,0,3
shrinkArrays:a
array a=1,2,3