PDA

Просмотр полной версии : Plugin: БашОрг


stopfild
01.03.2008, 09:05
Помните был макрос - анекдот за деньги. Дык вот, есть идея забахать такую штуку на коре, что бы за (допустим) деньги, бот цитировал баш. На самом сайте есть код, который можно вставлять на сайты, и проч. Там цитате генерится раз в 10 секунд. Исходный код такой:
<div style="border: 1px solid #9999bb; background: #f0f0ff; padding: 5px; font-family: 'Monaco', 'Courier New', monospace; font-size: 10pt;">
<script language="JavaScript" type="text/javascript" src="http://bash.org.ru/forweb/">
</script>
</div>
на сайт\ы и т.п. код такой:
<script language="JavaScript" type="text/javascript" src="http://bash.org.ru/forweb/?u">
</script>
Как это сделать я совсем не предстовляю. Предлогаю размятся и забыть на время о зенях и каче. Just 4 fun как грицца :)

vitt
14.03.2008, 00:47
Этот плагин берёт случайную цитату с сайта 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/&quot;/"/g;
$quote =~ s/&lt;(.*?)&gt;/$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: Если вы найдете баг, или у вас появится какая-нибудь интересная идея, обязательно напишите это тут.

bloom
14.03.2008, 12:16
Работает чьёрт побери :)

4epT
14.03.2008, 22:15
перенёс в "макросы и плагины"

dixoos
16.03.2008, 16:42
у меня говорит только первые две стврочки, и если не влазит в строку то обрыв(

vitt
16.03.2008, 19:56
у меня говорит только первые две стврочки, и если не влазит в строку то обрыв(
Какая версия ОК? Используешь ВХ, или просто консоль? И поподробней распиши, что за ошибка вылазит(приложи файл эррорс.тхт), ну и что в консоли пишется.

dixoos
16.03.2008, 20:47
OpenKore 1.9.4, ВХ...
если цитата больше чем две строки, тока кажет только первые две...
и если сама строка длинее чем можно отправить за один раз в игре, то она обрывается
З.Ы.: ошибок нет, просто некоректно получается

vitt
16.03.2008, 23:10
OpenKore 1.9.4,
и если сама строка длинее чем можно отправить за один раз в игре, то она обрывается
Ага, в коре 2.0.6 - там бот автоматически разделяет цитату по нескольким сообщениям, попробуй его.

bloom
26.03.2008, 16:59
Предлагаю усовершенствовать плагин, добавлением комманд @homtalk и @pettalk :)
Что бы за хозаина говорил пет :) Или гом

@pettalk Бла бла бла - и пет это говорит :) Так же и с гомом (@homtalk)

сервак:
Тор, или Thor как вам угодно. Это х1к RusRO.

vitt
28.03.2008, 17:45
Обновил, тестируйте:)