StarCraft 2: Рантайм-коды агентов

» Раздел: 1. Основы
» Автор оригинала: Blizzard
» Источник: http://eu.battle.net/sc2/ru/game/maps-and-mods/tutorials/actor/

Предисловие

С выходом обновления 1.4.0 Blizzard добавили рантайм-коды агентов для создания агентов и манипуляций с ними «на лету» с тестовой картой, запущенной из редактора. Это очень полезно, если нужно быстро опробовать новую идею, так как в этом случае не требуется подготовка данных или исполнение триггеров.
рантайм-коды также могут использоваться для модификации и исследования практически любого агента при запущенной тестовой карте, что может быть полезно при отладке моментов, связанных с работающими агентами.
Эти рантайм-коды могут использоваться для рассылки недавно введенных дамп-сообщений, таких как AnimDumpDB, AttachDump, HostedPropDump, RefDump и TextureDump. Эти сообщения позволят создателям модификаций отслеживать определенные аспекты работы агентов во время работы игры, что сможет стать еще одним полезным отладочным приемом.

Структура рантайм-кодов агентов

Названия ссылок

Термин «название ссылки» является сокращением более точного термина «название ссылки на агент». Название ссылки идентифицирует уникальный тип системной переменной, известной как ссылка на агент (или просто «ссылка»). Ссылка на агент может быть преобразована в данный агент в зависимости от 1) значения названия ссылки и 2) контекста, в котором оно используется. Названия ссылок могут использоваться во многих агентах, в которых они предусмотрены. Их доступность может варьироваться в зависимости от контекста, в котором они используются:
  • D - из данных агента
  • T - из связанных с агентом функций в триггерах
  • C - через рантайм-коды агента
Ниже представлены доступные на данный момент названия ссылок:
::HoverTarget C Агент под указателем мыши.
::LastCreated DTC Из триггеров разрешается последний агент, успешно созданный посредством функции триггера (но не каким-либо иным способом, как, например, через сообщение в данных в результате вызова триггера). Во всех остальных случаях также будут включены агенты, созданные явно через сообщение Create (Создать) (например, Create SomeActor). Такой подход позволит повысить предсказуемость работы различных вариантов механизма LastCreated() в триггерах и одновременно снизить количество «сюрпризов» во всех остальных ситуациях.
::LastCreatedActual DTC Последний агент, успешно созданный пользователем (любым из возможных способов). Включает агенты, созданные сообщением Create (Создать), создание агентов по запросу и создание внутренних агентов системой (например, когда CActorAction создает комбинации).
::Main DTC «Главный» агент диапазона ::User scope
::PortraitGame DTC Главный агент окна игрового портрета в данный момент независимо от текущего выбора.
::PortraitGameSelf DTC Портрет для главного агента в диапазоне этого агента. Полезен для отправки сообщений от любого агента в диапазоне единицы агенту ее портрета. Не содержит значения, если портрет принадлежит единице, отличной от текущей.
::Self D Агент, получающий событие.
::User TC Содержит результаты последнего введенного рантайм-кода ActorFrom.
::global.<название_ссылки> DTC Ссылка на агент из глобальной таблицы ссылок.
::scope.<название_ссылки> DTC Ссылка на агент из содержащей его таблицы ссылок диапазонов.
::actor.<название_ссылки> DTC Ссылка на агент из содержащей его таблицы ссылок агентов.
TargetKey TC Агент, представленный ключом из диапазона ::User scope. Если список результатов содержит несколько значений, возвращает только первое из них.

Названия ссылок ветвей

Некоторые рантайм-коды (например, ActorSendTo) поддерживают «имена ссылок ветвей», что позволяет пользователю отправлять сообщения именам ссылок, «принадлежащим» определенному агенту (то есть для вычисления имени ссылки рантайм-коду требуется агент).
::Creator DTC Создатель агента ::User actor
Хосты Агент-хост – это агент, у которого другой агент наследует данные, такие как позиции, свойства и т. п.
::Host DTC Главный хост. Используется для позиций и наследуемых свойств.
::HostImpact DTC Используется для позиционирования точки воздействия луча.
::HostLaunch DTC Используется для позиционирования исходной точки луча.
::HostReturn DTC Хост, используемый щупальцем в качестве цели для обратного движения.
::Supporter DTC Используется для связывания времени действия агента с «поддерживающим» агентом (как правило, для организации событий, указывающих агенту, что тот должен исчезнуть в момент уничтожения поддерживающего агента).

