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

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

Mapper и CustomRegion

Post by michaelprog » Sat Oct 28, 2017 8:11 am

Mapper и CustomRegion

Mapper - отдельное окно, в котором схематично отображается окружающее персонажа пространство и пути перемещения, заданные разработчиком скрипта (quester-профиля), другие игроки (белые точки), игровые объекты, с которыми возможно взаимодействие (сундуки, точки проверки талантов и др.).
Mapper_2017-11-24_23-00.png
"Пути перемещения персонажа" используются навигационной подсистемой бота Astral и отображаются в виде последовательности точек в трехмерном пространстве, соединения между которыми определяют возможные направления перемещения персонажа от одной точки к другой.
Несмотря на то, что в окне Mapper'а пути отображаются "сверху" и высота точек не видна, каждая из них имеет трехмерные координаты, что позволяет задавать пути, расположенные на разной высоте в параллельных плоскостях (выше или ниже) не пересекающиеся между собой.
На иллюстрации ниже изображена комната последнего боса из подземелья "Башня плащей" под которой находится винтовая лестница.
Самая маленькая окружность в центре - спиральный путь вниз по лестнице к выходу из подземелья, открывающийся после убийства Боса. Благодаря тому, что точки пути имеют координату "высота", расположенные на разных витках лестницы точки пути не соединяются друг с другом и персонаж не пытается перескочить с одного уровня лестницы на другой, а спокойно бежит по спирали вниз.

Пути бывают двух видов:
  • Двунаправленные пути - позволяют навигационной подсистеме перемещать персонажа в прямом и обратном направлении вдоль пути.
    Двунаправленный путь отображается в Mapper'е в виде красных точек, соединенных красными линиями.
    Чтобы задать двунаправленный путь, нужно активировать в окне Mapper'а опцию "Enable mapper" и перемещать персонажа в игре в необходимом вам направлении. Точки пути, координаты которых отличаются незначительно, автоматически соединяются между собой. Двунаправленный путь, пересекающийся или сближающийся с другим двунаправленным или однонаправленным путем на одной высоте, будут соединены между собой.
  • Однонаправленные пути (Undirectional) - позволяют навигационной подсистеме перемещать персонажа только в одном направлении, которое использовалось при формировании пути. Для перемещения в обратном направлении соответствующая последовательность точек однонаправленного пути не используется.
    Однонаправленный путь отображается в окне Mapper'а в виде бело-голубых точек, соединенных красными линиями.
    Использование однонаправленного пути целесообразно в случае прыжков с обрывов и преодоления других особенностей рельефа, не позволяющих перемещаться в обратном направлении (взобраться на обрыв). Использование двунаправленного пути в подобной ситуации приведет к застреванию бота.
    Чтобы задать однонаправленный путь, нужно активировать в окне Mapper'а опцию "Enable undirectional Mapper" и перемещать персонажа в игре в необходимом вам направлении. Точки однонаправленного пути соединяются друг с другом последовательно при вводе и не соединяются ни с одним другим путем, даже расположенном на той же высоте. Следует отметить, что начальная точка однонаправленного пути будет автоматически соединена с ближайшей точкой двунаправленного пути в пределах 3,5 игровых футов.
Вместо ручного задания двунаправленных путей, можно импортировать из игры пути, используемые для прорисовки дорожки заданий. Для этого в окне Mapper'а нужно нажать кнопку "Options", выбрать в выпадающем меню "Import Nodes from Game" и в появившемся диалоговом окне нажать "ОК". При этом все существующие пути на данной локации будут удалены.

Кроме того, пути можно экспортировать из другого quester-профиля, в котором они уже заданы. Для этого в окне Mapper'а нужно нажать кнопку "Options", выбрать в выпадающем меню "Import Nodes from another profile" и выбрать в диалоговом окне открытия файлов соответствующий профиль.
Если в появившемся диалоговом окне нажать "ОК", будут экспортированы пути со всех локаций, имеющихся в импортируемой файле. Принажатии "No" - только пути для текущей локации. При этом все существующие пути будут удалены.

Чтобы удалить точки пути нужно с помощью мыши навести белую окружность на лишние точки и дважды нажать левую кнопку мыши. Размер окружности можно изменить если нажать кнопку "Options" и ввести в поле "Node delete radius" числовое значение.

