Гайд по установке, созданию и настройке макро плагинов...

Установка

В начале скачайте ваш макрос и разархивируйте его.
У вас должна быть папка с названием Macro содержащая несколько .pm файлов и два файла с названием macro.pl и cvsdebug.pm. Создайте папку plugins в корневом каталоге опенкора и скопируйте туда папку Macro и файл macro.pl. Также скопируйте файл cvsdebug.pm в корневой каталог опенкора и создайте файл macros.txt в папке control. Это файл где будет содержатся ваш макрос/автомакрос.
Так должно выглядеть дерево каталогов вашего опенкора (исключая файлы самого опенкора):

openkore
|-- control
|   `-- macros.txt
|-- cvsdebug.pm
|-- fields
|-- logs
|-- plugins
|   |-- Macro
|   |   |-- Automacro.pm
|   |   |-- Data.pm
|   |   |-- Parser.pm
|   |   |-- Script.pm
|   |   `-- Utilities.pm
|   `-- macro.pl
|-- src
`-- tables

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

Команды

Macro <название макроса> [опция] [ -- параметр (-ры) ]
Запуск macro <название макроса>
Опция                Значение                         Описание
-repeat                      N                 Повторяет макрос n раз
-overrideAL       (нет значений)    Убирает исуственный интеллект
                                                   опенкора
-macro_delay    задержка    Убирает общую задержку из
                                                   текущего макроса
-orphan                  method                 Использует <метод> для обработки 
                                                    одиночного макроса
(извиняюсь это была табличка)
Параметр для макроса может быть определен после двойного тире (или минуса кому как нравится) (--). Эти параметры сохраняют переменную $.param1 к $.paramN.
Пример:

macro foo {
    log Parameter 1 is $.param1
    log Parameter 2 is $.param2
}

Когда вызывается macro foo -- foo bar это будет выведено на экран
[macro] Parameter 1 is foo
[macro] Parameter 2 is bar

macro list
Списки всех доступных макросов.

macro stop
Остановка текущего макроса.

macro pause
Приостановка запущенного макроса.

macro resume
Включение приостановленного макроса.

macro set другое значение
Установка/изменение другого значения или удаление, если значение не задано.

macro version
Вывод версии макроса

macro reset [<название (-ния) >]
Сброс (или восстановление) всех запущенных автомакросов или изменение <название>.

macro status
Показывает запущен ли макрос в настоящее время. Если макрос запущен то показывает задержку перед следующей командой, текущую строку, параметры ИИ (Искуственного интелекта), действительно ли макрос завершен и действительно ли макрос зарегистрировался к ИИ. (эту фразу сам не понял но по идее просто перезапуск ИИ хотя могу и ошибаться)

Файлы Конфигурации

controls/macros.txt
Вставьте сюда свой макрос и автомакрос.
controls/timeouts.txt
Добавьте macro_delay и поставьте значение в секундах (по желанию) для паузы между командами
controls/config.txt

Переменная    Значение    Описание
macro_nowarn        01        Включает или выключает раздражающие
                                          предупреждения когда не используется
                                          команда call в вашем автомакросе (-сах).
macro_orphans    terminatereregisterreregister_safe    Смотрите
                                                                            Одиночные Макросы
macro_debug    Уровень (-ни)                Смотрите Отладку
(Это тоже была табличка)

Синтаксис Макроса

macro foo {
    do this..
    and that..
    yattayatta..
}

В теории вы можете использовать любую консольную команду макроса. Я (ну не я а автор) тестировал и использовал этот плагин для покупки серебряных стрел, разговора с NPC (НПС) и pm'ing people (команда ниже смотрите). Ленивые (заранее извиняюсь) люди могут использовать макрос для завершения квеста на проход в подземелье аматсу или на что-нибудь подобное.
do <команда>
Позволяет опенкору управлять <команда> (ну управления простыми командами типа sit, move).
Пример:

macro foo {
    do move 123 234 prontera
    do sit
    do c "hello world"
}

log <текст>
Выводит <текст> на консоль.
Пример:

macro foo {
    log This line logs a text to console.
    log All your base are belong to us!
}

pause [<n>]
Останавливает на 1 или <N> секунд (надеюсь понятно что макрос).
Пример:

macro foo {
    log I'm here and...
    pause 10
    log now I'm here.
}

call <название макроса> [<n>]
Вызывает макрос <название макроса> [<n> времени] (n – продолжительность макроса). Когда макрос <название макроса> заканчивается то текущий макрос продолжает работу. (т.е. вы можете прервать один макрос и запустить другой когда он закончится то прерванный макрос продолжит работу)

release (<название> | all)
Восстанавливает закрытый автомакрос (“run-once” ключевым словом или закрытый “lock”) или восстанавливает все автомакросы когда используется release all.

lock <название>
Закрывает автомакрос и выключает его проверку.

stop
Немедленно завершает запущенный макрос.

Описание и использование переменных.

Вы можете определить и работать с собственной переменной. Для установки переменной используют $variable = value, для восстановления величины используют $variable (я думаю понятно что переменной). Это дает возможность увеличивать или уменьшать переменную (имеется ввиду величину). Обратите внимание что переменные должны начинаться с символа должны содержать ничего кроме букв и цифр.
Пример:

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 – текущее время как отметка пользователей Юникс ("1131116304")
·    $.datetime – текущее число и время ("Fri Nov 4 15:59:36 2005")
·    $.lastLogMsg – переключение текста состояния последнего автомакроса “console”
·    $.lastpub – имя игрока переключившего текст последнего состояния  автомакроса "pubm" (в кавычках скорее всего команды смотрите ниже)
·    $.lastpubMsg – последнее его написанное сообщение
·    $.lastpm - имя игрока переключившего текст последнего состояния  автомакроса "pm"
·    $.lastpmMsg - последнее его написанное сообщение
·    $.lastguild - имя игрока переключившего текст последнего состояния  автомакроса "guild" (тоже но с гильдой)
·    $.lastguildMsg - последнее его написанное сообщение
·    $.lastparty - имя игрока переключившего текст последнего состояния  автомакроса "party" (а здесь с пати)
·    $.lastpartyMsg - последнее его написанное сообщение
·    $.lastMonster - имя игрока переключившего текст последнего состояния  автомакроса "monster" (а здесь с монстром)
·    $.lastMonsterPos – последняя известная позиция этого монстра ("123 234 prontera")
·    $.lastMatchN – сопоставление последней инормации с ссылкой или сайтом regexp (неуверен что верно перевел и надо разобратся что это такое)
·    $.paramN – строка параметров команд (смотрите Команды)
·    $.caller – название последнего переключенного автомакроса
(Тут многие переменные похожи но они для разных случаев смотрите внимательно!)
Вложенные переменные.
Вы можете определить динамические или вложенные переменные (не спрашивайте как)
Пример:

macro foo {
    $var = foo
    log \$var is "foo"
    ${$var} = bar
    log \$\$var is \$foo is "bar"
}

Управление потоком данных и метки. (Что такое метки к программисту!)
В то время как все языки программирования высокого уровня используют конструкции типа "if .. then", "while", "repeat", "for .. next", "do .. while" и функции содержащие выражение "if", "goto" and "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
}

Пример:

macro foo {
   $i = @random ("1", "2", "3")
   if ($i == 1) goto one
   if ($i == 2) goto two
   log i is three.
   goto end
   :one
   log i is one
   goto end
   :two
   log i is two
   :end
}

Специальные операторы.

@npc (<x> <y>)
показывает идентификатор НПСа который расположен <x>, <y> (по идее просто обнаруживает по координатам определенного НПСа или его идентификационный номер) (идентификационный номер это номер по которому что-то (вещь нпс и т.д.) зарегистрирована на сервере)

@inventory (<название вещи>)
находит в вашем инвентаре <название вещи> и возвращает ее идентификационный номер (надеюсь все понимают что название пишется на английском)

@cart (<название вещи>)
находит в вашей тележке <название вещи> и возвращает ее идентификационный номер

@storage (<название вещи>)
находит в вашем хранилище <название вещи> и возвращает ее идентификационный номер 

@player (<имя игрока>)
находит игрока и возвращает его идентификационный номер

@vender (<имя игрока>)
находит игрока торговца (который открыл магазин и вышел с помощью команды) и возвращает его идентификационный номер

@store (<название вещи>)
находит вещь в магазине торговца и возвращает ее идентификационный номер

@random ("<параметр1>"[, "<параметр2>"[, ...]])
возвращает случайным образом один из данных параметров (наверно что-то типа рандомной заточки или запутывания ГМов)

@rand (<n>, <m>)
возвращает случайное число между (и включая эти числа) <n> и <m>  (надеюсь все понимают что вместо n и m надо вставить числа)

@invamount (<название вещи>)
возвращает количество данной <название вещи> в инвентаре

@cartamount (<название вещи>)
возвращает количество данной <название вещи> в тележке

@shopamount (<название вещи>)
возвращает количество данной <название вещи> в магазине (который открыт игроком а не НПСом!)

@storamount (<название вещи>)
возвращает количество данной <название вещи> в хранилище

@eval (<аргумент>)
оценивает данный  <параметр>

@arg ("<argument>", <n>)
возвращает <n>ый текстовой <параметр>

@config (<переменная>)
возвращает значение <переменная> определенная в config.txt

Простой пример макроса:

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 серебряных стрел.
·    Идет к координатам в пронтере 280 198(Пронтера восточные ворота)
·    Разговаривает с кафрой
·    Выбирает хранилище и нажимает далее 1 (кнопка далее цифра 1) открывает хранилище
·    Кладет в хранилище все кроме 1000 серебряных стрел и закрывает
·    Возвращается на место где он был перед запуском макроса

Полный обзор синтаксиса макроса.
<letter>    'a' | 'b' | 'c' | .. | 'z' | 'A' | 'B' | 'C' | .. | 'Z'
<digit>    '0' | '1' | '2' | .. | '9'
<blank>    ' '
<undersc>    '_'
<special>    '-' | <undersc> | '.'
<sign>    '+' | '-'
<cond>    '==' | '!=' | '<' | '>' | '<=' | '>='
<newline>    'n' [<newline>] | 'rn' [<newline>]
<u_int>    <digit> [<u_int>]
<int>    <sign> <u_int>
<ident>    <letter> [<ident> | <digit> | <undersc>]
<s_ident>    '.' <ident>
<s_word>    <letter> [<s_word>] | <digit> [<s_word>]
<word>    <letter> [<word>] | <digit> [<word>] | <special> [<word>]
<string>    <word> [<blank> [<string>]]
<math>    '+' | '-' | '*' | '/'
<expression>    <int> <math> <int> | <int> <math> <expression>
<automacro name>    <word>
<macro name>    <word>
<keyword>    '@npc' | '@cart' | '@inventory' | '@store' | '@storage' | '@player' | '@vender' | '@var' | '@random' | '@rand' | '@invamount' | '@cartamount' | '@shopamount' | '@storamount' | '@eval' | '@arg' | '@config'
<argument>    '(' <string> ')' | '(' <expression> ')'
<parseable>    <string> | <keyword> <argument> | <parseable>
<macro command>    'log' <parseable> | 'lock' <parseable> | 'release' [<parseable> | 'all'] | 'pause' [<u_int>] | 'call' <macro name> [<u_int> | <parseable>] | 'stop'
<openkore command>    (see openkore manual for console commands)
<command>    <macro command> | 'do' <openkore command> <parseable>
<variable>    '$' <ident>
<s_variable>    '$' <s_ident>
<d_variable>    '${' [<variable> | <s_variable>] '}'
<label>    <ident>
<script>    <open block> <block> <close block>
<block>    <statement> <newline> [<block>] | <command> <newline> [<block>]
<open block>    'script' <word> '{' <newline>
<close block>    '}' <newline>
<statement>    <varassign> | <whilestat> | <ifstat> | <gotostat> | <labeldecl>
<varassign>    <variable> '=' <parseable> | <variable> '++' | <variable> '--'
<dvarassign>    <dvariable> '=' <parseable>
<labeldecl>    ':' <label>
<gotostat>    'goto' <label>
<ifstat>    'if' '(' ['"'] (<variable>|<parseable>) ['"'] <cond> ['"'] (<variable>|<parseable>) ['"'] ')' (<gotostat> | 'stop')
<whilestat>    'while' '(' ['"'] (<variable>|<parseable>) ['"'] <cond> ['"'] (<variable>|<parseable>) ['"'] ')' 'as' <label> <newline><block>'end' <label>
(Это переводить не буду думаю сами справитесь я не знаю где тут команды а где описание)(И это была табличка)
Синтаксис автомакроса.

automacro foo {
    <condition> bar
    <condition> baz, yatta
    call macroname
}
automacro mi {
    <condition> moo
    <condition> xyz
    call {
        do this
        do that
    }
}

