targetname
targetname - это ключ-параметр, доступно для всех игр на движке
Source.
targetname (целевое имя) (часто называемое просто именем) - это имя объекта. Целевое имя не требуется для существования объекта, но его необходимо указывать, чтобы объект можно было использовать системой ввода/вывода.
Примечания
- Объекты можно указывать по их имени класса (например,
prop_dynamic). - Целевые имена объектов не требуется делать уникальными, они могут быть одинаковыми, в этом случае входы будут использоваться у каждого из них. Повторяющиеся целевые имена объектов отображаются жирным шрифтом.
- Целевые имена не могут содержать символы
!или*(смотрите далее). - Целевые имена также не могут содержать символ
,, если объект будет использоваться в качестве родительского, поскольку это используется для указания точки крепления. - Указание имён для некоторых объектов, таким как источники света light и спрайты, может повлиять на их поведение.
Вхождения
- Вхождения могут использовать дополнения имени в виде приставки или суффикса и автоматически получают приставку, если параметры не указаны.
- Приставки и суффиксы отделяются от основного имени дефисом, например, 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 (Предок) объекта. Расширенными функциями являются:
- Подстановочные символы
- Source поддерживает подстановочный символ
*в ограниченном виде. Это означает, что строка area1* будет соответствовать любым именам, начинающимся с area1, например area1_portal или area1_door, но не area2_door. Использование подстановочного символа*возможно только в конце строки, поэтому более сложные выражения, такие как *_door или area*_door, не будут работать.
Примечание: 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.
Примечание: Mapbase has support for complex wildcard matching like *_door, area*_door, ar*a*_d*r, ?wildcards, etc.
Система ввода/вывода также поддерживает сопоставление имён класса, которое проверяет имя класса, вместо целевого имени объекта. При этом используются те же расширенные функции, перечисленные выше. Некоторые другие компоненты Source также поддерживают сопоставление имён класса, хотя обычно это не так, если не указано иное.
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.
Специальные имена
Для автоматического указания объектов используются следующие специальные имена.
Для указания инициатора/вызывающего
Каждый срабатывающий выход создает событие ввода/вывода, добавляемое в очередь событий (выводимую командой 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.
В качестве 'целевого объекта'
!self- В этом качестве
!selfбудет указывать вызывающий объект, что делает его эквивалентным!caller, и это может привести к путанице в выходах, упомянутых как особые случаи (например, OnGetValue, OnFoundEntity, OnReachedFloor и т.д.).
!pvsplayer- Первый попавшийся объект персонажа игрока, найденный в области потенциальной видимости объекта. Используется область потенциальной видимости для вызывающего объекта, или инициатора, если вызывающий объект отсутствует. Если инициатор также отсутствует, то становится аналогичен
!player.
В качестве входного параметра
- SetParent input considers only the activator in its entity searches which means
!activatorwill work and!pvsplayerwill consider the activator for its PVS check - SetFogController input of player can only use the targetname of the desired env_fog_controller.
!self- Объект, принимающий вход.
Пример:If a logic_relay fires ForceSpawnAtEntityOrigin !selfto an env_entity_maker withOnTrigger, the!selfentity is the env_entity_maker itself.
!pvsplayer- Первый попавшийся объект персонажа игрока, найденный в области потенциальной видимости объекта. Имеется в виду область потенциальной видимости для объекта, принимающего вход.
В любом из вариантов
!activator- Будет указывать объект, инициировавший выход (Смотрите описание инициатора выше ↑). Can be also thought of as the entity that began the current I/O chain.
Пример: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- Будет указывать объект, вызваший выход (Смотрите описание вызывающего выше ↑).
OnTrigger output:
env_entity_maker ForceSpawnAtEntityOrigin !caller- or
!caller Kill
!caller entity is the relay itself in both cases
Для указания других объектов
!player- Указывает на объект персонажа игрока.
- В многопользовательских играх указывает на объект персонажа игрока, который первым подключился к серверу.
Совет: Для указания всех объектов персонажей игрока на сервере, используйте имя класса 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(только в
)- Targets the respective survivor.
!player_blue/!player_orange(только в
)- 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
!calleris looking due to a Look At Actor or Face Actor choreography event. !friend- The
!caller's nearest friendly NPC. This returns the player on NPCs which don't descend fromCAI_PlayerAlly. !enemy- The current enemy of the
!caller.
События игроков
В большинстве многопользовательских игр всем объектам, со следующими целевыми именами на вход Use будет отправлено указание на объект, когда произойдет соответствующее событие.
game_playerdie- Срабатывает каждый раз, когда объект персонажа player умирает. Умирающий рассматривается как!activator.game_playerkill- Срабатывает каждый раз, когда объект персонажа player убивает объект другого персонажа игрока, убивший объект рассматривается как!activator.game_playerjoin- Срабатывает каждый раз, когда объект персонажа player присоединяется к игровому процессу, присоединившийся объект рассматривается как!activator.
Баг:game_playerjoinне срабатывает на ботов. (подтверждено в:
,
)game_playerspawn- Срабатывает каждый раз, когда объект персонажа player появляется, with the spawning player as the!activator.game_playerleave- Срабатывает каждый раз, когда объект персонажа player покидает игровой процесс.!activatorв данном случае не работает, так как объектplayerбольше не существует.
player_spawn, player_death and player_disconnect. Or logic_playerproxy for player death.
Смотреть также
- Пользовательские входы и выходы
GetDebugName(), for accessing an entity's targetname in C++.