Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

targetname

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Hrvatski (hr)Русский (ru)中文 (zh)Translate (Translate)
Edit Tabs

targetname - это ключ-параметр(en), доступно для всех игр на движке Source Source. targetname (целевое имя) (часто называемое просто именем) - это имя объекта. Целевое имя не требуется для существования объекта, но его необходимо указывать, чтобы объект можно было использовать системой ввода/вывода(en).

Примечания

  • Объекты можно указывать по их имени класса(en) (например, prop_dynamic).
  • Целевые имена объектов не требуется делать уникальными, они могут быть одинаковыми, в этом случае входы будут использоваться у каждого из них. Повторяющиеся целевые имена объектов отображаются жирным шрифтом.
  • Целевые имена не могут содержать символы ! или * (смотрите далее).
  • Целевые имена также не могут содержать символ ,, если объект будет использоваться в качестве родительского, поскольку это используется для указания точки крепления(en).
  • Указание имён для некоторых объектов, таким как источники света light(en) и спрайты(en), может повлиять на их поведение.

Вхождения

  • Вхождения(en) могут использовать дополнения имени в виде приставки или суффикса и автоматически получают приставку, если параметры не указаны.
  • Приставки и суффиксы отделяются от основного имени дефисом, например, hall_a3-door_02.
  • Размещение символа @ в начале целевого имени (например, @exit_door) позволит пропустить автоматическое дополнение имени у данного объекта. Если объекты @exit_doorи exit_door_relay являются частью вхождения с префиксом Door_01, их целевые имена будут @exit_door и Door_01-exit_door_relay.

Соспоставление имён

При поиске объекта Source может использовать несколько расширенных функций сопоставления, полезных в различных ситуациях. Они используются для указания на объект с неизвестным или частично известным именем и чаще всего применяются в системе ввода/вывода, но также могут использоваться в ключ-параметрах, для указания целевых объектов, например, в фильтрах filter_activator_name/class или поле Parent (Предок)(en) объекта. Расширенными функциями являются:

  • Подстановочные символы
Source поддерживает подстановочный символ * в ограниченном виде. Это означает, что строка area1* будет соответствовать любым именам, начинающимся с area1, например area1_portal или area1_door, но не area2_door. Использование подстановочного символа * возможно только в конце строки, поэтому более сложные выражения, такие как *_door или area*_door, не будут работать.
Note.pngПримечание: Hammer does not recognize most of these forms of matching and will see them as errors in the editor, but they will work in-game.
Note.pngПримечание: Mapbase has support for complex wildcard matching like *_door, area*_door, ar*a*_d*r, ? wildcards, etc.

Система ввода/вывода(en) также поддерживает сопоставление имён класса, которое проверяет имя класса, вместо целевого имени объекта. При этом используются те же расширенные функции, перечисленные выше. Некоторые другие компоненты Source также поддерживают сопоставление имён класса, хотя обычно это не так, если не указано иное.

Icon-Important.pngВажно: It's not possible to target by targetname and classname at once. If some entity has targetname prop_window for example and we want to target all entities where classname starts with prop_ by doing ent_fire prop_* kill the prop_* will first try matching all targetnames and will only use classname if entity with no such targetname is found making classname matching unreliable. Likewise if some entity is named player and we try to target all players by using their classname player it won't work as the entity named player would be the target.
Tip.pngСовет: Although not feasible for some situations, most implementations of VScript(en) support standalone entity iteration and contain string comparison tools, regex, etc., allowing for virtually any type of name matching.

Специальные имена

Для автоматического указания объектов используются следующие специальные имена.

Для указания инициатора/вызывающего

Каждый срабатывающий выход создает событие ввода/вывода, добавляемое в очередь событий (выводимую командой dumpeventqueue), которое обрабатывается в соответствующее время с учётом указанной задержки. События ввода/вывода содержат дополнительную информацию о так называемых activator (инициаторе) и caller (вызывающем), которые определяются тем, как конкретный выход рассчитывается в коде объекта. Иногда значения инициатора и вызывающего могут быть равны NULL, что означает отсуствие таких объектов, считающихся инициатором или вызывающим.

Инициатором (activator) обычно является объект, который вызвал срабатывание выхода. Примеры:

  • Выход OnPressed объекта func_button при срабатывании укажет в качестве инициатора игрока, который нажал кнопку.
  • Выход OnStartTouch объекта trigger_multiple укажет в качестве инициатора объект, который соприкоснётся с ним.
  • logic_relay
    • Выход OnSpawn укажет инициатором сам объект logic_relay.
    • Выход OnTrigger будет указывать инициатора входа переключателя (например, если вход переключателя получен от упомянутого выше выхода OnPressed, то будет указан его инициатор).
  • logic_auto - Все его выходы присваивают инициатору значение NULL.

Вызывающим (caller) почти всегда является объект, в котором был определён выход, но есть особые случаи, когда это не так, и в качестве вызывающего выход задает что-то другое. Примеры таких особых случаев:

  • Выход OnGetValue объекта math_counter укажет в качестве вызывающего объект, вызвавший вход GetValue, что и привело к срабатыванию выхода.
  • Выход OnReachedFloor объекта info_elevator_floor укажет в качестве вызывающего (а также инициатора) объект func_elevator, достигший заданного этажа.
  • Выход OnFoundEntity объекта point_entity_finder укажет найденный объект в качестве вызывающего.
  • Выход OnEventFired объекта logic_eventlistener присвоит вызывающему (а также инициатору) значение NULL.