Custom Regions - это задаваемые разработчиком Quester-профиля прямоугольные области на карте (в окне Mapper'а), которые используются для задания условий выполнения действий в зависимости от того, находится персонаж в данной области или нет.
Несмотря на то, что точки пути в окне Mapper'а имеют трехмерные координаты (имеют "Высоту"), CustomRegion не имеет "Высоты" (задается лишь координатами на плоскости XY).
На иллюстрации ниже виден CustomRegion с названием "CT_Part_3_Vansi_Arena" и часть CustomRegion с названием "CT_Part_3.2". Название CustomRegion может быть произвольным и допускает пробелы.
2017-09-28_09-10-42.png
Для создания CustomRegion в окне Mapper'а нужно нажать кнопку "Options", выбрать в выпадающем меню "Add Custom region" после чего Astral предложит задать левый верхний и правый нижний угол прямоугольной области. Делается это нажатием правой кнопки мыши на черной области Mapper'а. При этом в любой момент область можно двигать зажав и удерживая левую кнопку мыши.

Если вы создали CustomRegion , но хотите изменить его имя или размер, или даже удалить, вам нужно в редакторе профилей открыть вкладку "Profile", на против строки CustomRegions (Коллекция) нажать "..." для открытия редактора коллекций и произвести соответствующие действия. Следует отметить, что размеры региона можно поменять только увеличив/уменьшив его ширину/высоту, но поменять координаты левого верхнего угла с помощью данного инструмента нельзя. Для корректировки этих координат можно отредактировать XML-файл quester-профиля, воспользовавшись инструкцией от freefire.
Spoiler: [+]
freefire wrote: Файл профиля для квестера *название*.amp.zip является zip архивом который содержит несколько файлов.
Один из них Profile.xml который содержит всю информацию о профиле (кроме файлов mapper'a) в формате XML.
Открыть его можно любым текстовым редактором.
Находим место где содержится CustomRegion

Code: Select all

<CustomRegions>
    <CustomRegion>
      <Name>Fish_Vendor</Name>
      <Position>
        <X>954</X>
        <Y>984</Y>
        <Z>0</Z>
      </Position>
      <Width>46</Width>
      <Height>-32</Height>
    </CustomRegion>
  </CustomRegions>
Тут можно редактировать Х и Y координату в маппере.
2017-09-28_09-43-16.png
CustomRegion используется для задания условий выполнения действий "IsInCustomRegion", на вкладке "Conditions" в редакторе Quester-профиля
2017-09-28_09-47-44.png
Пример использования CustomRegion для Схватки Кессела:
Spoiler: [+]
herakles543 wrote:Hello everyone, I have a problem with Kessel profile. Whenever I died in second room and when I am respawning in campfire , I cant enter the second room. Because the profile code contiuning from after the door 1 (move to). Because of this I cant enter the first room and I get stuck near the walls. After few minutes my character killing him self and because of this my account is looping.
Вольный перевод wrote:Всем привет. У меня проблемма с профилем Кессела. Когда я умираю во второй комнате и воскресаю на костре, я не могу снова войти во вторую комнату, потому что профиль выполняет команду "MoveTo", следующую за командой "Door 1". По этой причине я не могу войти в первую комнату и застреваю возле стены. Попрошествии нескольких минут персонаж убивает себя.
Image
MajorLazy wrote:I read once before custom regions might fix this!
Вольный перевод wrote:Использование CustomRegion позволит решить проблемму.
michaelprog wrote:Read Custom region. But it in Russian.
  1. You need to mark in Mapper window some CustomRegion that divide area into parts. For Example:
    • Kessel_1 - cover area from Firecamp to [first_Door]
    • Kessel_2 - Cover area from [first_Door] to the [second_Door]
    • Kessel_3 - Cover area from [second_Door] to the [third_Door] ets.
    I have no Kessel_Retreat images but in Wild_Hunt it look like this:
    Вольный перевод wrote:О Custom region можно прочитать по ссылке. Но описание на русском.

    1. Тебе нужно отметить в окне Mapper'а несколько CustomRegion, которые разделят игровую область на части, Например:
    • Kessel_1 - Ограничивает область от [Костра] до [Двери №1]
    • Kessel_2 - Ограничивает область от [Двери №1] до [Двери №2]
    • Kessel_2 - Ограничивает область от [Двери №2] до [Двери №3] и так далее.
    Для схватки Кессела это выглядит так:
    2017-11-24_23-23-47.png
  2. Place InteractSpecificNode action to open [Door 1] in ActionPack_1 associated with CustomRegion "Kessel_1" (To do this insert condition IsInCustomRegion=Kessel_1).
    Place Grind action to kill mobs in second ActionPack_2 associated with CustomRegion "Kessel_2". InteractSpecificNode action to open [second_Door] place in ActionPack_2 too.
    Group all other actions the same way actions.
  3. Place all this ActionPacks in one main_ActionPack with condition CurrentMap=Az_Dale_Kessells_Retreat_Dgn. Set flag with Loop=True and PlayWhileConditionAreOk=True.
  4. When you Character die in area covered by CustomRegion Kessel_2 and revive in CustomRegion Kessel_1 then ActionPack_2, ActionPack_3 and other will be closed and ActionPack_1 will be run once more. So you character go to interact [first_Door] placed in ActionPack_1
2. Перемести действие InteractSpecificNode открывающее [Door 1] в ActionPack_1, связанный с CustomRegion "Kessel_1" (Чтобы это сделать добавь к нему условие IsInCustomRegion=Kessel_1).
Добавсь действие Grind для битвы с мобами в ActionPack_2, связанный с CustomRegion "Kessel_2". Действие InteractSpecificNode , открывающее [Door 2], также помести в ActionPack_2.
Сгруппируй остальные действия сходным образом.

3. Помести все ActionPack'и в основной main_ActionPack с условием CurrentMap=Az_Dale_Kessells_Retreat_Dgn. Установи в нем флаки Loop=True and PlayWhileConditionAreOk=True.

Code: Select all

main_ActionPack (CurrentMap=Az_Dale_Kessells_Retreat_Dgn; Loop; PlayWhileConditionAreOk)
    ActionPack_1 (CustomRegion=Kessel_1; PlayWhileConditionAreOk)
        Door 1
    ActionPack_2 (CustomRegion=Kessel_2; PlayWhileConditionAreOk)
        Grind
        Door 2
    ActionPack_3 (CustomRegion=Kessel_3; PlayWhileConditionAreOk) 
        ... 
4. Теперь, когда твой персонаж умрет в области, охваченной CustomRegion Kessel_2 and revive in CustomRegion Kessel_1, тогда блоки ActionPack_2, ActionPack_3 и все последующие закроются, а блок ActionPack_1 начнется сначала. Таким образом твой персонаж снова сможет выполнить действие [Door 1], размещенное в ActionPack_1
You do not have the required permissions to view the files attached to this post.
Last edited by michaelprog on Sun Dec 03, 2017 1:55 pm, edited 9 times in total.

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

Условия выполнения команды (Conditions)

Post by michaelprog » Sat Oct 28, 2017 8:12 am

Условия выполнения команды (Conditions)

В настройках каждой команды (Action Edition) на вкладке Conditions можно задать условия, при соблюдении которых команда должна выполняться.
Условие задается в виде выражения, принимающего значение ИСТИНА или ЛОЖЬ.
Каждой команде может быть задано одновременно несколько условий.
Проверка условий производится ДО запуска команды на выполнение.
По-умолчанию все условия должны быть ИСТИНЫ перед запуском команды.
Image
Правила обработки условий меняются в зависимости от значения флагов "OnlyOneConditionMustBeGood", "Loop", "PlayWhileConditionsAreOk" и Loked, что подробно рассмотрено в разделе руководства "Основные свойства команд (действий, Action'ов)".

Рассмотрим наиболее важные из условий подробнее:

QuestInfo - проверка состояния выполнения определенной задачи (квеста) или подзадачи.
Spoiler: [+]
  • Поле "QuestID" содержит идентификатор квеста, который нужно задать вручную после добавления условия.
    Для этого следует нажать на кнопку "...", выбрать из списка в появившемся окне "Get a mission Id" необходимую задачу и нажать "Select".
  • В поле "Tested" задается статус квеста, при котором условие будет считаться ИСТИННЫМ.
    • 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))
    [b]Структура квестов (задач) в Neverwinter'е[/b] wrote:В общем виде кве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"). В квадратных скобках отображается внутриигровой идентификатор квеста, а в круглых - статус выполнения задачи (подзадачи).
    Image
    Как можно видеть на рисунке в окне выбора Квестов можно отобразить активные квесты "Normal" (присутствующие в списке заданий персонажа), либо Открытые квесты "Open"(это различные героические встречи на открытых картах и локальные квесты в закрытых инстансах), либо выполненные квесты "Complited".
  • Назначение флага "Loked" описано в конце поста.
