单位引用
单位引用(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") |
局内
局内只能在行动内使用,可用alsoTriggerAction
或alsoQueueAction
延长“寿命”,你也可以用内存将其存储。thisActionTarget
在不同情况下所指代的单位不同,与eventSource
不同,后者只与autoTriggerOnEvent
绑定,触发的事件不同所指代的单位也不同。
thisActionIndex的用法
thisActionIndex
能在遍历过程中同时知道每个元素的位置信息,index
为其缩略形式。受alsoTriggerActionRepeat
与takeResources_triggerActionForEach
影响。
对应的情况
fireXTurretAtGround | 指向的位置 |
alsoTriggerAction | 与原行动的thisActionTarget相同 |
onShoot_triggerActions | 炮塔射击的单位 |
takeResources_triggerActionIfAnyCollected | 提取到的单位 |
takeResources_triggerActionForEach | 与上同理 |
addWaypoint_triggerActionIfMatched | 被添加路径点的单位(没明确指定某个单位时则为在那个位置的标记,如move等) |
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的单位。
无参数部分
这些单位引用的特点很明显,都是指向具体的某个单位。
attacking
为activeWaypointTarget
为攻击时套上单位的快捷引用方式。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}。 |
存储
与自定义内存相比,虽然customTarget1
与customTarget2
与@memory x:unit
功能相当,但前者能实时清理使用不了的单位。
单位生产、产生出来时,它的自定义目标1默认为工厂(把你生成出来的单位),这很有用,工厂不必通过queuedUnitFinished
事件配合sendMessageTo
告诉产物把你生产出来的是谁。
其他
nullUnit
有另一种写法,也就是null
,但后者更泛用且简略,前者更像是特指,特指空的是单位。