имитация выхода в чар селект
Модератор: 4epT
имитация выхода в чар селект
Проблема следующая: хочется, чтобы бот (саг, прист, кузнец, супруг - не важно) по команде из какого-нибудь коннект-плагина появлялся в игре, кидал требуемые обкасты и уходил обратно в небытиё. Оно, конечно, получается сочетанием дисконнекта и релог много, но в таком случае бот довольно долго появляется в игре. Можно, конечно, дисконнектиться и делать ai off в момент выбора персонажа, но это малость по-уродски.
Отсюда, что требуется в идеале: плагин, регистрирующий команды входа/выхода в чарселект.
Проблемы:
1. Вход в чарселект я в ОК честно не нашёл, а переводить отснифанные пакеты в перл я немного не умею.
2. У меня так и не получилось нормально зарегистрировать чат/консоль команду в плагине.
3. Эта гадость ещё и не должна конфликтовать с оставшейся частью ОК, и методов обхода помимо неудобного ai manual не представляю.
PS Теоретически, такой плагин должен быть не сильно длиннее doCommand, собственно, потому и надеюсь на помощь. Кроме того, хочется нормальную реализацию, поскольку штука в условиях агрессивного к ботам сервера довольно нужная.
Отсюда, что требуется в идеале: плагин, регистрирующий команды входа/выхода в чарселект.
Проблемы:
1. Вход в чарселект я в ОК честно не нашёл, а переводить отснифанные пакеты в перл я немного не умею.
2. У меня так и не получилось нормально зарегистрировать чат/консоль команду в плагине.
3. Эта гадость ещё и не должна конфликтовать с оставшейся частью ОК, и методов обхода помимо неудобного ai manual не представляю.
PS Теоретически, такой плагин должен быть не сильно длиннее doCommand, собственно, потому и надеюсь на помощь. Кроме того, хочется нормальную реализацию, поскольку штука в условиях агрессивного к ботам сервера довольно нужная.
Превосходство некоторых людей над окружающими одни считают несправедливостью, требующей уравнивания, другие - неполноценностью недовольных.
Выбор взгляда за Вами...
Выбор взгляда за Вами...
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
говорят, что коры могут общаться друг с другом, даже если они не подконнекчены (?)
Я пока не представляю как 1 бот будет пробуждать другого, пока тот не законнекчен..
А так, по идее можно было "ловить" окно с чатом и делать паузу..
типо как в char_recreate.pl:
Я пока не представляю как 1 бот будет пробуждать другого, пока тот не законнекчен..
А так, по идее можно было "ловить" окно с чатом и делать паузу..
типо как в char_recreate.pl:
Код: Выделить всё
my $hooks = Plugins::addHooks(['charSelectScreen', \&pauseChar, undef]);
sub pauseChar {
***
}
Правду говорят. Могут обмениваться данными через т.н. bus.
Чар селект по-моему сделать очень сложно, ОперКора кажется это просто-напросто не умеет.
Добавлено спустя 1 минуту 30 секунд:
Кажется, выгоднее в нужный момент запустить из одной Коры другую (просто вызвать еще один exe-шник). Но я не знаю, как такое сделать.
Чар селект по-моему сделать очень сложно, ОперКора кажется это просто-напросто не умеет.
Добавлено спустя 1 минуту 30 секунд:
Кажется, выгоднее в нужный момент запустить из одной Коры другую (просто вызвать еще один exe-шник). Но я не знаю, как такое сделать.
Gans
если ещё и экзешник запускать, процесс запуска совсем затянется...
4epT
проблема не в том, чтобы связать ботов - оно сделано до нас уже минимум 3 плагинами.
указанного кода в указанном плагине честно не нашёл...
если ещё и экзешник запускать, процесс запуска совсем затянется...
4epT
проблема не в том, чтобы связать ботов - оно сделано до нас уже минимум 3 плагинами.
указанного кода в указанном плагине честно не нашёл...
Превосходство некоторых людей над окружающими одни считают несправедливостью, требующей уравнивания, другие - неполноценностью недовольных.
Выбор взгляда за Вами...
Выбор взгляда за Вами...
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Re: имитация выхода в чар селект
Давай-ка кое-что уточним. "Долго" - это сколько?Antarx писал(а):Оно, конечно, получается сочетанием дисконнекта и релог много, но в таком случае бот довольно долго появляется в игре.
piroJOKE
долго - это секунд 6. Весь процесс логина, выбора персонажей и всего остального с учётом пауз довольно долгий, а сильно уменьшать его не хотелось бы...
4epT
имеются ввиду всевозможные коммандеры.
по поводу функции удаления: я малость не понял, выходит ли оно вообще в чарселект
долго - это секунд 6. Весь процесс логина, выбора персонажей и всего остального с учётом пауз довольно долгий, а сильно уменьшать его не хотелось бы...
4epT
имеются ввиду всевозможные коммандеры.
по поводу функции удаления: я малость не понял, выходит ли оно вообще в чарселект
Превосходство некоторых людей над окружающими одни считают несправедливостью, требующей уравнивания, другие - неполноценностью недовольных.
Выбор взгляда за Вами...
Выбор взгляда за Вами...
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
смотри кора грузится, доходит до окошка "charSelectScreen" мы это ловим и запускаем процедуру "pauseChar" (её ещё написать нада, ну там внутри может быть 1 строчка, типо пауза)
Далее ждём внешнего знака от другой коры (как?)
ну и собстна залогиневаемся:
Дальше работает макрос, который кастит чувака и делает релог
Далее кора доходит до окошка "charSelectScreen" мы это ловим... ну и т.д.
ЗЫ: давай-ка по конкретнее какие именно ты имел в виду 3 плагина?
Далее ждём внешнего знака от другой коры (как?)
ну и собстна залогиневаемся:
Код: Выделить всё
sub loginChar {
my (undef, $args) = @_;
#Логинимся чаром в 0ом слоте
sendCharLogin($net,$chars[0]);
$timeout{'charlogin'}{'time'} = time;
##????зачем эта строчка:
$args->{return} = 1;
}
Далее кора доходит до окошка "charSelectScreen" мы это ловим... ну и т.д.
ЗЫ: давай-ка по конкретнее какие именно ты имел в виду 3 плагина?
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
забавный русский язык очепятаешь 2 буквы местами и получится новое слово и разбирай потом чё автар написать хотел
piroJOKE, вливайся
спс за инфу, по моим подсчётам клиент отсылает 1 раз в 10 сек пакет:
Заебалси я всё делать, но какой-то результат есть. Своял плагинчек pause_charSelect.pl. Он стопорит кору на окне выбора чара и делает паузу в 90 сек, причём каждые 10 сек отсылает пакет "х0187 6":
Нефига не понимаю зачем тут нужны строчки:
Осталось придумать как пробудить кору. Тогда эти 90 сек можно заменить на "пока нет сигнала >> спим и отсылаем пакет каждые 10 сек"
А ещё я подумал что всё это зря делается. Если грамотно использовать опцию pauseMapServer, то мы также сделаем нужную нам паузу..
Ну зато можете поздравить меня с первым моим плагенчиком
позже..
Потестил с "pauseMapServer 30" - облом, т.к. не посылаются пакеты "х0187 6"
piroJOKE, вливайся
спс за инфу, по моим подсчётам клиент отсылает 1 раз в 10 сек пакет:
(pJ: стёр ID из пакета...)87 01 ## ## ## ##
Заебалси я всё делать, но какой-то результат есть. Своял плагинчек pause_charSelect.pl. Он стопорит кору на окне выбора чара и делает паузу в 90 сек, причём каждые 10 сек отсылает пакет "х0187 6":
Код: Выделить всё
## Плагин тестировался на OpenKore 2.0.4 (SVN5979)
## Делаем паузу в окне выбора чара.
## Автор 4epT©
#####################################
package pause_charSelect;
use strict;
use encoding 'utf8';
use Plugins;
use Globals qw($accountID %config %timeout $messageSender);
use Log qw(message);
use Utils::Win32;
use Misc;
Plugins::register('pause_charSelect', 'Делаем паузу в окне выбора чара', \&onUnload);
my $hooks = Plugins::addHooks(['charSelectScreen', \&pauseChar, undef]);
sub onUnload {
message "pause_charSelect plugin cleaning up\n", "system";
Plugins::delHooks($hooks);
}
sub pauseChar {
my (undef, $args) = @_;
my ($time) = 90;
for ( ; $time > 0; $time = $time-10) {
message "Пауза $time сек..\n", "system";
sleep 10;
$messageSender->sendBanCheck($accountID);
}
Utils::Win32::playSound('sounds\fuzz.wav');
message "Логинемся!!!\n", "system";
$messageSender->sendCharLogin($config{char});
$timeout{charlogin}{time} = time;
$args->{return} = 1;
}
Но без них в игру входит тока со второго раза. Т.е. 90 сек ждём, потом пытаемся залогинеться, нас не пускают -> дисконнект, ждём 90 сек и нормально заходим..use Misc;
my (undef, $args) = @_;
$args->{return} = 1;
Осталось придумать как пробудить кору. Тогда эти 90 сек можно заменить на "пока нет сигнала >> спим и отсылаем пакет каждые 10 сек"
А ещё я подумал что всё это зря делается. Если грамотно использовать опцию pauseMapServer, то мы также сделаем нужную нам паузу..
Ну зато можете поздравить меня с первым моим плагенчиком
позже..
Потестил с "pauseMapServer 30" - облом, т.к. не посылаются пакеты "х0187 6"
мда... оно работает, конечно, но только я в принципе не представляю, как из sleep 10 выходить.
плагины, блин, ну dccommander, о котором в плагинах висит моя тема, icqcommander varg'а, buscommander (или как-то так) на форуме ок. вполне себе работают, вот только как их подружить с твоим плагином без потери их функциональности.
PS Но всё же спасибо за помощь
PPS А может всё же лучше зарегистрировать пару консольных команд?
PPPS А как перл реагирует на попытку запустить другой саб при запущенном предыдущем, и как можно один из них экстренно завершить?
плагины, блин, ну dccommander, о котором в плагинах висит моя тема, icqcommander varg'а, buscommander (или как-то так) на форуме ок. вполне себе работают, вот только как их подружить с твоим плагином без потери их функциональности.
PS Но всё же спасибо за помощь
PPS А может всё же лучше зарегистрировать пару консольных команд?
PPPS А как перл реагирует на попытку запустить другой саб при запущенном предыдущем, и как можно один из них экстренно завершить?
Превосходство некоторых людей над окружающими одни считают несправедливостью, требующей уравнивания, другие - неполноценностью недовольных.
Выбор взгляда за Вами...
Выбор взгляда за Вами...