Названия ссылок диапазонов

Некоторые рантайм-коды работают с диапазонами агентов. Существуют переменные имен ссылок диапазонов, которые функционируют аналогично именам ссылок агентов с той разницей, что они оперируют диапазонами агентов, а не самими агентами.
::Actor TC Диапазон агента ::User actor.
::LastCreated TC Последний диапазон, успешно созданный пользователем посредством рантайм-кода или кода клиента. Не применяется из данных, поскольку данные не создают диапазоны.
::PortraitGame TC Диапазон для окна игрового портрета.
::Selection C Диапазон для выбранной единицы. Возвращает одиночный диапазон, даже если выбрано несколько единиц.
::User TC Содержит результат из самого последнего рантайм-кода ActorScopeFrom. Автоматически получает значение ::LastCreated, когда ссылка заполняется новым подходящим диапазоном агентов.

Ключи содержания

Сообщения создания могут включать от 1 до 3 ключей содержания. Они позволяют триггерам и рантайм-кодам с большей легкостью создавать множество агентов, используя одни и те же данные, но различные параметры «содержания». Например:
ActorCreateAt Model Hydralisk 
 ActorCreateAt Model Marine
Оба рантайм-кода создают модель CActorModel с названием Model. Первый создает ее с использованием ресурса Hydralisk, а второй – с использованием ресурса Marine. Различные типы агентов поддерживают различные стили параметров создания в зависимости от конкретного случая. Далее следует список агентов, поддерживающих параметры содержания, и порядок, в котором они указаны.
CActorBeam СсылкаНаМодель Запуск Воздействие
СсылкаНаМодель – название записи modelData, используемой для луча.
Запуск – название ссылки для заполнения начальной точки луча ::HostLaunch.
Воздействие – название ссылки для заполнения точки воздействия луча ::HostImpact.
CActorList Название_ссылки
Название_ссылки – название ссылки источника, из которого будет заполняться список.
CActorModel СсылкаНаМодель Вариант
СсылкаНаМодель – название записи modelData, используемой для модели.
Вариант – конкретный номер варианта модели, если необходимо (иначе выбирается случайным образом).
CActorSound СсылкаНаЗвук
СсылкаНаЗвук – название используемого звука.
CActorSplat СсылкаНаМодель
СсылкаНаМодель – название записи modelData, используемой для луча.

Использование рантайм-кодов агентов

Пользователь может вводить рантайм-коды агентов в строку чата при запущенной карте в редакторе. Вывод осуществляется в файл отчета Alert.txt, который сохраняется в папку StarCraft II/GameLogs. К названию файла отчета Alert.txt также добавляются метки даты и времени, поэтому полное название файла будет выглядеть примерно так: 2012-02-02 10.30.05 Alerts.txt. Горячие клавиши пока не поддерживаются, но могут быть реализованы в будущем.

Список рантайм-кодов агентов

В синтаксических выражениях для каждой конкретной команды параметр, заключенный в фигурные скобки {}, является необязательным. При успешном выполнении некоторых из этих рантайм-кодов устанавливаются две глобальные переменные ::User actor и ::User scope, которые, в свою очередь, могут использоваться другими рантайм-кодами. рантайм-коды, уничтожающий агенты и диапазоны, исключают те агенты и диапазоны, которые могут прервать существование активных в данный момент единиц и эффектов.

ActorCreateAt

