Targetname
< Zh(Redirected from Zh/!picker)
		
		
		
		Jump to navigation
		Jump to search
		Targetname is a 
base
 Keyvalue available in all  起源 games.
目标名称(或者叫“名称”)顾名思义,即一个实体的名字。名字不是实体存在的必要条件,但通常来讲,实体必须得有一个名字,才能被运用到IO系统中.
 起源 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.
- game_playerleave- 每当player离开游戏时触发,在这种情况下因为玩家实体不存在,所以- !activator不会有任何效果
 证实:哪些游戏可以使用
 证实:哪些游戏可以使用game_playerjoin和game_playerspawn事件? 提示:在
提示:在
 中,使用Vscript的事件Hook可以获取游戏事件的更多信息(例如攻击者死亡)。对应的事件分别为
中,使用Vscript的事件Hook可以获取游戏事件的更多信息(例如攻击者死亡)。对应的事件分别为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支持完整的通配符系统,例如*_door、area*_door、ar*a*_d*r和- ?通配符等,Mapbase还允许在IO系统中使用正则表达式
 注意:Hammer无法识别大多数通配符格式,将其视为无效IO,但在实际游戏中可用 注意:Hammer无法识别大多数通配符格式,将其视为无效IO,但在实际游戏中可用
 
IO系统还支持使用实体类名进行匹配,这使用了上面列出的所有相同的扩展匹配功能。起源的其他部分也支持类名匹配,但除非另有说明,否则通常情况并非如此。
 提示:尽管部分情况下不可信,但大多数游戏的VScript支持迭代独立实体,字符串差异比较,正则表达式等,几乎允许任何类型的名字匹配
提示:尽管部分情况下不可信,但大多数游戏的VScript支持迭代独立实体,字符串差异比较,正则表达式等,几乎允许任何类型的名字匹配关键词
以下特殊目标名称可用于动态选择实体。
 注意:并非所有实体参数都可以使用这些关键词,例如SetParent输出可以使用
注意:并非所有实体参数都可以使用这些关键词,例如SetParent输出可以使用!activator关键词,但是玩家实体的SetFogController输出不能使用!activator/!caller关键词,而是使用雾实体的实际名称- !activator
- 触发整个IO链的起始实体
-   如果玩家走进一个触发器,触发了logic_relay,那么玩家就是Relay的!activator
- !self
- 触发当前输入链的实体
-   如果玩家走进了一个触发器,导致logic_relay被触发,那么Relay自身就是!self
特例: 
- 如果logic_relay使用OnTrigger输出触发了env_entity_maker的ForceSpawnAtEntityOrigin输入,并使用!self作为附带参数,那么此处!self便是env_entity_maker
- !caller
- 触发当前输出链的实体
- 如果玩家走进了一个触发器,导致logic_relay被触发,那么触发器就是Relay输出的!caller。
特例: 
- 如果logic_relay使用OnTrigger输出触发了env_entity_maker的ForceSpawnAtEntityOrigin输入,并使用!caller作为附带参数,那么此处!caller便是Relay
- 对于filter_activator_[xxxx]或者logic_case,TestActivator或者PickRandom/PickRandomShuffle输出,那么此处!caller便是filter_activator_[xxxx]/logic_case自己,而不是触发输出的实体
 注意:单个输出可以覆盖 注意:单个输出可以覆盖- !caller指定的实体,这是通过point_entity_finder、math_counter、logic_case和过滤器实体实现的
- !player
- 指向玩家
- 在多人游戏中,这指向的是第一个加入服务器的玩家
 注意:当匹配实体名称时,其行为符合预期,即如果实体是玩家则进行匹配
注意:当匹配实体名称时,其行为符合预期,即如果实体是玩家则进行匹配 提示:如要匹配游戏内的所有玩家,请使用实体类名
提示:如要匹配游戏内的所有玩家,请使用实体类名player进行匹配 错误:在传送门2中,使用
错误:在传送门2中,使用parentname参数进行实体绑定会在地图启动时导致实体无法绑定 解决方案:使用logic_auto触发 解决方案:使用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()



























