单位引用

来自RustedWarfare Wiki

单位引用(Unit Reference)是铁锈战争1.15新加入的单位选择器,可引用符合条件的单位。

查询

单位引用
标记 getAsMarker()

getOffsetRelative() getOffsetAbsolute() createMarker()

局内 thisActionTarget

eventSource

全局 attachment()

transporting() attacking lastDamagedBy parent activeWaypointTarget nearestUnit() globalSearchForFirstUnit()

存储 customTarget1

customTarget2

其他 nullUnit

标记

临时、快速地创建一个标记,可用来反映位置、朝向、高度、队伍编号,且不需要用到时会自动移除,不隶属任何单位也不受单位后续行为的影响。 标记可分为两种,照铁锈战争的说法,一种是获取(get...),另一种是创建(create...)。获取会在以单位的基础创建标记,而创建完全与创建它的单位无关。

标记的格式

获取:getAsMarker()

相对:getOffsetRelative([x], [y], [height], [dirOffset])

绝对:getOffsetAbsolute([x], [y], [height])

创建:createMarker(x, y, [height], [teamId], [dir])

标记的用法

想直接获取当前位置等信息可以使用getAsMarker。 铁锈战争为偏移提供了两种方案,一种是相对偏移,不止受单位位置、高度,还受朝向影响。通俗易懂就是你坐在一辆车上,你当然可以移动、旋转(dirOffset),但车移动、旋转你也必须移动、旋转。 另一种是绝对偏移,只受单位位置、高度影响,比如单位坐标(1000, 1000),向左偏移5个单位(995, 1000)。 创建标记是直接在地图上创建一个标记,队伍编号可由自己决定,可以注意的是创建标记的(x, y)必须要填,但铁锈战争允许省略(x=, y=)

标记的例子
teleportTo: getOffsetRelative(y= 10, dirOffset= self.customTimer)

fireXTurretAtGround_withTarget: createMarker(activeWaypointTarget.x, activeWaypointTarget.y, teamId= self.teamId).nearestUnit(withinRange= 1500, withTag= "outpost", relation= "own")

局内

局内只能在行动内使用,可用alsoTriggerActionalsoQueueAction延长“寿命”,你也可以用内存将其存储。thisActionTarget在不同情况下所指代的单位不同,与eventSource不同,后者只与autoTriggerOnEvent绑定,触发的事件不同所指代的单位也不同。

thisActionIndex的用法

thisActionIndex能在遍历过程中同时知道每个元素的位置信息,index为其缩略形式。受alsoTriggerActionRepeattakeResources_triggerActionForEach影响。

对应的情况

thisActionTarget用处
fireXTurretAtGround 指向的位置
alsoTriggerAction 与原行动的thisActionTarget相同
onShoot_triggerActions 炮塔射击的单位
takeResources_triggerActionIfAnyCollected 提取到的单位
takeResources_triggerActionForEach 与上同理
addWaypoint_triggerActionIfMatched 被添加路径点的单位(没明确指定某个单位时则为在那个位置的标记,如move等)
eventSource用处
tookDamage 攻击你的单位
killedAnyUnit 杀死的单位
transportingNewUnit 新装载的单位
transportUnloadedOrRemovedUnit 刚卸载的单位
queuedUnitFinished 刚生产的单位
touchTargetSuccess 碰到的单位(需配合路径点)
newMessage 给这个单位发信的单位
thisActionTarget与eventSource的例子
[turret_super]
onShoot_triggerActions: idol
[hiddenAction_idol]
showMessageToAllPlayers: %{thisActionTarget}的笑容。

[hiddenAction_tookDmg]
autoTriggerOnEvent: tookDamage(withTag="APCR")
showMessageToAllPlayers: 来自%{eventSource}的攻击!

全局

铁锈战争提供了一些常见情况可能用到的单位选择器,且所以节都能使用,与局内相对。

选填参数部分

附属:attachment([slot], [withTag])

运输:transporting([slot])

最近单位:nearestUnit([withinRange], [withTag], [relation])

搜索首个单位globalSearchForFirstUnit([withTag], [relation])

参数都为选填,默认情况就很有趣了。

  • 附属

不填参数则返回行数最高的单位。

  • 运输

不填参数则返回最近运输的单位。

  • 最近单位

不填参数则返回范围约为500内的单位。

  • 搜索首个单位

不填参数则返回该地图最小id的单位。

无参数部分

这些单位引用的特点很明显,都是指向具体的某个单位。 attackingactiveWaypointTarget为攻击时套上单位的快捷引用方式。lastDamagedBy在事件来源为tookDamage时的快捷引用方式。parent在单位自身为他人附属时可使用。activeWaypointTarget能够实时监控路径点情况,如果没明确指定某个单位则返回在那个位置的标记(Marker),但似乎不能获取该路径点的类型,路径点类型可详见代码addWaypoint_type

全局单位引用的例子
isVisible: if parent.attachment(slot= 5) == self

[hiddenAction_repair]
autoTriggerOnEvent: newWaypointGivenByPlayer
requireConditional: if self.hasActiveWaypoint(type= "repair")
showMessageToPlayer: 你正在治疗%{activeWaypointTarget}。

存储

自定义内存相比,虽然customTarget1customTarget2@memory x:unit功能相当,但前者能实时清理使用不了的单位。 单位生产、产生出来时,它的自定义目标1默认为工厂(把你生成出来的单位),这很有用,工厂不必通过queuedUnitFinished事件配合sendMessageTo告诉产物把你生产出来的是谁

其他

nullUnit有另一种写法,也就是null,但后者更泛用且简略,前者更像是特指,特指的是单位。