Wiki Note:Entity pages can specify who the activator and caller is evaluated for each output. It is shown as small grey text under the name of the output. (See for example prop_physics#Outputs(en), math_counter#Outputs(en) pages). Specifying activator/caller for outputs can be done using Template:O's parameters

В качестве 'целевого объекта'

!self
В этом качестве !self будет указывать вызывающий объект, что делает его эквивалентным !caller, и это может привести к путанице в выходах, упомянутых как особые случаи (например, OnGetValue, OnFoundEntity, OnReachedFloor и т.д.).
!pvsplayer
Первый попавшийся объект персонажа игрока, найденный в области потенциальной видимости(en) объекта. Используется область потенциальной видимости для вызывающего объекта, или инициатора, если вызывающий объект отсутствует. Если инициатор также отсутствует, то становится аналогичен !player.

В качестве входного параметра

Note.pngПримечание: Because input parameters are processed in the entity accepting the input not all inputs can evaluate these targetnames. Examples:
  • SetParent input considers only the activator in its entity searches which means !activator will work and !pvsplayer will consider the activator for its PVS check
  • SetFogController input of player can only use the targetname of the desired env_fog_controller.
!self
Объект, принимающий вход.
PlacementTip.pngПример:If a logic_relay fires ForceSpawnAtEntityOrigin !self to an env_entity_maker with OnTrigger, the !self entity is the env_entity_maker itself.
!pvsplayer
Первый попавшийся объект персонажа игрока, найденный в области потенциальной видимости(en) объекта. Имеется в виду область потенциальной видимости для объекта, принимающего вход.

В любом из вариантов

!activator
Будет указывать объект, инициировавший выход (Смотрите описание инициатора выше ↑). Can be also thought of as the entity that began the current I/O chain.
PlacementTip.pngПример:In OnStartTouch output of trigger_multiple it's the entity that touched the trigger whether used as 'Target entity' or an input's parameter
!caller
Будет указывать объект, вызваший выход (Смотрите описание вызывающего выше ↑).
PlacementTip.pngПример:If a logic_relay fires the following from OnTrigger output:
  • env_entity_maker ForceSpawnAtEntityOrigin !caller
  • or !caller Kill
then the !caller entity is the relay itself in both cases


Note.pngПримечание: If activator/caller was set to NULL in an output's firing process or those entities were removed(killed) while the IO event is waiting in queue because of its delay then using !activator/!caller/!self as 'Target entity' is safe and is logically equivalent to using a targetname that no entity has.

Для указания других объектов

!player
Указывает на объект персонажа игрока.
В многопользовательских играх указывает на объект персонажа игрока, который первым подключился к серверу.
Tip.pngСовет: Для указания всех объектов персонажей игрока на сервере, используйте имя класса player.
!picker
The first entity under the player's crosshair; mostly only for debugging. Entities without collision can only be selected by aiming at their origin.
In multiplayer games, it uses the first player that joined the server.
!bill / !zoey / !louis / !francis / !nick / !rochelle / !coach / !ellis (только в Left 4 Dead 2)
Targets the respective survivor.
!player_blue / !player_orange (только в Portal 2)
In coop mode, this targets ATLAS (player 1/blue) or P-Body (player 2/orange).

Ключевые слова FindNamedEntity

These keywords are only available in FindNamedEntity, a method specific to NPCs which is only searched by specific systems (e.g. choreographed scenes) and not by things like the I/O System.

Нужно сделать: Mapbase makes this available to I/O searches. Is this the case in any other branch?
!speechtarget
The entity at which the !caller is looking due to a Look At Actor(en) or Face Actor(en) choreography event.
!friend
The !caller's nearest friendly NPC. This returns the player on NPCs which don't descend from CAI_PlayerAlly.
!enemy
The current enemy of the !caller.

События игроков

В большинстве многопользовательских игр всем объектам, со следующими целевыми именами на вход Use(en) будет отправлено указание на объект, когда произойдет соответствующее событие.

  • game_playerdie - Срабатывает каждый раз, когда объект персонажа player умирает. Умирающий рассматривается как !activator.
  • game_playerkill - Срабатывает каждый раз, когда объект персонажа player убивает объект другого персонажа игрока, убивший объект рассматривается как !activator.
  • game_playerjoin - Срабатывает каждый раз, когда объект персонажа player присоединяется к игровому процессу, присоединившийся объект рассматривается как !activator.
    Icon-Bug.pngБаг:game_playerjoin не срабатывает на ботов(en).  (подтверждено в: Black Mesa,Half-Life 2: Deathmatch)
  • game_playerspawn - Срабатывает каждый раз, когда объект персонажа player появляется, with the spawning player as the !activator.
    Icon-Bug.pngБаг:game_playerspawn не работает в Counter-Strike: SourceCounter-Strike: Global OffensiveTeam Fortress 2Black Mesa.
  • game_playerleave - Срабатывает каждый раз, когда объект персонажа player покидает игровой процесс. !activator в данном случае не работает, так как объект player больше не существует.
Подтвердить:In what games do game_playerjoin and game_playerspawn actually work?
Tip.pngСовет: In Team Fortress 2Left 4 Dead 2, use VScript event hooks(en) which also offer extra information with each event (such as the attacker on death etc). Equivalent event names are player_spawn, player_death and player_disconnect. Or logic_playerproxy for player death.


Смотреть также

Эта статья(раздел) является наброском(en). Вы можете помочь, дополнив её.