RagBot Forum
 

Вернуться   RagBot Forum > • Всё что касается бота • > Макросы и Плагины

Макросы и Плагины Всё что относится к макросам и плагинам. Сборник готовых макросов.

Ответ
 
Опции темы Опции просмотра
Старый 15.05.2011, 18:17   #1
BloodAngel
Новичок
 
Регистрация: 23.12.2009
Адрес: Москва
Сообщений: 21
Вы сказали Спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Хорошо [plugin] Ждём ведомого

В связи с тем что ведущий постоянно убегает от ведомого. Я решил написать плагин который будет ждать ведомого если тот отстает.
Инфа:
Цитата:
Плагин помогает ведущему не потерять ведомого.
waitSupport.pl
PHP код:
#==========================================
#    Автор:        Expelled
#    версия:        201105192
#    Имя файла:    waitSupport.pl
#==========================================
package waitSupport;

use 
strict;
use 
Plugins;
use 
Globals;
use 
Utils;
use 
Utils qw/timeOut/;
use 
Misc;
use 
AI;
use 
Log qw(message warning error);
use 
Network::Send ();
use 
Time::HiRes qw(time);
use 
encoding 'utf8';

my $start;
my $time;
my $nextTime;

Plugins::register('waitSupport''Master wait Support', \&Unload, \&Reload);

my $hooks Plugins::addHooks(
            [
'mainLoop_pre', \&waitSupportundef]
            );
my $chooks Commands::register(
            [
'waitSupport'"waitSupport plugin", \&commandHandler]
            );
sub Unload {
    print 
"Plugin: waitSupport - unloaded!\n";
    
Plugins::delHooks($hooks);
    
Commands::unregister($chooks);
}
sub Reload {
    print 
"Plugin: waitSupport - reloaded!\n";
    
Plugins::delHooks($hooks);
    
Commands::unregister($chooks);
}
sub waitSupport {
    return 
unless $field;
    
my ($self) = @_;
    if(
$config{slave} == 1){
        
my $maxdist $config{slaveDistanceMax};
        
my $slave $config{slaveTarget};
        
my $aggressives AI::ai_getAggressives(11);
        
my $online;
        
my $map;
        
my $OnMap;
        for (
my $i 0$i < @partyUsersID$i++) {
            
next if (@partyUsersID[$ieq "");
            if (
$char->{'party'}{'users'}{@partyUsersID[$i]}{'name'eq $slave){
                
$online $char->{'party'}{'users'}{@partyUsersID[$i]}{'online'};
                (
$map) = $char->{'party'}{'users'}{@partyUsersID[$i]}{'map'} =~ /([\s\S]*)\.gat/;
            }
        }
        if(
$config{slaveOnMap} == 1){$OnMap=($map eq $field->{name})?1:0;}else{$OnMap=1;}
        if (
$aggressives eq 0 && $online eq 1 && $OnMap eq 1){
            foreach 
my $player (@{$playersList->getItems()}) {
                if (
$maxdist && $player->{nameeq $slave) {
                    
my $dist sprintf("%.2f"Utils::distance($char->{pos_to}, $player->{pos_to}));
                    if (
$dist <= $maxdist){
                        
$time time+$config{slaveWalkTime};
                        return 
1;
                    }else{
                        if (
$time <= time && $config{slaveWalkTime} != && $config{slaveWalk} == 2){
                            
my $x sprintf("%.0f",$char->{pos_to}{x}+rand(2)-1);
                            
my $y sprintf("%.0f",$char->{pos_to}{y}+rand(2)-1);
                            
$char->sendMove($x$y);
                            
$time time+$config{slaveWalkTime};
                        }
                        
AI::ai_clientSuspend(00.5);
                        if(
$config{slaveMsg} == && time>=$nextTime){
                            
warning ("Ведомый $player->{name} отстаёт на: $dist клеток\n"); 
                            
$nextTime time+$config{slaveMsgTime};
                        }
                        return 
1;
                    }
                }
            }
            if (
$time <= time && $config{slaveWalkTime} != && $config{slaveWalk} >= 1){
                
my $x sprintf("%.0f",$char->{pos_to}{x}+rand(2)-1);
                
my $y sprintf("%.0f",$char->{pos_to}{y}+rand(2)-1);
                
$char->sendMove($x$y);
                
$time time+$config{slaveWalkTime};
            }
            if (
$config{slaveWait}==1){
                
AI::ai_clientSuspend(00.5);
                if(
$config{slaveMsg} == && time>=$nextTime){
                    
warning ("Ведомый $slave скрылся с поля зрения\n"); 
                    
$nextTime time+$config{slaveMsgTime};
                }
            }
            return 
1;
        }
        return 
1;
    }
}
1
Этот plugin положить в папку plugins у ведущего. В config.txt ведущего дописать следующие параметры
PHP код:
#настройки для ведомого!
#1=ждать ведомого; 0=Не ждать;
slave 1
#Имя ведомого
slaveTarget NickName
#Дистанция на которое можно отбежать от ведомого(Желательно на 2 клетки дальше чем у ведомого followDistanceMax)
slaveDistanceMax 8
#1=Ждать ведомого если он скрылся с экрана(по умолчанию); 0=неждать;
slaveWait 1
#Передвигаться что бы ведомый мог определить координаты ведущего. 0=не двигаться 1=двигаться только когда ведомый скрылся с экрана; 2=двигаться всегда когда ждём ведомого(по умолчанию)
slaveWalk 2
#Время(в секундах) через которое будет двигаться если установлен параметр slaveWalk.
slaveWalkTime 5
#0=Ждать если ведомого нет на локации; 1=не ждать если ведомого нет на локации.
slaveOnMap 0
#1=выводить сообщения отстования ведомого; 0=не выводить;
slaveMsg 1
#Частота вывода сообщение отстования ведомого(В секундах. По умолчанию 1(каждую секунду). Должен быть установлен параметр slaveMsg=1)
slaveMsgTime 1 
Changelog:
201105153:
Код:
1)Теперь ведущий не стоит на месте если slaveWait=1,ведомый отстает и его бьют. Он атакует агрессивных и не ждёт ведомого. Так же если бьют ведомого то ведущий не ждёт пока он к нему подойдёт.
2)Убрал функцию distance. Теперь использует функцию из OpenKore.
3)Появился новый параметр slaveWalk который позволяет двигаться через указанное время(в сек.) что бы ведомый мог определить координаты ведущего. Полезно поставить 5 если параметр slaveWait = 1
3)Добавлена проверка на онлайн ведомого
4)Добавлен параметр slaveMsg. Показывает сообщение что ведомый отстал и на сколько клеток.
201105161:
Код:
1)Перевёл из макроса в плагин. Теперь это полноценный plugin.
201105192:
Код:
1)Теперь плагин основан на времени, а не на тиках.
2)Добавлена более гибкая настройка вывода сообщений.
3)Добавлен параметр slaveOnMap проверяющий находится ли ведомый на той же локации где и ведущий.
4)Теперь корректно выгружает и перезагружает плагин.
Bugs:
Код:
#1 Не корректно выгружает и перезагружает плагин.
#2 При ожидание иногда не ждёт.
last version: 201105192
Вложения
Тип файла: rar waitSupport (201105192).rar (1.2 Кб, 0 просмотров)

Последний раз редактировалось BloodAngel; 19.05.2011 в 17:45.
BloodAngel вне форума   Ответить с цитированием
Старый 15.05.2011, 19:12   #2
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

ещё можно использовать настройку конфига
http://ragbot.ru/wiki/followBot
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Старый 15.05.2011, 23:29   #3
BloodAngel
Новичок
 
Регистрация: 23.12.2009
Адрес: Москва
Сообщений: 21
Вы сказали Спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
Сообщение от 4epT Посмотреть сообщение
ещё можно использовать настройку конфига
http://ragbot.ru/wiki/followBot
Ну при этом параметре ведущий всё равно убегает. + это палево в чате пати =) Если админ шарит в РО то он может прослушать разговор пати. А там "move X Y" =)

Добавлено через 4 часа 5 минут
Не прошло и дня, а уже новая версия =)

Последний раз редактировалось BloodAngel; 15.05.2011 в 19:31.
BloodAngel вне форума   Ответить с цитированием
Старый 16.05.2011, 01:10   #4
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

кстати забавная ситуация.. никогда даже не думал что конструкцию вида:
Цитата:
sub slaveDist {
можно использовать в macros.txt
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Старый 16.05.2011, 23:13   #5
BloodAngel
Новичок
 
Регистрация: 23.12.2009
Адрес: Москва
Сообщений: 21
Вы сказали Спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
Сообщение от 4epT Посмотреть сообщение
кстати забавная ситуация.. никогда даже не думал что конструкцию вида:

можно использовать в macros.txt
=) Полезно иногда использовать sub а не простой macro. Даёт больше возможностей.

P.S. - Перевёл из макроса в плагин! =) Можно тему переименовать? вместо [macros] написать [plugin]
__________________
Мои работы:
[plugin] Ждём ведомого

Последний раз редактировалось BloodAngel; 16.05.2011 в 23:54.
BloodAngel вне форума   Ответить с цитированием
Старый 19.05.2011, 00:49   #6
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

не плохо было бы прикрепить сам файл плагина

у меня при запуске сначала ругался на UTF-8, потом:

Цитата:
Загрузка всех плагинов...
Загрузка плагина plugins/1.pl...
Plugin: waitSupport - unloaded!
Плагин не может быть загружен из-за проблемы в нём. Пожалуйста, сообщите автору
плагина, или удалите плагин, тогда OpenKore сможет запуститься.

Сообщение об ошибке:
Плагин содержит синтаксическую ошибку:
Invalid hook handle passed to Plugins:elHook().
Нажмите ENTER для завершения программы.
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Старый 19.05.2011, 16:07   #7
BloodAngel
Новичок
 
Регистрация: 23.12.2009
Адрес: Москва
Сообщений: 21
Вы сказали Спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
Сообщение от 4epT Посмотреть сообщение
не плохо было бы прикрепить сам файл плагина

у меня при запуске сначала ругался на UTF-8, потом:
UTF-8 используется для того что бы в консоле выводились надписи на кириллице. Для этого надо что бы и файл имел кодировку UTF-8.

Какую версию бота используешь?

Файл прикреплю чуть позже.

Добавлено через 1 час 52 минуты
update:
Новая версия 201105191.
Изменения:
1)Теперь плагин основан на времени, а не на тиках.
2)Добавлена более гибкая настройка вывода сообщений.
3)Добавлен параметр slaveOnMap проверяющий находится ли ведомый на той же локации где и ведущий.
4)Теперь корректно выгружает и перезагружает плагин.
Исправленные баги:
#1 Не корректно выгружает и перезагружает плагин.
#2 При ожидание иногда не ждёт.

P.S. - Выложил архив с файлом.
__________________
Мои работы:
[plugin] Ждём ведомого
BloodAngel вне форума   Ответить с цитированием
Старый 28.05.2011, 11:11   #8
Zloba
Нюб делает первые шаги
 
Регистрация: 09.04.2009
Сообщений: 6
Вы сказали Спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
По умолчанию

Возможно стоит поправить вызов AI::ai_clientSuspend(0, 0.5); на что-то подобное:
Код:
AI::ai_clientSuspend(0, 1) if (!AI::is(qw(clientSuspend)));

или 

AI::ai_clientSuspend(0, 0.5) if @AI::ai_seq < N;
или же поправить сам AI::ai_clientSuspend, иначе начинается дикий спам им в AI queue, это можно наблюдать, например, написав "aiv" во время ожидания сапорта.

Последний раз редактировалось Zloba; 28.05.2011 в 13:47.
Zloba вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо Zloba за это полезное сообщение:
BloodAngel (30.05.2011)
Старый 30.05.2011, 00:47   #9
BloodAngel
Новичок
 
Регистрация: 23.12.2009
Адрес: Москва
Сообщений: 21
Вы сказали Спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
Сообщение от Zloba Посмотреть сообщение
Возможно стоит поправить вызов AI::ai_clientSuspend(0, 0.5); на что-то подобное:
Код:
AI::ai_clientSuspend(0, 1) if (!AI::is(qw(clientSuspend)));

или 

AI::ai_clientSuspend(0, 0.5) if @AI::ai_seq < N;
или же поправить сам AI::ai_clientSuspend, иначе начинается дикий спам им в AI queue, это можно наблюдать, например, написав "aiv" во время ожидания сапорта.
Спасибо за подсказку как устранить проблему. Возьму на заметку. Я знал об этой ошибке, но она как-то не мешала до вчерашнего дня.
__________________
Мои работы:
[plugin] Ждём ведомого
BloodAngel вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 22:03. Часовой пояс GMT +3.