PDA

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


4epT
10.05.2007, 02:03
Если нам улыбнулись, то и мы улыбнёмся в ответ:

automacro emocia {
console /(\d+).*(\*Heh|\*Kiss|\*Bleks)/
timeout 5
call {
if ($.lastMatch1 > 6) goto end
pause 2
if ($.lastMatch2 = *Heh) goto heh
if ($.lastMatch2 = *Kiss) goto kis
if ($.lastMatch2 = *Bleks) goto blek
:heh
do e heh
stop
:kis
do e kis
stop
:blek
do c 93bIk BbIpBy!
:end
}
}

разъясню строчку: console /(\*Heh|\*Kiss|\*Bleks)/
1. Символ * - являетя специальным символом, а не просто звёздочкой. Чтобы его превратить в "просто звёздочку" мы ставим перед ним символ: (\.
2. Когда вам (или не вам) смеются, то в консоле появляется строчка, вида:
[dist=2.8] 4epT (0): *Heh*
Мы прицепляемся к слову *Heh (а так же *Kiss и *Bleks в других случаях). Вторую звёздочку не берём потомучто надо было бы писать \*Heh\* (кароче чтобы по проще было).
3. Символ | - считается как ИЛИ

Дальше объяснять как работает?

Если нам посмеялись (*Heh) с расстояния меньше 6 клеток ($.lastMatch1 > 6), то мы ждём 2 секунды и тоже смеёмся (do e heh), дальше макрос останавливается (stop)

Чтобы узнать что появляется в консоли когда нам смеются (улыбаются, показывают язык, машут флагом), нада поставить пота (подальше от общественности, можно в здание) и придти другим чаром (загрузиться как и обычно через клиент) ну и посмеяться (улыбнуться, показать язык, помахать флагом). Затем переключиться на бота и посмотеть, что там интересного написалось в консоле.

Далее. Чтобы ответить улыбкой на улыбку (kiss'ом на kiss) открываем файл tables\emotions.txt:
0 ! *!*
1 ? *?*
...
18 heh *Heh*
...
30 kis *Kiss*
ну и так далее

так вот когда нам смеются то в консоле появляется *Heh*, а чтобы нам посмеяться то пишем do e heh (e - )

Gans
10.05.2007, 09:22
как-то громоздко...

4epT
10.05.2007, 18:31
есть идеи по минимизации?
это максимум минимизации что я мог придумать в 2 часа ночи.
и тут рассмотрено только 3 смайлика :)

можно разбить на группы смайликов и отвечать радномно тоже из группы

Barbarian
10.05.2007, 20:00
да да да нужна дорабортка по смайликам и желательно поутру на свежую голову :)))

4epT
10.05.2007, 20:47
что значит доработка?
кому чё нада тот сам себе всунет (где текст, где смаил)
чё делать я расписал!

Barbarian
21.05.2007, 17:41
а как написать чтобы бот показывал смайлик только если чар показавший смайлик находится в определенном радиусе

4epT
22.05.2007, 00:51
Barbarian, подправил макрос, теперь можно указывать расстояние
ЗЫ: см. 1 сообщение

Funt
30.05.2007, 18:33
А можно по подробнее про выражение в скобках- (\d+)?Что оно обозначает?
Второе,не нашёл в гайде,а можно использовать конструкцию вида
if ($.lastMatch2 = *Heh) do e heh
Ну всмысле if...do...else...goto/do?

4epT
31.05.2007, 15:53
\d+ - целое число
Памятка по регулярным выражениям (regexp) (http://rofan.ru/viewtopic.php?t=1302&start=0&postdays=0&postorder=asc&highlight=regexp)
про конструкцию ответ: НЕТ

alex888
06.05.2008, 20:40
Ссылка на Памятка по регулярным выражениям (regexp)
не работает! Где еще можно прочесть про это ?

4epT
06.05.2008, 20:44
у меня работает :):)

http://www.scanet.info/regexp_ru.htm

xdrobx
29.06.2009, 19:34
Не помню где взял, но дорабатывал сам, вроде тут в тему как раз:


automacro emocia {
console /(\d+).*(\*Heh|\*Kiss|\*Bleks|\*!|\*?|\*Whistling|\ *Heart|\*Sweat|\*Idea|\*$!@#|\*Grumble|\*Zeny!|\*. ..|\*Peace|\*Fist|\*Wave|\*Flag 1|\*Love|\*Thanks|\*Wah|\*Sorry|\*Heh|\*Sweat2|\*H mm|\*Nice One|\*??|\*omg|\*O|\*X|\*Go|\*Sob|\*Good Game|\*Kiss 2|\*Pfft|\*OK|\*Flag 2|\*Angry|\*Drool|\*2 Hearts|\*Bleks|\*Na-ah|\*Pat Pat|\*SP|\*Horny|\*Come Here|\*Yawn|\*Congratulations|\*HP|\*Flag 3)/
timeout 5
call {
$text = @random ("no1", "lv", "pat", "lv2", "kis", "kis2", "awsm", "ok", "!", "?", "ho", "swt", "ic", "an", "ag", "$", "pea", "fst", "flg", "wav", "lv2", "wah", "sry", "heh", "swt", "hmm", "??", "omg", "oh", "x", "go", "sob", "gg", "pif", "ok", "flg2", "e1", "rice", "awsm", "meh", "shy", "pat", "slur", "com", "grat")
pause 3
do e $text
pause 1
release emocia
}
}

Добавлено через 42 секунды
Ну можно на свой вкус подстроить и тп, я к примеру)

verozv13k
30.08.2009, 01:24
Зачем описывать все смайлы, если можно применить шаблон:
automacro emocia {
...
console /\[dist=(\d+).*\] (\w+|Unknown \w+) \(\d+\): (.*\*\w+\*|\*\w+ \w+\*.*)/
call {
...
}
}

Kissa2k
29.04.2013, 21:46
С новым синтаксисом макросов можно переписать макрос так :)
automacro Emotion {
console /^\[dist=([\d, \.]+)\](?<!Monster) \S+ \(\d{1,2}\): (\*Heh\*|\*Kiss\*|\*Bleks\*)$/
timeout 180
call {
if (@eval(int($.lastMatch1+0.5)) < 6) {
if ($.lastMatch2 == *Heh*) {
pause @rand(1, 3)
do e heh
}
if ($.lastMatch2 == *Kiss*) {
pause @rand(1, 3)
do e kis2
}
}
}
}