Добавлен Clamp,
опубликован
Раздел:
3. Редактор данных
Автор оригинала:
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.
Запуск – название ссылки для заполнения начальной точки луча ::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"/>
Здесь сообщение создания четко указывает, какой агент должен быть создан.
<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
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован WebSter
как мою мысл точно выделил WebSter
мысль*
Из разряда, как мы обходились без этого раньше и какие практические удобства сулит это нововедение.