Создает агент в указанном месте. Устанавливает переменную ::User actor на этот агент, а ::User scope – на его диапазон.
Этот рантайм-код полезен при непосредственном создании агента на тестовой карте, чтобы иметь возможность наблюдать за его свойствами и взаимодействовать с ним, не дожидаясь, пока на карте произойдет событие, создающее этот агент естественным образом. Координаты позволяют пользователю точно располагать агенты для тестирования в боевых условиях и прочих ситуациях.
Синтаксис:
ActorCreateAt x,y Название_агента {содержимое1} {содержимое2} {содержимое3} 
Примеры:
ActorCreateAt 50,50 Model Drone 
 ActorCreateAt 50,50 NexusSplat

ActorCreateAtCursor

Создает агент (и содержащий его диапазон) у указателя мыши. Устанавливает переменную ::User actor на этот агент, а ::User scope – на его диапазон.
Этот рантайм-код полезен при непосредственном создании агента на тестовой карте, чтобы иметь возможность наблюдать за его свойствами и взаимодействовать с ним, не дожидаясь, пока на карте произойдет событие, создающее этот агент естественным образом. Агент создается в месте указателя мыши, поэтому пользователю не нужно беспокоиться о получении точных координат для размещения агента в удобной точке.
Синтаксис:
ActorCreateAtCursor Название_агента {содержимое1} {содержимое2} {содержимое3}
Примеры:
ActorCreateAtCursor Model Drone 
 ActorCreateAtCursor NexusSplat 
 ActorCreateAtCursor Sound HydraliskAirAttackLaunch

ActorDumpAutoCreates

Создает список всех агентов, созданных как результат данных, например:
<On Terms="UnitBirth.Marine" Send="Create"/>
Этот тип шаблона создания агента называется автосозданием, поскольку агент создает сам себя в ответ на сообщение. Этот случай отличается от шаблона создания следующего типа:
<On Terms="ActorCreation" Send="Create SomeActor"/>
Здесь сообщение создания четко указывает, какой агент должен быть создан.
ActorDumpAutoCreates может использоваться для отслеживания непреднамеренного создания агентов определенными событиями.
Синтаксис:
ActorDumpAutoCreates

ActorDumpEvents

Создает список всех событий агентов, зафиксированных переменной ::User actor, исключая события автосоздания.
Этот рантайм-код может быть использован для текстовых поисков всех событий агентов на карте – например, если пользователь хочет увидеть все агенты, отвечающие на определенное сигнальное событие безотносительно того, в какой зависимости они находятся.
Синтаксис:
ActorDumpEvents

ActorDumpLeakRisks

Создает список агентов старше определенного возраста, для которых существует опасность утечки. Например, пользователь может проверить, не осталось ли на карте моделей выхлопного пламени оружия возрастом, например, дольше минуты, поскольку это противоречит здравому смыслу. Некоторые виды агентов никогда не отображаются в списках утечек, поскольку они автоматически очищаются системой и утечка не может быть вызвана неправильными данными.
Если при тестировании карты замечено постепенное снижение быстродействия, этот рантайм-код поможет выяснить, нет ли утечки, которая может являться причиной замедления.
Синтаксис:
ActorDumpLeakRisks Срок

ActorDumpLive

Создает список существующих агентов по всей карте, отсортированный по содержащим их диапазонам.
Этот рантайм-код полезен для определения факта существования агентов вне зависимости от того, появляются ли они в игровом мире на своих местах. Агент, ошибочно появляющийся в точке с координатами 0,0, все равно будет отображен в списке живых агентов.
Синтаксис:
ActorDumpLive

ActorFrom

Устанавливает переменную ::User actor на живой агент по имени ссылки.
Этот рантайм-код очень важен для помещения различных агентов в игре в ::User ref, чтобы пользователь мог отправлять им рантайм-команды.
Синтаксис:
ActorFrom Название_ссылки 
Примеры:
ActorFrom ::HoverTarget 
 ActorFrom ::Selection

ActorFromActor