CurrentMap - проверка локации, на которой в текущий момент находится персонаж.
Spoiler: [+]
  • В поле "MapName" при добавлении условия автоматически вставляется текстовый идентификатор локации, на которой находится персонаж. В последствии его можно будет изменить вручную, или переместить персонажа на нужную локацию и нажать кнопку "...", после чего в поле будет вставлен идентификатор текущей локации.
  • В поле "Tested" задается критерий сопоставления текущий локации с заданной в поле "MapName":
    • Equal - условие ИСТИННО, если текущая локация персонажа совпадает с заданной.
    • NotEqual - условие ИСТИННО, если текущая локация персонажа НЕ совпадает с заданной.
IsInCustomRegion - проверка CustomRegion, в котором в текущий момент находится персонаж.
Spoiler: [+]
Разработчиками quester-профиля могут быть заданы прямоугольные области на карте - CustomRegion'ы, для настройки поведения бота в зависимости от нахождения персонажа в них. Подробнее можно прочитать в разделе руководства Mapper и CustomRegion.
  • В поле "CustomRegionName" при добавлении условия автоматически вставляется текстовый идентификатор CustomRegion'a, в котором находится персонаж. В последствии его можно будет изменить вручную, или выбрать из списка заданных в профиле CustomRegion'ов, для чего нажать кнопку "...", выбрать в появившемся окне нужный CustomRegion и нажать "Select".
  • В поле "Tested" задается критерий сопоставления текущего CustomRegion'а с заданным в поле "CustomRegionName":
    • Equal - условие ИСТИННО, если текущий CustomRegion совпадает с заданным.
    • NotEqual - условие ИСТИННО, если текущий CustomRegion НЕ совпадает с заданным.
  • Назначение флага "Loked" описано в конце поста.
