Что такое Macro плагин?
С этим плагином Вы сможете написать последовательность команд
(макросов), которые бот будет выполнять вручную или в зависимости от
ситуации (условия). Последняя версия - 2.0.1.
Установка
Установка в OpenKore
- Скачайте macro плагин.
- Переместитесь в папку с OpenKore (папка, в которой находится файл openkore.pl).
- В это папке создайте новую папку plugins, если она ещё не создана.
- Из скаченного zip-файла извлеките файл macro.pl, а также папку Macro. Поместите всё это в папку plugins.
- В папке control создайте новый файл macros.txt. В это файл Вы будете писать свои макросы или автомакросы.
Так должно выглядеть дерево каталогов OpenKore после установки плагина (исключая файлы самого OpenKore):
openkore
|-- openkore.pl
|-- control
| `-- macros.txt
|-- fields
|-- logs
|-- plugins
| |-- Macro
| | |-- Automacro.pm
| | |-- Data.pm
| | |-- Parser.pm
| | |-- Script.pm
| | `-- Utilities.pm
| `-- macro.pl
|-- src
`-- tables
Установка в VisualKore
- Скачайте macro плагин.
- Из скаченного zip-файла извлеките файл macro.pl, а также папку Macro. Поместите всё это в папку C:\Program Files\VisualKore\plugins
- Зайдите а диалог выбора профиля VisualKore. Выберите Ваш профиль и нажмите "Edit Profile".
Важно:
- В каждой папке профиля VisualKore находится папка "control".
- Чтобы использовать один макрос на других профилях, Вы должны
скопировать macros.txt (ваш макрос) в соответствующий профиль. Также
файл config.txt каждого профиля должен иметь строку кода, которая
препятствует выгружению плагина.
- Пожалуйста прочитайте всё руководство до линии кода, которую
Вы должны вставить в файл config.txt в папке вашего профиля. Если этот
код не будет введён, то плагин будет выгружаться.
Для настройки плагина прочтите параграф Настройка файлов.
Команды плагина
macro <имя_макроса> [-опции] [-- параметр(ы)]
Запускает макрос <имя_макроса>.
Опция
| Значение
| Описание
|
-repeat
| n
| Повторяет макрос n раз (n - целое число). Т.е. если n=2, то макрос 1 раз выполнится и ещё 2 раза повторится.
|
-overrideAI
| (нету)
| Отключает искусственный интеллект бота.
|
-macro_delay
| n
| Устанавливает задержку между командами макроса в n секунд, игнорируя значение в timeouts.txt.
|
-exclusive
| (нету)
| Не позволит автомакросу закончит этот макрос.
|
-orphan
| метод
| Использует метод (terminate, reregister или reregister_safe) для обработки одиночного макроса
|
Параметр для макроса определяется после двойного тире (--). Эти параметры сохраняются в переменные $.param1
до $.paramN
.
- Пример:
-
macro foo {
log Parameter 1 is $.param1
log Parameter 2 is $.param2
}
Если макрос foo запустить с параметрами foo и bar macro foo -- foo bar, то на экране появится:
[macro] Parameter 1 is foo
[macro] Parameter 2 is bar
macro list
Показывает список всех доступных макросов.
macro stop
Останавливает текущий макрос.
macro pause
Приостанавливает запущенный макрос.
macro resume
Включает приостановленный макрос.
macro version
Выводит на экран версию macro плагина..
macro reset [имя(а)_автомакроса]
Сбрасывает "run-once" всех автомакросов или определённого автомакроса <имя(а)_автомакроса>. Эту команду можно использовать для нескольких автомакросов сразу. Для этого имена автомакросов пишутся через пробел.
macro status
Показывает запущен ли макрос в настоящее время. Если макрос запущен, то показывает:
status: running - запущен
delay: 10s - задержка перед следующей командой
line: 3 - текущая строку макроса
override AI: no - настройка опции "-overrideAI"
paused: no - пауза макроса
finished: no - закончен ли макрос
Настройка файлов
control/macros.txt
В этот файл вписываются сами макросы или автомакросы.
Внимание: если у Вас в этом файле содержится русский текст, то файл необходимо сохранить в кодировке utf-8 и первую строчку закомментировать значком '#'.
control/timeouts.txt
В это файл добавьте строчку: macro_delay <n> где <n>- пауза в секундах, которую плагин будет делать между командами.
control/config.txt
Переменная
| Значение
| Описание
|
macro_nowarn
| 0 1
| вкл. или выкл. раздражающие предупреждения когда автомакрос не использует команду call
|
macro_orphans
| terminate reregister reregister_safe
| см. раздел Одиночные макросы
|
macro_file
| имя_файла
| файл, содержащий макросы (по умолчанию - "macros.txt")
|
macro_allowDebug
| 0 1
| проверка консоли, а также процесса отладочных сообщений (по умолчанию: 0). Внимаение: это замедляет работу плагина.
|
Перед написанием макроса
Удостоверьтесь, что полностью прочли это руководство.
Если Вы хотите использовать команды OpenKore в вашем макросе, то прочитайте о консольных командах. Отмечу, что некоторые команды управления AI (Искусственным Интеллектом) не работают.
И наконец, прочитайте объявления. Они могут содержать полезные примеры.
Синтаксис макроса
macro foo {
do this..
and that..
yattayatta..
}
Теоретически вы можете использовать любую консольную команду в
макросе. Я использовал плагин для закупки Silver Arrow, разговори с нпц
и для отсылки людям приватных сообщений. Ленивые люди могут
использовать этот плагин чтобы закончить квест в amatsu dungeon, или
какие-нибудь как этот.
do <команда>
OpenKore выполняет указанную <команду>. Со списком команд можно ознакомиться тут. Например, бот пойдёт в пронту на координаты 123 234, затем сядет, а потом скажет в общий чат "hello world":
- Пример:
-
macro foo {
do move 123 234 prontera
do sit
do c "hello world"
}
log <текст>
Выводит <текст> на консоль (это текст увидите только Вы). Эту команду можно использовать для подсказок:
- Пример:
-
macro foo {
log Эта команда выводит текст в консоль
log Не забудьте про utf-8!
}
pause [<n>]
Останавливает макрос на <n> секунд.
- Пример:
-
macro foo {
log Я тут и...
pause 10
log Я всё ещё тут.
}
call <имя_макроса> [<n>]
Вызывает макрос <имя_макроса> [<n> раз] n – целое число. Когда макрос <имя_макроса> закончится, то текущий макрос продолжит работу.
release (<имя_автомакроса> | all)
Включает закрытый автомакрос (команда "run-once" закрывает автомакрос). Для включения всех автомакросов, используйте команду release all.
lock <имя_автомакроса>
Закрывает автомакрос и выключает его проверку.
stop
Немедленно завершает запущенный макрос.
set <опция> <значение>
Устанавливает <опции> макроса соответствующее <значение>:
- orphan метод
- macro_delay задержка
- overrideAI [0|1]
- repeat число раз
- exclusive [0|1]
См. раздел Автомакросы.
Переменные
Собственные переменные
Вы можете задавать и работать с собственными переменными.
Чтобы установить переменную используйте: $переменная = значение, для вызова переменной используйте $переменная.
Для увеличения или уменьшения значения переменной на 1, используйте $переменная++ или $переменная--.
Для вычислительных операций с переменными используйте команду @eval. Переменную можно задать как список, состоящий из нескольких переменных, разделённых запятыми:
macro foo {
$list = element one,element two,foo,bar,baz
$var = [$list]
log var contains $var (element one)
log list contains $list (element two,foo,bar,baz)
}
Внимание: имя переменной должно начинаться с буквы и не должно содержать ничего кроме букв и цифр.
- Пример, отображающий основные операции с переменными::
-
macro foo {
$var1 = world
$var2 = hello
$var3 = $var2 $var1
log next line will yell out "hello world . world . hello"
do c $var3 . $var1 . $var2
$var4 = 47
log \$var4 is $var4
$var4++
log \$var4 is $var4
$var4 = @eval ($var4 + 52)
log \$var4 is $var4
}
Специальные переменные
Здесь представлены специальные переменные. Они начинаются с символов "$."
- $.map - карта на которой вы находитесь ("prontera")
- $.pos - ваша текущая позиция ("123 234")
- $.time - текущее время как unix timestamp ("1131116304")
- $.datetime - текущее число и время ("Fri Nov 4 15:59:36 2005")
- $.hp - текущее hp
- $.sp - текущее sp
- $.lvl - текущее базовый левел
- $.joblvl - текущее джоб левел
- $.spirits - текущее количество сферок (для монка)
- $.zeny - текущее количество баксов
- $.status - текущие статусы через запятую (muted, dead)
- $.lastLogMsg - текст, запустивший последний автомакрос условием "console"
- $.lastpub - имя игрока, который запустил последний автомакрос условием "pubm"
- $.lastpubMsg - последнее его написанное сообщение
- $.lastpm - имя игрока, который запустил последний автомакрос условием "pm"
- $.lastpmMsg - последнее его написанное сообщение
- $.lastguild - имя игрока, который запустил последний автомакрос условием "guild"
- $.lastguildMsg - последнее его написанное сообщение
- $.lastparty - имя игрока, который запустил последний автомакрос условием "party"
- $.lastpartyMsg - последнее его написанное сообщение
- $.lastMonster - имя монстра, который запустил последний автомакрос условием "monster"
- $.lastMonsterPos - последняя известная позиция этого монстра ("123 234 prontera")
- $.lastMatchN - набор символов с шаблона regexp. Пример №1 Пример №2
- $.paramN - N-ый
параметр при запуске макроса. Например, если макрос запустить так:
"macro foo -- abra kadabra", то $.param1 = abra, а $.param2 = kadabra
(см. раздел Команды плагина)
- $.caller - name of the last triggered automacro
- $.hooksaveN - value of a hash key (argument that's given with hook)
Вложенные переменные
Вы можете определить динамические или вложенные переменные.
- Пример:
-
macro foo {
$var = foo
log \$var is "foo"
${$var} = bar
log \$\$var is \$foo is "bar"
}
Операторы макроса
Macro плагин поддерживает только три оператора ("if", "goto" и
"while"). Так как нет (видимой) нумерации строк, то Вы должны
использовать метки которые определяются как:
:<имя_метки>
Пример конструкции "while":
macro foo {
$i = 0
log the next lines will loop 11 times (0 .. 10)
while ($i <= 10) as exampleloop
log loop $i
$i++
end exampleloop
}
Пример конструкции "if" + "goto" (аналог if (...) then (...)):
проверяем условие равенства i=1
macro foo {
$i = @random ("1", "2")
if ($i == 1) goto one
goto end
:one
log i is one
goto end
log tra-ta-ta
:end
}
Однако короче будет "от противного", т.е. проверить условие "i не равно 1":
macro foo {
$i = @random ("1", "2")
if ($i != 1) goto end
log i is one
:end
log tra-ta-ta
}
Внимание: метки оператора goto не могут содержать ничего кроме букв и цифр.
Например: warp_to_payon писать неправильно, правильно писать так: warpToPayon
Оператор if (...), можно использовать только с последующим оператором goto. Т.е. написать как в обычных языках программирования:
if ($a != 2) $a = 3 <- нельзя!
Необходимо реализовать следующим образом:
if ($a != 2) goto end
$a = 3
:end
В случае если необходимо пользоваться конструкцией вида:
if (...)
then (...)
else (...)
то в макросах это будет выглядеть так:
macro foo {
$i = @random ("1", "2")
if ($i == 1) goto one
log i is two
goto end
:one
log i is one
goto end
:end
log tra-ta-ta
}
Пример конструкции "goto":
macro foo {
$i = 1
:plus
$i++
log i = $i
goto plus
}
Получился цикл: 1,2,3...
Условия
Условия
| Значение
|
<
| больше чем
|
<=
| больше либо равно
|
==
| равно
|
>=
| меньше либо равно
|
>
| меньше чем
|
!=
| не равно
|
~
| содержится (<левая переменная> это элемент <правой переменной>. Здесь правая переменная представляет собой лист переменных)
|
Специальные ключевые слова
- @npc (<x> <y>)
- показывает ID НПЦ, находящегося на (<x>, <y>), или "-1" если НПЦ не найден
- @inventory (<имя_вещи>)
- показывает ID <имя_вещи>, находящейся у Вас в инвентаре, или "-1" если такая вещь не найдена
- @Inventory (<item>)
- same as @inventory but returns all matching IDs as a comma-separated list or "-1" if the item was not found
- @cart (<имя_вещи>)
- показывает ID <имя_вещи>, находящейся у Вас в телеге, или "-1" если такая вещь не найдена
- @Cart (<item>)
- same as @cart but returns all matching IDs as a comma-separated list or "-1" if the item was not found
- @storage (<имя_вещи>)
- показывает ID <имя_вещи>, находящейся у Вас в кафре (хранилище), или "-1" если такая вещь не найдена
- @Storage (<item>)
- same as @storage but returns all matching IDs as a comma-separated list or "-1" if the item was not found
- @player (<имя_игрока>)
- показывает ID <имя_игрока>, или "-1" если такой игрок не найден
- @vender (<имя_игрока>)
- показывает ID торговца <имя_игрока>, который открыл магазин, или "-1" если такой игрок не найден
- @store (<имя_вещи>)
- показывает ID <имя_вещи> в магазине торговца (тут уже НПЦ, а не человека), или "-1" если такая вещь не найдена
- @random ("<аргумент1>" [, "<аргумент2>"[, ...]])
- показывает случайным образом один из указанных аргументов.
Аргументы обязательно писать в кавычках. Несколько аргументов
разделяются запятыми
- @rand (<n>, <m>)
- показывает случайное число между <n> и <m> (включительно). Дробные числа округляются до целого значения (3.4 округляется до 3; а 3.5 до 4)
- @invamount (<имя_вещи>)
- показывает количество данной <имя_вещи> в инвентаре
- @cartamount (<имя_вещи>)
- показывает количество данной <имя_вещи> в телеге
- @shopamount (<имя_вещи>)
- показывает количество данной <имя_вещи> в Вашем (открытом) магазине
- @storamount (<имя_вещи>)
- показывает количество данной <имя_вещи> в кафре (хранилище)
- @eval (<аргумент(ы)>)
- оценивает данный <аргумент>, или несколько аргументов. Например, если аргумент "$v = 8", то результатом оператора "@eval ($v + 2)" будет число 10
- @arg ("<набор_слов>", <n>)
- показывает <n>-ное слово из <набора_слов>, или "пробел", если <n> больше количества слов в <наборе_слов>
- @config (<параметр>)
- показывает значение параметра из config.txt. Например строчка
в макросе "log @config (username)" покажет на экране: "[macro][log]
<ваш логин>"
Формирование "цепочки команд"
Вы можете запустить последовательность команд (одну за другой), не дожидаясь OpenKore-вского искусственного интеллекта или macro_delay или чего-то ещё. Для этого заключите эти команды в квадратные скобки: [ И ].
- Пример, с нумерацией линий::
-
0 macro foo {
1 do <команда>
2 log <команда> BbInoLHeHa
3 [
4 do <команда1>
5 do <команда2>
6 log <команда1> u <команда2> BbInoLHeHbI
7 ]
8 log END
9 }
Линия 3 запускает "цепочку команд". Эта линия
не имеет задержки. Линии 4, 5 и 6 запускаются, как только предыдущая
команда закончилась без задержки, и они не могут быть прерваны. Линия 7
останавливает "цепочку команд" и после линии 8 команды пойдут с
задержкой $macro_delay <секунд>.
Простой пример макроса
- Пример::
-
macro foo {
$foobegin = $.pos
do move 168 128 prt_in
do talk @npc (172 130)
do store
do store
do buy @store (Silver Arrow) 10000
do move 280 198 prontera
do talk @npc (282 200)
do talk cont
do talk resp 1
do storage add @inventory (Silver Arrow) @eval (@invamount (Silver Arrow) - 1000)
do move $foobegin
}
Если Вы вызовите макрос через команду (в консоле) "macro foo", то произойдёт следующие:
- переменная "foobegin" принимает значение ваших текущих координат
- бот идёт в оружейный магазин Пронты "168 128 prt_in"
- бот заговорит с (кликнет на) НПЦ, находящегося на координатах 172 130
- нажимает кнопку “buy”, чтобы посмотреть что он продаёт
- покупает 10,000 Silver Arrow
- идёт в восточным воротам Пронты на координаты "280 198"
- разговаривает с кафрой
- нажимает кнопку продолжить (talk cont)
- выбирает хранилище (talk resp 1), оно открывается
- кладёт в хранилище все Silver Arrow, кроме 1000 шт
- закрывает хранилище (storage close)
- возвращается на место где он был перед запуском макроса.
Синтаксис автомакроса (АМ)
Существует 2 схемы автомакроса:
- 1. Автомакрос, который вызывает отдельный макрос::
-
automacro foo {
<условие> <значение>
<условие> <значение1>, <значение2>
call <имя макроса>
}
- 2. Автомакрос, который содержит в себе тело макроса::
-
automacro foo {
call {
do <команда>
do <команда>
}
}
Автомакрос - это макрос, который будет запущен тогда когда
условия будут соответствовать заданным. (Например Вы настроили чтоб у
Вас включался автомакрос при поднятие Jellopy. Допустим Вы убили
поринга и из него выпал Jellopy. Если Вы поднимете Jellopy, то Ваш
автомакрос запустится).
Далее АМ следует читать как автомакрос.
- map <имя_карты>
- АМ запустится, когда Вы будете находиться на локации <имя_карты>.
- location [not] <имя_карты> [<x1> <y1> [<x2> <y2>]] [, ...]
- АМ запустится, когда Вы находитесь в (вне (not)) локации <имя_карты>.
- Если координаты <x1> <y1> и <x2> <y2> не заданы, то АМ будет запускаться, как и в случае "map <имя-карты>".
- Если указаны только координаты <x1> <y1>, то АМ запустится, если Вы, находясь на локации <имя_карты>, попадёте на координаты <x1> <y1>.
- Если указаны координаты <x1> <y1> и <x2> <y2>, то АМ запустится, если Вы, находясь на локации <имя_карты>, попадёте в мнимый прямоугольник, где <x1> <y1> - верхняя левая точка, а <x2> <y2> - нижняя правая точка.
<x1> <y1> _______
| |
| |
|_______|
<x2> <y2>
- Отмечу, что "x1" < "x2", а "y1" > "y2".
- Отделённые запятыми аргументы определяются как условие OR (или):
-
- Пример:
- location geffen, prontera 123 234
- АМ будет запускаться, если Вы будете находиться в geffen или в prontera на координатах (123 234).
- Несколько строк (от двух и более) определяются как условие AND (и):
-
- Пример:
- location not geffen
location not prontera
- АМ будет запускаться, если Вы находитесь вне geffen и вне prontera.
- mapchange (<имя_карты>|any) [, ...]
- АМ запустится, если Вы текущую локацию поменяли на <имя_карты>. Если используется условие "mapchange any", то АМ будет запускаться при любом изменении локакци.
- Отделённые запятыми аргументы определяются как условие OR (или).
- hp <условие> <значение>[%]
- АМ запустится, когда ваше HP будет удовлетворять <условие> <значение> (абсолютное значение) или <условие> <значение>%
(процент) (относительное значение). Пусть у Вас всего 200 hp и у Вас
отняли 40 hp, значит теперь Ваше абсолютное значение 160 hp а
относительное 80% hp.
- Несколько строк (от двух и более) определяются как условие AND (и).
- sp <условие> <значение>[%]
- АМ запустится, когда ваше SP будет удовлетворять <условие> <значение> (абсолютное значение) или <условие> <значение>% (процент) (относительное значение).
- Несколько строк (от двух и более) определяются как условие AND (и).
- spirit <условие> <значение>
- АМ запустится, когда число сферок (у монка) будет удовлетворять <условие> <значение>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- weight <условие> <значение>[%]
- АМ запустится, когда Ваш вес будет удовлетворять <условие> <значение> (абсолютное значение) или <условие> <значение>% (процент) (относительное значение).
- Несколько строк (от двух и более) определяются как условие AND (и).
- cartweight <условие> <значение>[%]
- АМ запустится, когда вес Вашей телеги будет удовлетворять <условие> <значение> (абсолютное значение) или <условие> <значение>% (процент) (относительное значение).
- Несколько строк (от двух и более) определяются как условие AND (и).
- zeny <условие> <значение>
- АМ запустится, когда количество денег у Вас будет удовлетворять <условие> <значение>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- soldout <условие> <количество слотов>
- АМ запустится, когда количество проданных слотов в Вашем магазине будет удовлетворять <условие> <количество слотов>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- Например у Вас в АМ прописано "soldout > 1". Пусть у Вас в
магазине продаются 4 элу и 5 ори. АМ сработает тогда, когда у Вас купят
все элу или все ори. Если у Вас купят 1 элу, то слот будет считаться не
проданным и АМ не сработает.
- status [not] <статус> [, ...]
- АМ запустится, когда у Вас статус <статус> или нет статуса (not).
- Насколько я понял, то щас существует только 2 статуса: "dead" и "muted"
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- inventory "<имя_вещи>" <условие> <значение> [, ...]
- АМ запустится, когда количество <имя_вещи>, находящейся у Вас в инвентаре будет удовлетворять <условие> <значение>.
- Отмечу, что <имя_вещи> обязательно нужно писать в ""!
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- cart "<имя_вещи>" <условие> <значение> [, ...]
- АМ запустится, когда количество <имя_вещи>, находящейся у Вас в телеге будет удовлетворять <условие> <значение>.
- Отмечу, что <имя_вещи> обязательно нужно писать в ""!
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- storage "<имя_вещи>" <условие> <значение> [, ...]
- АМ запустится, когда количество <имя_вещи>, находящейся у Вас в кафре (хранилище) будет удовлетворять <условие> <значение>.
- Отмечу, что <имя_вещи> обязательно нужно писать в ""!
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- shop "<имя_вещи>" <условие> <значение> [, ...]
- АМ запустится, когда количество <имя_вещи>, находящейся у Вас в магазине (открытом) будет удовлетворять <условие> <значение>.
- Отмечу, что <имя_вещи> обязательно нужно писать в ""!
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- base <условие> <уровень>
- АМ запустится, когда Ваш базовый левел будет удовлетворять <условие> <уровень>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- job <условие> <уровень>
- АМ запустится, когда Ваш джоб левел будет удовлетворять <условие> <уровень>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- class <профессия>
- АМ запустится, если Ваша профессия: <профессия>.
- spell <имя_скила> [, ...]
- АМ запустится, когда на Вас кто-нибудь будет кастовать <имя_скила>.
- Отделённые запятыми аргументы определяются как условие OR (или).
- monster <имя_моба> [, ...]
- АМ запустится, когда моб <имя_моба> находится поблизости (в пределах видимости). Когда макрос вызван, устанавливаются специальные переменные $.lastMonster]] и $.lastMonsterPos.
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- notMonster <список_мобов>
- АМ запустится, когда моб, находящийся возле Вас (в пределах видимости), не находится в <списке_мобов>.
- Имена мобов следует писать через запятую, соблюдая РеГиСтР.
- Отделённые запятыми аргументы определяются как условие AND (и).
- aggressives <условие> <число>
- АМ запустится, когда число агрессивных монстров удовлетворяет условию: <условие> <число>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- player ("<имя_игрока>"|/<regexp>/[i]) [<число клеток>]
- АМ запустится, если игрок <имя_игрока> находится в пределах видимости или не дальше чем <число клеток>.
- Несколько строк (от двух и более) определяются как условие AND (и).
- equipped [<слот>] (<имя_вещи>|none) [, ...]
- АМ запустится, когда <имя_вещи> одето. Или не одето (none).
- Необязательно, но можно использовать <слот> (topHead, midHead, lowHead, leftHand, rightHand, robe, armor, shoes, leftAccessory, rightAccessory и arrow).
- Отделённые запятыми аргументы определяются как условие OR (или).
- Несколько строк (от двух и более) определяются как условие AND (и).
- var <имя_переменной> (unset | <условие> <значение>)
- АМ запустится, если переменная <имя_переменной> не заданна (unset) или удовлетворяет <условие> <значение>.
- Несколько строк (от двух и более) определяются как условие AND(и).
- varvar <имя_вложенной_переменной> (unset | <условие> <значение>)
- АМ запустится, если <вложенная_переменная> не заданна (unset) или удовлетворяет <условие> <значение>.
- Несколько строк (от двух и более) определяются как условие AND(и).
- console ("<текст>" | /<набор_символов>/[i])
- АМ запустится, когда в консоле появится <текст> (100%-ное совпадание сисволов) или если в консольном тексте сожержится символ (слово, набор символов) из <набора_символов> (regexp). Параметр i означает что <набор_символов> становится нечувствительным к РеГиСтРу. Его следует писать сразу после /<набора_символов>/ (без пробела).
- Устанавливается специальная переменная $.lastLogMsg.
- Примеры:
- Пусть в АМ есть строчка 'console "You are sitting."". Если в консоле набрать команду "sit", тот бот сядет и напишет "You are sitting." и АМ запустится.
- Пусть в АМ есть строчка console /You/. Если в
консольном тексте содержится слово "You", то АМ будет запускаться.
Отмечу, что если бы бот писал "you are sitting.", то АМ бы не
запустился.
- Пусть в АМ есть строчка console /y/i. Если в консольном тексте содержится символ "y" или "Y", то АМ будет запускаться.
Следует различать консольный текст и
текст чатов (приват, общий, пати, гилд). Т.е. если Вам в приват напишут
сообщение, то оно появится у Вас в консоли, НО для OpenKore это сообщение не консольный текст!
- pm ("<текст>" | /<набор_символов>/[i])[,<имя_игрока>]
- АМ запустится, если в приватном сообщении появится <текст> или если полученный текст содержит символ(ы) из <набора_символов>. Это условие можно установить для определённого игрока <имя_игрока>. Параметр i означает что <набор_символов> становится нечувствительным к РеГиСтРу.
- Устанавливается специальные переменные $.lastpm и $.lastpmMsg.
- pubm ("<текст>" | /<набор_символов>/[i])[,<число клеток>]
- АМ запустится, если в общем чате появится <текст> или если полученный текст содержит символ(ы) из <набора_символов>. Это условие можно установить для определённой дистанции (<число клеток>). Параметр i означает что <набор_символов> становится нечувствительным к РеГиСтРу.
- Устанавливается специальные переменные $.lastpub и $.lastpubMsg.
- party ("<текст>" | /<набор_символов>/[i])
- АМ запустится, если в пати-чате появится <текст> или если полученный текст содержит символ(ы) из <набора_символов>. Параметр i означает что <набор_символов> становится нечувствительным к РеГиСтРу.
- Устанавливается специальные переменные $.lastparty и $.lastpartyMsg.
- guild ("<текст>" | /<набор_символов>/[i])
- АМ запустится, если в гилд-чате появится <текст> или если полученный текст содержит символ(ы) из <набора_символов>. Параметр i означает что <набор_символов> становится нечувствительным к РеГиСтРу.
- Устанавливается специальные переменные $.lastguild и $.lastguildMsg.
- hook <hookname>
- triggers when openkore calls <hookname>.
- У кого есть примерчики?
- saveN <hash key>
- (use in combination with hook)
- saves the value of <hash key> in a variable $.hooksave1 to $.hooksaveN
- run-once (0 | 1)
- Если установлена "1", то АМ закроется, пока его не включат (см. команду release).
- Например, пусть АМ запускается, когда Ваш вес больше "1",
т.е. он будет запускаться пока Вы находитесь в игре. OpenKore постоянно
будет писать, что АМ запущен. Если Вы в тело АМ добавите строчку
"run-once 1" (не важно в начале или в конце), то АМ выполнится 1 раз,
после чего он "закроется".
- overrideAI (0 | 1)
- Если установлена "1",
то АМ будет игнорировать искусственный интеллект OpenKore. Т.е. АМ не
будет использовать паузу при движении (“move”) и при смерти (”status
death”).
- delay <n>
- АМ будет ждать <n> секунд, после чего продолжит свою работу.
- timeout <n>
- АМ будет ждать по крайней мере <n> секунд после чего перезапустится.
- Это пригодится, если необходимо повторять какие-то действия периодически через определённый промежуток времени.
- macro_delay <n>
- Устанавливает macro delay (задержку между командами макроса) в <n> секунд, игнорируя значение в файле timeouts.txt.
- priority <номер>
- Устанавливает приоритет АМ. АМ с меньшим номером запустится раньше. Если приоритет не установлен, то устанавливается "0".
- exclusive (0 | 1)
- Если установлена "1", то этот АМ не может быть прерван другими АМ.
- set <переменная> <значение>
- Устанавливает <переменной> соответствующее <значение>.
- В одном АМ можно использовать несколько условий "set".
- call <имя_макроса>
- Вызывает макрос <имя_макроса>.
- call {
- <команда>
- }
- Выполняет <команду>. В одном блоке "call" можно использовать несколько команд (оформляется как несколько строчек).
- orphan <метод>
- Устанавливает метод для работы с одиночным макросам. См. раздел Одиночные макросы.
Пример автомакроса
- Пример:
-
automacro autoloot {
console /You are now in the game/
call {
do c @autoloot 100
}
run-once 1
}
Когда бот подключается в консоле появляется
сообщение: "You are now in the game". Условие "console /You are now in
the game/" срабатывает и запускается автомакрос, т.е. выполняется
команда "do c @autoloot 100" (тоже самое если в клиенте ввести "c
@autoloot 100"). Команда "@autoloot 100" поддерживается не на всех
серверах!
Комментарий
Всё что находится за значком "#" OpenKore воспринимает как комментарий, т.е. эта строка будет игнорироваться.
- Пример:
-
# это комментарий
Одиночные макросы
Например, если использовать команду "ai clear" во время работающего
макроса, то этот макрос станет "одиночным". Это означает что макрос
существует, но не может продолжатся, т.е. макрос остаётся без поддержки
Искусственного Интеллекта (ИИ, он же AI) и не может действовать
самостоятельно.
До версии макроса 1.0.2 нужно было вручную вводить остановку
макроса командой "macro stop". Начиная с версии 1.0.2 Вы можете выбрать
определённый метод решения этой проблемы:
terminate
| завершает макрос (аналогично команде "macro stop")
|
reregister
| перерегистрация AI и отмена других входов.
Т.е. макрос продолжит свою работу.
|
reregister_safe
| перерегистрация AI и установка ожидания.
Т.е. макрос продолжит свою работу, как только выполнятся все другие задачи.
|
Известные ошибки/Ограничения
- автомакрос проверяет console игнорируя следующие области: macro.
- не используйте закрывающие скобки ")" в ключевом слове аргумента, если эта закрывающая скобка не относится к самому аргументу.
Пример:
@random ("foo", "bar", "@eval (4 + 5)", "yatta") - разрешено
@random ("foo", "bar", ":-)", "yatta") - запрещено
Если обнаружите какие-нибудь ошибки, то сообщите о них на форуме. Вы
используете плагин на свой страх риске, никаких гарантий нет, что он
работает как описано. Короче если бот облажается из-за этого плагина,
то автор ответственности не несёт. Надежда это - всё. Наслаждайтесь.
Скачать
Все версии (SVN)
Экстра
В SVN версии включено 2 дополнительных файла:
recorder.pl
автономный плагин для OpenKore, который можно использовать для записи макроса (только последовательность команд).
mconv.pl
программа (не законченная) для преобразования синтаксиса мароса версии 0.8.x и 0.9.x в синтаксис версии 1.x.x.
ЧаВО
Хелпппп! Я установил macro плагин, но мои макросы не обнаруживаться!
Удостоверьтесь, что Вы сохранили свои макросы в файле macros.txt. Windows Explorer (проводник) иногда скрывает расширения txt. Проверьте, не назвали ли Вы файл macros.txt.txt случайно.
Хеллп! Openkore выдаёт мне какие-то perl-ошибки: "a plugin failed to load"!
Никогда не сохраняйте Ваши (авто)макросы в .pl-файлы в папке plugins. Сохраняйте их в файл macros.txt
У меня есть макрос, которое работал с версией плагина 0.9.x, а теперь вылетают syntax errors.
Синтаксис изменился начиная с версии 1.0.0. Прочитайте документацию,
чтобы узнать о новом синтаксисе. Большинство макросов, написанных для
версии 0.8.x и 0.9.x можно преобразовать используя плагин mconv.pl.
Постоянно вылезает ошибка "Can't locate encoding.pm"!
- Если Вы используете OpenKore, то обновите версию до OpenKore 1.9.1 или лучше выше.
- Если Вы используете VisualKore, то обновите до VisualKore
1.9.2 или выше. OpenKore/VisualKore 1.6.x не поддерживают версии macro
плагина, начиная с 1.3.0.
Где я могу получить готовый макрос на халяву?
Ищите на местном форуме, на rofan.ru или www.ragnarokbot.ru/forum. Если Вы не можете найти макрос для своих целей - напишите об этом на одном из форумов. Никаких гарантий :)
У меня есть автомакрос, который проверяет количество вещи в инвентаре
(телеге), чтобы её (его) было меньше чем задано или равно нолю
(например inventory "red potion" <= 30), но автомакрос запускается
каждый раз, когда изменяются карта. Почему так, и что я должен сделать?
Когда Вы переходите на новую карту, все вещи из инвентаря исчезают в
течение короткого времени. Это также случается и с официальным
клиентом. Чтобы избежать этого - добавьте ещё 1 условие, например
дополнительная проверка вещи, которая у Вас всегда с собой (inventory
"Jellopy" > 0)
Обсуждение на форуме
Для обсуждения и поддержки, посетите форумы:
Лицензия
Macro плагин распространяется с лицензией GNU General Public License v2.
Если кратко, то Вы можете скачивать и модифицировать исходный код
программы. Но если Вы распространяете свои изменения - Вы должны также
предоставить модифицированный код. Подробности на сайте Free Software Foundation.
Автор
Сиё чудо написал arachno <arachnophobia пользователь сети sourceforge>
Особенная благодарность Pachu за то, что поместил этот мануал по macro плагину в wiki.
Ну и, конечно, бурные
мне,
4ept'у
(он же тут, и тут), за то что перевёл этот мануальчик на русский. По замечания/дополнениям/исправлениям пишите в асю
235563050