Пакет 0x0360

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

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

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
igogo
Начинающий
Сообщения: 33
Зарегистрирован: Ср июл 09, 2008 10:09 pm

Пакет 0x0360

Сообщение igogo »

Что это за пакет? Он по ходу дела каждые 10 секунд клиентом отправляется, а кора этого не делает и поэтому после загрузки карты дисконектится.

В файле RagexeRE_2010_11_24a про него есть пару строк, но он видимо недоделан.

'0360' => ['sync', 'V', [qw(time)]], # TODO

Можете вкартце об этом пакете рассказать, дабы самому до ума до вести?

Добавлено спустя 15 часов 10 минут 58 секунд:
Короче кора должна этот пакет отправлять функцией sendSync() из файла Send.pm. Но эта функция ниоткуда не вызывается и не срабатывает, и я не могу понять куда можно привинтить её вызов. К тому же раз она написана, то подразумевалось же что она будет где-то использоваться?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Пакет 0x0360

Сообщение EternalHarvest »

"TODO" здесь надо убрать. Пакет отправляется функцией sendSync (и reconstruct_sync) из src/Network/Send.pm, в RagexeRE_2010_11_24a - только описание для конкретного serverType. Можно проверить, вызывается ли она и доходит ли до собственно отправки.
igogo
Начинающий
Сообщения: 33
Зарегистрирован: Ср июл 09, 2008 10:09 pm

Re: Пакет 0x0360

Сообщение igogo »

Проверял, добавляя вывод сообщения в консоль. Обе функции не срабатывают.
reconstruct_sync вообще больше ни в каких файлах не встречается. sendSync есть в
CoreLogic (не срабатывает), XKoreProxy (этот файл ни к чему вроде?) и ReceivekROSakexe_0.pm - там она несколько раз встречается, но только не понимаю зачем.

Добавлено спустя 1 час 9 минут 19 секунд:
В режиме хкор та же беда - пакет не отправляется и всё виснет после загрузки карты. Можно ли заставить клиент самому эти пакеты пулять когда он захочет?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Пакет 0x0360

Сообщение EternalHarvest »

Должно вызываться из CoreLogic:

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

Network::Send::reconstruct_sync('Network::Send::iRO=HASH()', 'HASH()') called at openkore/trunk/src/Network/PacketParser.pm line 152
Network::PacketParser::reconstruct('Network::Send::iRO=HASH()', 'HASH()') called at openkore/trunk/src/Network/Send.pm line 471
Network::Send::sendSync('Network::Send::iRO=HASH()') called at openkore/trunk/src/AI/CoreLogic.pm line 289
AI::CoreLogic::processMisc() called at openkore/trunk/src/AI/CoreLogic.pm line 50
AI::CoreLogic::iterate() called at openkore/trunk/src/functions.pl line 735
Posted after 3 minutes 42 seconds:
igogo писал(а):В режиме хкор та же беда - пакет не отправляется и всё виснет после загрузки карты. Можно ли заставить клиент самому эти пакеты пулять когда он захочет?
Это странно, клиент сам не отправляет эти пакеты с XKore? Или отправляет, но до сервера они не доходят?
igogo
Начинающий
Сообщения: 33
Зарегистрирован: Ср июл 09, 2008 10:09 pm

Re: Пакет 0x0360

Сообщение igogo »

sub processMisc {
if (timeOut($timeout{ai_sync})) {
$timeout{ai_sync}{time} = time;
$messageSender->sendSync();
}

Короче в файле КореЛоджик функция сендСинк не срабатывает из-за того что таймаут ai_sync уже врубается в другом файле на 12 секунд. Убрал тот таймаут - пакет стал отправляться, но! он лезет вперед 2х других пакетов и поэтому сервер его не хавает (там где я пытаюсь играть, в шифре каждого следующего байта используется предыдущий). Видимо тот таймаут, который я удалил, правильно стоит и самая первая синхронизация должна происходить из какого-то другого места?

Добавлено спустя 9 минут 59 секунд:
EternalHarvest писал(а): Это странно, клиент сам не отправляет эти пакеты с XKore? Или отправляет, но до сервера они не доходят?
Не отправляет. Но дело в том что экзешник игры запакован и защита прячет функции отправки и приёма, поэтому нетредирект не инжектится. Я взял незащищенный екзешник который был во время бета-теста, сделал файл клиентинфо и заюзал его в режиме хкоре. По идее он должен так же пытаться синхронизовываться как и защищенный, только этого увы не происходит.
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Пакет 0x0360

Сообщение EternalHarvest »

Есть ещё какое-то отправление синхронизации, которое можно найти по слову initSync. Оно ограничено странным условием serverType == 2, можно попробовать убрать его.

Возможно, нужен другой таймаут, не 12 секунд (проверить время отправления пакетов клиентом)?
igogo
Начинающий
Сообщения: 33
Зарегистрирован: Ср июл 09, 2008 10:09 pm

Re: Пакет 0x0360

Сообщение igogo »

Оказывается я ошибку в алгоритме шифрования отправляемых пакетов сделал, лол.
Зато теперь появилась новая проблема - если рядом есть НПСы, то вылезает вот такая гадость:

Packet Tokenizer: Unknown switch: 0857

При этом кора их не видит. У ехе дата компиляции 2011-01-1. Пробовал сервертип kRO_RagexeRE_2010_11_24a (Там этот пакет описан) и вот этот сервертип:
http://forums.openkore.com/viewtopic.php?f=36&t=14892
но безуспешно.

'0857' => ['actor_display', 'v C a4 v3 V v10 a4 a2 v V C2 a5 C3 v2 Z*', [qw(len object_type ID walk_speed opt1 opt2 option type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID emblemID manner opt3 karma sex coords xSize ySize lv font name)]], # -1 # spawning

По описанию ведь этот пакет никак не может НПС передавать?

Еще есть проблема - в режиме хкоре из клиента нельзя ничего сделать. Только из консоли. Это о чем-то говорит?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Пакет 0x0360

Сообщение EternalHarvest »

igogo писал(а):Packet Tokenizer: Unknown switch: 0857
Надо добавить в recvpackets, иначе выбор или изменения в serverType ничем не помогут:

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

0856 -1
0857 -1
0858 -1
igogo писал(а):По описанию ведь этот пакет никак не может НПС передавать?
actor_display содержит информацию о NPC, игроках, мобах, порталах и прочем.
igogo писал(а):Еще есть проблема - в режиме хкоре из клиента нельзя ничего сделать. Только из консоли. Это о чем-то говорит?
Возможно, не шифруются пакеты, передаваемые от клиента (который, как я понял, без шифрации) к серверу.
igogo
Начинающий
Сообщения: 33
Зарегистрирован: Ср июл 09, 2008 10:09 pm

Re: Пакет 0x0360

Сообщение igogo »

recvpackets делал новым экстрактором:

0856 -1 71
0857 -1 65
0858 -1 64
0859 -1 45

Попробовал вторые числа убирать - не помогло.

Функция отправки пакетов в хкоре.пм и впрямь другая, доковыряю, если 0857 удастся оживить

Добавлено спустя 13 часов 1 минуту 31 секунду:
Блин жесть какая-то. Посмотрел файл MessageTokenizer.pm, и там есть участок ответственный за получение длины пакета из ресвпакетс:


my $switch = getMessageID($$buffer);
my $rpackets = $self->{rpackets};
my $size = $rpackets->{$switch};
my $result;

Фигня в том что для 0857, несмотря на то что он в ресвпакется описан, $size выдается undef и в итоге кора считает его за неизвестный пакет. Я добавил вот это и он стал нормально обрабатываться:
if ($switch eq '0857' || $switch eq '0856' || $switch eq '0858' || $switch eq '0859') {
message "debbbubbubbubbun";
$size = -1;
}

Только теперь кора перестала ходить :wall: Как эти чудеса вообще можно объяснить? И еще, если что-то написать в общий чат - то это на другом экране отображается с приставкой |00.

Добавлено спустя 45 минут 20 секунд:
С ходьбой и приставкой разобрался.

Осталась проблема с синхронизацией. После выбора чара всё виснет 2 раза из трех, а если удается зайти то при смене карты всё равно глохнет

Добавлено спустя 30 минут 21 секунду:
Насчет хкоре - вот мы кликаем по какой-нибудь клетке в клиенте, чтобы переместиться. Как происходит перехватывание этого действия корой? Какие функции срабатывают? Видимо кора почему-то начинает игнорировать клиент и поэтому так же не обрабатывает его попытки синхронизироваться
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Пакет 0x0360

Сообщение EternalHarvest »

Загружается нужный recvpackets-то, по логу загрузки?
Насчет хкоре - вот мы кликаем по какой-нибудь клетке в клиенте, чтобы переместиться. Как происходит перехватывание этого действия корой?
functions.pl:

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

	# Receive and handle data from the RO client
	$data = $net->clientRecv;
	if (defined($data) && length($data) > 0) {
		my $type;
		$outgoingClientMessages->add($data);
		$net->serverSend($_) for $messageSender->process(
			$outgoingClientMessages, $clientPacketHandler
		);
	}
Здесь $outgoingClientMessages - Network::MessageTokenizer, $clientPacketHandler - Network::ClientReceive. process находится в Network::PacketParser.

ClientReceive - это такой Receive наоборот, там находятся обработчики пакетов, посылаемых подключенным к openkore клиентом.

В принципе, можно добавить sub sync { my ($self, $args); message "Client sync test\n"; $args->{mangle} = 2 } в ClientReceive, чтоб игнорировать соответствующий пакет от клиента, и убрать условие "не посылать в xkore 1" из sendSync. Но это не решит проблемы с отсутствием реакции на действия клиента вообще.
igogo
Начинающий
Сообщения: 33
Зарегистрирован: Ср июл 09, 2008 10:09 pm

Re: Пакет 0x0360

Сообщение igogo »

EternalHarvest писал(а):Загружается нужный recvpackets-то, по логу загрузки?
!!!!!!

Сразу всё заработало и синхронизация и клиент в хкоре. :lol: recvpackets из папке кро тащился!
Блин, а я два на эту проблему угробил )
Ответить