Важно знать, что проверка всегда будет ЛОЖНОЙ независимо от значения поля "Tested", если в названии региона допущена ошибка (то есть регион, указанный в поле "CustomRegionName", отсутствует в данном профиле).
CurrentRegion - проверка Региона, в котором в текущий момент находится персонаж.
Spoiler: [+]
Разработчиками игры были заданы название некоторым частям карт - Регионам. К ним относится, например, "Большой рынок" спутников (Companion_Hall) или "Ратное дело" (Trade_Of_Blades) в "Протекторате" (карта Neverwinter_Protectors_Enclave).
Следует учитывать, что название даны далеко не всем частям карт (Регионам).
  • В поле "RegionName" при добавлении условия автоматически вставляется текстовый идентификатор Региона (если он существует), в котором находится персонаж. В последствии его можно будет изменить вручную, или переместить персонажа в нужную часть карты (Регион) и нажать кнопку "...", после чего в поле будет вставлен идентификатор текущего Региона.
  • В поле "Tested" задается критерий сопоставления текущего Региона с заданным в поле "RegionName":
    • Equal - условие ИСТИННО, если текущий Регион совпадает с заданным.
    • NotEqual - условие ИСТИННО, если текущий Регион НЕ совпадает с заданным.
  • Назначение флага "Loked" описано в конце поста.
