单位引用:修订间差异
→对应的情况
(→存储) |
(→对应的情况) |
||
| 第1行: | 第1行: | ||
'''单位引用'''(Unit | '''单位引用'''(Unit References,缩写:unitref)是铁锈战争[[1.15]]新加入的单位选择器,可引用符合条件的单位。 | ||
==查询== | ==查询== | ||
| 第8行: | 第8行: | ||
|getAsMarker() | |getAsMarker() | ||
getOffsetRelative() | getOffsetRelative() | ||
getOffsetAbsolute() | getOffsetAbsolute() | ||
createMarker() | createMarker() | ||
|- | |- | ||
| | |变量引用 | ||
|thisActionTarget | |thisActionTarget | ||
eventSource | eventSource | ||
|- | |- | ||
| | |函数引用 | ||
|attachment() | |attachment() | ||
transporting() | transporting() | ||
nearestUnit() | |||
globalSearchForFirstUnit() | |||
self | |||
attacking | attacking | ||
lastDamagedBy | lastDamagedBy | ||
parent | parent | ||
activeWaypointTarget | activeWaypointTarget | ||
|- | |- | ||
| | |存储引用 | ||
|customTarget1 | |customTarget1 | ||
customTarget2 | customTarget2 | ||
|- | |- | ||
| | |空引用 | ||
|nullUnit | |nullUnit | ||
|} | |} | ||
==标记== | ==标记== | ||
你可立即创建一个临时标记,可用来反映位置(Position)、朝向(Direction)、高度(Height)、队伍编号(Team ID),且不需要用到时会自动销毁,不隶属任何单位也不受单位后续行为的影响。 | |||
标记可分为两种,照铁锈战争的说法,一种是'''获取'''(get...),另一种是'''创建'''(create...)。获取会在以单位的基础创建标记,而'''创建'''完全与创建它的单位无关。 | 标记可分为两种,照铁锈战争的说法,一种是'''获取'''(get...),另一种是'''创建'''(create...)。获取会在以单位的基础创建标记,而'''创建'''完全与创建它的单位无关。 | ||
=== | ===标记的格式(注:方括号参数为选填)=== | ||
<p>获取:<code>getAsMarker()</code></p> | <p>获取:<code>getAsMarker()</code></p> | ||
<p>相对:<code>getOffsetRelative([x], [y], [height], [dirOffset])</code></p> | <p>相对:<code>getOffsetRelative([x], [y], [height], [dirOffset])</code></p> | ||
| 第48行: | 第59行: | ||
{{折叠|标记的例子|<pre> | {{折叠|标记的例子|<pre> | ||
teleportTo: getOffsetRelative(y= 10, dirOffset= self.customTimer) | # 传送到以该单位朝向角为基础再偏移自定义计时器数量角度的方向纵轴为十的位置。 | ||
teleportTo: getOffsetRelative( y = 10, dirOffset = self.customTimer ) | |||
fireXTurretAtGround_withTarget: createMarker(activeWaypointTarget.x, activeWaypointTarget.y, teamId= self.teamId).nearestUnit(withinRange= 1500, withTag= "outpost", relation= "own") | # 炮弹发射到以路径点为中心最近标签为前哨的我方单位。 | ||
fireXTurretAtGround: 1 | |||
fireXTurretAtGround_withTarget: createMarker( activeWaypointTarget.x, activeWaypointTarget.y, teamId = self.teamId ).nearestUnit( withinRange = 1500, withTag = "outpost", relation = "own" ) | |||
</pre>}} | </pre>}} | ||
== | ==变量引用== | ||
变量引用只能存在于'''行动链'''(Action Chain),可用'''也触发行动'''(<code>alsoTriggerAction</code>)或'''也加入队列('''<code>alsoQueueAction</code>)将其传递下去,连续<code>alsoTriggerAction</code>或<code>alsoQueueAction</code>只允许十层,但可交替使用绕过限制,可存储在<code>Unit</code>类型的[[自定义内存]]或[[数组]]。'''当前行动目标'''(<code>thisActionTarget</code>)在不同情况下所指代的单位不同,与'''事件来源'''(<code>eventSource</code>)不同,后者只与'''自动触发事件'''(<code>autoTriggerOnEvent</code>)绑定,触发的事件不同所指代单位也不同。 | |||
===thisActionIndex的用法=== | ===thisActionIndex的用法=== | ||
<code>thisActionIndex</code>能在遍历过程中同时知道每个元素的位置信息,<code>index</code> | '''当前行动索引'''<code>thisActionIndex</code>能在遍历过程中同时知道每个元素的位置信息,'''索引'''(<code>index</code>)为其缩略形式。受'''重复触发'''(<code>alsoTriggerActionRepeat</code>)与'''提取资源为每个触发行动('''<code>takeResources_triggerActionForEach</code>)影响。值为<code>Int</code>(整数)类型,从0开始,用于遍历数组。<pre>eg: | ||
<pre>eg: | [core] | ||
# 定义类型为Number的数组。 | |||
@mmeory array: number[] | |||
[hiddenAction_1] | [hiddenAction_1] | ||
alsoTriggerAction:2 | # 触发行动2数组长度次(1次)。 | ||
alsoTriggerActionRepeat:memory.array.size | alsoTriggerAction: 2 | ||
alsoTriggerActionRepeat: memory.array.size | |||
[hiddenAction_2] | [hiddenAction_2] | ||
setUnitMemory:array[index]=select(memory.array[index]==0,0,memory.array[index]-1)</pre> | # 如果m.array[i]为0,则赋值在第i个元素赋0,否则减1。 | ||
setUnitMemory: array[index] = select( memory.array[index] == 0,0, memory.array[index] - 1 )</pre> | |||
===对应的情况=== | ===对应的情况=== | ||
{| class="wikitable" | {| class="wikitable sortable mw-collapsible mw-collapsed" | ||
|+thisActionTarget用处 | |+thisActionTarget用处 | ||
|fireXTurretAtGround | |fireXTurretAtGround | ||
| 第86行: | 第105行: | ||
|} | |} | ||
{| class="wikitable" | {| class="wikitable sortable mw-collapsible mw-collapsed" | ||
|+eventSource用处 | |+eventSource用处 | ||
|tookDamage | |tookDamage | ||
| | |攻击方 | ||
|- | |- | ||
|killedAnyUnit | |killedAnyUnit | ||
| 第112行: | 第131行: | ||
{{折叠|thisActionTarget与eventSource的例子|<pre> | {{折叠|thisActionTarget与eventSource的例子|<pre> | ||
[turret_super] | [turret_super] | ||
# 发射时触发行动。 | |||
onShoot_triggerActions: idol | onShoot_triggerActions: idol | ||
[hiddenAction_idol] | [hiddenAction_idol] | ||
# 当前行动目标指代击中的单位。 | |||
showMessageToAllPlayers: %{thisActionTarget}的笑容。 | showMessageToAllPlayers: %{thisActionTarget}的笑容。 | ||
[hiddenAction_tookDmg] | [hiddenAction_tookDmg] | ||
autoTriggerOnEvent: tookDamage(withTag="APCR") | # 事件来源指代攻击方。 | ||
autoTriggerOnEvent: tookDamage( withTag = "APCR" ) | |||
showMessageToAllPlayers: 来自%{eventSource}的攻击! | showMessageToAllPlayers: 来自%{eventSource}的攻击! | ||
</pre>}} | </pre>}} | ||
== | ==函数引用== | ||
铁锈战争提供了一些常见情况可能用到的单位选择器,且所以节都能使用,可填入参数。 | |||
=== | ===选填参数部分(注:方括号为选填参数)=== | ||
<p>附属:<code>attachment([slot], [withTag])</code></p> | <p>附属:<code>attachment([slot], [withTag])</code></p> | ||
<p>运输:<code>transporting([slot])</code></p> | <p>运输:<code>transporting([slot])</code></p> | ||
| 第130行: | 第152行: | ||
<p>搜索首个单位<code>globalSearchForFirstUnit([withTag], [relation], [incompleteBuildings])</code></p> | <p>搜索首个单位<code>globalSearchForFirstUnit([withTag], [relation], [incompleteBuildings])</code></p> | ||
==== | ===='''<big>请慎重使用默认参数。</big>'''==== | ||
*附属 | *附属 | ||
不填参数则返回行数最高的附属。 | |||
*运输 | *运输 | ||
不填参数则返回最近运输的单位。 | 不填参数则返回最近运输的单位。 | ||
*最近单位 | *最近单位 | ||
不填参数则返回范围550的单位。 | |||
*搜索首个单位 | *搜索首个单位 | ||
不填参数则返回该地图最小id的单位。 | 不填参数则返回该地图最小id的单位。 | ||
===无参数部分=== | ===无参数部分=== | ||
这些单位引用的特点很明显,都是指向具体的某个单位。 | 这些单位引用的特点很明显,都是指向具体的某个单位。'''自身(<code>self</code>)'''一般情况下指向单位自己,也用于指代前面的单位引用,在涉及复杂单位引用逻辑时,请慎重使用<code>self</code>,请在初始化处定义个内存赋值'''<code>self</code>''',选择使用存储自身的内存。'''攻击目标'''(<code>attacking</code>)为<code>activeWaypointTarget</code>为攻击时套上单位的快捷引用方式,相当于<code>Attack</code>类型的路径点。'''最后伤害源'''<code>lastDamagedBy</code>在事件来源为'''受击('''<code>tookDamage</code>)时的快捷引用方式。'''父单位'''(<code>parent</code>)在单位自身为他人附属或乘员时可使用,<code>unitref.hasParent( [withTag] )</code>为其快捷方式。'''当前路径点'''(<code>activeWaypointTarget</code>)能够实时监控路径点情况,如果没明确指定某个单位则返回在那个位置的标记(Marker),但似乎不能获取该路径点的类型,路径点类型可[https://docs.google.com/spreadsheets/d/1aeP3pUic0IutZlgGix_cM8xR7LEH44gS4itAxETK954/htmlview 详见]代码<code>addWaypoint_type</code>。 | ||
<code>attacking</code> | |||
{{折叠|全局单位引用的例子|<pre> | {{折叠|全局单位引用的例子|<pre> | ||
isVisible: if parent.attachment(slot= 5) == self | [decal_1] | ||
# 父单位的名为5的附属为自己则显示贴花。(注:UI世界与单位所在世界不同,请使用发送消息。) | |||
isVisible: if parent.attachment( slot= 5 ) == self | |||
[hiddenAction_repair] | [hiddenAction_repair] | ||
# 在玩家创建新路径点时触发。 | |||
autoTriggerOnEvent: newWaypointGivenByPlayer | autoTriggerOnEvent: newWaypointGivenByPlayer | ||
requireConditional: if self.hasActiveWaypoint(type= "repair") | # 过滤,只允许类型为”修复“的路径点时触发, | ||
requireConditional: if self.hasActiveWaypoint( type = "repair" ) | |||
showMessageToPlayer: 你正在治疗%{activeWaypointTarget}。 | showMessageToPlayer: 你正在治疗%{activeWaypointTarget}。 | ||
</pre>}} | </pre>}} | ||