Плагин BashOrg [for fun:))]

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Плагин BashOrg [for fun:))]

Сообщение vit »

Этот плагин берёт случайную цитату с сайта http://bash.org.ru/ и может написать ее в консоль / в публичный чат / в приватный чат / в партийный чат / в гильдийный чат.
Цитата берется со страницы http://bash.org.ru/forweb/ где она обновляется каждые 10 секунд. Подробнее об этом написано здесь: http://bash.org.ru/webmaster .
Для взятия цитаты с сайта используется модуль(маленькая его часть) LWP, взятый из ActivePerl.

Плагин регистрирует команду bash:
bash - вывод цитаты в консоль
bash с - бот скажет цитату в общий чат
bash p - бот скажет цитату в партийный чат
bash g - бот скажет цитату в гильдийный чат
bash pm PlayerName - бот скажет цитату в приватный чат игроку PlayerName
bash c @homtalk - ваш гомункул скажет цитату (только для серверов, поддерживающих команду @homtalk)
bash c @pettalk - ваш пет скажет цитату (только для серверов, поддерживающих команду @pettalk)
Эту команду можно использовать в макросах:
Пример 1(Поставьте в config.txt dealAuto 2 , чтобы бот принимал сделки автоматически):

Код: Выделить всё

automacro bash1 {
    console /^You gained (\d+) zeny/
    run-once 1
    delay 1
    call bash1M
}
macro bash1M {
    if ($.lastMatch1 < 5000) goto end
    do bash c
    :end
    release bash1
}
Результат: Если боту через дил дадут 5000z или больше, он скажет цитату в публичный чат.

Пример 2:

Код: Выделить всё

automacro bash2 {
    pm /хочу баян/
    run-once 1
    delay 1
    call bash2M
}
macro bash2M {
    do bash pm $.lastpm
    release bash2
}
Результат: Бот скажет цитату в приват тому игроку, кто напишет ему фразу "хочу баян".



Сам плагин:
bashorg.pl:

Код: Выделить всё

###########################
# BashOrg plugin by _vit
# This plugin you may use for fun:)
# Version 0.02
# 28.03.2008
###########################

package bashorg;
use strict;
use Plugins;
use Log qw(message debug error);
use Globals;
use Log qw(message warning error);
use LWP::Simple;
use I18N qw(bytesToString);

Plugins::register('bashorg', 'Talking random quote from http://bash.org.ru', \&on_unload, \&on_reload);

my $cmd = Commands::register(
    ["bash", "Talking random quote from http://bash.org.ru", \&quote],
);

sub on_unload {
    Commands::unregister($cmd);
}

sub on_reload {
}

sub quote {
    my (undef, $command) = @_;
    my @commands = split(/ /, $command); 
    my $quote = "";
	
	if ($command eq "" || $command eq "c" || $command eq "p" || $command eq "g" || $commands[0] eq "pm" || $command eq 'c @homtalk' || $command eq 'c @pettalk'){	
        
        $quote = get 'http://bash.org.ru/forweb/';
        $quote = bytesToString($quote);
        debug ("\n===== BEFORE =====\n" . $quote . "\n==================\n");

        # trim begin
        $quote =~ s/var borq='';//g;
        $quote =~ s/.+?approved by.*?</</g;
        
        # trim end
        $quote =~ s/document.write\(borq\);//g;
        $quote =~ s/.{30}<' \+ 'a href=.http:..bash.org.ru.+//g;
        
        # remove JavaScript code
        $quote =~ s/<' \+ '.*?>/\n/g;
        
        $quote =~ s/"/"/g;
        $quote =~ s/<(.*?)>/$1/eg;
        $quote =~ s/\n\n\n/\n/g;
        $quote =~ s/\n\n/\n/g;
        
        debug ("\n===== AFTER =====\n" . $quote . "\n=================\n");
        
        my @lines = split(/\n/, $quote);
        
        for(my $i = 1; $i < scalar(@lines); $i++){
            if ($command eq ""){
                message("    " . $lines[$i] . "\n");
            }else{
                debug("Using command: $command $lines[$i]");
                Commands::run("$command $lines[$i]");
            }
            sleep(0.25);
        }
    }else{
         error("Syntax Error in function 'bash'\nUsage: bash <c|p|g|pm PlayerName|".'c @homtalk|c @pettalk'.">\n");
         error("Where:\n <c> - public chat\n <p> - party chat\n <g> - guild chat\n <pm PlayerName> - private message\n");
         error(' <c @homtalk>'." - your homuncul will talk the quote\n ".'<c @pettalk>'." - your pet will talk the quote\n"); 
    }
}

return 1;
-------------------------
Изменение от 28.03.2008:
добавил поддержку команд @homtalk и @pettalk.
-------------------------

Внимание! Одного плагина недостаточно. Нужны еще 2 файла (они находятся в архиве):
\src\LWP\Simple.pm
\src\HTTP\Status.pm
P.S: Если вы найдете баг, или у вас появится какая-нибудь интересная идея, обязательно напишите это тут :wink:.
Вложения
bashorg.zip
Версия 0.01
(7.94 КБ) 276 скачиваний
Последний раз редактировалось vit Пт мар 28, 2008 3:49 pm, всего редактировалось 2 раза.
istari
Энтузиаст
Сообщения: 81
Зарегистрирован: Вт ноя 14, 2006 11:30 am

Сообщение istari »

Отличный плагин :Yahoo!:
только у меня твой первый макрос не работает что то, щас уже лень разбираться
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2795
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

там наверно символ "^" в макросе быть может он лишний? Работает ли он (я про символ)..
istari
Энтузиаст
Сообщения: 81
Зарегистрирован: Вт ноя 14, 2006 11:30 am

Сообщение istari »

я и так и так пробовал, все равно что то не то
подозреваю что вит поставил защиту =)
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

istari писал(а):подозреваю что вит поставил защиту =)
ч0? :shock: Ничего я там не ставил. Те дополнительные 2 файла я взял с Актив перла, и нифига их не изменял.
Поставь у бота в конфиге
dealAuto 2
Там синтаксис у макроса правильный.
Когда сделка заканцивается, и деньги уже переданы, в консоли пишется эта строчка. Символ "^" там стоит специально(кстати он означает, что фраза написана с начала строчки)! Сделано это для того, чтоб кто-нибудь не подошел к твоему боту, и не сказал ему "You gained 5000 zeny". И бот не сказал бы ему цитату бесплатно :twisted: (ты про эту защиту чтоли?).

Добавлено спустя 7 минут 37 секунд:

Да, istari, спасибо за найденный "баг" :) .
stopfild
Начинающий
Сообщения: 40
Зарегистрирован: Ср фев 06, 2008 3:51 pm

Сообщение stopfild »

Спасибо, бегу тестить, ели что отпишусь по поводу багов.
---------------------------------------------------------------------
серьёзных багов нет! Всё работает отлично :)
Теперь хоть не скучно качать :)
Изображение
stopfild
Начинающий
Сообщения: 40
Зарегистрирован: Ср фев 06, 2008 3:51 pm

Сообщение stopfild »

На рагнарокботе, предложили добавить команды @homtalk и @pettalk - этими командами можно писать через петов\гомов. Хочу поддержать идею, так как тоже играю на Торе. Сервер РУсРО, Тор.
Примерно так на сервере: @homtalk Каррамба!
И гом скажет карамбу :)
Изображение
Lina
Начинающий
Сообщения: 43
Зарегистрирован: Пн окт 08, 2007 4:54 pm

Сообщение Lina »

Как сделать чтобы просто ктонибудть сказал в общий чат "Хачу боян" и бот сразу бы говорил фразу в общий чат ?
Asacura
Грамотный
Сообщения: 403
Зарегистрирован: Сб фев 03, 2007 11:07 pm
Откуда: Эстония;)
Контактная информация:

Сообщение Asacura »

pm => pubm, c
Изображение
Нет добра и зла,есть разные мнения, разные противостоящие стороны. :)
Lina
Начинающий
Сообщения: 43
Зарегистрирован: Пн окт 08, 2007 4:54 pm

Сообщение Lina »

Написала я вот так:

Код: Выделить всё

automacro bash2 { 
    pubm /хочу баян/ 
    run-once 1 
    delay 1 
    call bash2M 
} 
macro bash2M { 
    do bash c
    release bash2 
}
Все работает на УРА!! , Но вот только когда долго раоботает, то кора начинает виснуть конкрентно.... Я использую режим xKore 1
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

stopfild писал(а):На рагнарокботе, предложили добавить команды @homtalk и @pettalk - этими командами можно писать через петов\гомов. Хочу поддержать идею, так как тоже играю на Торе. Сервер РУсРО, Тор.
Примерно так на сервере: @homtalk Каррамба!
И гом скажет карамбу :)
сделал, тестируйте
stopfild
Начинающий
Сообщения: 40
Зарегистрирован: Ср фев 06, 2008 3:51 pm

Сообщение stopfild »

Нашёл такой баг, вылез сразу. Цитату говорит и хозяин пета, и сам пет. примерно так:
B - это пет, М - это хозяин. Н - кто требует баян.
[dist=5.1] H (3): баян
[macro] automacro bash triggered.
[dist=2] B (1): _1313: а как будет по-японски "задница"?
[dist=2] B (1): sutton: oshiri
[dist=2] B (1): boris_ivanov: Задница - "shiri". O-shiri - это уважительная форма.
[dist=2] B (1): _1313: всё-таки японцы - странный народ. уважительная форма слова
M : "задница" - это что-то сложнопостижимое для меня
Изображение
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

stopfild писал(а):Нашёл такой баг, вылез сразу. Цитату говорит и хозяин пета, и сам пет.
Хм, я подозреваю в чем дело - если фраза слишком длинная, то OK разрезает ее на несколько кусочков и отправляет несколько пакетов. В первом пакете присутствует @pettalk , а в остальных уже нет, поэтому такая фигня.

P.S: Ха! У меня появилась отличная идея откатиться на предыдущую, стабильную версию.
stopfild
Начинающий
Сообщения: 40
Зарегистрирован: Ср фев 06, 2008 3:51 pm

Сообщение stopfild »

Ну, можно оставить и так, иногда они по ролям читают :) Ведь всегда есть вариант использовать bash c, а этот баг может когданибудь доработаешь :)
Изображение
Lina
Начинающий
Сообщения: 43
Зарегистрирован: Пн окт 08, 2007 4:54 pm

Сообщение Lina »

Можно ли сделать ограничение на запросы, например чтобы был перерыв между одной фразой и другой в секунд 20, чтобы макрос даже несрабатывал если непрошло 20 секунд от последней фразы? А то некоторые начинают играться им и начинают флудить со словом "баян" специально чтобы бот слмоался :cry:
Ответить