Skip to content

The extension with the Variables for Astral bot managing the NeverwinterOnline

Notifications You must be signed in to change notification settings

qpAHTA3EP/Variables

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

VariableTools - это плагин для бота Astral к MMORPG "Neverwinter Online". Он предназначен для работы с переменными в сценариях Quester'a.

Ключевыми объектами в данном плагине являются переменная и арифметическое выражение.


Переменная

Переменная - это действительное число, идентифицируемое комбинацией трёх признаков:

  • Name - текстовое имя переменной.
    В имени переменной допускаются любые русские и латинские буквы, цифры и символ _.
    При этом имя переменой не должно совпадать с именами функторов, используемых в EXPRESSION;
  • AccountScope - переключатель области видимости для персонажей:
    • Global : переменная видима всем персонажам независимо от аккаунта;
    • Account : переменная видима всем персонажам конкретного аккаунта, который был загружен при её инициализации;
    • Character : переменная видима единственному персонажу, который был активен при её инициализации.
  • ProfileScope - переключатель области видимости относительно профиля:
    • Common : область видимости переменной не ограничена;
    • Profile : область видимости переменной ограничена конкретным Quester-профилем, в котором она была инициализирована.

Переменные сохраняются во внутренней коллекции со значениями, полученными в результате выполнения Quester-профиля. По этой причине рекомендую нужные вам переменные инициализировать, чтобы при повторном запуске скрипта не получить ошибок из-за старых значений.

Переменные, с флагом Save, при завершении работы Астрала сохраняются в файл и загружаются при следующем запуске бота. Таким образом обеспечивается сохранение значений переменных между игровыми сессиями.


Арифметическое выражение (EXPRESSION)

Арифметическое выражение состоит из следующих элементов:

  • Числовые константы (целые числа или десятичные дроби).
    В качестве разделителя дробной части можно использовать . и ,;
  • Переменные, область видимости которых задается в виде перечисления идентификаторов AccountScope и ProfileScope в квадратных скобках сразу после имени переменной.
    При отсутствии соответствующего идентификатора переменная распознается как [Global, Common].
    Запись SomeVar эквивалентна SomeVar [Global,Common];
    Запись SomeVar[Character] эквивалентна SomeVar [Character, Common];
    Запись SomeVar[Profile] эквивалентна SomeVar [Global, Profile];
    Запись SomeVar[Account, Common] - полное определение переменной.
  • Простые арифметические операторы: + - * /;
  • Операцию взятия остатка от деления: %;
  • Группирующие скобки: ( и );
  • Разрешенные функции;
  • Функции времени;

Пробелы в выражении игнорируются, однако, пробел не может разделять две части имени переменной или функтора:
My_Var iable_001 - некорректное выражение

Не инициализированные переменные, упомянутые в EXPRESSION, считаются равными нулю.

Результат некорректного выражения EXPRESSION на этапе выполнения равен нулю.

Результатом деления на '0' будет максимально возможное число для типа double. Что-то в районе 1.7976931348623157E+308.

Выражение EXPRESSION парсится (т.е. "разбирается" и проверяется) единственный раз во время инициализации, в результате чего строится Абстрактное синтаксическое дерево (АСТ), используемое для вычисления во время выполнения скрипта.


Команда SetVariable

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

Опция Описание
Variable Комплексный Идентификатор переменной
Equation Арифметическое выражение, результат которого присваивается переменной
Save Флаг, указывающий на необходимость сохранения переменной в файл при завершении работы Астрала.
- True - устанавливает флаг сохранения в файл;
- False - снимает флаг сохранения;
- NotChange - значение флага не изменяется.

В команде SetVariable в выражении Equation можно использовать переменную, которой присваивается значение. В этом случае сначала будет вычислено значение выражения Equation (считано старое значение переменной), а затем переменной будет присвоен полученный результат. Например: Num := Num + 99

Внимание: изменение имени, и идентификаторов области видимости AccountScope, ProfileScope в команде SetVariable не изменяют эти признаки для переменной в коллекции. Таким образом вы просто определите "новую" переменную с другим именем и(или) областью видимости.

Команда DeleteVariable

Выполнение команды удаляет из внутренней коллекции заданную переменную.

Опция Описание
Variable Комплексный Идентификатор удаляемой переменной

Удаленная переменная не будет сохранена в файл.


Условие CheсkEquations

Условие сравнивает результат арифметического выражения Equation1 с результатом арифметического выражения Equation2. Тип сравнения задается полем Sign и может принимать значения:

  • Inferior : Условие истинно, если Equation1 меньше Equation2;
  • Superior : Условие истинно, если Equation1 больше Equation2;
  • Equal : Условие истинно, если Equation1 равно Equation2;
  • NotEqual : Условие истинно, если Equation1 НЕ равно Equation2.

Условие CheckVariable

Данное условие позволяет проверить наличие(отсутствие) переменной в коллекции.

Доступны две проверки:

  • VariablePresenceCheck : Условие истинно, если во внутренней коллекции содержится заданная переменная;
  • VariablesCountCheck : производит подсчет количества переменных, соответствующих комбинации признаков (имя, область видимости), и сравнивает его с заданным числовым значением.

Функции

  • Функция ItemCount(ItemId) вычисляет количество предметов в инвентаре персонажа, заданных идентификатором ItemId.
    В начале и в конце идентификатора можно использовать символ подстановки *, заменяющий любое число символов;
  • Функция NumericCount(NumericId) вычислет количество ценностей (Numeric), имеющихся в распоряжении персонажа и заданных полным идентификатором NumericId.
    В начале и в конце идентификатора можно использовать символ подстановки *, заменяющий любое число символов;
  • Функция Random(EXPRESSION) генерирует случайное целое число от нуля до значения выражения EXPRESSION. Если EXPRESSION пустое, тогда максимальное генерируемое значение определяется пределами целого числа (Integer) в .Net Framework, которое равно 2'147'483'647. Например:
    Random(Var_001 * (ItemCount(Gemfood_1)%55.9)) / Var_002
    Результат приведенного выражения - частное от деления случайного числа на переменную Var_002.
    Максимальное возможно значение случайного числа задано произведением:
    Var_001 * (ItemCount(Gemfood_1)%55.9).

Функции времени

Любая переменная представляет действительное число, которое может быть интерпретировано как дата-время в формате OLE Automation Date.

Полночь (0 час. 0 мин) 30.12.1899 года соответствует 0,0.
Целая единица соответствует суткам, а дробная часть - времени (час = 1/24; минута = 1/1440; секунда = 1/86400).

Для удобства работы с переменными как с датами определены функторы:
Now() - возвращает текущую дату и время;
Days(EXPRESSION) - количество дней, заданных EXPRESSION. Неполный день отбрасывается;
Hours(EXPRESSION) - целое количество часов, соответствующих EXPRESSION. Дни, переводятся в часы, а минуты и секунды отбрасываются;
Minutes(EXPRESSION) - целое количество минут, соответствующих EXPRESSION. Дни и часы переводятся в минуты, а секунды отбрасываются;
Seconds(EXPRESSION) - целое количество секунд, соответствующих EXPRESSION. Дни, часы и минуты переводятся в секунды, а доли секунд отбрасываются,
где EXPRESSION - любое допустимое арифметическое выражение.

Например, день недели можно вычислить по формуле:
Days(Now() - 2) % 7
0 - понедельник
1 - вторник
...
6 - воскресенье

About

The extension with the Variables for Astral bot managing the NeverwinterOnline

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages