masterspirta
11.01.2008, 14:56
Как написать простой макрос...
0) Куда вставлять написаный макрос
...OKore_204\control\macros.txt
Вот пример содержания файла
#Сюда пишите ваши макросы и автомакросы
#Гайд по macro плагину:
#http://www.openkore.com/wiki/index.php/Macro_plugin_Russian
automacro loot {
delay 25
console /You have no new messages./
call loot
}
macro loot {
do c @autoloot 100
do c @go 0
}
1) Для автомакроса нужно условие его авто запуска...
Условия бывают разные в зависимости от задач, часто используют для срабатывания c макроса условие появления в приват чате пати чате или паблик чате или в консоли определенного сочетания слов или за ведома известной строки. Но условием может быть что угодно текущая координата, или название локации и таму подобное. Условий может быть несколько!
Задача условия выдать TRUE* для срабатывания макроса
* образно не буквально
Пример:
automacro{
pm /привет/ <--(условие)
call{
.
.
.
}
}
Условием срабатывания этого автомакроса будет появления сообщения от любого игрока в котором есть слово "привет" !
2) Вызов макроса
После того как мы выполнили условие срабатывания, мы должны совершить какие либо действия, описание этих действий описываются в макросе. Тело макроса можно вложить в автомакрос как представлено выше, или описать его отдельно, а автомакрос будет его вызывать с помощью команды call смотрим ниже.
automacro{
pm /привет/ <--(условие)
call foo <--(вызывает макрос foo)
}
macro foo{ <--(макрос foo)
.
.
.
}
Вы спросите наверно в чем разница? А разница в том что макрос foo может быть вызван несколькими автомакросами, что есть более гибко, практично и полезно в чем вы непременно убедитесь!
3) Тело макроса
В теле макроса описывается то что должен сделать бот! В простейшем случаи это последовательность команд (выполняются друг за другом). Ботом можно управлять через консоль, вводя в нее. консольные команды (http://openkore.sourceforge.net/manual/view.php?p=Console%20Commands). (на русском (http://ragbot.ru/forum/showthread.php?t=26)). Чтобы их использовать в макросе, необходимо воспользоваться командой do:
команда do в теле макроса означает выполнение действия
do use "выполнить использования"
do ss "выполнить скил"
do c "выполнить паблик чат"
и так далее
Но иногда нам нужно что бы некоторые команды работали при одном условии а другие при другом условии, условий может быть множество и разных, для этого нам нужны операторы макроса (http://ragbot.ru/forum/showpost.php?p=3336&postcount=10)!
4)Шаблоны. Что это такое и как с ними бороться!
Шаблоны используются во всех языках программирования для того что бы упростить роботу программисту вы спросите как, лучше всего вам наверно на этот вопрос поможет ответить пример:
Жизненный пример:
Привет, хай, хелоу, здрям, боэнос диас, Hello и так далее
Слова єти все разные но их объединяет одно, все єти слова есть приветствием
Тоесть под параметр приветствие попадают все єти слова, из єтого можна сделать вывод
Что параметр приветствие есть шаблон для всех выше упомянутых слов!
Теперь как это в программировании:
Например 8 88 5 987 256 456 853 и так далее
Здесь есть цифры и числа и они все имеют разное значение но
\d+ - есть шаблон для выше упомянутых чисел, и означает любое число
Прошу заметить что цифра это есть частным случаем числа!
Также есть одна закавыка что касается использования шаблонов в условиях. Если у вас есть несколько автомакросов то нужно учесть что их условия срабатывания никогда не пересекались, тоесть условия срабатывания одного макроса небыло часным случаем условия срабатывания другого! Смотрим пример:
automacro{
pm /.*/
call{
.
.
.
}
}
automacro{
pm /.*/,"ник"
call{
.
.
.
}
}
В данном случае у нас 2 автомакроса условием срабатывания 1-го является получения любого приват сообщения, условиям 2-го получения приват сообщения только от отдельного игрока.И получаем что при получении сообщения от игрока определенного в условии 2го автомакроса, будет условием срабатывания обоих автомакросов что есть неправильно.
*Из данной ситуации есть выход путем применения приоритетности автомакросов!
Шаблон и регулярное выражение в принципе одно и тоже понятие, просто в разных языках программирование немного разные принципы строения програм из за этого есть некоторые отличия и в терминах!!
Теперь как их лучше применить:
Не буду тут распинаться это очень хорошо описал 4ерт гайде на макро плагин
(http://ragbot.ru/forum/showpost.php?p=6117&postcount=21)
5)То что нужно знать.
5.1 Несколько макросов не могут работать одновременно, может работать только один.
5.2 Значение переменных не передаються от макроса к макросу, тоесть они локальные и динамические.
После окончания работы макроса память выделяная на переменные очищаеться
*Есть глобальные переменные но не будем о страшном!
5.3 Паузы и задержки
pause <число секунд>
delay <число секунд>
Первое используеться в теле макроса, нужно для того что бы админы не афигели когда вы(бот) напимер будете отвечть на их вопрос предложением из 10 слов в течении 1 секунды!!
Второе описываеться в теле автомакроса, это задержка после выполнением команд для всего тела автомакроса, например:
automacro{
pm /.*/
delay 10
call{
do с 1 <--(выводит цифру 1 в паблик чате)
do c 2
do c 3
}
}
Выполняться будет так:
do с 1
10 секунд
do с 2
10 секунд
do с 3
10 секунд
6) Заключение.
Все что выше выложено это как бы "обьяснения на пальцах", большая часть информации в гайде по макро плагинам (http://ragbot.ru/forum/showthread.php?t=597).
Перед тем как начать писать макрос, четко поймите что вы хотите получить а частности какое условие срабатывания и что потом бот должен сделать; если не можете четко представить структуру макроса нарисуйте алгоритм на бамажке.
0) Куда вставлять написаный макрос
...OKore_204\control\macros.txt
Вот пример содержания файла
#Сюда пишите ваши макросы и автомакросы
#Гайд по macro плагину:
#http://www.openkore.com/wiki/index.php/Macro_plugin_Russian
automacro loot {
delay 25
console /You have no new messages./
call loot
}
macro loot {
do c @autoloot 100
do c @go 0
}
1) Для автомакроса нужно условие его авто запуска...
Условия бывают разные в зависимости от задач, часто используют для срабатывания c макроса условие появления в приват чате пати чате или паблик чате или в консоли определенного сочетания слов или за ведома известной строки. Но условием может быть что угодно текущая координата, или название локации и таму подобное. Условий может быть несколько!
Задача условия выдать TRUE* для срабатывания макроса
* образно не буквально
Пример:
automacro{
pm /привет/ <--(условие)
call{
.
.
.
}
}
Условием срабатывания этого автомакроса будет появления сообщения от любого игрока в котором есть слово "привет" !
2) Вызов макроса
После того как мы выполнили условие срабатывания, мы должны совершить какие либо действия, описание этих действий описываются в макросе. Тело макроса можно вложить в автомакрос как представлено выше, или описать его отдельно, а автомакрос будет его вызывать с помощью команды call смотрим ниже.
automacro{
pm /привет/ <--(условие)
call foo <--(вызывает макрос foo)
}
macro foo{ <--(макрос foo)
.
.
.
}
Вы спросите наверно в чем разница? А разница в том что макрос foo может быть вызван несколькими автомакросами, что есть более гибко, практично и полезно в чем вы непременно убедитесь!
3) Тело макроса
В теле макроса описывается то что должен сделать бот! В простейшем случаи это последовательность команд (выполняются друг за другом). Ботом можно управлять через консоль, вводя в нее. консольные команды (http://openkore.sourceforge.net/manual/view.php?p=Console%20Commands). (на русском (http://ragbot.ru/forum/showthread.php?t=26)). Чтобы их использовать в макросе, необходимо воспользоваться командой do:
команда do в теле макроса означает выполнение действия
do use "выполнить использования"
do ss "выполнить скил"
do c "выполнить паблик чат"
и так далее
Но иногда нам нужно что бы некоторые команды работали при одном условии а другие при другом условии, условий может быть множество и разных, для этого нам нужны операторы макроса (http://ragbot.ru/forum/showpost.php?p=3336&postcount=10)!
4)Шаблоны. Что это такое и как с ними бороться!
Шаблоны используются во всех языках программирования для того что бы упростить роботу программисту вы спросите как, лучше всего вам наверно на этот вопрос поможет ответить пример:
Жизненный пример:
Привет, хай, хелоу, здрям, боэнос диас, Hello и так далее
Слова єти все разные но их объединяет одно, все єти слова есть приветствием
Тоесть под параметр приветствие попадают все єти слова, из єтого можна сделать вывод
Что параметр приветствие есть шаблон для всех выше упомянутых слов!
Теперь как это в программировании:
Например 8 88 5 987 256 456 853 и так далее
Здесь есть цифры и числа и они все имеют разное значение но
\d+ - есть шаблон для выше упомянутых чисел, и означает любое число
Прошу заметить что цифра это есть частным случаем числа!
Также есть одна закавыка что касается использования шаблонов в условиях. Если у вас есть несколько автомакросов то нужно учесть что их условия срабатывания никогда не пересекались, тоесть условия срабатывания одного макроса небыло часным случаем условия срабатывания другого! Смотрим пример:
automacro{
pm /.*/
call{
.
.
.
}
}
automacro{
pm /.*/,"ник"
call{
.
.
.
}
}
В данном случае у нас 2 автомакроса условием срабатывания 1-го является получения любого приват сообщения, условиям 2-го получения приват сообщения только от отдельного игрока.И получаем что при получении сообщения от игрока определенного в условии 2го автомакроса, будет условием срабатывания обоих автомакросов что есть неправильно.
*Из данной ситуации есть выход путем применения приоритетности автомакросов!
Шаблон и регулярное выражение в принципе одно и тоже понятие, просто в разных языках программирование немного разные принципы строения програм из за этого есть некоторые отличия и в терминах!!
Теперь как их лучше применить:
Не буду тут распинаться это очень хорошо описал 4ерт гайде на макро плагин
(http://ragbot.ru/forum/showpost.php?p=6117&postcount=21)
5)То что нужно знать.
5.1 Несколько макросов не могут работать одновременно, может работать только один.
5.2 Значение переменных не передаються от макроса к макросу, тоесть они локальные и динамические.
После окончания работы макроса память выделяная на переменные очищаеться
*Есть глобальные переменные но не будем о страшном!
5.3 Паузы и задержки
pause <число секунд>
delay <число секунд>
Первое используеться в теле макроса, нужно для того что бы админы не афигели когда вы(бот) напимер будете отвечть на их вопрос предложением из 10 слов в течении 1 секунды!!
Второе описываеться в теле автомакроса, это задержка после выполнением команд для всего тела автомакроса, например:
automacro{
pm /.*/
delay 10
call{
do с 1 <--(выводит цифру 1 в паблик чате)
do c 2
do c 3
}
}
Выполняться будет так:
do с 1
10 секунд
do с 2
10 секунд
do с 3
10 секунд
6) Заключение.
Все что выше выложено это как бы "обьяснения на пальцах", большая часть информации в гайде по макро плагинам (http://ragbot.ru/forum/showthread.php?t=597).
Перед тем как начать писать макрос, четко поймите что вы хотите получить а частности какое условие срабатывания и что потом бот должен сделать; если не можете четко представить структуру макроса нарисуйте алгоритм на бамажке.