Руководство по Quester'у (Turorial)

michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Руководство по Quester'у (Turorial)

Post by michaelprog »

Quester

Этот режим работы Astral предназначен для управления одним персонажем и выполнением заранее определенной последовательности действий, которая называется Профиль (Profile).

Содержание
  1. Назначение Quester'a. Описание интерфейса
  2. Редактор Quester'a. Описание интерфейса
  3. Основные свойства команд (действий, Action'ов)
  4. Команда ActionPaсk
  5. Команды перемещения
  6. Команды взаимодействия
  7. Команды управления группой
  8. Специальны команды
  9. Mapper и CustomRegion
  10. Условия выполнения команды (Conditions)
Last edited by michaelprog on Sat Nov 25, 2017 8:42 pm, edited 6 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Назначение Quester'a. Описание интерфейса.

Post by michaelprog »

Quester Role

Для выбора данного режима работы в главном окне Astral'а нажмите на центральную кнопку и выберите "Quester" слева вверху.
2017-10-22_13-54-15.png
Когда выбран Quester на главном окне отображается кнопка Main, которая открывает панель Quester'а в этом же окне Astra'а, а также кнопка "Options", которая позволяет изменить некоторые общие параметры работы Questr'a или включить режим "Multi Bots".

Image

Панель Main Quester'a

Основная часть панели Quester'а отведена для древовидной структуры, отображающей последовательность команд (или действий, также именуемых далее Action) профиля. Для краткости всю совокупность команд будем именовать скриптом.
Отработавшие команды обозначены темной иконкой "v". Светлой иконкой ">" помечаются выполняемые в текущий момент команды и блоки в которых они находятся. Темной иконкой "x" отмечены еще не выполнявшиеся команды.
2017-10-22_Quester_Main.png
Ключевые элементы управления на панели Main Quester'a

(A) Load profile
Загружает Quester-профиль (zip-файл, загруженный с данного форума).
Профили хранятся в виде архивных zip-файлов с двойным расширением .amp.zip. Перед использованием их не нужно разархивировать.

(B) Show Mapper
Открывает отдельное окно, схематично отображающее местность вокруг персонажа

(C) Open Editor
Открывает окно Редактира для создания или изменения загруженных Quester-профилей[/list]
Spoiler: [+]
Image
На вкладке Quester'а также есть несколько кнопок, управляющих Astral'ом в данном режиме:

1. Options
По нажатию на кнопку "Options" можно управлять текстовым описанием команд "Display mode" в древовидном списке команд (на рисунке обозначено "1" в красной рамке):
1a) При выборе "Action Name" будет отображаться название команды, заданное разработчиком профиля в свойстве "OverradeName" или сгенерированное Astral'ом по-умолчанию (если "OverradeName" не задано). Большинство разработчиков задают адекватные названия командам, что позволяет легко ориентироваться в процессе выполнения скрипта.
2b) При выборе "Associated mission" будет отображаться локализованное название связанного квеста, которое извлекается из игры. Однако для того, чтобы это работало разработчик профиля должен каждую команду связать с конкретным квестом (задачей, подзадачей) через свойство "AssociateMission". (ИМХО) Это не всегда возможно и часто ломает логику функционирования профиля. По ряду причин я стараюсь не устанавливать связь команды с соответствующим квестом.

2. Selected action...
По нажатию кнопки "Selected action..." (На рисунке обозначено "2" в оранжевой рамке) открывается выпадющее меню, в котором можно:
2a) "Set Start Point" - Задать выбранную команду в качестве активной. Эту операцию можно выполнить только если бот остановлен (т.е. НЕ производится выполнение Quester-профиля). После запуска бота выполнение профиля начнется с выбранной команды.
2b) "Set start point to quest" - устанавливает связь выбранной команды с квестом, который вы веберете в открывшемся окне. (см. свойсто "AssociateMission"). Этой операцией я ни разу не пользовался
2с) "Edit" - открывает окно редактора профилей и выделяет выбранную команду в качестве текущей редактируемой. Если редактор профилей уже открыт, то данная команда выбирается в нем в качестве редактируемой, но фокус не перемещается на окно редактора профилей. Переключиться на него придется вручную.

3. Status...
По нажатию кнопки "Status..." (На рисунке обозначено "3" в зеленой рамке) открывается выпадющее меню, в котором можно:
3a) "Reset complited" - сбрасывает все выполненные команды профиля. Эту операцию можно выполнить только если бот остановлен (т.е. НЕ производится выполнение Quester-профиля). После запуска бота выполнение профиля начнется сначала.
3b) "Save..." - сохранить прогресс выполнения профиля в файл с расширением .bin (состояние выполнен/невыполнен для каждой команды, и текущую активную команду(или несколько команд)).
3c) "Load..." - загрузить ранее сохраненный прогресс выполнения профиля из файла с расширением .bin.
3d) "Resend actions to cliens" - операция, используемая только в режиме "Multi Bots" из экземпляра Astral'а, выполняющего роль Сервера. Она принудительно отправляет текущую исполняемую команду на исполнение экземплярами Astral'а, являющимися клинетами.

Когда профиль загружен, его выполнение запускается и приостанавливается по нажатию на кнопку "Play".

Панель Options Quester'a

Вернемся на главную панель Бота (нажмите иконку домика вверху окна, стрелку "<=" или слово "Main").
2017-10-23_Quester_Options_General.png
По нажатию на кнопку "Options" открывается панель в которой на вкладке "General" можно задать:
  1. Включить/отключить автоматическую закупку зелий исцеления и их количество. Для корректной работы в свойствах Quester-профиля должен быть заполнен список продавцов ("Vendors").
    Заявлено, что приобретаться будут лучшие зелья, но с этим похоже проблемы. У меня приобретает низкоуровневый мусор. Если потребность в зельях существует, то лучше в Quester-профиле добавить необходимое действие.
  2. Включить/отключить автоматическую закупку аптечек и их количество. Работает нормально.
  3. Задает количество свободных ячеек в инвентаре, при достижении которого бот пытается вернуться к ближайшему продавцу для продажи лута. Для корректной работы в свойствах Quester-профиля должен быть заполнен список продавцов ("Vendors").
  4. Включает/отключает поиск ближайшего продавца для продажи ему лута, в зависимости от количества свободного места в инвентаре, выраженное в %.
  5. Включает/отключает режим ожидания на костре в случае если персонаж ранен или имеет неполную шкалу здоровья. Кране рекомендуется отключать опцию при прохождении подземелий вместе с живыми игроками.
Групповой режим "Multi bots"
В панели "Options" на вкладке "Multi bots" активируется групповой режим Quester'a. Для этого Вам необходимо иметь элитную подписку и достаточно мощный компьютер, для запуска нескольких экземпляров Astra'a и игрового клиента Neverwintr'a. Обсуждение режима здесь: Multi-Bots mode. Посмотреть как это работает можно на youtube
Spoiler: [+]
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Thu Dec 21, 2017 7:39 am, edited 1 time in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Редактор Quester'a. Описание интерфейса.

Post by michaelprog »

Редактор Quester'a. Описание интерфейса.
2017-10-22_22-41-07.png
Основную часть Окна редактора профилей Quester'а занята тремя вкладками:
1) Actions - Основная вкладка, содержащая последовательность команд (или действий) в виде дерева, состовляющих профиль ("Actions" слева) и настроек выделенной команды ("Action Edition" справа).
2) Profile - Вкладка, содержащая основные переменные, определяющие работу профиля ("General" слева), списки продавцов (вкладка "Vendors" справа), игнорируемых мобов (вкладка "BlackList" справа), областей Mapper'а (вкладка "Custom Regions" справа или Коллекция "Custom Regions" в группе свойств "General" слева).
3) Options - для задания сочетаний быстрых клавиш к вставке определенных действий в дерево профиля(Action).

Назначение кнопок, смысл которых очевиден ("New", "Load", "Save", "Save as"), описывать не буду.
"Show Mapper" открывает в отдельном окне Mapper - схематичное отображение местности вокруг персонажа.

Вкладка "Actions"
Основная работа с профилем ведется на вкладке "Actions".

Список команд (Actions) и операции с ними
Слева находится список команд (Actions), последовательность которых определяет действия Персонажа в игре. Для краткости совокупность команд будем называть "скрипт". В дальнейшем во избежание разночтений я буду использовать английский термин Action для обозначения любой команды Astral'а, которая может быть включена в скрипт.

Под списком Actions находятся кнопки:
  1. Add action ... - данная кнопка добавляет в список новую команду (до или после выделенной в списке команды, или в конец списка). Место вставки новой команды можно изменить если нажать на стрелку на кнопке.
    • after selected - добавляет новую команду сразу после выбранной в момент вставки. Если перед вставкой был выбран ActionPack, новая команда будет добавлена во-внутрь выбранного ActionPack'a.
    • befor selected - добавляет новую команду непосредственно перед выбранной в момент вставки. Если перед вставкой был выбран ActionPack, новая команда будет добавлена во-внутрь выбранного ActionPack'a
    • at the end - добавляет новую команду в конец списка команд того уровня к которому относится выбранная. Если выбранная команда находится в ActionPack'e, то новая команда будет добавлена в конец списка команд этого же ActionPack'a, то есть уровень вложенности у выбранной до вставки команды и новой команды будет одинаковым. На рисунке выше выбрана команда "East_Side", вложенная в ActionPack "Grind <Soshenstar_river>". При добавлении в режиме "at the end" новая команда будет вставлена во внутрь блока "Grind <Soshenstar_river>" после команды "Return <Nayanzaru>"
  2. Remove - удаляет выбранную команду из списка.
  3. Set Start Point - устанавливает выбранную команду в качестве активной в панели Main Quester'a. При запуске бота выполнение профиля начнется с данной команды.
Над командами в списке Actions можно совершать несколько действий:
  1. Копировать - для этого нужно выделить команду в списке и нажать правую кнопку мыши и выбрать "Copy" в контекстном меню.
  2. Вставить скопированную команду - для этого нужно сначала скопировать необходимую команду из списка как указано выше, а затем нажать на кнопку Add action ..., расположенную под списком.
  3. Перемещать - для этого нужно выделить команду в списке и нажать левую кнопку мыши и не отпуская перетащить на другую команду, после которой вы хотите разместить перемещаемую команду, отпустить левую кнопку мыши и подтвердить действие в открывшемся диалоговом окне.
    Чтобы переместить любую команду в ActionPack, целевую команду следует перетащить на него и после подтверждения перемещения во втором диалогом окне нажать "Yes". При нажатии "No" перемещаемая команда будет размещена ПОСЛЕ ActionPack'a.
Свойства команды (Action Edition)
Справа отображаются индивидуальный настройки команды, выбранной в списке (Actions).
  • Вкладка "General" содержит текстовые и числовые поля, а также флаги (свойства со значениями Истина/Ложь - True/False), определяющие поведение команды. Более подробно общие для всех команд свойства, рассмотрены здесь.
  • Вкладка "Conditions" содержит совокупность условий, в зависимости от выполнения которых команда запускается или игнорируется. Об условиях подробнее здесь ТЫНЦ.
  • Вкладка "HotSpots" становится доступна лишь для нескольких типов команд и содержит координаты точек, которые персонаж должен обойти при выполнении данной команды. К таким командам относится Grind, InteractNode, Interact NPS.
