eventMacro: различия между версиями
Manticora (обсуждение | вклад) м →Состояние: Дальше - InMapRegex |
Manticora (обсуждение | вклад) м →Состояние: Дальше - MobNearDist |
||
Строка 2001: | Строка 2001: | ||
;InMapRegex | ;InMapRegex | ||
:* Описание: | :* Описание: Соответствует ли название текущей локации заданному в regex шаблону. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2011: | Строка 2011: | ||
: Устанавливает значение переменной: | : Устанавливает значение переменной: | ||
$.InMapRegexLast => | $.InMapRegexLast => запоминает название локации, при котором условие InMapRegex стало true | ||
;NpcNear | ;NpcNear | ||
:* Описание: | :* Описание: Есть ли поблизости непись, имя которой подпадает под заданный regex-шаблон. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2025: | Строка 2025: | ||
: Устанавливает значение переменной: | : Устанавливает значение переменной: | ||
$.NpcNearLast => | $.NpcNearLast => запоминает имя неписи | ||
$.NpcNearLastPos => | $.NpcNearLastPos => запоминает местоположение неписи, можно использовать в дальнейшем для команды 'talknpc' | ||
$.NpcNearLastBinId => | $.NpcNearLastBinId => запоминает индекс неписи в списке openkore, можно в дальнейшем использовать в команде 'talk' | ||
$.NpcNearLastDist => | $.NpcNearLastDist => запоминает дистанцию до обнаруженной неписи | ||
;NpcNearDist | ;NpcNearDist | ||
:* Описание: | :* Описание: Есть ли на определённом удалении непись, имя которой подпадает под заданный regex-шаблон. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2042: | Строка 2042: | ||
: Устанавливает значение переменной: | : Устанавливает значение переменной: | ||
$.NpcNearDistLast => | $.NpcNearDistLast => запоминает имя неписи | ||
$.NpcNearDistLastPos => | $.NpcNearDistLastPos => запоминает местоположение неписи, можно использовать в дальнейшем для команды 'talknpc' | ||
$.NpcNearDistLastBinId => | $.NpcNearDistLastBinId => запоминает индекс неписи в списке openkore, можно в дальнейшем использовать в команде 'talk' | ||
$.NpcNearDistLastDist => | $.NpcNearDistLastDist => запоминает дистанцию до обнаруженной неписи | ||
;NpcNotNear | ;NpcNotNear | ||
:* Описание: | :* Описание: Проверяет, что поблизости нет неписи с заданным в regex именем. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2058: | Строка 2058: | ||
NpcNotNear /special agent/ | NpcNotNear /special agent/ | ||
: | : Не создаёт никаких переменных | ||
;PlayerNear | ;PlayerNear | ||
:* Описание: | :* Описание: Есть ли рядом игроки с заданным в regex именем. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2072: | Строка 2072: | ||
: Устанавливает значение переменной: | : Устанавливает значение переменной: | ||
$.PlayerNearLast => | $.PlayerNearLast => запоминает имя персонажа | ||
$.PlayerNearLastPos => | $.PlayerNearLastPos => запоминает местоположение персонажа | ||
$.PlayerNearLastBinId => | $.PlayerNearLastBinId => запоминает номер игрока в списке openkore | ||
$.PlayerNearLastDist => | $.PlayerNearLastDist => запоминает расстояние до игрока | ||
;PlayerNearDist | ;PlayerNearDist | ||
:* Описание: | :* Описание: Есть ли на указанном расстоянии игроки с именем, совпадающим с regex-шаблоном. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2089: | Строка 2089: | ||
: Устанавливает значение переменной: | : Устанавливает значение переменной: | ||
$.PlayerNearDistLast => | $.PlayerNearDistLast => Запоминает имя игрока | ||
$.PlayerNearDistLastPos => | $.PlayerNearDistLastPos => Запоминает местоположение игрока | ||
$.PlayerNearDistLastBinId => | $.PlayerNearDistLastBinId => Запоминает номер игрока в списке openkore | ||
$.PlayerNearDistLastDist => | $.PlayerNearDistLastDist => Запоминает расстояние до игрока | ||
;PlayerNotNear | ;PlayerNotNear | ||
:* Описание: | :* Описание: Удостоверяется, что рядом нет игрока с похожим на regex-шаблон именем. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2105: | Строка 2105: | ||
PlayerNotNear /^(john|george|paul|ringo)$/i | PlayerNotNear /^(john|george|paul|ringo)$/i | ||
: | : Не создаёт никаких переменных | ||
;MobNear | ;MobNear | ||
:* Описание: | :* Описание: Проверяет, есть ли рядом моб с заданным в regex названием. | ||
: Синтаксис: | : Синтаксис: | ||
Строка 2119: | Строка 2119: | ||
: Устанавливает значение переменной: | : Устанавливает значение переменной: | ||
$.MobNearLast => | $.MobNearLast => запоминает название моба | ||
$.MobNearLastPos => | $.MobNearLastPos => хранит местоположение моба | ||
$.MobNearLastBinId => | $.MobNearLastBinId => запоминает номер моба в списке openkore | ||
$.MobNearLastDist => | $.MobNearLastDist => расстояние до моба | ||
Версия от 09:57, 4 июня 2023
Описание
- Этот плагин представляет собой переделанный и обновлённый macro плагин, написанный таким образом, чтобы потреблять меньше процессорной мощности. Имеет более расширенный функционал по сравнению со своим предшественником.
- С помощью этого плагина, Вы сможете составлять блоки с условиями, называемые автомакросами (automacro) и блоки исполняемых инструкций, называемые макросами (macro).
- Автомакросы срабатывают при достижении условий, описанных в блоке (например, появление определённого слова в чате, или достижение определённого уровня, и т.д.). По результату срабатывания выполняется один или несколько макросов.
- Макросы могут быть простыми (например, «сказать что-то в чате» или «сохранить предметы в кафре»), или сложными (например, «выполнить полный квест»). Макросы вызываются несколькими способами: автомакросами, вручную консольной командой
eventMacro <название_макроса>
, либо инструкциейcall <название_макроса>
.
* Старые макросы не совместимы с эвент-макросами! Их следует переписать, используя новый синтаксис эвент-макросов.
Установка
- eventMacro по умолчанию включён в стандартную версию OpenKore.
- Чтобы начать использовать плагин, просто создайте в папке control файл eventMacros.txt и наполните файл эвент-макросами.
Консольные команды
Синтаксис
eventMacro [MACRO|auto|list|status|check|stop|pause|unpause|var_get|var_set|enable|disable|include] [extra]
- eventMacro <MACRO>
-
- Запустить макрос с названием <MACRO>. При запуске можно использовать предустановленные опции, либо произвольные параметры.
Опция | Значение | Описание |
---|---|---|
-repeat | -r | n (целое_число) | Повторяет выполнение макроса n раз |
-overrideAI | игнорирует ИИ (см. описание ниже) | |
-macro_delay | секунды | задержка между выполняемыми командами в макросе |
-exclusive | Запрещает прерывать выполнение макроса другими автомакросами | |
-orphan | terminate reregister reregister_safe terminate_last_call |
Что делать с макросами которые были удалены из очереди ИИ (AI queue) |
Макросы можно запускать с произвольными параметрами. Они указываются с помощью двойной черты +пробел --
, либо просто через пробел. Эти параметры сохраняются в массиве @.param. Пример:
macro showParam { log Parameter 1 is $.param[0] log Parameter 2 is $.param[1] }
Если запустить макрос с помощью консольной команды eventMacro showParam -- foo bar (либо eventMacro showParam foo bar), то он выведет в консоль:
[eventmacro log] Parameter 1 is foo [eventmacro log] Parameter 2 is bar
- eventMacro auto <AUTOMACRO>
- Получить информацию об автомакросе с названием <AUTOMACRO> и его условиях
- eventMacro list
- Получить список доступных макросов и автомакросов
- eventMacro status [macro|automacro]
- Получить текущее состояние макросов или автомакросов
- eventMacro check (force_stop|force_start|resume)
- Указать состояние проверки автомакросов:
- eventMacro check force_stop - принудительно остановить проверку условий автомакросов
- eventMacro check force_start - принудительно остановить проверку условий автомакросов
- eventMacro check resume - вернуть проверку условий автомакросов в нормальное состояние
- eventMacro stop
- Отменить выполнение текущего макроса
- eventMacro pause
- Поставить на паузу текущий макрос
- eventMacro unpause
- Возобновить выполнение текущего макроса
- eventMacro var_get [<var_name>]
- Показать значение переменной <var_name>, либо если параметр не указан, всех переменных. С помощью этой команды можно посмотреть значения следующих переменных: скаляра ($var_name), массива (@var_name) или хэша (%var_name)
- eventMacro var_set <var_name> <value>
- Присвоить значение <value> переменной <var_name>
- eventMacro enable [automacro]
- Включить один, либо если параметр не указан, все автомакросы
- eventMacro disable [automacro]
- Выключить один, либо если параметр не указан, все автомакросы
- eventMacro include (on | off | list) [filename or pattern]
- Включить или отключить дополнительный файл, подключенный с помощью !include, в файле eventMacros.txt
Примечание. Консольную команду "eventMacro" писать очень долго и не удобно. В конфиге OpenKore можно назначить синоним на эту команду, например: " alias_em eventMacro".
Файлы настроек
- control/eventMacros.txt
- Поместите свои эвент-макросы и автомакросы в этот файл. Вы можете изменить имя файла в настройке конфига eventMacro_file.
- control/timeouts.txt
- Добавтьте параметр eventMacro_delay и укажите количество секунд которые плагин должен подождать между выполнением команд.
Параметр | Значение | По умолчанию | Описание |
---|---|---|---|
eventMacro_orphans | terminate reregister reregister_safe terminate_last_call |
terminate | Что делать с макросами которые были удалены из очереди ИИ (AI queue) |
eventMacro_file | имя файла | eventMacros.txt | файл с эвент-макросами и автомакросами |
eventMacro_CheckOnAI | список 'auto', 'manual' и\или 'off' | auto | При каких значениях ИИ должны проверяться автомакросы |
Синтаксис эвент-макросов
macro MacroName { do this.. and that.. yattayatta.. }
- Вы можете использовать любое имя для макроса (кроме символа "пробел"). Следите, чтобы макросы не назывались одинаково, иначе ни один из этих макросов не будет загружен.
- Команды в макросе выполняются по порядку сверху вниз.
- В теле макроса можно использовать ТОЛЬКО специальные макро-команды. Чтобы вызвать в теле макроса консольную команду, следует использовать макро-команду do.
Макро-команды
- do <команда>
- выполняет <команду>, как будто она была набрана в консоли OpenKore. См. список консольных команд.
macro foo { do move 123 234 prontera do sit do c привет! }
Команда ai clear по умолчанию выключена в плагине, т.е. её не удастся выполнить через макрос.
Если выполнится команда do ai off, то макрос остановит своё выполнение. Также после команды do ai manual может остановиться проверка условий автомакросов (см. параметр eventMacro_CheckOnAI)
- log <текст>
- warning <текст>
- error <текст>
- выводит <текст> в консоль. В тексте можно использовать переменные эвент-макроса ($var_name), специальные переменные ($.***) а также специальные ключевые слова (&config, &rand и т.д.). Эту макро-команду удобно использовать для отладки своих эвент-макросов.
macro foo { log Эта строка записывает текст в консоль. warning Бот достиг $.lvl уровня }
- pause <секунды>
- останавливает эвент-макрос на указанное количество секунд.
macro foo { log сейчас 10:00:00 pause 10 log теперь 10:00:10 log после первого сообщения прошло 10 секунд. }
макро-команда pause останавливает не только выполнение эвент-макроса, но и все действия OpenKore.
- call <MACRO> [<параметры>]
- выполняет другой макрос с произвольным именем <MACRO>, также можно указать произвольные <параметры>. После выполнения эвент-макроса <MACRO> продолжится выполняться текущий макрос.
- В имени <MACRO> можно использовать переменные (например: call $killmacro)
macro foo { $killmacro = bar log сейчас будет выполняться макрос bar call $killmacro }
- lock (<AUTOMACRO> | all)
- выключает автомакрос с произвольным именем <AUTOMACRO> (т.е. прекращается проверка его условий срабатывания). Выключенный автомарос никогда не выполнится. Команда
lock all
выключает все автомакросы. Включить автомакрос обратно можно с помощью команды code>release.
- release (<AUTOMACRO> | all)
- включает обратно заблокированный автомакрос с произвольным именем <AUTOMACRO> или включает все автомакросы при использовании
release all
(Автомакрос может быть заблокирован условиемrun-once 1
или командойlock
). Включённый автомакрос может повторно запуститься если выполнятся все условия его срабатывания.
- stop
- немедленно прерывает выполнение текущего макроса.
- include (on | off | list) [<имя_файла или шаблон_имени>]
- включает или выключает строчки
!include
в файле eventMacros.txt.
- set <опция> <значение>
- устанавливает значения следующим опциям:
- orphan (<terminate | terminate_last_call | reregister | reregister_safe>)
- macro_delay <секунды>
- overrideAI <булев_флаг>
- repeat <целое_число>
- exclusive <булев_флаг>
Переменные
- В эвент-макросе есть возможность работать с переменными. Объявлять переменные не нужно. Все переменные макросов - глобальные, т.е. переменная из одного макроса может быть использована в другом макросе.
- Система переменных в eventMacro основывается на типах данных языка Perl. Переменные могут быть скалярами, массивами и хешами.
- В названии переменной можно использовать только буквы и цифры.
- Если Вы хотите использовать какую-либо переменную без подстановки её значения, то следует экранировать её с помощью "\" (например,
\$var
).
Типы переменных
- Скаляр
- Скалярная переменная содержит только одну величину, например, число и\или текст.
- Скалярные переменные начинаются со знака $.
- Массив
- Переменная массив содержит список величин (элементов).
- У каждого элемента в массиве есть свой индекс, который указывает на позицию в списке.
- Первый элемент массива имеет индекс 0, а последний - длина массива минус один.
- Массивы начинаются со знака @.
- Хэш
- Переменная хэш содержит пары величин.
- Каждая пара состоит из ключа и значения.
- Каждый ключ имеет только одно значение, но несколько ключей могут иметь одинаковые значения.
- Хэши начинаются со знака %.
Объявление и использование
Скаляр
- Присвоить переменной значение:
$variable = значение
- Присвоить переменной значение:
- Получить значение переменной (НО это касается только макросов, для автомакросов есть другой синтаксис, как и для параметров конфига и т.п.):
$variable
- Получить значение переменной (НО это касается только макросов, для автомакросов есть другой синтаксис, как и для параметров конфига и т.п.):
macro Hello { $var = Hello $var1 = World! log $var $var1 }
- Данный макрос выведет на консоль:
[eventmacro message] Hello World!
- Увеличить на 1 значение переменной:
$variable++
или уменьшить$variable--
- Увеличить на 1 значение переменной:
macro Counter { $counter = 0 log Значение счётчика: $counter $counter++ log Новое значение: $counter $counter-- log Прежнее значение: $counter }
- В консоли увидим:
[eventmacro message] Значение счётчика: 0 [eventmacro message] Новое значение: 1 [eventmacro message] Прежнее значение: 0
- Переменную можно удалить, присвоив ей специальное значение undef или unset:
macro undef { $counter = 0 $x = 1 log \$x = $x $x = undef # также можно использовать 'unset' log \$x теперь уничтожена: $x }
- В консоли увидим:
[eventmacro message] $x = 1 [eventmacro message] $x теперь уничтожена:
- Операция присвоения не вычисляет значение справа от знака равно, а тупо подставляет вместо переменных их величины. Для расчетов нужно вызывать функцию
&eval()
.
- Операция присвоения не вычисляет значение справа от знака равно, а тупо подставляет вместо переменных их величины. Для расчетов нужно вызывать функцию
macro math { $num = 2 $num2 = 3 $result = $num+$num2 $result2 = &eval($num+$num2) log обычная подстановка значений переменных \$result = $result log сумма $num и $num2 равна $result2 }
- В консоли увидим:
[eventmacro message] обычная подстановка значений переменных $result = 2+3 [eventmacro message] сумма 2 и 3 равна 5
У скаляров есть следующая функция:
- &defined($<переменная>})
- Функции &defined требуется указать <переменную>, существование которой следует проверить. Если <переменная> существует, то функция вернёт
1
, в противном случае -0
. - Примечание: если значение переменной =0, то считается, что она существует, т.е. функция &defined вернёт "1".
macro defined { $var = 0; @array = (a, b) %hash = (a => 1, b => 2) log переменная \$var существует: &defined($var) log элемент 1 в массиве \@array - существует: &defined($array[1]) log ключа "с" в хэше \%hash - не существует: &defined($hash{c}) }
- В консоли увидим:
[eventmacro message] переменная $var существует: 1 [eventmacro message] элемент 1 в массиве @array - существует: 1 [eventmacro message] ключа "с" в хэше %hash - не существует: 0
Массив
- Присвоить массиву несколько значений можно указав их в скобках через запятую:
@variable = (member0, member1, member2)
- Присвоить массиву несколько значений можно указав их в скобках через запятую:
- Получить доступ к конкретному элементу массива можно по его индексу. Для этого нужно вместо знака @ подставить $ и в квадратных скобках [...] указать индекс элемента:
$variable[0]
- Получить доступ к конкретному элементу массива можно по его индексу. Для этого нужно вместо знака @ подставить $ и в квадратных скобках [...] указать индекс элемента:
- Узнать длину массива:
@variable
- Узнать длину массива:
macro Hello { @var = (drops, poring) log Кол-во элементов в массиве \@var = @var, первый элемент: $var[0], второй элемент: $var[1] }
- В консоли увидим:
[eventmacro message] Кол-во элементов в массиве @var = 2, первый элемент: drops, второй элемент: poring
- Отдельные элементы массива - это скалярные переменные.
- Элементам массива можно присвоить значение:
$myarray[0] = Гарри $myarray[1] = Поттер
- Увеличить\уменьшить элемент массива на единицу:
macro Counter { $counterArray[1] = 0 log Значение элемента \$counterArray[1]: $counterArray[1] $counterArray[1]++ log Новое значение: $counterArray[1] $counterArray[1]-- log Прежнее значение: $counterArray[1] }
- В консоли увидим:
[eventmacro message] Значение элемента $counterArray[1]: 0 [eventmacro message] Новое значение: 1 [eventmacro message] Прежнее значение: 0
- Удаление элемента массива:
macro undef { $var[5] = 1 log значение элемента \$var[5]: $var[5] $var[5] = undef # также можно использовать 'unset' log значение элемента \$var[5] теперь уничтожено: $var[5] }
- В консоли увидим:
[eventmacro message] значение элемента $var[5]: 1 [eventmacro message] значение элемента $var[5] теперь уничтожено:
- Функции для работы с массивами
- Существует четыре функции, которые предназначены для работы с массивами:
- &push: добавляет элемент в конец массива, увеличивая таким образом длину массива на единицу.
- &pop: убирает элемент из конца массива, уменьшая таким образом длину массива на единицу.
- &shift: убирает первый элемент массива, сдвигая таким образом все остальные элементы массива влево, ближе к началу и уменьшает на единицу длину массива.
- &unshift: добавляет новый элемент в начало массива и сдвигает все остальные элементы вправо, ближе к концу массива, увеличивает длину массива на 1.
- &push(@array, newmember)
- Функции &push требуется два аргумента: массив и его новый элемент.
- Пример создания массива с помощью функции &push:
macro push { &push(@monsters, Поринг) &push(@monsters, Волк) &push(@monsters, Мая) log Массив \@monsters состоит из @monsters элементов: $monsters[0], $monsters[1] и $monsters[2] }
- В консоли увидим:
[eventmacro message] Массив @monsters состоит из 3 элементов: Поринг, Волк и Мая
- &pop(@array)
- Функции &pop нужен только один аргумент - массив, из которого надо вытолкнуть последний элемент.
- Пример массива в котором сначала было три элемента, потом из него вытолкнули два последних элемента и остался только один:
macro pop { @jobs = (нуб, вор, охотник) log Массив \@jobs состоит из @jobs элементов: $jobs[0], $jobs[1] и $jobs[2] &pop(@jobs) log Теперь массив \@jobs состоит из @jobs элементов: $jobs[0], $jobs[1] &pop(@jobs) log Теперь массив \@jobs состоит из @jobs элемента: $jobs[0] }
- В консоли увидим:
[eventmacro message] Массив @jobs состоит из 3 элементов: нуб, вор и охотник [eventmacro message] Теперь массив @jobs состоит из 2 элементов: нуб, вор [eventmacro message] Теперь массив @jobs состоит из 1 элемента: нуб
- &shift(@array)
- Функции &shift нужен только один аргумент - массив, из которого надо вытолкнуть первый элемент.
- Пример массива в котором сначала было три элемента, потом из него вытолкнули два первых элемента и остался только один:
macro shift { @jobs = (нуб, вор, охотник) log Массив \@jobs состоит из @jobs элементов: $jobs[0], $jobs[1] и $jobs[2] &shift(@jobs) log Теперь массив \@jobs состоит из @jobs элементов: $jobs[0] и $jobs[1] &shift(@jobs) log Теперь массив \@jobs состоит из @jobs элемента: $jobs[0] }
- В консоли увидим:
[eventmacro message] Массив @jobs состоит из 3 элементов: нуб, вор и охотник [eventmacro message] Теперь массив @jobs состоит из 2 элементов: вор и охотник [eventmacro message] Теперь массив @jobs состоит из 1 элемента: охотник
- Обратите внимание, что функция &shift сдвигает весь массив влево, т.е. после первого сдвига элемент 'охотник' переместится с индекса 2 на 1, а после второго сдвига получит индекс 0.
- &unshift(@array, newmember)
- Функция &unshift требует два аргумента - массив и его новый элемент, который после сдвига массива вправо попадёт на освободившееся место в начале.
- Пример создания массива с помощью функции &unshift:
macro unshift { &unshift(@monsters, Поринг) &unshift(@monsters, Волк) &unshift(@monsters, Мая) log Массив \@monsters состоит из @monsters элементов: $monsters[0], $monsters[1] и $monsters[2] }
- В консоли увидим:
[eventmacro message] Массив \@monsters состоит из @monsters элементов: Мая, Волк, Поринг
- Обратите внимание, что функция &unshift сдвигает весь массив вправо, т.е. последний добавленный элемент 'Мая', оказывается на первом месте.
Хэш
- Чтобы инициализировать переменную типа хэш, нужно в круглых скобках прописать через запятую список пар: "ключ => значение":
%variable = (key1 => value1, key2 => value2)
- Чтобы инициализировать переменную типа хэш, нужно в круглых скобках прописать через запятую список пар: "ключ => значение":
- Чтобы обратиться к элементу хэша, нужно использовать знак $ вместо % и в фигурных скобках { } написать ключ:
$variable{key1}
- Чтобы обратиться к элементу хэша, нужно использовать знак $ вместо % и в фигурных скобках { } написать ключ:
- Ключ может состоять из букв и цифр.
- Получить количество элементов (т.е. пар) в хеше:
%variable
- Получить количество элементов (т.е. пар) в хеше:
macro Hello { %ages = (Kaya => 25, Namrok => 32) log Возраст Каи: $ages{Kaya} лет, а Намрока: $ages{Namrok} года }
- В консоли увидим:
[eventmacro message] Возраст Каи: 25 лет, а Намрока: 32 года
- значения ключей хеша - это обычные скаляры.
- Значениям хеша можно присвоить данные:
$name{first} = Гарри $name{last} = Поттер
- Числовые значения хеша можно увеличить\уменьшить на единицу:
macro Counter { $hash{monterskilled} = 0 log Значение \$hash{monterskilled}: $hash{monterskilled} $hash{monterskilled}++ log Новое значение: $hash{monterskilled} $hash{monterskilled}-- log Прежнее значение: $hash{monterskilled} }
- Значение ключа хеша можно уничтожить, присвоив ему специальное слово undef или unset:
macro undef { $myhash{value} = 1 log Значение \$myhash{value}: $myhash{value} $myhash{value} = undef # также можно использовать 'unset' log \$myhash{value} теперь уничтожена: $myhash{value} }
- В консоли увидим:
[eventmacro message] Значение $myhash{value}: 1 [eventmacro message] $myhash{value} теперь уничтожена:
- Функции для работы с хэшами
- Существует две функции, которые предназначены для работы с хэшами:
- &delete: удаляет пару ключ\значение
- &exists: проверяет существует ли значение у заданного ключа
- &delete($<хэш>{<ключ>})
- Функции &delete требуется указать ключ хэша, который следует удалить, например:
&delete ( $hash{key} )
- &exists($<хэш>{<ключ>})
- Функции &exists требуется указать ключ хэша, который следует проверить. Если у заданного <ключа>есть значение, то функция вернёт
1
, в противном случае -0
. Например:&exists ( $hash{key} )
- Пример
macro hash { %fruitsprice = (apple => 1000, banana => 700) log Хэш \%fruitsprice состоит из %fruitsprice элементов log Цена на яблоки: $fruitsprice{apple}, а на бананы: $fruitsprice{banana} &delete($fruitsprice{apple}) log Хэш \%fruitsprice состоит из %fruitsprice элемента if ( &exists($fruitsprice{apple}) ) { log Цена на яблоки: $fruitsprice{banana} } else { log В хэше нет яблок } if ( &exists($fruitsprice{banana}) ) { log Цена на бананы: $fruitsprice{banana} } else { log В хэше нет бананов } }
- В консоли увидим:
[eventmacro message] Хэш %fruitsprice состоит из 2 элементов [eventmacro message] Цена на яблоки: 1000, а на бананы: 700 [eventmacro message] Хэш %fruitsprice состоит из 1 элемента [eventmacro message] В хэше нет яблок [eventmacro message] Цена на бананы: 700
Особые переменные
В эвент-макросе есть особые переменные, названия которых начинаются с точки. Они автоматически создаются плагином eventMacro.
Переменная | Описание | Пример |
---|---|---|
$.time | текущее время в виде unix timestamp | 1482275422 |
$.datetime | текущая дата и время | Tue Dec 20 21:22:34 2016 |
$.second | текущее значение секунд (0 - 59) | 53 |
$.minute | текущее значение минут (0 - 59) | 34 |
$.hour | текущее значение часов в 24-х часовом формате | 14 |
$.dayofmonth | день месяца | 19 |
$.dayofweek | день недели (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) | Wednesday |
$.map | местонахождение персонажа, локация | prontera |
$.incity | булев_флаг, 1 если персонаж в городе, иначе 0 | 1 |
$.inlockmap | булев_флаг, 1 если персонаж на lockMap, иначе 0 | 1 |
$.job | профессия персонажа | Swordman |
$.pos | координаты персонажа | 123 234 |
$.name | имя персонажа | ya4ept |
$.hp | значение HP (жизнь) | 2304 |
$.sp | значение SP (мана) | 345 |
$.lvl | значение базового уровня | 175 |
$.joblvl | значение профессионального уровня | 60 |
$.spirits | количество сферок у монка или монеток у ганса | 3 |
$.zeny | количество денег (зени) | 8478341 |
$.weight | вес инвентаря персонажа | 1948 |
$.weightpercent | загруженность персонажа в процентах | 81.5 |
$.maxweight | максимальная грузоподъемность персонажа | 2400 |
$.status | список висящих на персонаже статусов (см. файл statusnametable.txt) | Attention Concentrate,Endure,Two-Hand Quicken |
$.statushandle | список висящих на персонаже статусов, в виде констант | SM_ENDURE,KN_TWOHANDQUICKEN |
$.inventoryitems | количество предметов в инвентаре | 13 |
$.cartweight | вес предметов в телеге | 800 |
$.cartweightpercent | загруженность телеги в процентах | 10 |
$.cartmaxweight | максимальная грузоподъемность телеги | 8000 |
$.cartitems | количество предметов в телеге | 21 |
$.cartmaxitems | максимально возможное количество предметов в телеге | 100 |
$.shopopen | булев_флаг, 1 если магазин открыт, иначе 0 | 0 |
$.storageopen | булев_флаг, 1 если открыт склад, иначе 0 | 1 |
$.storageitems | количество предметов на складе | 432 |
$.storagemaxitems | максимально возможное количество предметов на складе | 600 |
$.param[N] | аргументы командной строки (см. Синтаксис) | - |
$.caller | название последнего сработавшего автомакроса | - |
Функции эвент-макроса
Функции макро-языка имеют вид &<название> (<аргументы>). Функциями можно пользоваться почти везде внутри блока macro (кроме goto, end, названиях меток (label), названиях макроса в конструкциях call и set). Все функции кроме &nick()
могут принимать переменные в качестве аргументов.
- &questStatus (<questID>)
- Вернёт статус квеста по его <questID>, возможные значения: "inactive", "incomplete" или "complete".
- &questInactiveCount (<questID1>,<questID2>,<questID3>,etc)
- Вернёт количество взятых, но не активных (т.е. "inactive"), квестов.
- &questIncompleteCount (<questID1>,<questID2>,<questID3>,etc)
- Вернёт количество взятых, но незавершенных (т.е. "incomplete"), квестов.
- &questCompleteCount (<questID1>,<questID2>,<questID3>,etc)
- Вернет количество завершенных квестов, т.е. со статусом "complete".
- &inventory (<имя_предмета> | <ID_предмета>)
- Вернёт индекс предмета в инвентаре. В качестве аргумента принимает имя предмета или его ИД. Если такого предмета нет, то возвращает -1.
- &Inventory (<имя_предмета> | <ID_предмета>)
- Как и &inventory вернёт индекс предмета в инвентаре, но если таких предметов несколько - вернёт список их индексов через запятую. Если такого предмета нет, то возвращает -1.
- &invamount (<имя_предмета> | <ID_предмета>)
- Вернёт количество указанного предмета в инвентаре. Если такого предмета нет, то возвращает 0.
- &InventoryType (usable|equip|card|etc)
- Вернёт список индексов предметов заданного типа (через запятую), находящихся в инвентаре. Если таких предметов нет, то вернёт
-1
.
- &cart (<имя_предмета> | <ID_предмета>)
- Вернёт индекс указанного предмета в телеге. Если такого предмета нет, то возвращает -1.
- &Cart (<имя_предмета> | <ID_предмета>)
- Как и &cart вернёт индекс предмета в телеге, но если таких предметов несколько - вернёт список их индексов через запятую. Если такого предмета нет, то возвращает -1.
- &cartamount (<имя_предмета> | <ID_предмета>)
- Вернёт количество предмета в телеге. Если такого предмета нет, то возвращает 0.
- &storage (<имя_предмета> | <ID_предмета>)
- Вернёт индекс указанного предмета на складе. Если такого предмета на складе нет, то возвращает -1.
- &Storage (<имя_предмета> | <ID_предмета>)
- Как и &storage вернёт индекс предмета на складе, но если таких предметов несколько - вернёт список их индексов через запятую. Если такого предмета нет, то возвращает -1.
- &storamount (<имя_предмета> | <ID_предмета>)
- Вернёт количество предмета на складе. Если такого предмета нет, то возвращает 0.
- &vender (<name>)
- Вернёт индекс продавца (игрока) с именем <name>. Если такого продавца нет в пределах видимости, то возвращает -1.
- &venderitem (<имя_предмета | <ID_предмета>)
- Вернёт индекс предмета в магазине у торгаша (игрока). Если такого предмета в магазине нет, то возвращает -1.
- &venderprice (<имя_предмета> | <indexID>)
- Вернёт цену предмета в магазине у торгаша (игрока). В качестве аргумента принимает имя предмета или его индекс (который можно получить через функцию выше &venderitem).
- &venderamount (<индекс_предмета>)
- Вернёт количество предметов у торгаша (игрока). Если такого предмета в магазине нет, то возвращает -1.
- &store (<имя_предмета> | <ID_предмета>)
- Ищёт заданный предмет в открытом магазине (НЦП) и возвращает его индекс. Если такого предмета нет, то возвращает -1.
- &shopamount (<имя_предмета> | <ID_предмета>)
- Вернёт количество предметов, продающихся в магазине (НПЦ).
- &npc (<x> <y> | "<NPC_name>" | /regexp/i)
- Вернёт индекс неписи, стоящей на заданных координатах <x> <y> или с именем <NPC_name> или если имя НПЦ соответствует шаблону regexp. Если непись найти не удалось, то возвращает -1.
- &player (<name>)
- Вернёт индекс игрока с именем <name>. Если такого игрока нет в пределах видимости, то возвращает -1.
- &monster (<имя_моба> | <ID>)
- Вернёт индекс моба. В качестве аргумента принимает имя моба или его ИД. Если такого моба нет в пределах видимости, то возвращает -1.
- &config (<параметр>)
- Вернёт значение <параметра> из config.txt
- &random ("<параметр 1>", "<параметр 2>", $var, ...)
- Вернёт один из перечисленных в скобках параметров. Параметры необходимо указывать в кавычках. В качестве параметров можно указывать переменные.
- &rand (<n>, <m>)
- Вернёт случайное число в диапазоне от <n> до <m> включительно.
- &eval (<параметр>)
- Вычисляет значение <параметра>. Например, если "$v = 8", то результатом функции
&eval ($v + 2)
будет число 10. Параметр функции &eval - это выражение на языке Perl, и оно не имеет ничего общего с синтаксисом эвент-макроса. В <параметре> можно использовать переменные эвент-макроса вида $var и результаты других &<функций>, например:warning &eval(&rand(0,5) + 1)
- &arg ("<строка>", <n>)
- Вернёт <n>-ое слово из <строки>. Слова в строке разделяются знаками:
,.:;\"\'!?\r\n
. Если <n> больше количества слов в строке, то возвращается пустая строка. Аргумент <n> может быть как целым числом, так и целочисленной переменной. Например:
$n = 3 log &arg("aa ! bb : cc . dd",$n)
- &nick (<строка>)
- Экранирует все метасимволы regexp и некоторые специальные символы perl с помощью \ (обратного слэша). Придуман специально для экранирования некоторых имён персонажей. Например, ник "}|{oJIA" будет преобразован в "\}|\{oJIA"
- &split (<разделитель>, <переменная>)
- Создаёт массив из <переменной> на основе <разделителя>. Вывод этой функции обязательно должен присваиваться массиву. Например:
macro split { $list = a~b~c log переменная: $list @array = &split('~', $list) log размер массива: @array, array[1]=$array[1] }
- &keys (<%хэш>)
- Создаёт массив из ключей <хэша>. Вывод этой функции обязательно должен присваиваться массиву. Например:
macro split { %hash = (a => "foo", b => "bar") log размер хэша: %hash @array = &keys (%hash) log размер массива: @array, array[1]=$array[1] }
- &values (<%хэш>)
- Создаёт массив из ключей <хэша>. Вывод этой функции обязательно должен присваиваться массиву.
- &listlength (<список_разделённый_запятой>)
- Вернёт количество элементов в списке разделённом запятой, например:
macro listlength { log количество элементов: &listlength(a, b, c) }
- &strip (<текст>)
- Удаляет из <текста> круглые скобки
( )
, например:
macro strip { $text = (привет))))) мир) log текст без скобок: "&strip($text)" }
Цепочка команд
Несколько команд выполняются друг за другом без задержки, если они объединены в цепочку команд квадратными скобками [ и ].
0 macro foo { 1 do whatever 2 log yet another line 3 [ 4 do something 5 do something else 6 log foo 7 ] 8 log done 9 }
Строка 3 начинает цепочку команд и сама по себе не вносит никакой задержки. Строки 4, 5 и 6 выполняются сразу же, как только предыдущая команда завершится. В цепочке команд нет задержек и выполнение команд не может быть прервано. Строка 7 завершает цепочку команд и строка 8 будет выполнятся через положенную задерку в $macro_delay секунд.
Подстроки
Вместо использования по одной команде на строку, можно отделять команды между собой символом точки с запятой ";" и располагать их в одной строке.
macro foo { $i = 1; pause 5; log \$i = $i; $ii = 2; $iii = 3; $i++; $ii--; lock automacroName; release automacroName; set overrideAI 1 }
Разделенные точкой с запятой ";" команды будут выполняться с обычной задержной macro_delay.
Операторы сравнения
Плагин eventMacro предлагает следующие операторы сравнения:
Оператор | Описание |
---|---|
< | меньше |
<= | меньше, либо равно |
== или = | равенство, см. |
> | больше |
>= | больше, либо равно |
!= | неравенство |
~ | <леваячасть> есть элемент <праваячасть>, где <праваячасть> список, разделенный символом запятой "," |
=~ | <леваячасть> подпадает под регулярное выражение - regexp из <праваячасть>. |
arg .. arg2 | диапазон значений между arg и arg2, где arg число, процент или переменная. |
Управление потоком и метки
- Как и в большинстве языков программирования, в плагине eventMacro реализованы привычные конструции типа "if .. else", "while", "foreach", "for .. next", "do .. while" и некоторые другие.
- Кроме того есть операции "if", "else", "elsif", "switch", "case", "goto" и "while". При помощи label можно ставить метки в коде.
Синтаксис условных операторов
If
Right now, macro if conditions are very close to the perl if statements. It accepts unlimited number of statements in just one if condition line, regexp matching is allowed (unfortunately, no backreference using parenthesis) and the use of && for and meaning and || for or meaning.
Можно использовать простое выражение, которое проверяет одно условие:
if (arg1 <Operators> arg2) (goto <label> | call <macro> [<parameters>] | stop | { )
Проверка двух условий, объединённых оператором или, хотя бы одно условие должно быть истинным:
if (arg1 <Operators> arg2 || arg3 <Operators> arg4) (goto <label> | call <macro> <parameters> | stop | { )
Проверка двух условий, объединённых оператором и, оба условия должны быть истинными:
if (arg1 <Operators> arg2 && arg3 <Operators> arg4) (goto <label> | call <macro> <parameters> | stop | { )
Примеры использования обоих операторов:
if ((arg1 <Operators> arg2 || arg3 <Operators> arg4) && arg5 <Operators> arg6) (goto <label> | call <macro> <parameters> | stop | { ) if ((arg1 <Operators> arg2 && arg3 <Operators> arg4) || arg5 <Operators> arg6) (goto <label> | call <macro> <parameters> | stop | { ) if ((arg1 <Operators> arg2 && arg3 <Operators> arg4) || (arg5 <Operators> arg6 && arg7 <Operators> arg8)) (goto <label> | call <macro> <parameters> | stop | { ) if ((arg1 <Operators> arg2 || arg3 <Operators> arg4) && (arg5 <condition> arg6 || arg7 <condition> arg8)) (goto <label> | call <macro> <parameters> | stop | { )
- Notice inside of each brackets containing the AND and OR symbols.
причём
- arg может быть переменной, a nested variable, a special keyword, &eval, текстом или числом или даже Perl Subroutines функцией.
- <label>, название метки в коде, может быть только из букв и цифр.
- <macro>, название макроса
- <parameters> параметры макроса, внутри макроса можно к ним обратиться как $.param[0], $param[1] и т.д.
- < { >, начало блока команд, которые запустятся, если условие истинно. Блок команд закрывается соответствующей фигурной скобкой }.
Примечание: Внутри скобок можно использовать неограниченное количество сравнений.
if (arg1 <Operators> arg2 || arg3 <Operators> arg4 || ... || argN <Operators> argN+1) (goto <label> | call <macro> <parameters> | stop)
Where;
- arg can be a variable, a nested variable, a special keyword, &eval or letters and numbers.
- All the conditions is up to the Nth argument <Operators> N+1th argument.
- While N is an integer number/s which is greater than zero.
Постфиксный if
Кроме того, можно использовать if после команды.
<command> if (arg1 <Operators> arg2)
Т.е. команда перед if запустится только тогда, когда условие истинно. Условие пишется по точно таким же правилам, как было сказано выше.
В следующем примере обе команды равнозначны и делают одно и то же:
call buy if ($.zeny > 1000) if ($.zeny > 1000) call buy
Else
В случае, если if использовался с фигурными скобками ( { ), то можно использовать else после закрывающей фигурной скобки ( } ).
if (arg1 <Operators> arg2) { command1 command2 ... commandN } else { command3 command4 ... commandN }
В этом случае если условие в круглых скобках истинно, то выполнятся только команды 1 и 2, если условие ложное, то выполнятся только команды 3 и 4.
Примечание: в фигурных скобках можно использовать неограниченное количество команд.
Примечание: ветка else - не обязательна.
Elsif
Этот оператор работает как else + if одновременно. Оператор elsif нужен для проверки следующего условия. Оператор else срабатывает, когда ни одно условие не выполнилось.
if (arg1 <Operators> arg2) { command1 command2 ... comandoN } elsif (arg1 <Operators> arg2) { command3 command4 ... commandN } else { command5 command6 ... commandN }
В этом случае если первое условие истинно, то будут выполнены только команды 1 и 2, если оно ложное, то далее идёт проверка второго условия. Если второе условие истинно, то будут выполнены только команды 3 и 4. Если оба условия ложные, то будут выполнены только команды 5 и 6.
Примечание: ветки elsif и else - не обязательны.
Switch/case
Этот оператор напоминает if с кучей последующих elseif. Данный оператор будет полезным, когда необходимо проверить одну переменную на разные условия.
switch (arg1) { case (<Operators> arg2) (goto <label> | call <macro> <parameters> | stop | {) (Если вы используете "{", то команды для выполнения должна находиться здесь. Каждая команда должна быть написана в новой строчке. В конце обязательно должна быть закрывающая скобка "}") case (<Operators> arg2) (goto <label> | call <macro> <parameters> | stop | {) (Если вы используете "{", то команды для выполнения должна находиться здесь. Каждая команда должна быть написана в новой строчке. В конце обязательно должна быть закрывающая скобка "}") ... else (goto <label> | call <macro> <parameters> | stop | {) (Если вы используете "{", то команды для выполнения должна находиться здесь. Каждая команда должна быть написана в новой строчке. В конце обязательно должна быть закрывающая скобка "}") }
Примечание: если не сработал ни один case, тогда отработает else.
Примечание: использовать else не обязательно.
Примеры с условными операторами
Этот макрос двигает персонажа в случайном направлении: на север, юг, восток или запад.
macro walk { $num = &rand(1, 4) if ($num == 1) { do c я пойду в сторону 1 (на север) do north } if ($num == 2) { do c я пойду в сторону 2 (на юг) do south } if ($num == 3) { do c я пойду в сторону 3 (на восток) do east } if ($num == 4) { do c я пойду в сторону 4 (на запад) do west } }
Давайте перепишем этот макрос с постфиксным if:
macro walk { $num = &rand(1, 4) do c я пойду в сторону $num do north if ($num == 1) do south if ($num == 2) do east if ($num == 3) do west if ($num == 4) }
Следующий макрос использует конструкцию if/else, чтобы определить, есть ли у персонажа больше 1000 зени или нет.
macro checkZeny { if ($.zeny > 1000) { do c У меня больше 1.000z! } else { do c у меня 1.000z или меньше... } }
Чуть усложнённый пример, чтобы узнать сколько зени в кармане: больше тысячи, ровно тысяча или меньше. В зависимости от этого выдаются разные смайлики.
macro checkZeny { if ($.zeny > 1000) { do c у меня больше 1.000z! do e money } elsif ($.zeny == 1000) { do c у меня ровно 1.000z. do e ! } else { do c у меня меньше 1.000z do e panic } }
Переработаем предыдущий макрос, с использованием switch/case:
macro checkZeny { switch ($.zeny) { case (> 1000) { do c у меня больше 1.000z! do e money } case (== 1000) { do c у меня ровно 1.000z. do e ! } else { do c у меня меньше 1.000z do e panic } } }
Следующий макрос показывает использование if вместе с goto:
macro checknum { $num = &rand(1, 3) if ($num == 1) goto one if ($num == 2) goto two if ($num == 3) goto three :one log \$num = 1 stop :two log \$num = 2 stop :three log \$num = 3 }
Переработаем предыдущий макрос, с использованием call вместо goto.
macro checknum { $num = &rand(1, 3) if ($num == 1) call one if ($num == 2) call two if ($num == 3) call three } macro one { log $num = 1 } macro two { log $num = 2 } macro three { log $num = 3 }
Сложный макрос, где переменная $i, равная 1, подвергается изощрённым проверкам и так и сяк.
macro if { $i = 1 log \$i = $i if (((($i = 1 || $i < 5 || $i ~ 0 .. 5) && &eval(&eval($i - 1) - &eval($i - 0)) = -1) && ($i != 2 && $i > 0 && &eval($i - 1) = 0) && ($i != 2 && $i > 0 && &eval($i - 1) = 0)) && $i = 1) goto somewhere if (($i = 1 || $i < 5 || $i ~ 0 .. 5) && ($i != "" && $i > 0 && &eval($i - 1) = 0)) goto somewhere if (&eval (&eval($i-1) - 1) != "") goto somewhere if ((($i = 1) || ($i < 5 && $i ~ 0 .. 5)) && ($i != "" && $i > 0 && &eval($i - 1) > 0)) goto somewhere log ko stop :somewhere log OK }
Цикл while
Цикл по условию while запускает команды раз за разом до тех пор, пока условие не перестанет быть истинным.
Синктаксис
while (arg <condition> arg) { do bla bla ... }
причём
- arg - может переменной, вложенной переменной, ключевым словом, &eval, числом или строкой.
Операторы сравнения смотри тут: Operators.
Пример
Пробежим цикл десять раз, от $i равного 0 до 9.
macro while { $i = 0 while ($i < 10) { log \$i = $i $i++ } }
Вывод на консоль:
[eventmacro log] \$i = 0 [eventmacro log] \$i = 1 [eventmacro log] \$i = 2 [eventmacro log] \$i = 3 [eventmacro log] \$i = 4 [eventmacro log] \$i = 5 [eventmacro log] \$i = 6 [eventmacro log] \$i = 7 [eventmacro log] \$i = 8 [eventmacro log] \$i = 9
Автомакросы
На данный момент вы научились объявлять макросы и вызывать их, набирая в консоли OpenKore 'eventMacro <macro name>'.
Автомакрос нужен для того, чтобы автоматически запускать макрос при срабатывании некоторых условий.
Автомакрос состоит из:
- одного или нескольких параметров (параметр call среди них единственный обязательный).
- одного или нескольких условий.
Автомакрос не сработает, если в данный момент исполняется макрос в т.н. эксклюзивном режиме. В любом другом случае очередь макросов очищается (другими словами, всё останавливается) и уже тогда запускается нужный макрос.
Ещё раз - мы используем автомакрос для проверки неких условий, если они выполняются, то автомакрос срабатывает и запускает указанный макрос.
Параметры
- Каждый параметр упоминается не больше одного раза.
- Параметры определяют, каким образом будет работать автомакрос или вызванный им макрос.
- У большинства параметров есть значение по умолчанию.
- call
-
- call - это единственный обязательный параметр в каждом автомакросе.
- call определяет, какой макрос будет запущен.
- call может быть названием макроса или блоком команд.
Пример с использованием названия макроса:
automacro <название автомакроса> { <тут только условия и параметры автомакроса> call myMacro } macro myMacro { <тут обычные инструкции макроса> # например: do move prontera do move payon }
Пример с использованием блока команд:
automacro <название автомакроса> { <тут только условия и параметры автомакроса> call { <тут обычные инструкции макроса> # например: do move prontera do move payon } }
- Оба примера выше равнозначны и делают то же самое.
- Обратите внимание, что блок команд в параметре call подчиняется тем же правилам что и обычный macro-блок.
Синтаксис первого автомакроса удобен, когда у вас есть несколько автомакросов, которые могут вызывать один и тот же макрос:
automacro First { <одни условия> call print } automacro Second { <другие условия> call print } macro print { log $.caller triggered }
- delay
-
- delay - необязательный параметр.
- delay определяет время в секундах, которое пройдёт перед тем, как запустится макрос из параметра call.
- Значение по умолчанию: 0.
- Значением параметра может быть только число.
automacro <название автомакроса> { <тут только условия и параметры автомакроса> delay 5 call myMacro } macro myMacro { <тут обычные инструкции макроса> log Текст будет напечатан через 5 секунд, после того, как сработает автомакрос. }
- run-once
-
- run-once - необязательный параметр.
- run-once определяет, сколько раз может сработать автомакрос - только один раз или неограниченное количество раз.
- Значение по умолчанию: 0.
- Если 1 , то автомакрос сработает лишь однажды, если 0, то может сработать много раз.
- Чтобы уже сработавшему автомакросу с run-once 1 разрешить сработать ещё раз, можно использовать команду 'release' Macro Syntax.
automacro myautomacro { <тут только условия и параметры автомакроса> run-once 1 call myMacro } automacro myaotherauto { <тут только условия и параметры автомакроса> run-once 0 call myMacro } macro myMacro { <тут обычные инструкции макроса> log Данный макрос может быть вызван из myautomacro только один раз, log но из myaotherauto он может быть вызван много раз. }
- CheckOnAI
-
- CheckOnAI - необязательный параметр.
- CheckOnAI определяет, в каком режиме AI может сработать автомакрос.
- Значение по умолчанию можно установить в параметре конфига eventMacro_CheckOnAI Configuration files.
- Если не указать данный параметр в автомакросе, то будет использовано значение по умолчанию, которое берётся из параметра конфига eventMacro_CheckOnAI.
- Если в конфиге не прописано значение по умолчанию eventMacro_CheckOnAI, то используется: auto
- Значение параметра - список через запятую следующих слов: auto, manual и off.
automacro MyAuto { <тут только условия и параметры автомакроса> CheckOnAI manual call myMacro } macro myMacro { <тут обычные инструкции макроса> log Автомакрос MyAuto сработает только в ручном режиме бота (manual) } automacro MyAuto2 { <тут только условия и параметры автомакроса> CheckOnAI manual, off call myMacro } macro myMacro2 { <тут обычные инструкции макроса> log Автомакрос MyAuto2 сработает в режимах manual или off. }
- disabled
-
- disabled - необязательный параметр.
- disabled определяет, активен ли автомакрос.
- Значение по умолчанию: 0.
- Если 1, то автомакрос не активен и не сможет сработать. Если 0, то сработает при наступлении условий.
automacro MyAuto { <тут только условия и параметры автомакроса> disabled 1 call myMacro } macro myMacro { <тут обычные инструкции макроса> log Автомакрос MyAuto никогда не сработает, он выключен. } automacro MyAuto2 { <тут только условия и параметры автомакроса> disabled 0 call myMacro } macro myMacro2 { <тут обычные инструкции макроса> log Автомакрос MyAuto2 сработает как положено при наступлении условий. }
- overrideAI
-
- overrideAI - необязательный параметр.
- overrideAI определяет, занесёт ли плагин eventMacro макро-команды в очередь задач AI.
- Значение по умолчанию: 0.
- Если 0, то команды макроса попадают в очередь задач AI как 'eventMacro' и каждая команда сработает только тогда, когда до неё дойдёт очередь, т.е. AI переключится на задачу 'eventMacro'.
- Если 1, то команды макроса не попадут в очередь задач AI и не будут управляться ею. Команды тупо выполняются одна за другой с интервалом macro_delay.
- It's important to note that when it's value is 1 since it won't be put into AI queue normal AI functions will continue as normal, like mob hunting or autostorage.
automacro MyAuto { <тут только условия и параметры автомакроса> overrideAI 0 call myMacro } macro myMacro { <тут обычные инструкции макроса> do move prontera log До этой строки макроса дело дойдёт только тогда, когда бот дойдёт до Пронтеры, т.е. довольно длительная команда 'move prontera' выполнится. Ибо в списке задач AI команда 'move' стоит первая в очереди. } automacro MyAuto2 { <тут только условия и параметры автомакроса> overrideAI 1 call myMacro } macro myMacro2 { <тут обычные инструкции макроса> do move prontera log До этой строки макроса дело дойдёт практически сразу, через короткий промежуток macro_delay, потому что оно работает без оглядки на очередь команд AI. }
- exclusive
-
- exclusive - необязательный параметр.
- exclusive определяет, может ли исполнение макроса быть прервано.
- Значение по умолчанию: 0.
- Если 0, то исполнение макроса может быть прервано другим автомакросом.
- Если 1, то исполнение макроса невозможно прервать другим автомакросом.
automacro MyAuto { <тут только условия и параметры автомакроса> exclusive 0 call myMacro } macro myMacro { <тут обычные инструкции макроса> log Исполнение макроса может быть прервано в любой момент, что может привести к ошибке. } automacro MyAuto2 { <тут только условия и параметры автомакроса> exclusive 1 call myMacro } macro myMacro2 { <тут обычные инструкции макроса> log Так как exclusive равен 1, то макрос нельзя прервать и он отработает полностью. }
- priority
-
- priority - необязательный параметр.
- priority определяет очерёдность срабатывания автомакросов. Чем меньше номер, тем раньше до него дойдёт очередь.
- Значение по умолчанию: 0.
- Значение должно быть числом.
automacro MyAuto { <тут только условия и параметры автомакроса> priority 5 call { log Этот автомакрос стоит в очереди после MyAuto2, потому он и сработает позже. } } automacro MyAuto2 { <тут только условия и параметры автомакроса> priority 2 call { log Этот автомакрос сработает раньше MyAuto, потому что он первый в очереди. } }
- macro_delay
-
- macro_delay - необязательный параметр.
- macro_delay определяет паузу между выполнениями команд в макросе, измеряется в секундах.
- Значение по умолчанию: 1.
- Значение должно быть числом.
automacro MyAuto { <тут только условия и параметры автомакроса> macro_delay 2 call { log Этот текст выведется при запуске макроса. log А этот текст напечатается через две секунды. } } automacro MyAuto2 { <тут только условия и параметры автомакроса> macro_delay 5 call { log Этот текст выведется при запуске макроса. log А этот текст напечатается через пять секунд. } }
- orphan
-
- orphan - необязательный параметр.
- orphan определяет, что будет делать плагин eventMacro делать с макросами в том случае, когда плагин уберут из очереди задач AI.
- Значение по умолчанию можно настроить в параметре конфига eventMacro_orphans Configuration files.
- Если параметр не указан в автомакросе, то тогда будет использовано значение из параметра конфига eventMacro_orphans.
- Если и в конфиге не указан параметр eventMacro_orphans, тогда используется значение: terminate
- Возможные значения параметра:
Значение | Описание |
---|---|
terminate | прервать, остановить работу макроса (равнозначно команде eventMacro stop) |
terminate_last_call | прервать только последний вызванный макрос. Таким образом, если макрос 'mac1' вызвал 'mac2', который в свою очередь вызвал 'mac3', то только 'mac3' будет прерван, а вызвавший его макрос 'mac2' продолжит работу. |
reregister | заново регистрирует макросы в очередь задач AI, затирая другие записи. Таким образом брошенный макрос сможет сразу же продолжить работу. |
reregister_safe | заново регистрирует макросы в очередь задач AI, когда она пустеет и AI нечего делать. Это означает, что макрос продолжит работать только после завершения всех остальных задач. |
- repeat
-
- repeat - необязательный параметр.
- repeat определяет сколько раз подряд будет запущен макрос.
- Значение по умолчанию: 1.
- Значение должно быть числом.
automacro <automacro name> { <тут только условия и параметры автомакроса> repeat 3 call myMacro } macro myMacro { <тут обычные инструкции макроса> log Это сообщение будет напечатано трижды, потому что макрос будет вызван три раза. }
- timeout
-
- timeout - необязательный параметр.
- timeout - определяет, через какое время этот автомакрос может сработать снова.
- Значение по умолчанию: 0.
- Значение должно быть числом.
automacro <automacro name> { <тут только условия и параметры автомакроса> timeout 60 call myMacro } macro myMacro { <тут обычные инструкции макроса> log Этот макрос будет вызываться не чаще одного раза в минуту. }
Условия
- Условия делятся на две категории: состояние и событие.
- Большинство условий присваивают некие значения специальным переменным, когда автомакрос срабатывает.
- В большинстве условий можно использовать переменные.
- Каждый автомакрос может срабатывать только на одно событие.
- Большинство условий состояния может быть использовано более одного раза в автомакросе.
- Для каждого условие далее следует подробное описание.
- Плагин eventMacro устроен так, что для каждого условия есть свой модуль - файл pm. Все файлы в папке eventMacro/Condition - это условия автомакросов.
Состояние
- Условные выражения состояний возвращают true или false.
- Автомакрос сработает только если все ого условия состояний будут true.
- BaseLevel
-
- Описание: Проверяет базовый уровень персонажа.
- Не поддерживает проценты прогресса.
- Синтаксис:
BaseLevel <Math condition operators>
- Пример:
BaseLevel >= 30
- Устанавливает значение переменной:
$.BaseLevelLast => в переменную записывается базовый уровень, при котором условное выражение стало true
- JobLevel
-
- Описание: Проверяет профессиональный уровень персонажа.
- Не поддерживает проценты прогресса.
- Синтаксис:
JobLevel <Math condition operators>
- Пример:
JobLevel = 70
- Устанавливает значение переменной:
$.JobLevelLast => в переменную записывается профессиональный уровень, при котором выражение стало true
- CartCurrentWeight
-
- Описание: Смотрит вес предметов в телеге.
- Может работать с процентами.
- Синтаксис:
CartCurrentWeight <Math condition operators>
- Примеры:
CartCurrentWeight > 80% CartCurrentWeight > 4000
- Устанавливает значения переменных:
$.CartCurrentWeightLast => запоминает вес предметов в телеге, при котором выполнилось условие $.CartCurrentWeightLastPercent => запоминает вес предметов в телеге в процентах от максимального, при котором выполнилось условие
- CartMaxWeight
-
- Описание: Проверяет вместимость телеги, т.е. максимальный вес предметов в телеге.
- Не работает с процентами.
- Синтаксис:
CartMaxWeight <Math condition operators>
- Пример:
CartMaxWeight > 4000
- Устанавливает значение переменной:
$.CartMaxWeightLast => запоминает вместимость телеги на момент срабатывания условия
- CartCurrentSize
-
- Описание: Проверяет количество предметов в телеге.
- Может работать с процентами.
- Синтаксис:
CartCurrentSize <Math condition operators>
- Примеры:
CartCurrentSize > 80% CartCurrentSize > 4000
- Устанавливает значение переменных:
$.CartCurrentSizeLast => запоминает количество предметов в телеге на момент срабатывания условия $.CartCurrentSizeLastPercent => запоминает количество предметов в телеге в процентах от максимального на момент срабатывания условия
- CartMaxSize
-
- Описание: Проверить вместимость телеги в предметах.
- Не работает с процентами.
- Синтаксис:
CartMaxSize <Math condition operators>
- Пример:
CartMaxSize > 4000
- Устанавливает значение переменной:
$.CartMaxSizeLast => запоминает максимальную вместимость телеги на момент срабатывания условия
- CharCurrentWeight
-
- Описание: проверяет текущий вес инвентаря у персонажа.
- Может работать с процентами.
- Синтаксис:
CharCurrentWeight <Math condition operators>
- Примеры:
CharCurrentWeight > 80% CharCurrentWeight > 4000
- Устанавливает значения переменных:
$.CharCurrentWeightLast => запоминает вес инвентаря персонажа на момент срабатывания условия $.CharCurrentWeightLastPercent => запоминает вес инвентаря персонажа в процентах от максимальной загрузки на момент срабатывания условия
- CharMaxWeight
-
- Описание: проверяет максимально переносимый груз в инвентаре персонажа.
- Не работает с процентами.
- Синтаксис:
CharMaxWeight <Math condition operators>
- Пример:
CharMaxWeight > 4000
- Устанавливает значение переменной:
$.CharMaxWeightLast => запоминает максимально переносимый груз в инвентаре персонажа на момент срабатывания условия
- FreeStatPoints
-
- Описание: проверяет нераспределённые стат-поинты.
- Не работает с процентами.
- Синтаксис:
FreeStatPoints <Math condition operators>
- Пример:
FreeStatPoints > 20
- Устанавливает значение переменной:
$.FreeStatPointsLast => запоминает количество свободных стат-поинтов на момент срабатывания условия
- FreeSkillPoints
-
- Описание: проверяет количество свободных очков умений.
- Не работает с процентами.
- Синтаксис:
FreeSkillPoints <Math condition operators>
- Пример:
FreeSkillPoints > 20
- Устанавливает значение переменной:
$.FreeSkillPointsLast => запоминает количество свободных очков умений на момент срабатывания условия
- CurrentHP
-
- Описание: проверяет количество очков жизни (т.е. hp) у персонажа.
- Может работать с процентами.
- Синтаксис:
CurrentHP <Math condition operators>
- Примеры:
CurrentHP > 80% CurrentHP > 4000
- Устанавливает значение переменных:
$.CurrentHPLast => запоминает, сколько было здоровья у персонажа на момент проверки условия $.CurrentHPLastPercent => то же самое, но в процентах
- MaxHP
-
- Описание: проверяет, какое максимальное количество hp может быть у персонажа.
- Не работает с процентами.
- Синтаксис:
MaxHP <Math condition operators>
- Пример:
MaxHP > 4000
- Устанавливает значение переменной:
$.MaxHPLast => запоминает, какое максимальное количество hp могло быть у персонажа на момент проверки условия
- CurrentSP
-
- Описание: запоминает текущее значение sp у персонажа.
- Работает с процентами.
- Синтаксис:
CurrentSP <Math condition operators>
- Пример:
CurrentSP > 80% CurrentSP > 4000
- Устанавливает значение переменной:
$.CurrentSPLast => запоминает текущее значение sp на момент проверки условия $.CurrentSPLastPercent => то же самое, в процентах
- MaxSP
-
- Описание: проверяет максимально возможное количество sp у персонажа.
- Не работает с процентами.
- Синтаксис:
MaxSP <Math condition operators>
- Пример:
MaxSP > 4000
- Устанавливает значение переменной:
$.MaxSPLast => запоминает максимально возможное количество sp у персонажа на момент проверки условия
- InInventory
-
- Описание: по названию предмета проверяет его количество у персонажа в инвентаре.
- Не работает с процентами.
- Синтаксис:
InInventory "<название предмета>" <Math condition operators>
- Обратите внимание на кавычки, это важно.
- Пример:
InInventory "Red Potion" < 10
- Устанавливает значение переменной:
$.InInventoryLast => запоминает название проверяемого предмета $.InInventoryLastAmount => запоминает количество предметов
- InInventoryID
-
- Описание: по идентификатору предмета проверяет его количество у персонажа в инвентаре.
- Не работает с процентами.
- Синтаксис:
InInventoryID <идентификатор предмета> <Math condition operators>
- Пример:
InInventoryID 501 < 10
- Устанавливает значение переменной:
$.InInventoryIDLast => запоминает идентификатор предмета $.InInventoryIDLastAmount => запоминает количество предмета на момент срабатывания условия
- InStorage
-
- Описание: по названию предмета проверяет его количество на складе.
- Не работает с процентами.
- Синтаксис:
InStorage "<название предмета>" <Math condition operators>
- Обратите внимание на кавычки.
- Пример:
InStorage "Blue Potion" > 100
- Устанавливает значение переменной:
$.InStorageLast => запоминает название предмета $.InStorageLastAmount => запоминает количество на момент срабатывания условия
- InStorageID
-
- Описание: по идентификатору предмета проверят его количество на складе.
- Не работает с процентами.
- Синтаксис:
InStorageID <item ID> <Math condition operators>
- Пример:
InStorageID 507 100..500
- Устанавливает значение переменной:
$.InStorageIDLast => запоминает идентификатор предмета $.InStorageIDLastAmount => запоминает количество предметов на складе на момент срабатывания условия
- InCart
-
- Описание: по названию предмета смотрит его количество в телеге.
- Не работает с процентами.
- Синтаксис:
InCart "название предмета" <Math condition operators>
- Обратите внимание на кавычки.
- Пример:
InCart "Blue Potion" > 100
- Устанавливает значение переменной:
$.InCartLast => запоминает название предмета $.InCartLastAmount => запоминает количество на момент срабатывания условия
- InCartID
-
- Описание: по идентификатору предмета смотрит его количество в телеге.
- Не работает с процентами.
- Синтаксис:
InCartID <идентификатор предмета> <Math condition operators>
- Пример:
InCartID 507 100..500
- Устанавливает значение переменной:
$.InCartIDLast => запоминает идентификатор предмета $.InCartIDLastAmount => запоминает количество в телеге на момент срабатывания условия
- InventoryCurrentSize
-
- Описание: проверяет текущее количество предметов в инвентаре (ячейки).
- Работает с процентами. (но смысла в этом особого нет ибо места в инвентаре как раз на 100 предметов)
- Синтаксис:
InventoryCurrentSize <Math condition operators>
- Пример:
InventoryCurrentSize > 70% InventoryCurrentSize > 30
- Устанавливает значение переменной:
$.InventoryCurrentSizeLast => запоминает количество занятых ячеек в инвентаре персонажа на момент срабатывания условия
- SkillLevel
-
- Описание: по идентификатору умения или по константе проверяет, насколько умение прокачано.
- Не работает с процентами.
- Синтаксис:
SkillLevel <идентификатор умения или константа> <Math condition operators>
- Пример:
SkillLevel NV_FIRSTAID = 0 SkillLevel 10 > 5
- Устанавливает значение переменной:
$.SkillLevelLastName => запоминает название умения $.SkillLevelLastID => запоминает идентификатор умения $.SkillLevelLastHandle => запоминает константу $.SkillLevelLastLevel => собственно запоминает уровень, на который было прокачано умение на момент срабатывания условия
- Zeny
-
- Описание: проверяет, сколько у персонажа зени.
- Не работает с процентами.
- Синтаксис:
Zeny <Math condition operators>
- Пример:
Zeny > 500000
- Устанавливает значение переменной:
$.ZenyLast => запоминает количество зени на момент срабатывания условия
- StorageOpened
-
- Описание: истина, если 1 и персонаж открыл склад. Также истина, если 0 и склад закрыт. Смотря что хотим проверить.
- Синтаксис:
StorageOpened <1|0>
- Пример:
StorageOpened 1
- ShopOpened
-
- Описание: истина, если 1 и персонаж открыл свою торговую лавку. Также истина, если 0 и торговая лавка не открыта. Смотря что хотим проверить.
- Синтаксис:
ShopOpened <1|0>
- Пример:
ShopOpened 1
- InChatRoom
-
- Описание: истина, если 1 и персонаж находится в чат-комнате. Также истина, если 0 и персонаж не находится в чат-комнате.
- Синтаксис:
InChatRoom <1|0>
- Пример:
InChatRoom 0
- ChatRoomNear
-
- Описание: по регулярному выражению проверяет, есть ли рядом подходящая чат-комната.
Примечание переводчика: Тут не хватает синтаксиса, примера и описания переменных для ChatRoomNear.
Примечание переводчика: Тут не хватает описания про NpcNear.
- Синтаксис:
NpcNear <Regex>
- Пример:
NpcNear /kafra/ NpcNear /special agent/
- Устанавливает значение переменной:
$.ChatRoomNearLastID => Saves the ID of the last chat room that made ChatRoomNear become true $.ChatRoomNearLastOwnerID => Saves the ID of the owner of the last chat room that made ChatRoomNear become true $.ChatRoomNearLastOwnerName => Saves the name of the owner of the last chat room that made ChatRoomNear become true $.ChatRoomNearLastTitle => Saves the title of the last chat room that made ChatRoomNear become true
- InMap
-
- Описание: проверяет, находится ли персонаж на одной из перечисленных локаций.
- Синтаксис:
InMap <список локаций>
- Название локации может быть переменной.
- Пример:
InMap prontra, geffen, gef_fild10
- Устанавливает значение переменной:
$.InMapLast => запоминает локацию, которая вызвала срабатывание условия
- InLockMap
-
- Описание: истина, если 1 и персонаж находится на локмапе. Также истина, если 0 и персонаж не на локмапе.
- Синтаксис:
InLockMap <1|0>
- Пример:
InLockMap 1
- InSaveMap
-
- Описание: истина, если 1 и персонаж находится на локации, где у него точка сохранения. Также истина, если 0 и персонаж не находится на локации с его точкой сохранения.
- Синтаксис:
InSaveMap <1|0>
- Пример:
InSaveMap 0
- IsInCoordinate
-
- Описание: проверяет, находится ли персонаж по указанным координатам.
- Синтаксис:
IsInCoordinate <разделённый запятыми список пар координат x и y>
- Кроме точных координат понимает также диапазоны. (типа 100..200 вместо координаты x и 50..100 вместо координаты y)
- Пример:
IsInCoordinate 100 150 IsInCoordinate 120 100, 115 289, 158 236 IsInCoordinate 20..80 200, 50 60, 80 90..150, 100..200 150..200 IsInCoordinate 30..35 40..45
- Устанавливает значение переменной:
$.IsInCoordinateLast => запоминает координаты, при которых сработало условие $.IsInCoordinateLastMemberIndex => запоминает номер в списке, к которому подошли координаты персонажа
- IsInMapAndCoordinate
-
- Описание: проверяет, находится ли персонаж по заданным координатам.
- Синтаксис:
IsInMapAndCoordinate <список локаций и координат>
- Можно использовать диапазоны чисел, например 100..200 50..100
- Можно проверять только по названию локации, только по координатам или всё вместе - локацию с координатами
- Пример:
IsInMapAndCoordinate 100 150 IsInMapAndCoordinate prontera IsInMapAndCoordinate prontra, geffen, gef_fild10 IsInMapAndCoordinate 120 100, 115 289, 158 236 IsInMapAndCoordinate prontera, 100 200, gef_fild10 100..150 250 IsInMapAndCoordinate gef_fild10 20..80 200, payon 50 60
- Устанавливает значение переменной:
$.IsInMapAndCoordinateLast => запоминает координаты, которые привели к срабатыванию условия $.IsInMapAndCoordinateLastMemberIndex => запоминает номер элемента из списка локаций и координат, который привёл к срабатыванию условия
- InPvP
-
- Описание: проверяет локацию на заданный режим pvp.
- Синтаксис:
InPvP <список режимов pvp>
- Режимы: pvp, gvg и battleground.
- Пример:
InPvP battleground, pvp
- Устанавливает значение переменной:
$.InPvPLast => запоминает режим pvp, который привёл к срабатыванию условия
- InCity
-
- Описание: проверяет, находится ли персонаж в городе или нет.
- Синтаксис:
InCity <0 | 1>
- Если 0, то сработает не в городе
- Если 1, то сработает в городу
- Пример:
InCity 1
- Устанавливает значение переменной:
$.InCityLast => запоминает название локации на которой условие сработало
- InMapRegex
-
- Описание: Соответствует ли название текущей локации заданному в regex шаблону.
- Синтаксис:
InMapRegex <Regex>
- Пример:
InMapRegex /field\d+$/ InMapRegex /^pay/
- Устанавливает значение переменной:
$.InMapRegexLast => запоминает название локации, при котором условие InMapRegex стало true
- NpcNear
-
- Описание: Есть ли поблизости непись, имя которой подпадает под заданный regex-шаблон.
- Синтаксис:
NpcNear <Regex>
- Пример:
NpcNear /kafra/ NpcNear /special agent/
- Устанавливает значение переменной:
$.NpcNearLast => запоминает имя неписи $.NpcNearLastPos => запоминает местоположение неписи, можно использовать в дальнейшем для команды 'talknpc' $.NpcNearLastBinId => запоминает индекс неписи в списке openkore, можно в дальнейшем использовать в команде 'talk' $.NpcNearLastDist => запоминает дистанцию до обнаруженной неписи
- NpcNearDist
-
- Описание: Есть ли на определённом удалении непись, имя которой подпадает под заданный regex-шаблон.
- Синтаксис:
NpcNearDist <Regex> <Math condition operators>
- Пример:
NpcNearDist /kafra/ <= 4 NpcNearDist /special agent/ >= 5
- Устанавливает значение переменной:
$.NpcNearDistLast => запоминает имя неписи $.NpcNearDistLastPos => запоминает местоположение неписи, можно использовать в дальнейшем для команды 'talknpc' $.NpcNearDistLastBinId => запоминает индекс неписи в списке openkore, можно в дальнейшем использовать в команде 'talk' $.NpcNearDistLastDist => запоминает дистанцию до обнаруженной неписи
- NpcNotNear
-
- Описание: Проверяет, что поблизости нет неписи с заданным в regex именем.
- Синтаксис:
NpcNotNear <Regex>
- Пример:
NpcNotNear /kafra/ NpcNotNear /special agent/
- Не создаёт никаких переменных
- PlayerNear
-
- Описание: Есть ли рядом игроки с заданным в regex именем.
- Синтаксис:
PlayerNear <Regex>
- Пример:
PlayerNear /john/ PlayerNear /henry the best TM/i
- Устанавливает значение переменной:
$.PlayerNearLast => запоминает имя персонажа $.PlayerNearLastPos => запоминает местоположение персонажа $.PlayerNearLastBinId => запоминает номер игрока в списке openkore $.PlayerNearLastDist => запоминает расстояние до игрока
- PlayerNearDist
-
- Описание: Есть ли на указанном расстоянии игроки с именем, совпадающим с regex-шаблоном.
- Синтаксис:
PlayerNearDist <Regex> <Math condition operators>
- Пример:
PlayerNearDist /bad gm/ < 10 PlayerNearDist /good guy healer/ <5
- Устанавливает значение переменной:
$.PlayerNearDistLast => Запоминает имя игрока $.PlayerNearDistLastPos => Запоминает местоположение игрока $.PlayerNearDistLastBinId => Запоминает номер игрока в списке openkore $.PlayerNearDistLastDist => Запоминает расстояние до игрока
- PlayerNotNear
-
- Описание: Удостоверяется, что рядом нет игрока с похожим на regex-шаблон именем.
- Синтаксис:
PlayerNotNear <Regex>
- Пример:
PlayerNotNear /the guy I need to see/ PlayerNotNear /^(john|george|paul|ringo)$/i
- Не создаёт никаких переменных
- MobNear
-
- Описание: Проверяет, есть ли рядом моб с заданным в regex названием.
- Синтаксис:
MobNear <Regex>
- Пример:
MobNear /(edga|maya|ifrit|bad mvps)/i MobNear /oring/
- Устанавливает значение переменной:
$.MobNearLast => запоминает название моба $.MobNearLastPos => хранит местоположение моба $.MobNearLastBinId => запоминает номер моба в списке openkore $.MobNearLastDist => расстояние до моба
- MobNearDist
-
- Описание: Checks if there is a mob in a given distance which name matches the given regex.
- Синтаксис:
MobNearDist <Regex> <Math condition operators>
- Пример:
MobNearDist /(Poporing|Drops|Poring|Marin)/ < 3
- Устанавливает значение переменной:
$.MobNearDistLast => Saves the name of the last mob that made MobNearDist become true $.MobNearDistLastPos => Saves the position of the last mob that made MobNearDist become true $.MobNearDistLastBinId => Saves the openkore ID of the last mob that made MobNearDist become true $.MobNearDistLastDist => Saves the distance of the last mob that made MobNearDist become true
- MobNotNear
-
- Описание: Checks if there's no mob near which name matches the given regex.
- Синтаксис:
MobNotNear <Regex>
- Пример:
MobNotNear /mvp I am look for/ MobNotNear /edga/i
- Sets no variables
- JobID
-
- Описание: Checks if the Job ID of the current player job matches one of the given ones.
- Синтаксис:
JobID <job ID 1>, <job ID 2>, <job ID 3>, etc
- Пример:
JobID 6, 4053
- Устанавливает значение переменной:
$.JobIDLast => Saves the ID of the last job that made JobID become true
- JobIDNot
-
- Описание: Checks if the Job ID of the current player job does not match the given one.
- Синтаксис:
JobIDNot <job ID>
- Пример:
JobIDNot 6
- Устанавливает значение переменной:
$.JobIDNotLast => Saves the ID of the condition that made JobIDNot become true
- IsEquippedID
-
- Описание: Checks if the player has an item equipped which ID matches the given one.
- Синтаксис:
IsEquippedID <comma separated list of pairs of equip place and ID>
- Пример:
IsEquippedID topHead 5055 IsEquippedID rightHand 13040, topHead 5055 IsEquippedID topHead 5055, leftHand 2112, robe 2510, shoes 2414, armor 2352, rightHand 1243
- Устанавливает значение переменной:
$.IsEquippedIDLastID => Saves the id of the last equip which made IsEquippedID become true $.IsEquippedIDLastName => Saves the name of the last equip which made IsEquippedID become true $.IsEquippedIDLastSlot => Saves the slot of the last equip which made IsEquippedID become true $.IsEquippedIDLastListIndex => Saves the index in the condition list of the last equip which made IsEquippedID become true
- IsNotEquippedID
-
- Описание: Checks if the player doesn't have an item equipped which ID matches the given one.
- Синтаксис:
IsNotEquippedID <comma separated list of pairs of equip place and ID>
- Пример:
IsNotEquippedID topHead 5055 IsNotEquippedID rightHand 13040, topHead 5055 IsNotEquippedID topHead 5055, leftHand 2112, robe 2510, shoes 2414, armor 2352, rightHand 1243
- Устанавливает значение переменной:
$.IsNotEquippedIDLastIsEmpty => Saves wheter the slot was empty ot not $.IsNotEquippedIDLastSlot => Saves the slot which made IsNotEquippedID become true
- ConfigKey
-
- Описание: Checks if the one or more of the given config keys match it's desired value.
- Синтаксис:
ConfigKey <comma separated list of pairs of config key and value>
- Config key and config value can be variables. (as in ConfigKey attackAuto $myattack or ConfigKey $vars{atk} 2)
- Пример:
ConfigKey attackAuto 2, itemsTakeAuto 2
- Устанавливает значение переменной:
$.ConfigKeyLastKey => Saves the key of the last config key that made ConfigKey become true $.ConfigKeyLastValue => Saves the value of the last config key that made ConfigKey become true $.ConfigKeyLastMemberIndex => Saves the list index in condition list that made ConfigKey become true
- ConfigKeyNot
-
- Описание: Checks if the at least one of the config key pairs doesn't match their desired value.
- Синтаксис:
ConfigKeyNot <comma separated list of pairs of config key and value>
- Config key and config value can be variables. (as in ConfigKeyNot attackAuto $myattack or ConfigKeyNot $vars{atk} 2)
- Пример:
ConfigKeyNot $vars{atk} 2 ConfigKeyNot itemsTakeAuto 1, attackAuto 2
- Устанавливает значение переменной:
$.ConfigKeyNotLastKey => Saves the key of the last config key that made ConfigKeyNot become true $.ConfigKeyNotLastWantedValue => Saves the desired value specified in the condifion of the last config key that made ConfigKeyNot become true $.ConfigKeyNotLastKeyValue => Saves the value of the last config key that made ConfigKeyNot become true $.ConfigKeyNotLastMemberIndex => Saves the list index in condition list that made ConfigKeyNot become true
- Note: Good to be sure your keys are the way you want, example below.
automacro ConfigWasWrong { exclusive 1 timeout 10 overrideAI 1 ConfigKeyNot itemsTakeAuto 2, attackAuto 2 call { log There is a config key with the wrong configuration log The key is $.ConfigKeyNotLastKey log The wanted value is $.ConfigKeyNotLastWantedValue log The current key Value is $.ConfigKeyNotLastKeyValue log The Index is $.ConfigKeyNotLastMemberIndex log Changing value of key $.ConfigKeyNotLastKey from $.ConfigKeyNotLastKeyValue to $.ConfigKeyNotLastWantedValue do conf $.ConfigKeyNotLastKey $.ConfigKeyNotLastWantedValue } }
This macro will make sure all config keys specified in ConfigKeyNot have the desired value.
- ConfigKeyNotExist
-
- Описание: Checks if the at least one of the config keys doesn't exist in config.txt.
- Синтаксис:
ConfigKeyNotExist <comma separated list config keys>
- Config key can be a variable
- Пример:
ConfigKeyNotExist gameGuard, saveMap
- Устанавливает значение переменной:
$.ConfigKeyNotExistLastKey => Saves the last config key that made ConfigKeyNotExist become true $.ConfigKeyNotExistLastMemberIndex => Saves the list index in condition list that made ConfigKeyNotExist become true
- Note: Good to be sure your custom config keys were added (can auto-configure plugins), example below with perl sub to add missing keys:
automacro AddgameGuardMissingKey { exclusive 1 timeout 10 overrideAI 1 CheckOnAI auto, manual, off ConfigKeyNotExist gameGuard call { $wantedkey = $.ConfigKeyNotExistLastKey $wantedvalue = 1 call AddMissingKey } } automacro AddcmdOnLoginMissingKey { exclusive 1 timeout 10 overrideAI 1 CheckOnAI auto, manual, off ConfigKeyNotExist cmdOnLogin call { $wantedkey = $.ConfigKeyNotExistLastKey $wantedvalue = c \@autoloot call AddMissingKey } } macro AddMissingKey { log There is a missing key in config.txt log The key is $wantedkey log The wanted value for it is is $wantedvalue log Adding key $wantedkey with value $wantedvalue with perl sub 'add_key' add_key("$wantedkey","$wantedvalue") } sub add_key { my ($key, $value) = @_; configModify($key, $value); }
This macro will make sure you added the config keys for gameGuard and cmdOnLogin plugin.
- InProgressBar
-
- Описание: Checks if the player is waiting for a progress bar to end.
- Синтаксис:
InProgressBar <0 | 1>
- When value is 0: Only true if not waiting for a progress bar
- When value is 1: Only true if waiting for a progress bar
- Пример:
InProgressBar 1
- Sets no variables
- StatusActiveHandle
-
- Описание: Checks if the player has one of the given status, uses status HANDLE.
- Синтаксис:
StatusActiveHandle <comma separated list of status handles>
- Status handle can be a variable
- Пример:
StatusActiveHandle EFST_INC_AGI, EFST_IMPOSITIO
- Устанавливает значение переменной:
$.StatusActiveHandleLastName => Saves the name of the last stauts that made StatusActiveHandle become true $.StatusActiveHandleLastHandle => Saves the handle of the last stauts that made StatusActiveHandle become true $.StatusActiveHandleLastListIndex => Saves the list index in condition of the last stauts that made StatusActiveHandle become true
- StatusInactiveHandle
-
- Описание: Checks if the player doesn't have one of the given status, uses status HANDLE.
- Синтаксис:
StatusInactiveHandle <comma separated list of status handles>
- Status handle can be a variable
- Пример:
StatusInactiveHandle EFST_BLESSING, EFST_CONCENTRATION
- Устанавливает значение переменной:
$.StatusInactiveHandleLastName => Saves the name of the last stauts that made StatusInactiveHandle become true $.StatusInactiveHandleLastHandle => Saves the handle of the last stauts that made StatusInactiveHandle become true $.StatusInactiveHandleLastListIndex => Saves the list index in condition of the last stauts that made StatusInactiveHandle become true
- QuestActive
-
- Описание: Checks if the player has one of the given quests active, uses quest ID (use command 'quest list' to see ID).
- Синтаксис:
QuestActive <comma separated list of quests ID>
- Quest ID can be a variable
- Пример:
QuestActive 7121, 7122
- Устанавливает значение переменной:
$.QuestActiveLastID => Saves the ID of the last quest that made QuestActive become true $.QuestActiveLastListIndex => Saves the list index in condition of the last quest that made QuestActive become true
- QuestInactive
-
- Описание: Checks if the player has of the given quests inactive, uses quest ID (use command 'quest list' to see ID).
- Синтаксис:
QuestInactive <comma separated list of quests ID>
- Quest ID can be a variable
- Пример:
QuestInactive 7121, 7122
- Устанавливает значение переменной:
$.QuestInactiveLastID => Saves the ID of the last quest that made QuestInactive become true $.QuestInactiveLastListIndex => Saves the list index in condition of the last quest that made QuestInactive become true
- QuestOnTime
-
- Описание: Checks if the player has one of the given quests active, and this quest has a timer that hasn't ended yet, uses quest ID (use command 'quest list' to see ID).
- Синтаксис:
QuestOnTime <comma separated list of quests ID>
- Quest ID can be a variable
- Пример:
QuestOnTime 7121, 7122
- Устанавливает значение переменной:
$.QuestOnTimeLastID => Saves the ID of the last quest that made QuestOnTime become true $.QuestOnTimeLastListIndex => Saves the list index in condition of the last quest that made QuestOnTime become true
- QuestTimeOverdue
-
- Описание: Checks if the player has one of the given quests active, and this quest has a timer that has already ended, uses quest ID (use command 'quest list' to see ID).
- Синтаксис:
QuestTimeOverdue <comma separated list of quests ID>
- Quest ID can be a variable
- Пример:
QuestTimeOverdue 7121, 7122
- Устанавливает значение переменной:
$.QuestTimeOverdueLastID => Saves the ID of the last quest that made QuestTimeOverdue become true $.QuestTimeOverdueLastListIndex => Saves the list index in condition of the last quest that made QuestTimeOverdue become true
- QuestHuntCompleted
-
- Описание: Checks if the player has one of the given quests active, and this quest has a hunt mission which wasn't completed yet, uses quest ID and Mob ID (use command 'quest list' to see ID).
- Синтаксис:
QuestHuntCompleted <comma separated list of pairs of quests ID and Mob ID>
- Quest ID and/or Mob ID can be variables
- Пример:
QuestHuntCompleted 7122 1002, 7127 1004
- Устанавливает значение переменной:
$.QuestHuntCompletedLastQuestID => Saves the Quest ID of the last quest that made QuestHuntCompleted become true $.QuestHuntCompletedLastMobID => Saves the Mob ID of the last quest that made QuestHuntCompleted become true $.QuestHuntCompletedLastListIndex => Saves the list index in condition of the last quest that made QuestHuntCompleted become true
- QuestHuntOngoing
-
- Описание: Checks if the player has one of the given quests active, and this quest has a hunt mission which has not been completed yet, uses quest ID and Mob ID (use command 'quest list' to see ID).
- Синтаксис:
QuestHuntOngoing <comma separated list of pairs of quests ID and Mob ID>
- Quest ID and/or Mob ID can be variables
- Пример:
QuestHuntOngoing 7122 1002, 7127 1004
- Устанавливает значение переменной:
$.QuestHuntOngoingLastQuestID => Saves the Quest ID of the last quest that made QuestHuntOngoing become true $.QuestHuntOngoingLastMobID => Saves the Mob ID of the last quest that made QuestHuntOngoing become true $.QuestHuntOngoingLastListIndex => Saves the list index in condition of the last quest that made QuestHuntOngoing become true
- NoPlayerNear
-
- Описание: Checks if there are any players near, it's true when there's none.
- Синтаксис:
NoPlayerNear 1
- Пример:
NoPlayerNear 1
- Sets no variables.
- NoPortalNear
-
- Описание: Checks if there are any portals near, it's true when there's none.
- Синтаксис:
NoPortalNear 1
- Пример:
NoPortalNear 1
- Sets no variables.
- NoMobNear
-
- Описание: Checks if there are any mobs near, it's true when there's none.
- Синтаксис:
NoMobNear 1
- Пример:
NoMobNear 1
- Sets no variables.
- NoNpcNear
-
- Описание: Checks if there are any npcs near, it's true when there's none.
- Синтаксис:
NoNpcNear 1
- Пример:
NoNpcNear 1
- Sets no variables.
- PlayerNearCount
-
- Описание: Checks if the number of players near match the given math condition.
- Синтаксис:
PlayerNearCount <Math condition operators>
- Пример:
PlayerNearCount > 5
- Устанавливает значение переменной:
$.PlayerNearCountLast => Saves the number of players that made PlayerNearCount become true
- NpcNearCount
-
- Описание: Checks if the number of npcs near match the given math condition.
- Синтаксис:
NpcNearCount <Math condition operators>
- Пример:
NpcNearCount > 5
- Устанавливает значение переменной:
$.NpcNearCountLast => Saves the number of npcs that made NpcNearCount become true
- MobNearCount
-
- Описание: Checks if the number of mobs near match the given math condition.
- Синтаксис:
MobNearCount <Math condition operators>
- Пример:
MobNearCount > 10
- Устанавливает значение переменной:
$.MobNearCountLast => Saves the number of mobs that made MobNearCount become true
- PortalNearCount
-
- Описание: Checks if the number of portals near match the given math condition.
- Синтаксис:
PortalNearCount <Math condition operators>
- Пример:
PortalNearCount > 5
- Устанавливает значение переменной:
$.PortalNearCountLast => Saves the number of portals that made PortalNearCount become true
Event
- Event conditions don't have a defined status of true or false, they are only checked once an event happens.
- When this event happens, the condition is checked, if it is true, and all the state conditions are also true, the automacro activates.
- You can only have one event condition in each automacro.
- PubMsg
-
- Description: Is checked on public messages, is true when the message matches the given regex.
- Syntax:
PubMsg <Regex>
- Example:
PubMsg /(buff|bless)/
- Set variables:
$.PubMsgLastName => Saves the name of the player which message activated PubMsg $.PubMsgLastMsg => Saves the message which activated PubMsg
- PubMsgDist
-
- Description: Is checked on public messages, is true when the message matches the given regex and the distance match the given condition.
- Syntax:
PubMsgDist <Regex> <Math condition operators>
- Example:
PubMsgDist /(buff|bless)/ < 5
- Set variables:
$.PubMsgDistLastName => Saves the name of the player which message activated PubMsgDist $.PubMsgDistLastMsg => Saves the message which activated PubMsgDist $.PubMsgDistLastPos => Saves the position of the player which message activated PubMsgDist $.PubMsgDistLastDist => Saves the distance to the player which message activated PubMsgDist $.PubMsgDistLastID => Saves the openkore ID of the player which message activated PubMsgDist
- PubMsgName
-
- Description: Is checked on public messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex.
- Syntax:
PubMsgName <Regex> <Regex>
- The first regex is for the message, the second one is for the player name
- Example:
PubMsgName /(buff|bless)/ /Player to buff/ PubMsgName /stop/ /GM/
- Set variables:
$.PubMsgNameLastName => Saves the name of the player which message activated PubMsgName $.PubMsgNameLastMsg => Saves the message which activated PubMsgName
- PubMsgNameDist
-
- Description: Is checked on public messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex and the distance matches the condition.
- Syntax:
PubMsgNameDist <Regex> <Regex> <Math condition operators>
- The first regex is for the message, the second one is for the player name
- Example:
PubMsgNameDist /(buff|bless)/ /Player to buff/ < 3 PubMsgNameDist /stop/ /GM/ >= 4
- Set variables:
$.PubMsgNameDistLastName => Saves the name of the player which message activated PubMsgNameDist $.PubMsgNameDistLastMsg => Saves the message which activated PubMsgNameDist $.PubMsgNameDistLastPos => Saves the position of the player which message activated PubMsgNameDist $.PubMsgNameDistLastDist => Saves the distance to the player which message activated PubMsgNameDist $.PubMsgNameDistLastID => Saves the openkore ID of the player which message activated PubMsgNameDist
- PrivMsg
-
- Description: Is checked on private messages, is true when the message matches the given regex.
- Syntax:
PrivMsg <Regex>
- Example:
PrivMsg /(buff|bless)/
- Set variables:
$.PrivMsgLastName => Saves the name of the player which message activated PrivMsg $.PrivMsgLastMsg => Saves the message which activated PrivMsg
- PrivMsgDist
-
- Description: Is checked on private messages, is true when the message matches the given regex and the distance match the given condition.
- Syntax:
PrivMsgDist <Regex> <Math condition operators>
- Example:
PrivMsgDist /(buff|bless)/ < 5
- Set variables:
$.PrivMsgDistLastName => Saves the name of the player which message activated PrivMsgDist $.PrivMsgDistLastMsg => Saves the message which activated PrivMsgDist $.PrivMsgDistLastPos => Saves the position of the player which message activated PrivMsgDist $.PrivMsgDistLastDist => Saves the distance to the player which message activated PrivMsgDist $.PrivMsgDistLastID => Saves the openkore ID of the player which message activated PrivMsgDist
- PrivMsgName
-
- Description: Is checked on private messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex.
- Syntax:
PrivMsgName <Regex> <Regex>
- The first regex is for the message, the second one is for the player name
- Example:
PrivMsgName /(buff|bless)/ /Player to buff/ PrivMsgName /stop/ /GM/
- Set variables:
$.PrivMsgNameLastName => Saves the name of the player which message activated PrivMsgName $.PrivMsgNameLastMsg => Saves the message which activated PrivMsgName
- PrivMsgNameDist
-
- Description: Is checked on private messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex and the distance matches the condition.
- Syntax:
PrivMsgNameDist <Regex> <Regex> <Math condition operators>
- The first regex is for the message, the second one is for the player name
- Example:
PrivMsgNameDist /(buff|bless)/ /Player to buff/ < 3 PrivMsgNameDist /stop/ /GM/ >= 4
- Set variables:
$.PrivMsgNameDistLastName => Saves the name of the player which message activated PrivMsgNameDist $.PrivMsgNameDistLastMsg => Saves the message which activated PrivMsgNameDist $.PrivMsgNameDistLastPos => Saves the position of the player which message activated PrivMsgNameDist $.PrivMsgNameDistLastDist => Saves the distance to the player which message activated PrivMsgNameDist $.PrivMsgNameDistLastID => Saves the openkore ID of the player which message activated PrivMsgNameDist
- PartyMsg
-
- Description: Is checked on party messages, is true when the message matches the given regex.
- Syntax:
PartyMsg <Regex>
- Example:
PartyMsg /(buff|bless)/
- Set variables:
$.PartyMsgLastName => Saves the name of the player which message activated PartyMsg $.PartyMsgLastMsg => Saves the message which activated PartyMsg
- PartyMsgDist
-
- Description: Is checked on party messages, is true when the message matches the given regex and the distance match the given condition.
- Syntax:
PartyMsgDist <Regex> <Math condition operators>
- Example:
PartyMsgDist /(buff|bless)/ < 5
- Set variables:
$.PartyMsgDistLastName => Saves the name of the player which message activated PartyMsgDist $.PartyMsgDistLastMsg => Saves the message which activated PartyMsgDist $.PartyMsgDistLastPos => Saves the position of the player which message activated PartyMsgDist $.PartyMsgDistLastDist => Saves the distance to the player which message activated PartyMsgDist $.PartyMsgDistLastID => Saves the openkore ID of the player which message activated PartyMsgDist
- PartyMsgName
-
- Description: Is checked on party messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex.
- Syntax:
PartyMsgName <Regex> <Regex>
- The first regex is for the message, the second one is for the player name
- Example:
PartyMsgName /(buff|bless)/ /Player to buff/ PartyMsgName /stop/ /GM/
- Set variables:
$.PartyMsgNameLastName => Saves the name of the player which message activated PartyMsgName $.PartyMsgNameLastMsg => Saves the message which activated PartyMsgName
- PartyMsgNameDist
-
- Description: Is checked on party messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex and the distance matches the condition.
- Syntax:
PartyMsgNameDist <Regex> <Regex> <Math condition operators>
- The first regex is for the message, the second one is for the player name
- Example:
PartyMsgNameDist /(buff|bless)/ /Player to buff/ < 3 PartyMsgNameDist /stop/ /GM/ >= 4
- Set variables:
$.PartyMsgNameDistLastName => Saves the name of the player which message activated PartyMsgNameDist $.PartyMsgNameDistLastMsg => Saves the message which activated PartyMsgNameDist $.PartyMsgNameDistLastPos => Saves the position of the player which message activated PartyMsgNameDist $.PartyMsgNameDistLastDist => Saves the distance to the player which message activated PartyMsgNameDist $.PartyMsgNameDistLastID => Saves the openkore ID of the player which message activated PartyMsgNameDist
- GuildMsg
-
- Description: Is checked on guild messages, is true when the message matches the given regex.
- Syntax:
GuildMsg <Regex>
- Example:
GuildMsg /(buff|bless)/
- Set variables:
$.GuildMsgLastName => Saves the name of the player which message activated GuildMsg $.GuildMsgLastMsg => Saves the message which activated GuildMsg
- GuildMsgDist
-
- Description: Is checked on guild messages, is true when the message matches the given regex and the distance match the given condition.
- Syntax:
GuildMsgDist <Regex> <Math condition operators>
- Example:
GuildMsgDist /(buff|bless)/ < 5
- Set variables:
$.GuildMsgDistLastName => Saves the name of the player which message activated GuildMsgDist $.GuildMsgDistLastMsg => Saves the message which activated GuildMsgDist $.GuildMsgDistLastPos => Saves the position of the player which message activated GuildMsgDist $.GuildMsgDistLastDist => Saves the distance to the player which message activated GuildMsgDist $.GuildMsgDistLastID => Saves the openkore ID of the player which message activated GuildMsgDist
- GuildMsgName
-
- Description: Is checked on guild messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex.
- Syntax:
GuildMsgName <Regex> <Regex>
- The first regex is for the message, the second one is for the player name
- Example:
GuildMsgName /(buff|bless)/ /Player to buff/ GuildMsgName /stop/ /GM/
- Set variables:
$.GuildMsgNameLastName => Saves the name of the player which message activated GuildMsgName $.GuildMsgNameLastMsg => Saves the message which activated GuildMsgName
- GuildMsgNameDist
-
- Description: Is checked on guild messages, is true when the message matches the given regex and the name of the player which sent it also matches it's given regex and the distance matches the condition.
- Syntax:
GuildMsgNameDist <Regex> <Regex> <Math condition operators>
- The first regex is for the message, the second one is for the player name
- Example:
GuildMsgNameDist /(buff|bless)/ /Player to buff/ < 3 GuildMsgNameDist /stop/ /GM/ >= 4
- Set variables:
$.GuildMsgNameDistLastName => Saves the name of the player which message activated GuildMsgNameDist $.GuildMsgNameDistLastMsg => Saves the message which activated GuildMsgNameDist $.GuildMsgNameDistLastPos => Saves the position of the player which message activated GuildMsgNameDist $.GuildMsgNameDistLastDist => Saves the distance to the player which message activated GuildMsgNameDist $.GuildMsgNameDistLastID => Saves the openkore ID of the player which message activated GuildMsgNameDist
- NpcMsg
-
- Description: Is checked on npc conversation messages, is true when the message matches the given regex.
- Syntax:
NpcMsg <Regex>
- Example:
NpcMsg /your return point was saved/
- Set variables:
$.NpcMsgLastName => Saves the name of the npc which message activated NpcMsg $.NpcMsgLastMsg => Saves the message which activated NpcMsg
- NpcMsgDist
-
- Description: Is checked on npc conversation messages, is true when the message matches the given regex and the distance match the given condition.
- Syntax:
NpcMsgDist <Regex> <Math condition operators>
- Example:
NpcMsgDist /please come near to me/ > 5
- Set variables:
$.NpcMsgDistLastName => Saves the name of the npc which message activated NpcMsgDist $.NpcMsgDistLastMsg => Saves the message which activated NpcMsgDist $.NpcMsgDistLastPos => Saves the position of the npc which message activated NpcMsgDist $.NpcMsgDistLastDist => Saves the distance to the npc which message activated NpcMsgDist $.NpcMsgDistLastID => Saves the openkore ID of the npc which message activated NpcMsgDist
- NpcMsgName
-
- Description: Is checked on npc conversation messages, is true when the message matches the given regex and the name of the npc which sent it also matches it's given regex.
- Syntax:
NpcMsgName <Regex> <Regex>
- The first regex is for the message, the second one is for the npc name
- Example:
NpcMsgName /You don't have zeny/ /kafra/
- Set variables:
$.NpcMsgNameLastName => Saves the name of the npc which message activated NpcMsgName $.NpcMsgNameLastMsg => Saves the message which activated NpcMsgName
- NpcMsgNameDist
-
- Description: Is checked on npc conversation messages, is true when the message matches the given regex and the name of the npc which sent it also matches it's given regex and the distance matches the condition.
- Syntax:
NpcMsgNameDist <Regex> <Regex> <Math condition operators>
- The first regex is for the message, the second one is for the npc name
- Example:
NpcMsgNameDist /You need to be closer to punch me/ /punchable npc/ > 5
- Set variables:
$.NpcMsgNameDistLastName => Saves the name of the npc which message activated NpcMsgNameDist $.NpcMsgNameDistLastMsg => Saves the message which activated NpcMsgNameDist $.NpcMsgNameDistLastPos => Saves the position of the npc which message activated NpcMsgNameDist $.NpcMsgNameDistLastDist => Saves the distance to the npc which message activated NpcMsgNameDist $.NpcMsgNameDistLastID => Saves the openkore ID of the npc which message activated NpcMsgNameDist
- LocalMsg
-
- Description: Is checked on local broadcast messages, is true when the message matches the given regex.
- Syntax:
LocalMsg <Regex>
- Example:
LocalMsg /airship is arriving/
- Set variables:
$.LocalMsgLastMsg => Saves the message which activated LocalMsg
- BusMsg
-
- Description: Is checked on bus system messages, is true when the message matches the given regex.
- Syntax:
BusMsg <Regex>
- Example:
BusMsg /gm near/
- Set variables:
$.BusMsgLastMsg => Saves the message which activated BusMsg
- MapLoaded
-
- Description: Is checked everytime a map change event occur (teleport, map changes), is true if the current map match one of the given ones.
- Syntax:
MapLoaded <comma separated list of maps>
- Map can be a variable.
- Example:
MapLoaded prontra, geffen, gef_fild10
- Set variables:
$.MapLoadedLast => Saves the last map that made MapLoaded become true
- OnCharLogIn
-
- Description: Is always true, activates everytime the character logs into the game.
- Syntax:
OnCharLogIn 1
- Example:
OnCharLogIn 1
- Sets no variables
- ZenyChanged
-
- Description: Is checked everytime the amount of zeny changes, is true if the math condition is true.
- Supports percentages. (based on total zeny before change and change amount)
- Syntax:
ZennyChanged <Math condition operators>
- Example:
ZennyChanged > 10% ZennyChanged >= 1000
- Set variables:
$.ZennyChangedLastChange => Saves the amount of zenny changed that made ZennyChanged activate $.ZennyChangedLastZennyAfter => Saves the amount of zenny left after the change that made ZennyChanged activate
- SimpleHookEvent
-
- Description: Is checked every time the hook you set, is triggered.
- Syntax:
SimpleHookEvent <hook name>
- Example:
SimpleHookEvent target_died
- Set all variables the hook have as:
$.SimpleHookEventLast<capitalized variable name>
- Example:
$.SimpleHookEventLastMonster => monster ID in target_died hook
Extras
Math condition operators
(<|<=|=|==|!=|!|>=|>|)\s*($number_qr%?|$general_wider_variable_qr)(?:\s*\.\.\s*($number_qr%?|$general_wider_variable_qr))
Operator | Description | Example |
---|---|---|
< <value> | lower than <value> | < 50 |
> <value> | higher than <value> | > 20 |
<= <value> | lower or equal to <value> | <= 10 |
>= <value> | higher or equal to <value> | >= 25 |
= <value> | == <value> | <value> | equal to <value> | = 150 | == 150 | 150 |
!= <value> | ! <value> | not equal to <value> | ! 1000 | != 1000 |
<value1>..<value2> | between <value1> and <value2> | 20..80 |
- Note: <value> can be a number or a variable.
Examples:
Math_condition >= 50 # Only true if higher or equal to 50 Math_condition < $variable # Only true if lower than $variable value
- Note: <value> can be a percentage (even if it is a variable).
Examples:
Math_condition <= 10% # Only true if lower or equal to 10% Math_condition != $variable # $variable value can be something like '50%', in which case it would only be true if different than 50%
Regex
- To learn about regex plese refer to this link: regexp tutorial
- Note: Regex in conditions support all types of variables
Perl Subroutines
eventMacro plugin support Perl subroutines in macros. You can now create any simple Perl function without limitations from the eval command.
Example No.1 - how to create a Perl Subroutine function in Macro
macro sub { $list = Orange, Milk, Soya, Peach if (existsInList("$list", "PeAch")) goto ok log Not Match!!!; stop :ok log Match!!! $x = &eval(existsInList("$list", "PeAch")) log \$x = $x # $x here is 1 } sub existsInList { my ($list, $val) = @_; return 0 if ($val eq ""); my @array = split / *, */, $list; $val = lc($val); foreach (@array) { s/^\s+//; s/\s+$//; s/\s+/ /g; next if $_ eq ""; return 1 if lc eq $val; } return 0; }
Example No.2 - how to create a re-writable file function using Perl Subroutine in Macro
automacro confHP1 { CurrentHP > 85% exclusive 1 run-once 1 call { $setting = Demon Pungus #becareful on your case, its case sensitive $attack = 1 $teleport = 0 $telesearch = 1 call HP } } automacro confHP2 { CurrentHP < 75% exclusive 1 run-once 1 call { $setting = Demon Pungus #becareful on your case, its case sensitive $attack = 1 $teleport = 2 $telesearch = 1 call HP } } macro HP { #Getting the value of the $setting monster name Ex: $setting $exist1 $exist2 $exist3 $exist1 = &eval (defined Misc::mon_control("$setting")?Misc::mon_control("$setting")->{attack_auto}:"None") $exist2 = &eval (defined Misc::mon_control("$setting")?Misc::mon_control("$setting")->{teleport_auto}:"None") $exist3 = &eval (defined Misc::mon_control("$setting")?Misc::mon_control("$setting")->{teleport_search}:"None") log Old Values are $setting $exist1 $exist2 $exist3 log Changing the values to $setting $attack $teleport $telesearch do eval Misc::mon_control("$::Macro::Data::varStack{setting}")->{attack_auto} = $attack; Misc::mon_control("$::Macro::Data::varStack{setting}")->{teleport_auto} = $teleport; Misc::mon_control("$::Macro::Data::varStack{setting}")->{teleport_search} = $telesearch log Writting mon_control.txt with new values rewrite() # see the sub-routine function below log Reloading mon_control.txt do reload mon_control $exist1 = &eval (defined Misc::mon_control("$setting")?Misc::mon_control("$setting")->{attack_auto}:"None") $exist2 = &eval (defined Misc::mon_control("$setting")?Misc::mon_control("$setting")->{teleport_auto}:"None") $exist3 = &eval (defined Misc::mon_control("$setting")?Misc::mon_control("$setting")->{teleport_search}:"None") log New mon_control.txt Setting: $setting $exist1 $exist2 $exist3 log Macro done #if $teleport = 0 ; means the Higher automacro HP is currently triggered #if $teleport = 2 ; means the Lower automacro HP is currently triggered if ($teleport < 2) goto releaseHighHp :releaseLowHp release confHP1 stop :releaseHighHp release confHP2 stop } sub rewrite { my $monster = Misc::mon_control("$::Macro::Data::varStack{setting}"); my @lines = (); if (open(FILE, "<:utf8", Settings::getControlFilename("mon_control.txt"))) { while (<FILE>) { s/\x{FEFF}//g; chomp; if (/^#/ || /^\n/ || /^\r/) { push @lines,$_; next } /^(\d+|([a-zA-Z' ]+)*) -?\d/; if ("$::Macro::Data::varStack{setting}" eq $1 && defined $monster) { $_ = $1; s/\s+$//; push(@lines, ($_ . " $monster->{attack_auto} $monster->{teleport_auto} $monster->{teleport_search} $monster->{attack_lvl} $monster->{attack_jlvl} $monster->{attack_hp} $monster->{attack_sp} $monster->{weight}")); } else { push(@lines, $_); } } close FILE } open(FILE, ">:utf8", Settings::getControlFilename("mon_control.txt")); print FILE join "\n", @lines; close FILE; }
Comments
The macro files allow comments, i.e. lines that are ignored by the eventMacro plugin.
- Lines starting with a # will be treated as a comment.
- Everything after a space and followed by a # will also be ignored.
macro happy { #this is a comment line log I'm Happy # this is also a comment }
Will print:
[eventmacro log] I'm Happy
Examples with Explanations
I assume you already know how to use Console Commands and understand how they work. If not, before going further, read through all Console Commands and try out ones like a, ai, move, cart get, storage add, talk, deal, take, direction commands, sl, sm, relog, pm and others.
Keep another page with this manual open for cross reference.
Okay, so there are 2 types of blocks
- automacros – these trigger automatically
- macros – these do not trigger automatically but need to be called manually or by an automacro
Automacros
Automacros automatically trigger when certain conditions are met, just like how blocks in config.txt trigger depending on the conditions set in them.
The point of automacros is that you use them to check for conditions. When the condition is fulfilled, you can either respond to it in the automacro or call a macro to do it. The format for automacro is...
automacro <name> { condition 1 condition 2 …... …... call { command 1 command 2 ….. ….. } timeout <n seconds> #(if necessary) }
For example, suppose you're playing manually but your slave priest is on Kore, and you want it to warn you if it's running out of sp, you can use an automacro like this....
automacro sp { CurrentSP < 200 timeout 10 call { do c sp low } }
Taking it line by line,
- automacro sp { - you need to put automacro to tell kore that its an automacro. Then you put the name of the macro, in this case its “sp”. Then you need to put an opening bracket “{“ which tells Kore that the automacro's code begins there.
- CurrentSP < 200 – After the “{“, you put the conditions on successive lines. Here, there is only one condition and I think its clear that the condition is that sp should be below 200.
- timeout 10 – This isn't a condition or a command, it works the same way it works in normal Kore blocks, so this automacro cannot trigger within 10 seconds of it already having been triggered. I ALWAYS put timeouts, so even if my conditions are faulty, the automacro doesn't spam and mess up whatever my bot is doing. Otherwise if your automacro is messed up then you could die or something, so its better to put an appropriate timeout.
- call { – The word “call” tells Kore that now you're going to be putting commands, not conditions. The opening bracket “{“ tells Kore that the commands will start now. These commands are the ones that will get carried out when the conditions are met, here when sp goes below 200.
- do c sp low – “do” tells Kore that this is a command, something to be done. After “do”, just leave a space and type in the console command you want to execute exactly the way you do in the Kore console.
- } – This closing bracket “}” tells Kore that the commands have ended.
- } – This closing bracket “}” tells Kore that your automacro code has ended.
So basically whenever, the bot's sp goes below 200, it says in public chat “sp low”. This also has the advantage of making your bot not look like a bot =p.
Here's another macro which illustrates how you can use macros to handle weird situations which Kore is not equipped to deal with. When fighting against metalings, they often strip you and then your oh-so-smart bot punches! To get around this, put the weapon you use in default auto equip and use this macro.
automacro strip { StatusActiveHandle EFST_NOEQUIPWEAPON timeout 10 call { do tele do relog 10 } }
Taking it line by line....
- automacro strip { - Tell Kore this is an automacro, and it's name is "strip". The '{' tells Kore the code of the automacro starts here.
- StatusActiveHandle EFST_NOEQUIPWEAPON - The only condition in this macro. This checks your list of statuses for the status handle "EFST_NOEQUIPWEAPON". Thus, when you are stripped by a Metaling, you get the "EFST_NOEQUIPWEAPON" status and this condition will be fulfilled.
- timeout 10 - Ensures automacro is not spammed, and 10 seconds is enough time to execute the automacro. So after 10 seconds, if for some reason you are still stripped, this automacro will trigger again. However, if you re-login and are stripped within 10 seconds, then macro will not trigger again untill the 10 seconds are up.
- call { - The word "call" and "{" tells Kore that the commands to be executed start after the '{'
- do tele - "do" tells Kore that what comes after is a console command to be carried out. Here, the command is "tele" so you teleport away from the Metaling, so that in case you lag or something, you aren't killed while executing the next instruction which is.....
- do relog 10 - Tells Kore to relogin in 10 seconds, because when you login again, your "strip weapon" status is cleared.
- } - The closing bracket '}' tells Kore the commands have ended.
- } - The closing bracket '}' tells Kore the macro code has ended.
Summarising, on being stripped, you teleport away from the monster and then relogin, with a timeout of 10 seconds to ensure that the automacro is not spammed. Since the weapon you're using is filled in the default weapon option, after re-logging in, Kore will automatically re-equip that weapon.
Let's try a more complicated macro. If you have a priest, you would want it to warp back to its lockmap or the nearest warp-able map near its lockmap. This macro does it. From the savemap, the bot takes the same route to the lockmap each time. So in the first map outside the town, just set it to move to a designated tile, and cast warp on a nearby tile, and then move to that tile. You will need delays to allow the spell to be cast and commands to be completed.
automacro warp { InMap gef_fild07 InInventory "Blue Gemstone" > 0 timeout 20 call { do ai manual pause 1 do move 319 187 do sl 27 316 188 pause 2 do warp 1 pause 1 do move 316 188 do ai on } }
Taking it line by line,
- automacro warp { - As explained, the automacro's name is warp, and “{“ indicates that the automacro begins.
- InMap get_fild07 - The first condition, the automacro will only trigger if the map is gef_fild07.
- InInventory “Blue Gemstone” > 0 - Second condition, ensures there is atleast one blue gemstone in the inventory so that warp portal can be cast. Obviously you need a getAuto in config.txt for the gemstones.
- timeout 20 - Ensures that the bot does not spam the automacro. The timeout should be large enough to allow the completion of the automacro, so that the automacro does not trigger again while it is in execution.
- call { - Tells Kore that the commands start here.
- do ai manual - Frequently, I use this command in the more complicated and longer macros, so that Kore doesn't get diverted into doing something else while your macro is running, for example, attacking a monster or gathering up an item. In this case I'm using it so that the bot doesn't continue walking.
- pause 1 - Inserts a delay of 1 second before the next command is carried out, VERY IMPORTANT. If you don't use delays then Kore can and will miss steps in the macro and the result is a mess.
- do move 319 187 - The “move” console command is used to move your bot to a set location.
- do sl 27 316 188 - The “sl” console command is used to make your priest cast warp portal on a convenient spot near your location, in this case (316,188).
- pause 2 - Very Important. A delay of 2 seconds is put, allowing enough time to cast warp portal. If you priest has low dex, this delay should be increased.
- do warp 1 - Console command “warp” is used to select memo location 1.
- pause 1 - 1 second delay to allow the portal to form.
- do move 316 188 - Move to the portal and Voila! You have been warped to the map.
- do ai on - You set ai to manual at the beginning of this macro, so now you need to turn it back on.
- } - Closing bracket indicates end of commands.
- } - Closing bracket indicates end of automacro code.
Note the use of appropriate delays and timeouts in this automacro.
The EventMacro plugin also has many useful built-in variables which give you your position for example. It's all listed in the eventMacro manual. I just want to show how to extract your position from these variables.
$.pos gives you your position. Now to get your x and y coordinates the code is,
$px = &arg ("$.pos", 1) $py = &arg ("$.pos", 2)
Here, the x coordinate is the 1st value in $.pos so we have a '1'. Similarly, the y coordinate is the second value in $.pos so we have a '2'.
If you have a “MobNear” condition in your automacro, $.MobNearLastPos gives the position of that monster. To extract the x and y coordinates the code is,
$mx = &arg ("$.MobNearLastPos", 1) $my = &arg ("$.MobNearLastPos", 2)
"run-once"
Frequently, the run-once condition is used instead of a timeout. It allows the automacro to run only once so that the automacro isn't spammed. To get the automacro to run again, a release command needs to be executed. However, due to a rogue situation that the macro hangs and the release macro isn't executed, your automacro is effectively stuck. To get around this, use a timeout instead of using run-once.
How to write a macro
Now that you have some idea of what a macro is, try writing one
- Figure out under exactly what conditions you want your automacro to trigger
- Logically think out the steps your bot needs to perform in the automacro. Go step by step over this carefully.
- Ensure you have inserted appropriate pauses between the steps.
- Ensure you have a timeout or a run-once in your macro to prevent spamming of it.
- Now put the code in eventMacros.txt and start the bot or reload eventMacros.txt. If all is fine you won't get any error messages. But if there is a problem in the syntax, say you missed out a “}”, then you will get an error message and the macro won't work. Figure out what the error is, correct it, and reload eventMacros.txt again to check if you corrected it properly or not.
Collected Macros
I would like to share some useful macros, hopefully not angering anyone here.
Identify with Magnifier
You got unidentified Items in your inventory and want to identify them using magnifiers? Use "eventMacro id" on console until all items are identified. You don't have to type anything else, the macro will identify the first item found, after that the second and so on.
macro id { $id = &inventory(Magnifier) do is $id pause 1 do identify 0 }
Automatically refine Rough Stones (Ori / Elu)
This macro, once called, will automatically walk to the prontera forge and refine Rough Ori / Elu as long as there are more than 5 in your inventory. I did not find something like that yet, please post everything (better) I may have missed.
Just fire eventMacro ref to start. To stop manually, type eventMacro stop.
macro ref { do move prt_in 59 60 call ref-while } macro ref-while { log start refining with $ori = &invamount(Rough Oridecon) $elu = &invamount(Rough Elunium) log I have $ori Rough Oridecons log I have $elu Rough Eluniums while (&invamount(Rough Oridecon) > 4) { do talk 0 pause 0.8 do talk resp 0 call ref-while } while (&inventory(Rough Elunium) > 4) { do talk 0 pause 0.8 do talk resp 1 call ref-while } stop }
FAQ
- I get disconnected from map server when running a macro!
- The commands are sent too fast. Increase macro_delay or add pause lines between your do commands
- I'm getting Malformed UTF-8 character (fatal), what is this?
- This error happens when your eventMacros.txt is not saved in UTF-8 encoding.
- To solve it, open your eventMacros.txt and if you're using Notepad, when you are going to save, change Encoding to UTF-8. (If that does not help - do not use Notepad.)
- If you're using Notepad++ or other text editor, go to Format > UTF-8 (without BOM) and save.
Author
- EventMacro was written by Henrybk.
- EventMacro was based on macro plugin which was first written by arachno has various contributors like ezza, daigaku, keplerbr, eternalhavest and technologyguild.
- EventMacro was beta tested by emjustin.
- Some of the most important ideas and functions were developed by allanon.