Устанавливает переменную ::User actor на агент, на который ссылались посредством другого агента и названия ссылки ветви.
Этот рантайм-код полезен для помещения различных родительских и дочерних агентов в игре в ::User ref, чтобы пользователь мог отправлять им рантайм-команды. Обычно он используется для осуществления операций с переменной ::Host ref агента.
Синтаксис:
ActorFromActor Название_ссылки
Примеры:
ActorFromActor ::Host     //Устанавливает ::User actor на дочерний агент.
ActorFromActor ::Creator  //Устанавливает ::User actor на родительский агент.

ActorKillAll

Уничтожает все агенты, за исключением тех, которые являются частью существующих единиц и деревьев эффектов.
Этот рантайм-код полезен для очистки карты от агентов, чтобы протестировать индивидуальные агенты независимо друг от друга.
Синтаксис:
ActorKillAll

ActorKillClass

Уничтожает все агенты указанного класса в заданном радиусе вокруг указателя. Если радиус не указан, он считается бесконечным.
Этот рантайм-код может использоваться для очистки области (или всей карты) от агентов определенного типа, если они мешают сосредоточиться на проблеме, которой пользователь занят в данный момент. Например, может иметь смысл уничтожить все агенты декораций, чтобы подтвердить, что именно они являются причиной проблем с быстродействием.
Синтаксис:
ActorKillClass Класс {радиус}
Примеры:
ActorKillClass Model 15 
ActorKillClass Sound

ActorKillLink

Уничтожает все агенты с указанной ссылкой агента в заданном радиусе вокруг указателя. Если радиус не указан, он считается бесконечным.
Этот рантайм-код может использоваться для очистки области (или всей карты) от всех встречающихся агентов, относящихся к одной ссылке, если они мешают сосредоточиться на проблеме, которой пользователь занят в данный момент. Например, может иметь смысл отключить все модели с определенным названием в области атаки по площади, если их создается слишком много и они загораживают другие визуальные эффекты атаки, над которыми пользователь работает в данный момент. Или, к примеру, можно отключить все звуки с определенным названием, чтобы проверить, слышны ли другие звуки, также ассоциированные с отлаживаемым эффектом.
Синтаксис:
ActorKillLink Ссылка {радиус}

ActorSend

Отправляет корректное сообщение активному в данный момент агенту ::User actor.
Вероятно, наиболее часто используемый рантайм-код агентов и основной способ, посредством которого разработчики (внутренние и сторонние) взаимодействуют с агентами через рантайм-коды.
Синтаксис:
ActorSend Сообщение
Примеры:
ActorSend Destroy
ActorSend SetTintColor {255,255,0}

ActorSendTo

Отправляет сообщение ссылке на системный агент, используя ::User actor для разрешения ссылки системного агента. Иными словами, эта процедура отправляет сообщения именам ссылок ветвей (хотя она также работает и для ссылки ::Main).
Этот рантайм-код – удобный способ рассылки сообщений агентам ветвей, так как пользователю не требуется сперва использовать рантайм-код ActorFromActor для установки их в ::User ref.
Синтаксис:
ActorSendTo Название_ссылки Сообщение
Примеры:
ActorSendTo ::Host SetOpacity 0.5
ActorSendTo ::Main SetTintColor {255,0,0}

ActorScopeDumpLive

Создает список живых диапазонов по всей карте.
Этот рантайм-код может быть полезен для поиска диапазонов агентов, которые нецелесообразно потребляют ресурсы, но больше не содержат в себе агентов (или полезных агентов).
Синтаксис:
ActorScopeDumpLive

ActorScopeFrom

Задает новый диапазон ::User scope по имени ссылки указанного диапазона.
Этот рантайм-код очень важен для помещения различных диапазонов в игре в ::User scope ref, чтобы пользователь мог легко находить и отправлять сообщения всем агентам в этом диапазоне.
Синтаксис:
ActorScopeFrom Название_диапазона
Примеры:
ActorScopeFrom ::PortraitGame 
ActorScopeFrom ::Selection

ActorScopeKill

Уничтожает текущий набор ::User actor и ::User scope. Эта команда не отключает диапазоны для живых единиц в целях предотвращения непредсказуемых результатов.
Этот рантайм-код является эффективным способом отключить один или несколько агентов, отключив содержащий их диапазон (поскольку при этом отключаются все агенты внутри диапазона).
Синтаксис:
ActorScopeKill

ActorScopeOrphan

Делает потерянным текущий диапазон ::User scope. Потерянный диапазон автоматически самоуничтожается, когда исчезает последний поддерживающий его агент (например, когда агент модели смерти единицы заканчивает анимацию и уничтожает себя). Эта команда не отделяет диапазоны от единиц и эффектов в целях предотвращения непредсказуемых результатов.
Этот рантайм-код может использоваться для тестирования эффектов действия сообщения ActorOrphan на агенты внутри диапазона ::User scope.
Синтаксис:
ActorScopeOrphan

ActorScopeSend

Передает сообщение пользователя всем агентам в диапазоне ::User scope.
Используется в редких случаях, когда пользователь хочет отправить сообщение всем агентам в диапазоне.
Используется в редких случаях, когда пользователь хочет отправить сообщение всем агентам в диапазоне. В качестве комментария – может показаться, что этот рантайм-код является хорошим способом, к примеру, покрасить все модели в диапазоне агента в красный цвет, но обычно лучше будет открепить дочерние агенты от ::Main actor и унаследовать для них свойство tintColor. После этого пользователь может отправить сообщения SetTintColor агенту ::Main actor диапазона и использовать наследуемое свойство hostedProp для обеспечения смены цвета. Последний метод особенно полезен в тех ситуациях, когда диапазон может содержать агенты, которые при этом не должны быть покрашенными в красный цвет (например, вражеские комбинации столкновения) наряду с агентами, которые должны стать красными. Передача сообщения tintColor покрасит все модели в диапазоне в красный цвет в любом случае.
Синтаксис:
ActorScopeSend Сообщение  
Примеры:
ActorScopeSend Destroy

ActorUsersDump

Возвращает текущие ::User actor и ::User scope.
Полезно, если пользователь забыл, на что установлены в данный момент эти ссылки.
Синтаксис:
ActorUsersDump

ActorUsersFromHoverTarget

Устанавливает ::User actor на агент под указателем. Устанавливает ::User scope на диапазон, содержащий этот агент.
Очень полезно для изучения и проведения операций над агентами в игре, не принадлежащими к объектам, которые могут быть выделены.
Синтаксис:
ActorUsersFromHoverTarget

ActorUsersFromPortraitGame

Устанавливает ::User actor на агент портрета в окне игрового портрета. Устанавливает ::User scope на диапазон агента для окна игрового портрета.
Полезно для изучения и произведения действий над агентами, содержащимися в окне портрета.
Синтаксис:
ActorUsersFromPortraitGame

ActorUsersFromSelection

Устанавливает ::User actor на ::Main actor для выбранной единицы. Устанавливает ::User scope на диапазон, содержащий этот агент.
Очень полезно для изучения и произведения действий над любым агентом в игре, принадлежащем объекту, который может быть выделен.
Синтаксис:
ActorUsersFromSelection

ActorWorldParticleFXDestroy

Уничтожает все частицы и ленты, существующие в игровом мире на данный момент. Эта команда не препятствует появлению всех последующих таких объектов – даже из системы частиц, в которой только что были уничтожены все частицы.
Может использоваться для немедленной очистки карты от эффектов частиц и лент (обычно в момент, когда игра стоит на паузе) с целью более детального исследования моделей или других визуальных эффектов.
Синтаксис:
ActorWorldParticleFXDestroy

Сообщения дампа агентов

Пользователь может отправлять сообщения дампа агентов другим агентам для получения от последних информации, полезной для отладки.

AliasDump

Выдает все наименования агента, ассоциированные на данный момент с этим агентом.
Синтаксис:
AliasDump

AnimDumpDB

Выдает все доступные для модели фрагменты анимации, ассоциированные с агентом. Выдает продолжительность каждой анимации и указывает, является ли анимация циклической.
Синтаксис:
AnimDumpDB

AttachDump

Выдает все точки прикрепления, существующие для модели, ассоциированной с агентом. Также распечатывает все указанные пользователем ключи прикрепления и размеры прикреплений цели, ассоциированные с каждой точкой прикрепления.
Синтаксис:
AttachDump

HostedPropDump

Выдает всю информацию, ассоциированную с указанным наследуемым свойством hostedProp, если оно существует для агента. Если параметр «Дочерние_агенты» равен 1, распечатывается информация по данному свойству для выбранного агента и всех его дочерних агентов.
Синтаксис:
HostedPropDump Дочерние_агенты Тип_свойства 
Примеры:
HostedPropDump 0 TintColor 
HostedPropDump 1 TeamColor

HostedPropDumpAll

Распечатывает всю информацию, ассоциированную со всеми указанными наследуемыми свойствами агента. Если параметр «Дочерние_агенты» равен 1, то же действие осуществляется и для всех дочерних агентов выбранного агента.
Синтаксис:
HostedPropDumpAll Дочернние_агенты

RefDump

Распечатывает отладочную информацию по агенту, обозначенному названием ссылки. На данный момент это работает только для ссылок агентов в системных таблицах ссылок, что означает ссылки формата ::actor.someUserRef, ::scope.someUserRef и ::global.someUserRef.
Синтаксис:
RefDump Название_ссылки
Пример:
RefDump ::actor.Пользовательская_ссылка

RefTableDump

Распечатывает отладочную информацию по всем ссылкам агентов в заданной таблице ссылок. Параметр «Тип_таблицы_ссылок» является чувствительным к регистру и может принимать значения Actor, Scope или Global.
Синтаксис:
RefDump Тип_таблицы_ссылок 
Пример:
RefDumpAll Actor

TextureDump

Распечатывает все текстуры, на данный момент используемые моделью, которые ассоциированы с выбранным агентом. Указывает, какие из них ассоциированы с ячейками текстур и были ли они обменены и заменены другими динамическими текстурами.
Синтаксис:
TextureDump

TextureDumpDB

Распечатывает все текстуры, доступные для динамического обмена текстур на модели, ассоциированной с указанным агентом.
Синтаксис:
TextureDumpDB

Просмотров: 6 873

alpha #1 - 8 лет назад (отредактировано ) 0
все доступно и красиво, спасибо
как мою мысл точно выделил WebSter
мысль*
3 комментария удалено
laViper #5 - 8 лет назад 0
Пока сайт близзов на ремонте, можно вопрос, эта статья чем-то отличается от выложенной близзами на офф странице?
Clamp #6 - 8 лет назад 0
Только порядком пунктов (систематизировано для повышения удобочитаемости) и грамматикой
laViper #7 - 8 лет назад 0
Можно тогда авторскую (твою) позицию - зачем это надо?
Из разряда, как мы обходились без этого раньше и какие практические удобства сулит это нововедение.
2 комментария удалено
YellowStar #10 - 8 лет назад 0
не работаит
Это сообщение удалено
Clamp #12 - 8 лет назад 0
laViper, для того, чтобы узнавать поведение того или иного агента при тех или иных действиях без 100500 запусков карты, разумеется
Амбидекстрия, ничего личного, но не тебе решать
Зевс #13 - 8 лет назад 0
Ничего нового. Берем хил медивека и смотрим агенты. Там все понятно. И бтв - чит-коды агентов - хуже перевода придумать нельзя)
SageOne #14 - 8 лет назад 0
Дебаг коды агентов.
но все равно как-то связано с людьми в черном...
Зевс, а так, это официальный же перевод =)
ScorpioT1000 #15 - 8 лет назад 0
Зевс, это не перевод us.battle.net/sc2/en/game/maps-and-mods/tutorials/actor
Это сообщение удалено
ScorpioT1000 #17 - 8 лет назад 0
Че вы тут развели? Пишите нормально)
DragonSpirit #18 - 7 лет назад 0
тупой копипаст не нужен, Кламп хоть над ним поработал немного
Это сообщение удалено