Редактирование команд в XML (Для продвинутых)
Spoiler: [+]
Продвинутые разработчики профиля могут редактировать отдельные команды и профиль в исходном формате - в XML.
Для редактирования команды нужно выполнить следующие действия:
Нажмите ПКМ на соответствующей команде и выбрерите в контекстном меню пункт "XML Edit (Advanced)".
Image
  1. В открывшемся редакторе XML, выполните необходимые вам манипуляции с XML-кодом.
    Если программа для открытия XML по-умолчанию не задана, то XML-под будет открыт в интернет браузере, и внести необходимые изменения вы не сможете.
  2. Сохраните изменения в редакторе XML.
  3. Подтвердите внесенные изменения в QuesterEditor'e нажав кнопку "Valid"
    Image
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Wed Jun 20, 2018 9:20 am, edited 7 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Основные свойства команд (действий, Action'ов)

Post by michaelprog »

Основные свойства команд (действий, Action'ов):
2017-10-23_16-00-21.png
ActionID - уникальный идентификатор команды в Quester-профиле. Может использоваться в команде(Action) "GoToAction", меняющей последовательность выполнения команд, путем принудительного перехода к исполнению команды, заданной посредством ActionID.

Disabled - флаг который включает или выключает команду. Если Disabled=True данная команда (Action, ActionPack) будет пропущена. Управление флагом не возможно из скрипта поэтому он имеет отладочный характер во время написания скрипта.

OverrideName - это поле имеет характер комментария, и используется для описания назначения команды. Оно будет отображаться в основной панеле Quester'a "Display mode" установлено в "Action Name". Eсли поле не заполненно то в списке команд вы увидите стандартное название команды, сгенерированное ботом.

AssociateMission - идентификатор игрового задания (квеста, задачи, подзадачи) с выполнением которого связано данная команда(Action). Помимо информационной роли может нести и управляющую нагрузку.
Если свойство задано, то команда (Action, ActionPack) запускается только если соответствующий квест есть в списке задач персонажа и не завершена.
О структуре квестов (задач) в Neverwinter'е и состояниях их выполнения читай под спойлером.
Spoiler: [+]
Структура квестов (задач) в Neverwinter'е
В общем виде квеcт имеет древовидную структуру. Для выполнения квеста может потребоваться выполнить одну из нескольких подзадач, или все подзадачи одновременно, или последовательную цепочку подзадач.
Подзадачи, могут становится доступны сразу при получении квеста, или при наступлении определенного события - тригера (например, истечение таймера или перемещении персонажа в определенную область). В случае цепочки подзадач, каждая следующая становится доступна при выполнении предыдущей задачи в цепочке.
Квесты часто организованы в виде сочетания вышеуказанных вариантов, когда цепочка подзадач, активирует несколько параллельных подзадач, или выполнение одной из альтернативных подзадач активирует следующую подзадачу и аннулирует альтернативные подзадачи квеста.

Идентификаторы задач(подзадач) имеют текстовый вид. Идентификатор подзадачи пишется через "\" после задачи к которой она относится. Например, Az_Ice_Delve_Frozen_Heart_Om - основная задачав подземелье "Ледяное сердце", а Az_Ice_Delve_Frozen_Heart_Om\Kill_Grast - подзадача "Убить Граста Граткранчера", у которой в свою очередь есть несколько подзадач (Grast, Kill_Orb1, Kill_Orb2 и т.д.).
Обратите внимание, подзадачи, которые отображаются в игре в проводнике задач имеют локализованное описание (Оно же будет показано в главной панеле Quester'а, если "Display mode" установлено в "Associated mission"). В квадратных скобках отображается внутриигровой идентификатор квеста, а в круглых - статус выполнения задачи (подзадачи).
2017-10-23_09-13-56.png
Как можно видеть на рисунке в окне выбора Квестов можно отобразить только активные квесты "Normal" (присутствующие в списке заданий персонажа), Открытые квесты "Open"(это различные героические встречи на открытых картах и локальные квесты в закрытых инстансах), а также выполненные квесты "Complited".

Astral различает несколько состояний выполнения квестов:
  • HaveQuest - Квест присутствует в списке заданий персонажа.
  • HaventQuest - Квест отсутствует в списке заданий персонажа. HaveQuest и HaventQuest взаимоисключают друг друга.
  • InProgress - Квест присутствует в списке заданий персонажа и находится в процессе выполнения (не завершен), т.е. (HaveQuest=True) И (Complited=False).
  • Succeeded - Квест присутствует в списке заданий персонажа, завершен и не сдан NPC. Равносильно (HaveQuest=True) И (Complited=True)
  • Complited - Квест успешно завершен. Это состояние неоднозначно, поскольку квест может быть успешно выполнен, но не сдан (Succeeded) NPC(присутствует в списке заданий, т.е. HaveQuest=True) либо уже сдан NPC (отсутствует в списке заданий, т.е. HaventQuest=True).
  • Uncomplited - Квест НЕ завершен И никогда не был сдан NPC. Это состояние неоднозначно, поскольку квест может как отсутствовать в списке заданий (т.е. (HaventQuest=True)И(Complited=False), так и содержаться в списке заданий и находиться в процессе выполнения (т.е. (HaveQuest=True)И(InProgress=True))
.
PlayWhileMissionUnsuccess - флаг работающий в паре со свойством AssociateMission , который будучи установленным перезапускает команду (Action, ActionPack) после её выполнения, если связанный квест не будет завершен (успешен или провален - без разницы).
Здесь следует отметить, что проверка на наличие AssociateMission в журнале заданий персонажа производится ДО запуска команды на исполнение. Проверка успешности AssociateMission при установленном флаге PlayWhileMissionUnsuccess=True производится ПОСЛЕ выполнения команды (Action, ActionPack), и если AssociateMission не завершена, то выполнение команды запускается снова и снова.
Почему я предпочитаю не использовать AssociateMission описано под спойлером.
Spoiler: [+]
  1. AssociateMission не гибкое средство, вызывающей в некоторых случаях ошибки в логике Quester-профиля. Например, распространенная ситуация когда в квесте есть подзадача "Войти в комнату с босом", которая связана с командой(Action) "InteractSpecificNode", активирующей дверь перед босом и переносящая персонажа в закрытую комнату со злодеем. После ее выполнения становится доступна подзадача "Убить боса", связанная с другой командой "Grind". И все работает хорошо, до того момента, как Бос убивает вашего персонажа. После возрождения персонажа Бот зациклится, потому-что подзадача "Войти в комнату с босом" уже выполнена и бот пропускает "InteractSpecificNode", активирующей дверь перед босом, соответственно попасть к нему в комнату не получается. Тут не помогут ни сброс состояния выполнения профиля (Status > Reset Complited), ни ручное выставления текущей команды (Selected aсtions > Set Start Point). Предсказать такое поведение довольно сложно, даже имея опыт в создании Quester-профилей. В описанной ситуации ни в коем случае нельзя привязывать команды к промежуточным миссиям-тригерам.
    Несколько раз попавшись на подобных ошибку я предпочитаю отказаться от AssociateMission в пользу другого предсказуемого и более гибкого инструмента - условия QuestInfo.
  2. AssociateMission привязывается только к одной задаче(подзадаче). Криптики ленивые и дейлики очень часто являются полным клоном сюжетных квестов, поэтому один и тот же набор команд(Action) может использоваться и для прохождения сюжетного квеста, и для выполнения дейлика. Однако они имеют различные идентификаторы, поэтому привязка через AssociateMission не позволит повторно использовать отлаженную последовательность команд и её придется "копипастить" и перепривязывать.
    Однако, повторного использования можно добиться если использовать несколько условий QuestInfo и установить команде флаг OnlyOneConditionMustBeGood=True, но об этому ниже.
    Похожая ситуация возникает, когда для выполнения нескольких разных заданий приходится выполнять одно и то же действие (Например, сходить и зачистить какой-либо инст, или убить несколько определенных мобов и собрать c них N квестовых итемом и т.п.). В этой ситуации AssociateMission нам тоже не поможет, и снова выручает несколько условий QuestInfo и установка на команде флага OnlyOneConditionMustBeGood=True.
  3. Кроме того, в процессе выполнения скрипта в главном окне Astral корректно отображает названия только тех миссий, которые есть в списке задач персонажа в игре, а после сдачи квеста вместо описания команды будет отображаться "Unknown mission", что мешает ориентироваться в процессе выполнения профиля.
  4. Наконец, задание AssociateMission идентично проверке пары условий QuestInfo (HaveQuest=True) И (InProgress=True), проверить другие варианты состояния выполнения задачи с его помощью нельзя.
Флаги, управляющих повторением (перезапуском) команды
В свойствах команды (Action, ActionPack) есть три флага, управляющих повторением (перезапуском) команды после её завершения.
  • PlayWhileMissionUnsuccess - ДО выполнения команды проверяется AssociateMission, и если связанная миссия не завершена, то команда запускается, а в противном случае - пропускается.
  • Loop - ПЕРЕД выполнением команды проверяется соблюдение условий, заданных на вкладке "Conditions", и если они выполняются - команда запускается.
  • PlayWhileConditionsAreOk - В ТЕЧЕНИЕ выполнения команды проверяется соблюдение условий, заданных на вкладке "Conditions", и как только условия не соблюдаются - команда прерывается и считается выполненной. Прерывание выполнения команды производится ВСЕГДА. В ТЕЧЕНИЕ означает проведение проверки ДО, ВО ВРЕМЯ и ПОСЛЕ выполнения команды. После завершения команды снова проверяется истинность условий с вкладки "Conditions", и при их соблюдении команда должна запускаться повторно. Но так происходит не всегда (закономерность мною не установлена), поэтому для гарантированного зацикливания команды я устанавливаю оба флага, и Loop, и PlayWhileConditionsAreOk.
Разница между Loop и PlayWhileConditionsAreOk в следующем. Если в процессе выполнения команды совокупность условий даст ложный результат, то при установленном Loop выполнение команды продолжится до завершения (всех команд входящих в ActionPack), а PlayWhileConditionsAreOk сразу же прервет выполнение, даже если часть команд в ActionPack не была выполнена.

OnlyOneConditionMustBeGood - флаг управляет правилом проверки списка условий, заданных на вкладке "Conditions".
Если OnlyOneConditionMustBeGood=False, то совокупность условий из списка "Conditions" будет истиной, если ВСЕ условия истины.
Если OnlyOneConditionMustBeGood=True, то совокупность условий из списка "Conditions" будет истиной, если истино ЛЮБОЕ из условий, у которых Loked=False.

Здесь следует отметить, что каждое условие на вкладке "Conditions" имеет флаг Loked (по-умолчанию равный False). Если на условии флаг Loked=True, то условие всегда должно быть истинным, чтобы вся совокупность условий была истиной, независимо от значения флага OnlyOneConditionMustBeGood у данной команды.
Рассмотрим несколько примеров (под спойлером).
Spoiler: [+]
Для наглядности условие с Loked=False будет записаны в круглых скобках (УСЛОВИЕ_1), а с Loked=True - в квадратных скобках [УСЛОВИЕ_1]:
[b][u]Пример 1[/u][/b] wrote:
  • УСЛОВИЕ_1(Loked=False)
  • УСЛОВИЕ_2(Loked=False)
  • УСЛОВИЕ_3(Loked=False)
  • УСЛОВИЕ_4(Loked=False)
В данном случае при PlayWhileConditionsAreOk=False совокупность условий будет проверяться по правилу И:
(УСЛОВИЕ_1) И (УСЛОВИЕ_2) И (УСЛОВИЕ_3) И (УСЛОВИЕ_4) - Истино, если ВСЕ условия истины.

При PlayWhileConditionsAreOk=True совокупность условий будет проверяться по правилу ИЛИ:
(УСЛОВИЕ_1) ИЛИ (УСЛОВИЕ_2) ИЛИ (УСЛОВИЕ_3) ИЛИ (УСЛОВИЕ_4) - Истино, если хотя бы одно условие истино.
[b][u]Пример 2 [/u][/b] wrote:
  • УСЛОВИЕ_1(Loked=True)
  • УСЛОВИЕ_2(Loked=False)
  • УСЛОВИЕ_3(Loked=True)
  • УСЛОВИЕ_4(Loked=False)
В данном случае при PlayWhileConditionsAreOk=False ничего не меняется, совокупность условий будет проверяться по правилу И:
{[УСЛОВИЕ_1] И [УСЛОВИЕ_3]} И {(УСЛОВИЕ_2) И (УСЛОВИЕ_4)} - Истино, если ВСЕ условия истины.

При PlayWhileConditionsAreOk=True совокупность условий будет проверяться по смешанному правилу И/ИЛИ:
{[УСЛОВИЕ_1] И [УСЛОВИЕ_3]} И {(УСЛОВИЕ_2) ИЛИ (УСЛОВИЕ_4)} - Истино, если истины условия 1, 3 и хотя бы одно из условий 2 и 4.
[b][u]Пример 3[/u][/b] wrote:
  • УСЛОВИЕ_1(Loked=True)
  • УСЛОВИЕ_2(Loked=True)
  • УСЛОВИЕ_3(Loked=True)
  • УСЛОВИЕ_4(Loked=False)
В данном случае независимо от значения флага PlayWhileConditionsAreOk совокупность условий будет проверяться по правилу И
{[УСЛОВИЕ_1] И [УСЛОВИЕ_2] И [УСЛОВИЕ_3]} И {(УСЛОВИЕ_4)} - Истино, если ВСЕ условия истины.
[b][u]Пример 4[/u][/b] wrote:
  • УСЛОВИЕ_1(Loked=True)
  • УСЛОВИЕ_2(Loked=True)
  • УСЛОВИЕ_3(Loked=True)
  • УСЛОВИЕ_4(Loked=True)
В данном случае при PlayWhileConditionsAreOk=False ничего не меняется, совокупность условий будет проверяться по правилу И:
{[УСЛОВИЕ_1] И [УСЛОВИЕ_2] И [УСЛОВИЕ_3] И [УСЛОВИЕ_4]} - Истино, если ВСЕ условия истины.

И вот мы подкрались к случаю странного поведения бота, при котором проверка ВСЕГДА даст ложный результат, даже если все из условий 1-4 будут истины:
{[УСЛОВИЕ_1] И [УСЛОВИЕ_3] И [УСЛОВИЕ_2] И [УСЛОВИЕ_4]} И {ПУСТОЕ_МНОЖЕСТВО_УСЛОВИЙ}.
По-видимому в проверке участвует ПУСТОЕ_МНОЖЕСТВО_УСЛОВИЙ с опушенным флагом Loked, проверка которого по правилу ИЛИ всегда дает ложь.
MaxRunningTime - определяет время выполнение команды в секундах. По умолчанию значение установлено в 0, что означает отсутствие временного ограничения. В противном случае команда (Action, ActionPack) выполняется заданное количество секунд, после чего считается выполненным.
Spoiler: [+]
Следует отметить неприятную особенность взаимодействия данного свойства с флагом Loop. Если Loop=True и задано определенное время действия, то не стоит ожидать завершения работы команды после истечение времени. Вместо этого таймер обновится и команда будет выполняться заново. Если Вам необходимо зациклить команду, но ограничить время его выполнения, то проверку условия повторения следует задать этой команде, а саму её поместить в ActionPack с ограничением времени, но без цикла.

code: Select all

ActionPack(MaxRunningTime=100; Loop=False)
		SomeAction(Loop=True)
OnlyDoneByServer - флаг, который используется ТОЛЬКО в режиме "Multi Bots". Если он НЕ установлен (False) команда будет передана на исполнение ботам-клиентам.
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Tue May 29, 2018 1:48 pm, edited 9 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Команда ActionPack

Post by michaelprog »

Команда ActionPack
Из всего списка команд выделяется одна, которая служит средством группировки других команд в блоки - "ActionPack".
По-умолчанию команды, помещенные в один ActionPack, выполняются ПОСЛЕДОВАТЕЛЬНО, то есть вторая и каждая последующая команда начинает выполняеться только тогда, когда завершилась предыдущая.
В приведенном ниже примере, команда "MoveTo" будет выполняться только после того, как завершится команда "JoinMatch".
2017-11-23_19-49-30.png
ActionPack'и могут иметь неограниченную вложенность, то есть один ActionPack может быть вложен в другой.
На иллюстрации команды JoinMatch, MoveTo и ActionPack "Pack_2" вложены в ActionPack c названием "Pack_1".

Свойство (настройки) команды ActionPack:
  • SimultaneousAction - флаг, установка которого позволяет выполнять все команды включенные в блок ПАРАЛЛЕЛЬНО.
    Все команды, помещенные в ActionPack, становятся активными, персонаж совершает действия, необходимые для выполнения первой активной команды (включая перемещения по карте) и попутно совершает действия, необходимые для выполнения других команд (взаимодействует с объектами, формит мобов, собирает лут и т.д.).
  • Группа команд MultiBots задает особенности взаимодействия бота-сервера с ботами-клиентами при выполнении команд, входящих в данный "ActionPack". Комментарии Разработчика по данным настройкам под спойлером.
    Spoiler: [+]
    Jarod46 wrote:A first test version of asynchronous mode is available, this mode allow to separate bots actions.
    This is a property for action packs, when "AsynchronousMode" is enabled, server should send the actionpack to assigned clients with "BotsAssignment" property. It can be all bots, including server, or just specific one/several.
    When an asynchronous actionpack is assigned to a bot, it should work independently (like checking conditions), until actionpack is completed.
    Probably some options are missing, suggestions are welcome, but for now I need feedback for current implementation.
    Have to know:
    -If you assign an actionpack in another actionpack already assigned, it will don't work, same thing if you put a synchronous actionpack in an asynchronous one, it will be just ignored, parent have priority.
    -obviously put clients actionspack before server actions, else client will don't receive any tasks until server finish its own.
    • AsynchronouseMode - флаг, при установке которого данный ActionPack ЦЕЛИКОМ передается на выполнение ботам-клиентам, заданным в свойстве BotAssignment.
      В противном случае обработку условий выполнения ActionPack'a и вложенных в него команд будет производить бот-сервер, а ботам клиентам будут передаваться только отдельные команды, помещенные в данный ActionPack.
      Следует отметить, что ActionPack с установленным флагом AsynchronouseMode не должен иметь вложенных ActionPack'ов, поскольку они будут проигнорированы.
    • BotAssignment - список ботов, которые будут выполнять данный ActionPack. Для изменения списка нужно нажать кнопку "..." и в открывшемся окне отметить нужных ботов и нажать "ОК". Это может быть бот-сервер (Server), а также один или несколько ботов-клиентов (Client).
      Когда ActionPack передается ботам-клиентам для выполнения с установленным флагом AsynchronouseMode, то данный ActionPack передается ЦЕЛИКОМ со всем входящими в него командами. При этом каждый бот-клиент выполняет его самостоятельно, то есть САМ проверяет условия выполнения ActionPack'a и входящих в него команд.
      Для того чтобы бот-сервер дождался завершения ботами-клиентами ActionPack'ов, выполняемых в асинхронном режиме. после него в скрипт следует поместить команду WaitForSync.
    • OnlyDoneByServer - флаг, который используется ТОЛЬКО в режиме "Multi Bots". Если он НЕ установлен (False) команда будет передана на исполнение ботам-клиентам.
Команда ActionPack завершается как только все команды включенные в блок будут выполнены.
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Sat Feb 24, 2018 6:37 am, edited 7 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Команды перемещения

Post by michaelprog »

Команды перемещения

Существует несколько команд, назначение которых в перемещении персонажа в заданные координаты или по замкнутому контуру. К ним относятся:
1. MoveTo - перемещение персонажа в точку с координатами, заданными в свойстве Position.
Spoiler: [+]
Свойство (настройки) команды MoveTo:
  • Position - Координаты в трехмерном пространстве игры, определяющие место в которое персонажу необходимо переместиться.
  • Range - определяет дистанцию на которую персонажу достаточно приблизиться к целевой позиции, чтобы команда была выполненной.
Команда завершается как только персонаж переместился в заданную точку "Position".
2. RandomMoveTo - случайное перемещение персонажа в одну из точек, заданных в свойстве-коллекции "TargetLocations".
Spoiler: [+]
Свойства (настройки) команды RandomMoveTo:
  • TargetLocations - набор (коллекция) точек в трехмерном пространстве игры, из числа которых будет выбрана целевая точка для перемещения к ней.
  • Range - определяет дистанцию на которую персонажу достаточно приблизиться к целевой позиции, чтобы команда была выполненной.
Команда завершается как только персонаж переместился в одну из точек, заданных "TargetLocations".
Если эту команду зациклить (например, флагом Loop) эта команда станет аналогом команды Grind, но персонаж обойдет точки в случайном порядке, а не в заранее заданном.
3. Grind - последовательное перемещение персонажа по точкам, заданным на вкладке "HotSpots".
Spoiler: [+]
Точки обходятся в том порядке, в котором они заданы на вкладке "HotSpots".
Для внесения координаты в список нужно подвести персонажа в заданную точки, открыть редактор на вкладке "HotSpots", а потом:
- нажать F5 для добавления координат точки в конец списка;
- нажать F6 для добавления координат точки непосредственно после выделенной в списке точки.
Переупорядочить точки можно только при ручном редактировании XML-кода команды.
2017-10-24_12-10-49.png
Команда НИКОГДА не завершается самостоятельно. Особенностью данной команды в том, что по-умолчанию она выполняется бесконечно. Для её прекращения необходимо ограничить время её выполнения "MaxRunningTime" или задать условия на вкладке "Conditions"
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Sun Nov 26, 2017 8:33 am, edited 5 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Команды взаимодействия

Post by michaelprog »

Команды взаимодействия

Существует несколько команд, назначение которых во взаимодействии персонажа с игровыми объектами и персонажами. К ним относятся:
1. InteractSpecialNode - Взаимодействие с единичным игровым объектом, таким как дверь, рычаг, сундук, камень и т.д.
Spoiler: [+]
2017-10-24_12-05-31.png
Свойства (настройки) команды InteractSpecialNode:
  • Position - координаты объекта, с которым необходимо взаимодействовать. Координаты задаются одновременно с добавления команды в скрипт по нажатию кнопки "ОК (F12)" в диалоговом окне. В этот момент В ИГРЕ объект взаимодействия должен быть в фокусе персонажа.
    Изменить координаты после добавления команды в скрипт теоретически можно с помощью диалогового окна, однако, задать координаты объекта по нажатию "Use player position" нельзя, т.к. введенные координаты будут хоть немного отличаться координат объекта и взаимодействие не произойдет. Задать новые координаты объекта по нажатию "Use target position" у меня не получается, т.к. фокус в игре сбивается в момент переключения на редактор профилей.
  • InteractTime - Время взаимодействия с объектом в миллисекундах (мс). По умолчанию составляет 1000 мс.
  • SkipTimeout - Время в течение которого персонаж будет производить попытку взаимодействовать с объектом, измеряемый в миллисекундах (мс). По-умолчанию составляющий 0 мс.
    Очень важно изменить этот параметр на отличное от 0 значение. В большинстве случает взаимодействие с объектом производится единственный раз, и повторное взаимодействие с объектом НЕВОЗМОЖНО. Например, сломать дверь в Cloack_Tower.
    Если взаимодействие с объектом уже было произведено и SkipTimeout=0, то при попытке взаимодействия персонажа с этим объектом скрипт зависнет.
  • Dialogs - последовательность ответов, которые для успешного взаимодействия с объектом персонажу необходимо выбрать в диалоговом окне, открывающемся при взаимодействии с данным объектом.
    Чаще всего заполнять не требуется. Если же взаимодействие открывает диалоговое окно, а необходимых ответов не будет в Dialogs, фактически взаимодействие будет провалено, а команда будет завершена и считаться выполненной.
    Примером является диалоговое окно, открывающееся при попытке открыть сундук в подземелье и требующее подтвердить использование ключа.
    2017-10-24_17-58-16_Dialogs.png
    Для добавление необходимых ответов в коллекцию Dialogs необходимо открыть редактор коллекции, нажав "..." напротив данного свойства, и добавить нужные ответы нажимая на кнопку "Add" в открывшемся окне "Dialog Editor". В это время В ИГРЕ должен быть открыт соответствующий диалог, в противном случае в редакторе в окне "GetAnId" вы увидите пустой список вариантов диалога.
  • RewardItemChoose - идентификатор объекты-награды, который следует выбрать персонажу из нескольких альтернативных вариантов, предоставляемых при взаимодействии с объектом.
    Этот идентификатор можно задать после добавления команды в скрипт нажав "..." и выбрав его в открывшемся диалоговом окне. При этом В ИГРЕ должно быть открыто окно выбора награды.
  • LocalizedName - необязательное текстовое наименование объекта, которое используется для формирования автоматического названия действия. В большинстве случаев заполняется Astral'ом
  • NodeCategory - необязательное текстовое описание типа объекта.
Команда завершается как только персонаж произвел взаимодействие с объектом в течение времени "InteractTime" или истекло время, заданное "SkipTimeout". Если взаимодействие прервано до истечения "InteractTime", например, атакой мобов, то после окончания боя персонаж повторит попытку взаимодействия.
2. InteractNode - Взаимодействие с неопределенным набором игровых объектов, таким как дверь, рычаг, сундук, камень.
Spoiler: [+]
2017-10-24_12-09-27.png
Перечень объектов для взаимодействия в общем случае не определен (за исключением WhileList), вместо этого в свойствах команды на вкладке "HotSpots" задаются координаты точек в пространстве игры, перемещаясь между которыми бот производит поиск объектов для взаимодействия.
Изменение списка координат на вкладке "HotSpots" производится так же как для команды "Grind".
Свойства (настройки) команды InteractNode:
  • Dialogs - последовательность ответов, которые для успешного взаимодействия с объектом персонажу необходимо выбрать в диалоговом окне, открывающемся при взаимодействии с данным объектом.
  • BlackList - список (коллекция) координат объектов, с которым взаимодействие ЗАПРЕЩЕНО. Для добавление координат объекта нужно открыть редактор коллекций, нажав "..." напротив соответствующего свойства. Затем нажать кнопку "Add" (откроется модальное окно), а В ИГРЕ сфокусировать персонажа на объекте взаимодействия и нажатию кнопки "ОК (F12)" диалогового окна.
  • WhiteList - список (коллекция) координат объектов, с которыми и только с которыми взаимодействие РАЗРЕШЕНО. Редактирование списка координат объектов производится так же как для BlackList
    Если список содержит хотя бы один объект, взаимодействие с другими объектами ЗАПРЕЩЕНО.
  • ReactionRange - дистанция от персонажа в пределах которой производится поиск объектов для взаимодействия.
  • OneInteractionByNode - Флаг, запрещающий повторное взаимодействие с объектом. По умолчанию опущен (False), т.е. повторное взаимодействие разрешено.
  • InteractTime - Время взаимодействия с объектом в миллисекундах (мс). По умолчанию составляет 1000 мс.
  • LocalizedName - необязательное текстовое наименование объекта, которое используется для формирования автоматического названия действия. В большинстве случаев заполняется Astral'ом
  • NodeCategory - необязательное текстовое описание типа объекта.
  • OnlyDoneByServer - флаг, который используется ТОЛЬКО в режиме "Multi Bots". Если он НЕ установлен (False) команда будет передана на исполнение ботам-клиентам.
Команда завершается как только персонаж произвел взаимодействие с хотя бы с одним объектом в течение времени "InteractTime". Если необходимо произвести взаимодействие с несколькими объектами, выполнение команды необходимо зациклить (например, флагом "Loop"). Если взаимодействие прервано до истечения "InteractTime", например, атакой мобов, то после окончания боя персонаж повторит попытку взаимодействия.
3. InteractSpecialNPC - Взаимодействие с конкретным игровым персонажем (NPC).
Spoiler: [+]
2017-10-24_13-35-45.png
Свойства (настройки) команды InteractSpecialNPC:
  • Position - координаты NPC, с которым необходимо взаимодействовать. Координаты задаются одновременно с добавления команды в скрипт по нажатию кнопки "ОК (F12)" в диалоговом окне. В этот момент В ИГРЕ целевой NPC должен быть в фокусе персонажа.
    С изменением координат те же проблемы, что и в команде InteractSpecifiNode - теоретически можно. но на практике легче вставить новую команду а неудачную удалить.
  • Tolerance - радиус ограничивающий область вокруг координат Position, пределах которого бот будет искать NPC для взаимодействия с ним.
    По умолчанию равно 3. Если целевой NPC имеет склонность к блужданию по местности, необходимо значение Tolerance увеличить.
  • Dialogs - последовательность ответов, которые для успешного взаимодействия с NPC персонажу необходимо выбрать в диалоговом окне, открывающемся при взаимодействии с данным NPC.
  • InteractTime - Время взаимодействия с NPC в миллисекундах (мс). По умолчанию составляет 1000 мс.
  • NPCCostume - необязательное текстовый идентификатор внешнего вида NPC, которое используется ботом для идентификации цели взаимодействия вместе с координатами Position. Изменять не рекомендуется.
  • OnlyDoneByServer - флаг, который используется ТОЛЬКО в режиме "Multi Bots". Если он НЕ установлен (False) команда будет передана на исполнение ботам-клиентам.
Команда завершается как только персонаж произвел взаимодействие с целевым NPC в течение времени "InteractTime". Если взаимодействие прервано до истечения "InteractTime", например, атакой мобов, то после окончания боя персонаж повторит попытку взаимодействия.
4. InteractNPC - Взаимодействие с неопределенным набором игровых персонажей (NPC).
Spoiler: [+]
2017-10-24_17-58-16.png
Перечень NPC для взаимодействия не определен, вместо этого в свойствах команды на вкладке "HotSpots" задаются координаты точек в пространстве игры, перемещаясь между которыми бот производит поиск NPC для взаимодействия.
Изменение списка координат на вкладке "HotSpots" производится так же как для команды "Grind".
Свойства (настройки) команды InteractNode:
  • Dialogs - последовательность ответов, которые для успешного взаимодействия с NPC персонажу необходимо выбрать в диалоговом окне, открывающемся при взаимодействии с ним.
  • ReactionRange - дистанция от персонажа в пределах которой производится поиск NPC для взаимодействия.
  • OneInteractionByNPC - Флаг, запрещающий повторное взаимодействие с NPC. По умолчанию опущен (False), т.е. повторное взаимодействие разрешено.
  • NPCCostume - необязательное текстовый идентификатор внешнего вида NPC, которое используется ботом для идентификации цели. Изменять не рекомендуется.
  • InteractTime - Время взаимодействия с NPC в миллисекундах (мс). По умолчанию составляет 1000 мс.
  • OnlyDoneByServer - флаг, который используется ТОЛЬКО в режиме "Multi Bots". Если он НЕ установлен (False) команда будет передана на исполнение ботам-клиентам.
Команда завершается как только персонаж произвел взаимодействие с хотя бы с одним NPC в течение времени "InteractTime". Если необходимо произвести взаимодействие с несколькими NPC, выполнение команды необходимо зациклить (например, флагом "Loop"). Если взаимодействие прервано до истечения "InteractTime", например, атакой мобов, то после окончания боя персонаж повторит попытку взаимодействия.
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Sun Nov 05, 2017 7:58 am, edited 2 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Команды управления группой

Post by michaelprog »

Команды управления группой

У этой категории я опишу все команды, связанные с формированием или роспуском группы
1. JoinMatch - Команда на вступление в очередь в подземелье или в схватку.
Spoiler: [+]
2017-11-04_14-01-09.png
При её выполнении активируется внутриигровое окно вступления в очередь, отмечаются все подземелья (схватки), заданные свойствами "MatchName" и" AdditionnalMatches", производится постановка в очередь и подтверждение на вступление в подземелье (схватку).
После обновления игры М12b с помощью данной команды можно вступить как в случайную очередь, так и в очередь в конкретное подземелье (схватку).

Свойства (настройки) команды JoinMatch:
  • Random - флаг, определяющий использовать ли режим постановки в СЛУЧАЙНУЮ очередь, появившуюся с обновлением игры M12b, и за прохождение которой выдаются бонусные Астральные алмазы. Случайная очередь выбирается при значении флага "True".
  • MatchName - Идентификатор подземелья или схватки в которую будет вступать бот, для выбора которого нужно нажать кнопку "...", в открывшемся окне "GetAnId" выбрать одну из позиций в списке и нажать кнопку "Select".
    • В случае установки флага Random = False, используется старый режим постановки в очередь, при котором в окне "GetAnId" можно выбрать очередь в конкретное подземелье или схватки. Внешний вид этого окна приведен на иллюстрации выше.
    • В случае установки флага Random = True, используется режим постановки в СЛУЧАЙНУЮ очередь. При этом в окне "GetAnId" отображается другой список очередей:
      2017-11-04_13-57-23.png
  • AdditionnalMatchs - список подземелий (схваток), в одно из которых персонаж встанет в очередь, наряду с подземельем, заданным в свойстве "MatchName".
    Данное свойство используется только при Random = False.
    Редактирование данного списка производится в окне "SelectList", открывающемся по нажатию кнопки "...".
  • TryToReturnBefor - флаг, при установке которого бот покинет все ранее установленные очереди, перед тем как вступать в очереди, заданные текущей командой.
  • PrivateMatch - флаг, при установке которого бот должен вступать в закрытую очередь. Однако с функционированием данной опции существуют проблемы.
    Согласно обсуждениям на форуме данная настройка работает только если включен режим MultiBots.
Команда завершается как только в игре будет загружено соответствующее подземелье (схватка).
2. MakeMatchGroup - Команда, используемая для создание "Группы c запросом на подбор" перед постановкой её в очередь.
Использование данной команды имеет смысл только в режиме MultiBots. Если её не использовать, то все члены группы попадут в разные инстансы и выполнение скрипта прекратится, так как бот-сервер будет ожидать пока боты-клиенты не приблизятся к нему на необходимое расстояние, что, находясь в разных инстансах, сделать невозможно.

3. LeaveMissionMap - Команда на выход из подземелья (схватки) независимо от прогресса его прохождения и местоположения персонажа на карте.
Spoiler: [+]
2017-12-29_15-12-49.png
Свойства (настройки) команды LeaveMissionMap:
  • AbandonToo - флаг, разрешающий выход из подземелья со штрафом в 30 минут на присоединение к очереди в подземелья и схватки.
    Допустимые значения:
    • True - принудительный выход ДО завершения подземелья из подземелья со штрафом в 30 минут. При этом персонаж выходит из очереди на подбор и не может повторно присоединиться к очереди.
      Следует отметить, что если подземелье пройдено (т.е. OpenMission данного подземелья в статусе Succeded), то команда НЕ СРАБОТАЕТ, и персонаж останется в подземелье.
    • False - выход из подземелья БЕЗ согласия на штраф в 30 минут. При этом персонаж покидает инстанс, но продолжает оставаться и в составе "группы" и в составе "группы на подбор". Если подземелье не пройдено (т.е. OpenMission данного подземелья в статусе InProgress), то его дальнейшее прохождение для остальных членов группы блокируется, поскольку группа не может собраться в полном составе в ключевых точках (например, перед боссами).
      Данная команда также сработает если персонаж находится в индивидуальной сюжетной локации, например, в миниподземелье "Кольца ужасов".
4. SpecialAction: LeaveTeam и LeaveMatchGroup - Команды на выход из состава Группы и из состава "Группы с запросом на подбор".
Spoiler: [+]
Собственно это не является самостоятельной командой, а является отдельными режимами работы команды SpecialAction, которые по смыслу необходимо рассмотреть в данном разделе.
Команда "SpecialAction", в зависимости от значения свойства "Action" выполняет разные действия.
  • Если "Action = LeaveTeam" - персонаж выходит из текущей группы, при этом он остается в "Группе с запросом на подбор".
    2017-11-04_16-22-44.png
  • Если "Action = LeaveMatchGroup" - персонаж выходит из "Группы с запросом на подбор". При этом персонаж НЕ должен находиться на карте подземелья или схватки.
    2017-11-04_16-21-43.png
[/list]
Совет wrote:Если после завершения подземелья (схватки) не покинуть текущую "Группу" или "Группу с запросом на подбор", созданные автоматически, то повторная постановка в очередь не удастся. Поэтому я рекомендую профили, предназначенные для прохождения подземелий или схваток завершать группой команд:

code: Select all

LeaveMissionMap (AbandonToo = True)
LeaveMissionMap (AbandonToo = False)
SpecialAction: LeaveTeam
SpecialAction: LeaveMatchGroup
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Sat Feb 24, 2018 6:40 am, edited 9 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Специальные команды

Post by michaelprog »

Специальные команды

1. PickUpMission - команда для взятия задания (квеста) у определенного неигрового персонажа NPC.
Spoiler: [+]
2017-11-04_17-25-33.png
При добавлении данной команды сначала появляется окно выбора задания (квеста) "Get a mission id", в котором содержится список заданий (квестов) из журнала персонажа. Поэтому перед добавления команды "PickUpMission" сначала нужно принять задание к выполнению.
После выбора задания (квеста) появляется диалоговое окно для выбора NPC, выдающего данное задание. Для этого нужно нажать кнопку "ОК (F12)", когда в игре соответствующий NPC будет находится в фокусе персонажа.
2017-11-04_19-12-29.png
При выполнении задания Персонаж перемещается к точке, заданной свойством "GiverPosition" и производит взаимодействие с NPC для получения задания (квеста). Аналогичного результата можно добиться с использованием команды "InteractSpecificNPC", настроив соответствующим образом "Dialogs".

Свойства (настройки) команды PickUpMission:
  • GiverId - Текстовый идентификатор NPC, выдающего задание (квест).
  • GiverPosition - координаты NPC, выдающего задание (квест), в трехмерном игровом пространстве.
    С изменением координат те же проблемы, что и в команде InteractSpecifiNode - теоретически можно. но на практике легче вставить новую команду а неудачную удалить.
  • MissionId - Текстовый идентификатор задания (квеста).
    Задается при добавлении команды. Его можно изменить по нажатию на кнопку "...", выбрав из списка в окне "Get a mission id".
  • SkipOnFail - флаг, при установке которого в значение "True" бот прекратит попытки взятия задания (квеста) после неудачи. Если флаг будет установлен в значение "False" после неудачи бот будет трижды повторять попытки взять квест.
    По этой причине флаг крайне рекомендуется устанавливать в "True".
Команда завершается как только персонаж принимает задание или будут исчерпаны попытки взять задание (квест).
2. TurnInMission - команда сдать задание (квест) определенному неигровому персонажу (NPC).
Spoiler: [+]
2017-11-04_17-27-18.png
Процесс добавления команды аналогичен "PickUpMission": сначала выбирается задание в окне "Get a mission id", а затем - NPC.
Особенность в том, что статус выполнения задания и её наличие в журнале заданий НЕ ПРОВЕРЯЕТСЯ.
При выполнении задания Персонаж перемещается к точке, заданной свойством "GiverPosition" и производит взаимодействие с NPC для завершения задания (квеста).
Аналогичного результата можно добиться с использованием команды "InteractSpecificNPC", настроив соответствующим образом "Dialogs".
Совет wrote:Чтобы избежать ошибок во время выполнения профиля необходимо добавить условие выполнения команды на вкладку "Conditions":

code: Select all

QuestInfo - Succeeded
где:
QuestID = "идентификатор задания (квеста), соответствующий значению поля MissionId"
Tested = Succeeded
Свойства (настройки) команды TurnInMission:
  • GiverId - Текстовый идентификатор NPC, принимающего задание (квест).
  • GiverPosition - координаты NPC, принимающего задание (квест), в трехмерном игровом пространстве.
    С изменением координат те же проблемы, что и в команде InteractSpecifiNode - теоретически можно. но на практике легче вставить новую команду а неудачную удалить.
  • MissionId - Текстовый идентификатор задания (квеста).
    Задается при добавлении команды. Его можно изменить по нажатию на кнопку "...", выбрав из списка в окне "Get a mission id".
Команда завершается как только персонаж производит все необходимые действия для сдачи задания (квеста), даже если они не привели к успеху.
3. ChangeMap - команда Персонажу переместиться на другую карту (локацию).
Spoiler: [+]
2017-11-05_11-13-19.png
При добавлении команды появляется окно сообщений, предлагающее выбрать точку перемещения (точку выхода из текущей локации) и нажать кнопку "OK (F12)".
Затем появляется второе окно сообщений, предлагающее открыть глобальную карту и нажать"OK (F12)", после чего откроется окно со списком доступных карт (локаций) "GenAnId", в котором следует выбрать целевую карту и нажать кнопку "Select".

Свойства (настройки) команды TurnInMission:
  • MapName - Текстовый идентификатор (название) целевой карты (локации), в которую будет перемещен персонаж (если выбор конечной карты производится в один этап).
    Если целевая карта выбирается в два этапа, то этот параметр задает идентификатор части глобальной карты, ограниченной в игре "Лупой" (Долина ледяного ветра, Андердарк или Чалт).
  • SecondMapName - Текстовый идентификатор (название) второй целевой карты (локации). Этот параметр требуется в тех случаях, когда выбор целевой карты (локации) производится в два приема: сначала открывается часть глобальной карты обозначенная в игре "Лупой", а затем - непосредственно выбор целевой карты. Так, например, приходится поступать при перемещении из Протектората в "Кер-Кенниг" или в "Мантол-Деррит" и обратно.
  • DisableVIPTravel - флаг, запрещающий перемещение с использовать ВИП-умения "Призыв указателя". Если флагу присвоено значение "True", то Персонаж НЕ спользует "Путевой указатель", перемещается к точке выхода из карты, заданной свойством "NodePosition" и только после этого переходит на целевую карту (локацию).
    По умолчанию использование "Путевого указателя" разрешено.
    Необходимость установки данного флага обусловлена тем, что при использовании точки выхода открывается та часть глобальной карты, к которой относится текущая локация (например, подкарта "Долины ледяного ветра" при нахождении в "Лонливуде" или в "Долине дворфов"), а путевой "Путевой указатель" ВСЕГДА открывает глобальную карту.
    В результате для перехода из одной карты "Долины ледяного ветра" в другую её часть (например, из "Брин-Шандера" в "Лонливуд") выбор целевой карты производится в один этап (MapName=M10_Az_Dale_Lonelywood), а с использованием "Путевого указателя" выбор целевой карты производится в два этапа (MapName=Az_Dale_Caer_Konig; SecondMapName=M10_Az_Dale_Lonelywood).
  • NodeCategory - необязательное текстовое описание типа точки выхода с текущей карты (локации). Заполняется автоматически при добавлении команды.
  • NodePosition - координаты точки выхода с текущей карты (локации) в трехмерном мире игры. Задаются при добавлении команды.
    С изменением координат те же проблемы, что и в команде InteractSpecifiNode - теоретически можно. но на практике легче вставить новую команду а неудачную удалить.
Совет wrote:При выполнении данной команды не проверяется принадлежность точки перехода к определенной карте (локации). Часто возникает ситуация, когда попытка перехода выполняется на карте, отличной от той, которая использовалась при указании точки перехода.
Например, команда задает условия перехода из "Протектората" в "Шарандар", а персонаж находится в "Кольце ужасов". В такой ситуации персонаж попытается переместиться к координатам, заданным NodePosition, но они будут за пределами карты и после нескольких "самоубийств" из-за застревания бот остановится.
Чтобы подобного не произошло команде необходимо задать условие выполнения на вкладке "Conditions"

code: Select all

CurrentMap Equal Neverwinter_Protectors_Enclave
где: 
MapName = Neverwinter_Protectors_Enclave
Tested = Equal
Команда завершается как только персонаж производит все необходимые действия для перехода на целевую карту (локацию), даже если они не привели к успеху.
4. ChangeInstace - команда Персонажу сменить Инстанс в текущей карте (локации).
Spoiler: [+]
2017-11-05_12-56.png
Под Инстансом понимается экземпляр текущей карты (локации), созданные средствами игры для ограниченного числа игроков (для сюжетный локаций, таких как "Протекторат", "Велоск", "Драконий источник" и т.п. - обычно 20-25 игроков; для подземелий и схваток - 3-5 игроков).

Свойства (настройки) команды TurnInMission:
  • ChangeType - свойство, определяющее критерий выбора Инстанса:
    • FirstAvailable - выбирается первый доступный Инстанс;
    • LargestPopulation - выбирается доступный для перехода Инстанс, на котором находится больше всего игроков;
    • SmallestPopulation - выбирается доступный для перехода Инстанс, на котором находится меньше всего игроков.
Команда завершается как только персонаж успешно сменит Инстанс.
Совет wrote:Ввиду отсутствия доступных Инстансов или таймаута - временного ограничения на переход после загрузки карты или предыдущей смены инстанса, профиль может зациклится на выполнении данной команды вследствие невозможности перехода.
Во избежание подобной ситуации я рекомендую ограничивать срок выполнения данной команды, например, MaxRunninTime = 5
.
5. ChangeProfileValue - изменение некоторых настроек выполнения профиля.
Spoiler: [+]
2017-11-05_20-32.png
Свойства (настройки) команды TurnInMission:
  • Value - текстовое или числовое значение, присваиваемое соответствующему параметру.
    Допустимые значения данного свойства зависят от значения свойства ValueType
  • ValueType - Наименование параметра, изменяемого данной командой. Может принимать следующие значения:
    • DisableMount - запрещает использовать ездовое животное при перемещении персонажа. Допустимые значения поля "Value":
      • True - Использование ездового животного запрещено;
      • False - Использование ездового животного разрешено.
    • KillRadius - расстояние от персонажа, в пределах которого он будет пытаться атаковать врага.
      Допустимые значения поля "Value":
      • любое целое положительно число или ноль.
    • IgnoreCombat - запрещает атаковать врагов при выполнении остальных команд профиля.
      Следует отметить, что запрет не является абсолютным, в случае если в результате атак мобов здоровье персонажа снижается до уровня заданного параметром IgnoreCombatMinPH (значение по-умолчанию в районе 50%), персонаж уничтожает ближайших врагов, а после восстановления уровня здоровья - игнорирует врагов снова.
      Допустимые значения поля "Value":
      • True - предписывает игнорировать врагов;
      • False - предписывает атаковать врагов.
    • IgnoreCombatMinPH - Параметр задает число в % от здоровья чара, ниже которого следует атаковать мобов. Работает в связке с логическим IgnoreCombat. Таким образом, установка его в 100% будет активировать бой при любом чихе, что эквивалентно IgnoreCombat=false, а установка в 0% не запустит бой никогда, что полезно для использования бота как ассистента (подбор лута, смена профессий и тп).
      Спасибо Orion33 за уточнения назначения параметра.
      Допустимые значения поля "Value":
      • целое положительно число в диапазоне от 0 до 100.
    • DisablePet - должно запрещать использование спутника (пета). В таком значении параметра я не уверен, и требуется проверка.
      Допустимые значения поля "Value":
      • True - запрещает использование спутника;
      • False - разрешает использование спутника.
    • AllowPetTraining - должно запрещать обучение спутника (пета). В таком значении параметра я не уверен, и требуется проверка.
      Допустимые значения поля "Value":
      • True - запрещает отправлять спутника на обучение;
      • False - разрешает отправлять спутника на обучение.
    • DisableFollow - флаг, запрещающий в режиме Multi Bots персонажам под управлением ботов-клиентов, следовать за персонажем под управлением бота-сервера.
      Допустимые значения поля "Value":
      • True - запретить ботам-клиентам следовать за ботом-сервером;
      • False - разрешить ботам-клиентам следовать за ботом-сервером.
    • FollowDistance - расстояние, на котором в режиме Multi Bots персонажи под управлением ботов-клиентов, должны следовать следовать за персонажем под управлением бота-сервера.
      Допустимые значения поля "Value":
      • любое целое положительно число или ноль.
    • MinFreeBagsSlots - В значении параметра я не уверен, и требуется проверка.
      Допустимые значения поля "Value":
      • любое целое положительно число или ноль.
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Mon Jan 01, 2018 4:37 am, edited 8 times in total.
michaelprog
Contributor
Contributor
Posts: 602
Joined: Wed Aug 31, 2016 7:32 am

Сервисные команды

Post by michaelprog »

В разработке
Last edited by michaelprog on Sat Nov 25, 2017 6:16 am, edited 2 times in total.
Post Reply