Targetname
< Zh
Jump to navigation
Jump to search
Targetname is a
base
Keyvalue available in all 起源 games.
目标名称(或者叫“名称”)顾名思义,即一个实体的名字。名字不是实体存在的必要条件,但通常来讲,实体必须得有一个名字,才能被运用到IO系统 中.
注意事项
- 实体也可以通过其类名 (比如
prop_dynamic
)来成为IO中的被触发实体 - 实体名称并不需要唯一性,它们之间可以共用同一个名字(其输出也会触发到所有同名实体上),多个实体共用的名称会被加粗
- 实体名称不能包含
!
或者*
字符,具体原因详见下文 - 如果你打算将其他实体绑定到该实体上,则名称中不能包含
,
因为这被用于绑定到父实体模型上的附着点
实例
- 实例 可以自动给实体名称添加前缀或后缀,以避免重名可能导致的问题。如果未指定前缀名称,则将自动添加
- 前缀与原始实体名称之间使用单个破折号进行分割,例如hall_a3-door_02
- 以
@
为起始字符的实体名称(例如@exit_door)不会被添加前缀。即:如果@exit_door和exit_door_relay是前缀为Door_01的实例的一部分,则最终名称为@exit_door和Door_01-exit_door_relay.
玩家事件
在大多数多人游戏中,任何使用以下名称的实体在出现对应事件时,都会收到Use 输出
game_playerdie
- 每当player死亡时触发,死亡的玩家将作为!activator
game_playerkill
- 每当player杀死另一个玩家时触发,杀手将作为!activator
.game_playerjoin
- 每当player加入游戏时触发,加入游戏的玩家将作为!activator
.game_playerspawn
- 每当player出生时触发,出生的玩家将作为!activator
.错误:该事件在
中无效 [todo tested in ?]
game_playerleave
- 每当player离开游戏时触发,在这种情况下因为玩家实体不存在,所以!activator
不会有任何效果

game_playerjoin
和game_playerspawn
事件?


player_spawn
,player_death
和player_disconnect
.匹配名称
在搜索实体时,起源可以使用一些扩展匹配功能,这些功能在各种情况下都很有用,可用于定位未知实体或仅知晓部分名字的实体,并且普遍用于IO系统中,
但它们也可以用于通过实体键值来定位实体,例如filter_activator_name/class
的Filter键值,或者实体绑定的父实体 ,这些扩展匹配功能是:
- 通配符
- 起源一定程度上支持使用
*
通配符. 这意味着area1*将匹配任何名字开头为area1的实体,;例如area1_portal或者area1_door,但area2_door则不会被匹配,这种通配符还仅限用于名字末端*
,这意味着更复杂的格式(比如*_door或area*_door)没有效果注意:
Mapbase支持完整的通配符系统,例如*_door、area*_door、ar*a*_d*r和
?
通配符等,Mapbase还允许在IO系统中使用正则表达式注意:Hammer无法识别大多数通配符格式,将其视为无效IO,但在实际游戏中可用
IO系统 还支持使用实体类名进行匹配,这使用了上面列出的所有相同的扩展匹配功能。起源的其他部分也支持类名匹配,但除非另有说明,否则通常情况并非如此。

关键词
以下特殊目标名称可用于动态选择实体。

!activator
关键词,但是玩家实体的SetFogController输出不能使用!activator/!caller
关键词,而是使用雾实体的实际名称!activator
- 触发整个IO链的起始实体
- 如果玩家走进一个触发器 ,触发了logic_relay,那么玩家就是Relay的
!activator
!self
- 触发当前输入链的实体
- 如果玩家走进了一个触发器,导致logic_relay被触发,那么Relay自身就是
!self
Expand特例:
!caller
- 触发当前输出链的实体
- 如果玩家走进了一个触发器,导致logic_relay被触发,那么触发器就是Relay输出的
!caller
。
Expand特例:
注意:单个输出可以覆盖
!caller
指定的实体,这是通过point_entity_finder、math_counter、logic_case和过滤器实体实现的!player
- 指向玩家
- 在多人游戏中,这指向的是第一个加入服务器的玩家


player
进行匹配
parentname
参数进行实体绑定会在地图启动时导致实体无法绑定 [todo tested in ?]解决方案:使用logic_auto 触发
SetParent
输入代替!player_blue
(仅存在于之中)
- 在传送门2合作模式中,这指向ATLAS(1号玩家)
!player_orange
(仅存在于之中)
- 在传送门2合作模式中,这指向P-Body(2号玩家)
!pvsplayer
- 在实体的预渲染范围 内发现的第一个玩家,所使用的预渲染范围取自进行搜索的实体,如果没有搜索实体,则关键词返回的结果为
!activator
,如果!activator
也不存在,则关键词返回的结果为!player
!picker
- 玩家准星下的第一个实体;通常仅用于调试。没有碰撞的实体只能通过瞄准其原点来选择
- 在多人游戏中,这仅对第一个加入游戏的玩家有效
FindNamedEntity关键词
以下关键词仅可用由FindNamedEntity
使用,这是一种NPC特有的匹配方法,只能通过特定系统进行搜索(例如场景编排)而不能被IO系统使用
- 待完善:
Mapbase 可将其用于IO系统。其他分支也有这种情况吗?
!speechtarget
- 由于“看向演员 ”或“面朝演员 事件”,
!caller
正在观察的实体 !friend
!caller
最近的友好NPC,如果NPC没有继承CAI_PlayerAlly
类,这将返回玩家作为结果!enemy
- 当前
!caller
的敌人
关键词注意事项
- 对于特定输入,
!activator
和!caller
返回的结果可能会有差异,这取决于每个输入的实现方法,这通常不被推荐使用,例如math_counter的GetValue
输出 - 当输出指定的触发实体为空时,
!self
将不会被设置为!caller
返回的结果 - 用于输出覆盖参数的实体名称,由接收输出的实体而不是发送输出的实体评估。
参见
- User Inputs and Outputs
- 关于如何在C++编程中获取实体类名,详见
GetDebugName()