Цитата берется со страницы 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
}
Пример 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", \"e],
);
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: Если вы найдете баг, или у вас появится какая-нибудь интересная идея, обязательно напишите это тут