Автомакрос это макрос который будет запущен тогда когда условия будут соответствовать заданным. (То есть например вы настроили чтоб у вас включался автомакрос при поднятие джеллопи вы убили поринга, подняли джеллопи и включился автомакрос)

map <название карты>
Запуск когда ваша текущая карта - <название карты>.

location [not] <название карты> [<x1> <y1> [<x2> <y2>]] [, ...]
Включение когда вы находитесь в [вне] указанной локации. Когда ни <x1> <y1> ни <x2> <y2> координата не указана, когда вы на [вне] карте <название карты>. Когда координаты <x2> <y2> не указаны и вы находитесь на [вне] <название карты> в <x1>, <x2> тоже. Когда <x1> <y1> и <x2> <y2> указаны и когда вы находитесь на <название карты> где-нибудь между <x1>, <y1> (верхний левый) и <x2>, <y2> (нижний правый) где <x1> < <x2> и <y1> > <y2> (По идее во всех этих случаях включается или вызывается макрос и извиняюсь за неточность перевода точнее не получилось). Отделенные запятыми параметры определяются как условие OR (или):

location geffen, prontera 123 234

Здесь макрос вызывается если вы оказываетесь в геффене или пронтере координаты 123 234. Несколько строк (от двух и более) определяются как условие AND(и):

location not geffen
location not prontera

Макрос вызывается когда вы ни в геффене ни в пронтере.
mapchange (<название карты>|any) [, ...]
Макрос вызывается когда происходит изменение карты на <название карты>. При использовании параметра any макрос вызывается при любом изменении карты. Отделенные запятыми определяются как условие OR (и).

hp <условие> <количество>[%]
Макрос вызывается когда ваше hp совпадают с <условие> <количество> (абсолютное значение) или <условие> <количество> % (процент) (относительное значение). (надеюсь все помнят что такое абсолютное и относительно зачение если нет то допустим у вас 100 hp и у вас сняли 40 hp значит теперь ваше абсолютное значение 60 hp а относительное 60%)
Условие    Значение
<    Меньше чем
<=    Меньше или равно
==    равно
>=    Больше или равно
>    Больше чем
!=    Не равно
Несколько строк (от двух и более) определяются как условие AND(и).

sp <условие> <количество>[%]
Макрос вызывается когда ваше sp совпадают с <условие> <количество> (абсолютное значение) или <условие> <количество> % (процент) (относительное значение). Несколько строк (от двух и более) определяются как условие AND(и).

spirit <условие> <количество>
Макрос вызывается когда ваш spirit (понятия не имею что это такое) совпадают с <условие> <количество>. Несколько строк (от двух и более) определяются как условие AND(и).

weight  <условие> <количество>
Макрос вызывается когда ваш вес совпадают с <условие> <количество> (абсолютное значение) или <условие> <количество> % (процент) (относительное значение). Несколько строк (от двух и более) определяются как условие AND(и).

cartweight <условие> <количество>
Макрос вызывается когда ваш вес в тележке совпадают с <условие> <количество> (абсолютное значение) или <условие> <количество> % (процент) (относительное значение). Несколько строк (от двух и более) определяются как условие AND(и).

zeny <условие> <количество>
Макрос вызывается когда ваши зени совпадают с <условие> <количество>. Несколько строк (от двух и более) определяются как условие AND(и).
(Здесь макрос выполняется в зависимости от условий и количества которые вы поставите)

soldout <условие> <слот>
Макрос вызывается когда проданные вещи со слотов магазина совпадают с <условие> <слот>. Несколько строк (от двух и более) определяются как условие AND(и).

status [нет] <статус> [, ...]
Макрос вызывается когда ваш статус [нет] <статус>. (нет - означает отсутствие статуса). Отделенные запятыми определяются как условие OR (и). Несколько строк (от двух и более) определяются как условие AND(и).

inventory "<название вещи>" <условие> <количество> [, ...]
Макрос вызывается когда параметры вещи d bydtynfht совпадают с "<название вещи>" <условие> <количество>. Отделенные запятыми определяются как условие OR (и). Несколько строк (от двух и более) определяются как условие AND(и).

storage "<название вещи>" <условие> <количество> [, ...]
Макрос вызывается когда параметры вещи в хранилище (в кафре которое) совпадают с "<название вещи>" <условие> <количество>. Отделенные запятыми определяются как условие OR (и). Несколько строк (от двух и более) определяются как условие AND(и).

cart  "<название вещи>" <условие> <количество> [, ...]
Макрос вызывается когда параметры вещи в тележке совпадают с "<название вещи>" <условие> <количество>. Отделенные запятыми определяются как условие OR (и). Несколько строк (от двух и более) определяются как условие AND(и).

shop "<название вещи>" <условие> <количество> [, ...]
Макрос вызывается когда параметры вещи в магазине (вами открытом) совпадают с "<название вещи>" <условие> <количество>. Отделенные запятыми определяются как условие OR (и). Несколько строк (от двух и более) определяются как условие AND(и).

base <условие> <уровень>
Макрос вызывается когда ваш базовый уровень совпадает с <условие> <уровень>. Несколько строк (от двух и более) определяются как условие AND(и).

job <условие> <уровень>
Макрос вызывается когда ваш джоб уровень совпадает с <условие> <уровень>. Несколько строк (от двух и более) определяются как условие AND(и).

class <класс персонажа>
Макрос вызывается когда ваша класс совпадает с <класс персонажа>.

monster <имя монстра> [, ...]
Макрос вызывается когда монстр <имя монстра> неподалеку. Когда макрос вызван устанавливаются специальные переменные $.lastMonster и $.lastMonsterPos. Отделенные запятыми определяются как условие OR (и). Несколько строк (от двух и более) определяются как условие AND(и).

player "<имя игрока>" [, <расстояние> ]
Макрос вызывается когда игрок <имя игрока> в пределах видимости или не дальше чем <расстояние>. Несколько строк (от двух и более) определяются как условие 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 ("<текст>"|/<regexp>/[i])
Макрос вызывается когда <текст> получен на консоли или полученное совпадает с <regexp>. Нажатие i означает что <regexp> становится нечувствительным к тексту. Устанавливается $.lastLogMsg.

pm ("<текст>"|/<regexp>/[i]) [, <имя игрока>]
Макрос вызывается когда <text> получен от pm [от <имя игрока>] или полученное совпадает с <regexp>. Нажатие i означает что <regexp> становится нечувствительным к тексту. Устанавливается $.lastpm  и $.lastpmMsg.

pubm ("<текст>"|/<regexp>/[i]) [, <расстояние>]
Макрос вызывается когда публичное сообщение получено [в пределах <расстояние>] и текст совпадает с <текст> или полученное совпадает с <regexp>. Нажатие i означает что <regexp> становится нечувствительным к тексту. Устанавливается $.lastpub и $. $.lastpubMsg.

party ("<текст>"|/<regexp>/[i])
Макрос вызывается когда <текст> получен из парти чата или полученное совпадает с <regexp>. Нажатие i означает что <regexp> становится нечувствительным к тексту. Устанавливается $.lastparty и $.lastpartyMsg.

guild ("<текст>"|/<regexp>/[i])
Макрос вызывается когда <текст> получен из гильд чата или полученное совпадает с <regexp>. Нажатие i означает что <regexp> становится нечувствительным к тексту. Устанавливается $.lastguild и $.lastguildMsg.
(То что указано после устанавливается это специальные переменные см. соответствующую тему)

hook <название захвата>(беспонятия что имелось ввиду)
Макрос вызывается после вызывания <название захвата>.

run-once (0|1)
Когда выбрано 1 автомакрос прекращает работу после вызова. Используйте команду release для восстановления макроса.

overrideAI (0|1)
Когда установлено 1 автомакрос игнорирует ИИ опенкора. Это означает что он не будет использовать паузу при движении (“move”) и при смерти (”status death”).

delay <n>
Ждет <n> секунд после чего вызывает соответствующий макрос.

timeout <n>
Ждет по крайней мере <n> секунд после чего макрос может быть перезапущен.

macro_delay <n>
Убирает (аннулирует) все macro_delay установки для текущего макроса.

set <переменная> <значение>
Устанавливает переменную <переменная> на <значение>. Вы можете иметь многочисленные  set в автомакросе.

call <имя макроса>
Вызывает макрос <имя макроса> когда автомакрос запущен.
call {
    <команда>
}
Запускает <команда> когда автомакрос запущен.

orphan <метод>
Устанавливает метод для работы с одиночным макросам. (см. тему одиночные макросы)
(Условия повторю OR(или) это запятая AND(и) это на каждой строчке то есть на первой одна команда на второй вторая и т.д. И важно в командах указано какие условия если нет одного значит его НЕЛЬЗЯ использовать для данной команды)

Пример автомакроса:

automacro checkshop {
   location prontera
   soldout >= 3
   delay 60
   call reopenshop
}

macro reopenshop {
   do closeshop
}

Этот макрос запускается когда вы открываете ваш магазин в пронтере и продаете там 3 и более вещей. Когда макрос запущен он ждет 1 минуту и вызывается макрос "reopenshop" который закрывает ваш магазин. Если у вас в shopAuto_open или autoshop настроено на 1 ваш магазин будет открыт через некоторое время.
Одиночные макросы.
Это может случится - например после использования ai clear в то время как макрос запущен – этот макрос стал одиночным. Это означает что макрос существует но не может продолжатся потому что требуется ИИ для поддержания входа «макроса» на первом месте. Когда ИИ очищен «макро» вход исчезает. До версии 1.0.2 макроса нужно было вручную вводить остановку макроса “macro stop”. С 1.0.2 вы можете выбрать определенный механизм (хотя мне слово путь больше нравится) для решения этой проблемы. (То есть макрос остается без поддержки ИИ и не может действовать самостоятельно)Есть три метода:

terminate     - Завершает макрос (Аналогично macro stop)
reregister     - Перерегистрация ИИ и отмена других входов. Это вызывает продолжение макроса.
reregister_safe - Перерегистрация ИИ и установка ожидания. Это означает что макрос будет продолжен как только все другие задачи выполнены.

Отладка.
Отладка сделана пакетом (файлом) cvsdebug.pm.
Добавьте macro_debug <уровень (-ни)> в файл config.txt.
Уровни отладки:

variable_trace
Прослеживание переменных

command_preparsed
Не анализирует командную строку

command_parsed
Анализирует командную строку

parser_steps
Анализирует шаги

function_call_macro
Макро функции (низкий трафик)

function_call_auto
Автомакро функции (высокий трафик)

automacro_checks
Автомакро проверка (высокий трафик)

developers
Полезные отладочные сообщения разботчикам (и не только)

full
Полная отладка, все уровни
Отладочные уровни разделяются линией |
Пример:

macro_debug variable_trace|parser_steps

Теперь когда вы прочитали документацию…
Вы должны добавить в файл config.txt строку:

macro_readmanual red/chili

Или ваш плагин будет немедленно выгружен.

Todos/Known bugs/Known limitations. (не знал как перевести ну типа баги и недочеты)
1). Автомакрос не запускается когда другие макросы активны.
2). Автомакрос проверяет console игнорируя следующие области: selfchat, macro и cvsdebug.
3). Автомакрос проверяет console игнорируя все то что приводит начало "[macro]" к бесконечному циклу. (вроде так)
4). Не используйте закрытые скобки «)» в ключевом слове аргумента если закрытая скобка для аргумента для примера: @random ("foo", "bar", "@eval (4 + 5)", "yatta")- разрешено, @random ("foo", "bar", ":-)", "yatta")- запрещено.

Загрузка.
Download macro plugin version 1.2.0 - http://openkore.sourceforge.net/macro/macro-1.2.0.zip
Download macro plugin version 0.9.3 - http://openkore.sourceforge.net/macro/macro-0.9.3.zip
Download macro plugin version 0.8.1 (устарел) - http://openkore.sourceforge.net/macro/macro-0.8.1.zip

Смотрите также основную информацию по установке на форуме.
Версия разработчика (SVN). - http://www.openkore.com/wiki/index.php/ … _for_users

Версия разработчика Openkore SVN может быть найдена в хранилище.
Пользователи Windows должны прочитать SVN гайд.
(Макрос 1.2.0 можно использовать и для обычной версии опенкора и для SVN макрос версии SVN можно использовать только для опенкора такой же версии)
Распаковка.
SVN версия включает в себя два дополнительных файла:

recorder.pl
Стандартный плагин опенкора может быть использован для записи макроса. (только командная строка)

mconv.pl
(еще неполная) программа для преобразования 0.8.x и 0.9.x макрос в 1.x.x.

Форум - the macro plugin's forum - http://forums.openkore.com/viewforum.php?f=18
Лицензия - GNU General Public License - http://www.gnu.org/licenses/gpl.html
Автор - arachno

Перевод –Ranger (как себя то забыть ;))

(Не поместившееся ссылки:
autoshop - http://forums.openkore.com/viewtopic.php?t=5032
regexp - http://www.regular-expressions.info/)

нашел на другом форуме