Страница 1 из 2
thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт янв 23, 2009 7:11 pm
Cooot
Итак, моя первая попытка написать плагин.
Пользовался этим руководством
viewtopic.php?f=7&t=4647 и рассматривал коды плагинов dSpam и geographer.
Код: Выделить всё
# thanks plugin v 1.0 by Cooot
# rofan.ru
# in control\config.txt add:
# thanks_say thanks; thx; THANKS!
package thanks;
use Globals;
use Log qw(message);
use Misc;
use Plugins;
my $runtime;
my $thankslist;
my @thanksone;
my $thanks;
our $endtime;
Plugins::register ("thanks", "Say thanks", \&Unload);
my $hooks = Plugins::addHooks (
['packet_skilluse', \&say, undef]
);
sub say {
return if (!$config{'thanks_say'});
my (undef, $args) = @_;
$runtime = time ();
$thankslist = $config {thanks_say};
@thanksone = split (/\s*;+\s*/, $thankslist);
$thanks = $thanksone [rand (@thanksone)];
if ($runtime > $endtime + 20) {
if (($args -> {skillID} == 28 or $args -> {skillID} == 29 or $args -> {skillID} == 34) && $args -> {targetID} eq $accountID && $args -> {sourceID} ne $accountID) {
$endtime = time ();
message "[Heal, Agi UP, Blessing = Thanks]\n", 'system';
sleep (3);
$messageSender -> sendEmotion (15);
sleep (5);
sendMessage ($messageSender, "c", $thanks);
sleep (1);
}
}
}
sub Unload {
Plugins::delHooks ($hooks);
}
return 1;
Был написан для личных нужд, было необходимо, чтобы благодарность за каст, написанная до этого в виде макроса не прерывала других макросов (которые по некоторым причинам не могли быть с параметром exclusive 1), поэтому занялся плагином.
Вносим в конфиг:
thanks_say Фраза благодарности #1; Фраза благодарности #2 и так далее через ;
Большая просьба: буду рад советам по самому плагину, все так ли написал (первая попытка все же). В будущем планирую его доработать.
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт янв 23, 2009 7:38 pm
EternalHarvest
Cooot писал(а):как вызвать из плагина показ смайлика "спасибо"
Реализацию того, что выполняется консольными командами, можно подсматривать в Commands.pm.
Ещё можно делать Commands::run ("...").
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт янв 23, 2009 9:04 pm
Kissa2k
Cooot писал(а):Большая просьба: подскажите, как вызвать из плагина показ смайлика "спасибо"
Код: Выделить всё
use Network;
$messageSender->sendEmotion(номер_эмоции);
#номер_эмоции можно посмотреть в tables/emotions.txt
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт янв 23, 2009 10:14 pm
Блэйз
если дают блес и аги, не будет ли он дважды говорить спасибо?
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Сб янв 24, 2009 1:11 am
Cooot
Воспользовался советом Kissa2k (большое спасибо).
Добавил строчку:
Все прекрасно работает и даже без use Network;
если дают блес и аги, не будет ли он дважды говорить спасибо?
К сожалению, сейчас да (будет).
Поэтому требуется дальнейшая консультация по плагину (извиняюсь, что так много вопросов):
1) Как запретить ему обрабатывать новые пакеты кастов, когда выполняет еще предыдущую цепочку команд (смайлик и фраза) или вообще обрабатывать только раз в n количество секунд?
2) Нужна альтернатива sleep, который останавливает все, даже в консоль в этот момент ничего не ввести. (пытаюсь разобраться в timeout, заодно может и на первый вопрос это даст ответ мне).
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Сб янв 24, 2009 2:16 am
4epT
1) Как запретить ему обрабатывать новые пакеты кастов, когда выполняет еще предыдущую цепочку команд (смайлик и фраза)
посмотри плагин на пересоздание чара, надо просто удалить кух из обработки
Код: Выделить всё
sub say {
Plugins::delHooks($hooks);
return if (!$config{'thanks_say'});
только в конце не забудь повесить его обратно

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Сб янв 24, 2009 2:39 am
EternalHarvest
Cooot писал(а):2) Нужна альтернатива sleep, который останавливает все, даже в консоль в этот момент ничего не ввести. (пытаюсь разобраться в timeout, заодно может и на первый вопрос это даст ответ мне).
Можно ставить хук на AI_pre, он вызывается на каждом цикле работы AI.
Сохранять время "начала" слипа, при вызове AI_pre проверять, прошло ли нужное время с того момента.
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Сб янв 24, 2009 11:44 am
kLabMouse
EternalHarvest
4epT
Что-то вы воду мутите, афтара вообще в дебри уведёте.
В общем, чтобы 10 раз не говорить, в самом начале функции проверим таймаут =))
Сам таймаут запишем в переменную типа our самого пекеджа.
Всего 3 строчки, без лишних хуков и тормозов.
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт янв 30, 2009 12:31 pm
Cooot
От sleep () не избавился, но используя time () удалось заставить плагин срабатывать не чаще чем раз в 11 секунд между кастами (20 - 3 - 5 - 1).
Еще посмотрев устройство плагина likeHuman и начав "мучать верблюда", добавил случайный ответ из списка, задаваемого через ; в конфиге.
Все продолжаю думать, нет ли аналога sleep (), но без таких тормозов.
P.S. Все та же просьба, оценить код и поправить, если где не прав.
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт фев 06, 2009 9:42 pm
Cooot
Поправил немного условие в плагине срабатывания реакции, теперь исключено, что бот поблагодарит сам себя за каст.
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Сб фев 07, 2009 8:46 am
Блэйз
а хиллера за каст он благодарить не будет?
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Сб фев 07, 2009 8:27 pm
Cooot
Не будет (по крайней мере тех, на которых я тестил).
ОК показывал при разговоре с ними, что персонаж похилил и обкастовал сам себя, на что плагин как раз не отреагирует.
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт фев 27, 2009 10:54 am
autotrade
Заметил, что плагин благодарит гомункула за хил со скила "каприз". =) А так без нареканий)
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт фев 27, 2009 11:06 am
Mast
какой без нареканий, меня 8 раз ботом обозвали, а всего лиш на быструю забиндил! спасибо!
Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)
Добавлено: Пт фев 27, 2009 11:19 am
Cooot
autotrade писал(а):Заметил, что плагин благодарит гомункула за хил со скила "каприз". =) А так без нареканий)
И на некоторых серверах биохимика за свой же каст Potion Pitcher (пишет в консоли сначала, что вы применили скилл, а потом что Unknown вас похилил), попробую сделать логи вывода в консоль ID (посмотрю какой на деле видит бот) и решить эту проблему.
какой без нареканий, меня 8 раз ботом обозвали, а всего лиш на быструю забиндил! спасибо!
Уточни как и что именно случалось, что обзывали, внесу поправки.