PDA

Просмотр полной версии : как написать простой макрос...


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).
Перед тем как начать писать макрос, четко поймите что вы хотите получить а частности какое условие срабатывания и что потом бот должен сделать; если не можете четко представить структуру макроса нарисуйте алгоритм на бамажке.

masterspirta
11.01.2008, 15:24
ели что добавить или подправить вы говрите я дополню!!

AmsTaFF
11.01.2008, 15:25
ты бы шаблоны с названиями прописал бы... а то прочтут, подумают, что без названий надо... дык ещё дай пример macro...
не забудь про run-once 1 + release... ибо это базовое, что надо знать для написания простого макроса... не забудь упомянять про пример do

прости, что так в разнобой, но времени форматировать текст нету.

masterspirta
11.01.2008, 16:41
ты бы шаблоны с названиями прописал бы... а то прочтут, подумают, что без названий надо... дык ещё дай пример macro...
не забудь про run-once 1 + release... ибо это базовое, что надо знать для написания простого макроса... не забудь упомянять про пример do

прости, что так в разнобой, но времени форматировать текст нету.

ты бы шаблоны с названиями прописал бы - непонял чо автар хочет
дык ещё дай пример macro - я писал обьяснения для новичков что б они поняли с чем имеют дела ссылки на гайд даны для того что бы брать от туда информацию

не забудь про run-once 1 + release. - у меня почти все макросы без этого для простого мака можно и пропустить это мимо глаз, когда разберуться немного тогда будет понимание зачем это нада!

не забудь упомянять про пример do я немогу подправить...((


А добавил бы следующие
команда do в теле макроса означает выполнение действия
do use "выполнить использования"
do ss "выполнить скил"
do c "выполнить паблик чат"
и так далее

Здесь все команды (http://openkore.sourceforge.net/manual/view.php?p=Console%20Commands)

Gans
11.01.2008, 16:54
masterspirta, прежде чем публиковать тексты, прогоняй их спеллчекером.

masterspirta
11.01.2008, 17:06
masterspirta, прежде чем публиковать тексты, прогоняй их спеллчекером.

спеллчек, хз чо это такое?
------------------------
Не туды ссылку дал, исправил!!

4epT
11.01.2008, 20:08
1. "заметьте что если прийдет "привет." макрос уже не сработает"
спорим что сработает? У тебя же написано "pm /привет/", т.е. в строке мы ищим слово "привет". А теперь убеди меня, что в строке "привет." нету слова привет :))

2. "описание этих дейсвий описываються"
тафтология

3. "Прошу заметить что цифра это есть часным случаем числа!"
чего? Ты хотел, наверно, сказать что цисла состоят из чисел?

4. "После окончания работы макроса память выделяная на переменные очищаеться"
вот тут у меня сомнения.. там какой-то косяк есть с переменными, но что-то ту не так.. не помню что, кароче нада точно проверить

5. "Через 10 сек после срабатывания автомакроса запускается макрос foo, потом ещо через 10 сек запускается макрос foos при условии что макрос foo уже выполнен и закрыт!"
это ты проверял? о_О тут бред на счёт закрытия макроса, как ты закроешь макрос? Закрыться может тока автомакрос.

6. "гайде по макро плагинам"
по макро плагину, он всего один :)

7. "я немогу подправить"
как это не можешь? а как понимать "Последний раз редактировалось masterspirta, Сегодня в 17:09."?? Как ты подправил (дополнил) последнее сообщение?

8. "спеллчек, хз чо это такое?"
загоняешь текст в Word и жмёшь "проверить орфографию"

masterspirta
11.01.2008, 20:15
я правил его когда к нему ещо небыл прикреплен статус важно....щас немагу!! все с работы бегу домой потом все подправлю!!!

4epT
11.01.2008, 20:19
ты вообще видел как оформлен гайд по макросам? правда красиво?
а теперь посмотри на своё чудо.. сделай его по-краше (жмёшь "Правка", потом "расширеный режим")

кстати подправил немного твой пост (выделил чуток жирным и добавил инфу про do)

снял пока статус важной

GoldenShadow
11.01.2008, 20:57
1. "заметьте что если прийдет "привет." макрос уже не сработает"
спорим что сработает? У тебя же написано "pm /привет/", т.е. в строке мы ищим слово "привет". А теперь убеди меня, что в строке "привет." нету слова привет
То есть ты хотел сказать, что достаточно написать часть слова(например "при") и при появлении слова "привет" макрос сработает? по моему я это где то встречал уже...вроде в макросе про автолут, там тоже что то подобное было с "You are in the game" достаточно было указать не полную строку...
Вы мне оттветьте лучше вот на что...если я поставлю условие например, при появлении в консоли буквы "к",то при каждом ее появлении,ни важно в слове или отдельно, будет срабатывать макрос?

alex600
12.01.2008, 07:20
Вы мне оттветьте лучше вот на что...если я поставлю условие например, при появлении в консоли буквы "к",то при каждом ее появлении,ни важно в слове или отдельно, будет срабатывать макрос?

Если шаблоны для макросов и плагина Лайкхуман работаю одинаково - то однозначно сработает!
У меня в последнем блоке для Лайка стоит "/ /" и ответ "))". Бот на всё, что не попадает под вышестоящие шаблоны и состоящее более чем из 1 слова отвечает "))" чтоб не отмалчиваться.:)

4epT
12.01.2008, 17:45
GoldenShadow, да!
Почитайте ещё разочек в гайде про условие: console (http://ragbot.ru/forum/showthread.php?p=3389#post3389)

кароче существует 2 типа шаблонов:

1 шаблон:
когда мы ищем точную строку. Например я точно знаю что когда бот сядет, он в консоль пишет: "You are sitting." другого вариана быть не может. Главное правило при составлении шаблона (как мне кажется) это чтобы он максимально широко описывал суть фразы которую мы ищем! Составляем шаблон (в кавычках):
console "You are sitting."
Если у нас в консоли (откуда-то) появится строчка: "You are sitting. Blablabla". То наш макрос не сработает

2 шаблон:
когда мы ищем строчку, в которой может меняться слово, цифра, и т.д. Т.е. мы знаем, что он точно содержит несколько слов (цифр), а также слова (цифры) которые могут меняться.
Например если нас атакует какой-то игрок, то в консоле появится строчка:
Player 4epT (0) is casting Extremity Fist on you (time 920ms)

Естественно, нас может атаковать не только игрок с именем 4epT, также номер игрока может быть не "(0)", ну и "time 920ms" тоже может меняться. В остальном фраза во всех случаях будет одинаковая. простые нюбы могут запомнить, что в шаблоне сочетание точни и звёздочки (.*) означает "любое количество любых символов".
Составляем шаблон (со слэшами):
console /Player .* is casting Extremity Fist on you .*/
В итоге если нас атакует какой-нибудь мудак, то в консоле напишется, например:
Player мудак (0) is casting Extremity Fist on you (time 920ms)

и наш макрос благополучно запустится.

Немножко сравнения:
Если бы мы в первом случае составили бы шаблон со слэшами:
console /You are sitting./
то он также запустил бы нам макрос, если бы бот сел, НО если у нас в консоли (откуда-то) появится строчка: "You are sitting. Blablabla". То наш шаблон тоже сработает, т.к. в этой строке содержатся символы: You are sitting.

Кто не понил тот дурак!!

masterspirta, перенеси это к себе в первый пост

Gans
12.01.2008, 20:13
А вот знаете что я думаю? Я думаю что условие console / .... / чисто для нупов. Они юзают его от бессилия написать какое-то другое, более правильное условие. С другой стороны... пока его не было, как-то люди крутились, и от его отсутствия тож никто не помирал.

ЗЫ: это был фдуд.

4epT
12.01.2008, 20:22
Gans, ну ты, наверное, хотел сказать что его нюбы не рационально используют (если используют вообще)

Super_Spy
12.01.2008, 20:59
masterspirta, составляя гайд по написанию макросов для тех, кто впервые о них слышит, не забывай в самом начале рассказать, куда вообще тело макроса записывается - в какую папку, в какой файл и каким образом. Тогда и вопросов меньше будет ;)
ЗЫ надеюсь, не сочтется флудом :)

Anoha
12.09.2008, 17:54
Блин вроде правильно все пишу, кора на синтаксис не ругаетса, макрос срабатывает, но ничего не выполняет=( подскажите чфо не так?
automacro tp {
delay 5
location not abyss_03
call {
do c @warp abyss_03
}
run-once 0
}

4epT
12.09.2008, 19:47
а у меня работает, причём начинает флудить в консоль:
[macro] automacro tp triggered.
[macro] automacro tp triggered.
[macro] automacro tp triggered.
[macro] automacro tp triggered.
...
сразу скажу что загвостка в "run-once", читаем для чего оно надо