ItemCount - проверка количества определенных предметов у персонажа.
Spoiler: [+]
  • В поле "ItemId" нужно задать текстовый идентификатор предметов, количество которых будет анализироваться.
    Для этого нужно нажать на кнопку "...", выбрать из списка в появившемся окне "Get an Item Id" нужный предмет и нажать "Select". Если в окне "Get an Item Id" начать ввод локализованного названия искомого предмета, то фокус в списке переместится в первую позицию совпадающую с введенным текстом.
    Следует отметить, что под "предметами" в данном случае понимаются не только вещи, находящиеся в сумке персонажа, но также все, что лежит в персональном банке, маунты в стойле, спутники, работники, ресурсы профессий и специальные предметы (ключи и пр.).
    Кроме того, в поле "ItemId" можно использовать простую маску для чего в начале и(или) в конце идентификатора предмета достаточно поставить символ "*", замещающий любое количество символов. Таким образом, можно оценить количество однотипных предметов (Например, взаимозаменяемых ключей от сундуков в подземелье).
  • В поле "Sign" задается критерий сопоставления :
    • Equal - условие ИСТИННО, если количество предметов равно числу, заданному в поле "Value".
    • NotEqual - условие ИСТИННО, если количество предметов НЕ равно числу, заданному в поле "Value".
    • Inferior - условие ИСТИННО, если количество предметов МЕНЬШЕ числа, заданного в поле "Value".
    • Superior - условие ИСТИННО, если количество предметов БОЛЬШЕ числа, заданного в поле "Value".
  • В поле "Type" задается то, какие в коком из контейнеров персонажа будет производиться подсчет искомых предметов:
    • AllInventories (значение по-умолчанию) - все контейнеры персонажа, включая сумки инвентаря, банк, ячейки пояса, ячейки экипировки персонажа и артефактов, стойло, сумки с ресурсами для профессий и работниками за исключением вкладки "Казна" в сумке персонажа.
    • BagsOnly - только сумку инвентаря персонажа.
    • SpecificBag - только один конкретный контейнер, заданный в поле "SpecificBag".
  • Поле "SpecificBag" - идентификатор контейнера, в котором будет производиться подсчет заданных предметов. Данное поле учитывается ТОЛЬКО в том случае, если "Type = SpecificBag".
    Список контейнеров очень большой и приводить его я не буду.
  • Назначение флага "Loked" описано в конце поста.
NumericCount - проверка количества определенных ценностей у персонажа.
Spoiler: [+]
  • В поле "NumericType" нужно задать текстовый идентификатор ценностей, количество которых будет анализироваться.
    Для этого нужно нажать на кнопку "...", выбрать из списка в появившемся окне "GetAnId" наименование ценности и нажать "Select". Если в окне "GetAnId" начать ввод локализованного названия искомого предмета, то фокус в списке переместится в первую позицию совпадающую с введенным текстом.
    Следует отметить, что в списке ценностей содержатся не только то, что отображается на вкладке "Казна" в сумке персонажа, но также некоторые другие интересные вещи: медь, АБ, опыт, прогресс некоторых компаний, рецепты алхимии и т.п. вещи. Список ценностей имеет локализованные название, поэтому разобраться с ним достаточно просто.
  • В поле "Sign" задается критерий сопоставления :
    • Equal - условие ИСТИННО, если количество ценностей равно числу, заданному в поле "Val".
    • NotEqual - условие ИСТИННО, если количество ценностей НЕ равно числу, заданному в поле "Val".
    • Inferior - условие ИСТИННО, если количество ценностей МЕНЬШЕ числа, заданного в поле "Val".
    • Superior - условие ИСТИННО, если количество ценностей БОЛЬШЕ числа, заданного в поле "Val".
  • В поле "Val" задается число, с которым сравнивается наличное количество ценностей.
  • Назначение флага "Loked" описано в конце поста.
Флаг Loked имеется у каждого типа условий.
Если флаг Loked = True, то условие всегда должно быть ИСТИННЫМ, чтобы вся совокупность условий была истиной, независимо от значения флага OnlyOneConditionMustBeGood у данной команды.
Рассмотрим несколько примеров (под спойлером).
Spoiler: [+]
Для наглядности условие с Loked=False будет записаны в круглых скобках (УСЛОВИЕ_1), а с Loked=True - в квадратных скобках [УСЛОВИЕ_1]:
Пример 1 wrote:
  • УСЛОВИЕ_1(Loked=False)
  • УСЛОВИЕ_2(Loked=False)
  • УСЛОВИЕ_3(Loked=False)
  • УСЛОВИЕ_4(Loked=False)
В данном случае при OnlyOneConditionMustBeGood=False совокупность условий будет проверяться по правилу И:
(УСЛОВИЕ_1) И (УСЛОВИЕ_2) И (УСЛОВИЕ_3) И (УСЛОВИЕ_4) - Истино, если ВСЕ условия истины.

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

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

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

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

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

Post by michaelprog » Sat Mar 23, 2019 10:42 am

СООБЩЕНИЕ
Поскольку у меня постоянно сбрасывается авторизация на форуме, что делает просмотр и редактирование сообщений крайне затруднительным, я перенес данный учебник в Google-документ, доступный по ссылке:
https://docs.google.com/document/d/1HWF ... PPciyAueh0
До устранения проблем с форумом я прекращаю сопровождение и актуализация руководства размещенного в данной ветке.

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests