thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

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

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

Аватара пользователя
Cooot
Грамотный
Сообщения: 306
Зарегистрирован: Пт апр 25, 2008 8:02 am

thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение 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 и так далее через ;

Большая просьба: буду рад советам по самому плагину, все так ли написал (первая попытка все же). В будущем планирую его доработать.
Последний раз редактировалось Cooot Пт фев 06, 2009 9:40 pm, всего редактировалось 7 раз.
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение EternalHarvest »

Cooot писал(а):как вызвать из плагина показ смайлика "спасибо"
Реализацию того, что выполняется консольными командами, можно подсматривать в Commands.pm.

Ещё можно делать Commands::run ("...").
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Kissa2k »

Cooot писал(а):Большая просьба: подскажите, как вызвать из плагина показ смайлика "спасибо"

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

use Network;
$messageSender->sendEmotion(номер_эмоции);
#номер_эмоции можно посмотреть в tables/emotions.txt
Блэйз
Энтузиаст
Сообщения: 91
Зарегистрирован: Ср дек 13, 2006 6:55 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Блэйз »

если дают блес и аги, не будет ли он дважды говорить спасибо?
Аватара пользователя
Cooot
Грамотный
Сообщения: 306
Зарегистрирован: Пт апр 25, 2008 8:02 am

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Cooot »

Воспользовался советом Kissa2k (большое спасибо).

Добавил строчку:

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

$messageSender->sendEmotion(15);
Все прекрасно работает и даже без use Network;
если дают блес и аги, не будет ли он дважды говорить спасибо?
К сожалению, сейчас да (будет).

Поэтому требуется дальнейшая консультация по плагину (извиняюсь, что так много вопросов):

1) Как запретить ему обрабатывать новые пакеты кастов, когда выполняет еще предыдущую цепочку команд (смайлик и фраза) или вообще обрабатывать только раз в n количество секунд?

2) Нужна альтернатива sleep, который останавливает все, даже в консоль в этот момент ничего не ввести. (пытаюсь разобраться в timeout, заодно может и на первый вопрос это даст ответ мне).
Изображение
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

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

1) Как запретить ему обрабатывать новые пакеты кастов, когда выполняет еще предыдущую цепочку команд (смайлик и фраза)
посмотри плагин на пересоздание чара, надо просто удалить кух из обработки

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

sub say {
   Plugins::delHooks($hooks);
   return if (!$config{'thanks_say'});
только в конце не забудь повесить его обратно ;)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение EternalHarvest »

Cooot писал(а):2) Нужна альтернатива sleep, который останавливает все, даже в консоль в этот момент ничего не ввести. (пытаюсь разобраться в timeout, заодно может и на первый вопрос это даст ответ мне).
Можно ставить хук на AI_pre, он вызывается на каждом цикле работы AI.
Сохранять время "начала" слипа, при вызове AI_pre проверять, прошло ли нужное время с того момента.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение kLabMouse »

EternalHarvest
4epT
Что-то вы воду мутите, афтара вообще в дебри уведёте.
В общем, чтобы 10 раз не говорить, в самом начале функции проверим таймаут =))

Сам таймаут запишем в переменную типа our самого пекеджа.
Всего 3 строчки, без лишних хуков и тормозов.
Аватара пользователя
Cooot
Грамотный
Сообщения: 306
Зарегистрирован: Пт апр 25, 2008 8:02 am

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Cooot »

От sleep () не избавился, но используя time () удалось заставить плагин срабатывать не чаще чем раз в 11 секунд между кастами (20 - 3 - 5 - 1).

Еще посмотрев устройство плагина likeHuman и начав "мучать верблюда", добавил случайный ответ из списка, задаваемого через ; в конфиге.

Все продолжаю думать, нет ли аналога sleep (), но без таких тормозов.

P.S. Все та же просьба, оценить код и поправить, если где не прав.
Изображение
Аватара пользователя
Cooot
Грамотный
Сообщения: 306
Зарегистрирован: Пт апр 25, 2008 8:02 am

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Cooot »

Поправил немного условие в плагине срабатывания реакции, теперь исключено, что бот поблагодарит сам себя за каст.
Изображение
Блэйз
Энтузиаст
Сообщения: 91
Зарегистрирован: Ср дек 13, 2006 6:55 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Блэйз »

а хиллера за каст он благодарить не будет?
Аватара пользователя
Cooot
Грамотный
Сообщения: 306
Зарегистрирован: Пт апр 25, 2008 8:02 am

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Cooot »

Не будет (по крайней мере тех, на которых я тестил).

ОК показывал при разговоре с ними, что персонаж похилил и обкастовал сам себя, на что плагин как раз не отреагирует.
Изображение
autotrade
Нууууп
Сообщения: 25
Зарегистрирован: Пт апр 18, 2008 9:10 pm

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение autotrade »

Заметил, что плагин благодарит гомункула за хил со скила "каприз". =) А так без нареканий)
Mast

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Mast »

какой без нареканий, меня 8 раз ботом обозвали, а всего лиш на быструю забиндил! спасибо!
Аватара пользователя
Cooot
Грамотный
Сообщения: 306
Зарегистрирован: Пт апр 25, 2008 8:02 am

Re: thanks - плагин, благодарящий за каст (хил, аги ап, блесс)

Сообщение Cooot »

autotrade писал(а):Заметил, что плагин благодарит гомункула за хил со скила "каприз". =) А так без нареканий)
И на некоторых серверах биохимика за свой же каст Potion Pitcher (пишет в консоли сначала, что вы применили скилл, а потом что Unknown вас похилил), попробую сделать логи вывода в консоль ID (посмотрю какой на деле видит бот) и решить эту проблему.
какой без нареканий, меня 8 раз ботом обозвали, а всего лиш на быструю забиндил! спасибо!
Уточни как и что именно случалось, что обзывали, внесу поправки.
Изображение
Ответить