Показать сообщение отдельно
Непрочитано 19.06.2013, 09:34   #3
Аватар для Ashe
Олдфаг

По умолчанию Re: Server>Client Packets

Цитата:
Сообщение от Astend Посмотреть сообщение
Но вопросов всеравно осталось много:
Переопределенный метод:
Код HTML:
@Override
		protected void writeImpl()
Что его считывает?
Куда сохраняются значения writeD(),writeС(),writeS?
и что они вообще означают?
Причем там байт код?
Как создавать элементарные пакеты?
и т.д.
Для понимания того, как устроена сеть в l2j необходимо понимать, как вообще устроены сети. Тут необходимо почитать теорию и "пописать своих велосипедов" для хорошего освоения. Объяснять данный момент бесполезно, имхо.

Цитата:
Сообщение от Astend Посмотреть сообщение
Самый главный вопрос это где можно просмотреть название всех пакетов, и где просмотреть за что это каждый пакет отвечает?
Вот например в статье говориться

Логин-сервер обрабатывает пакеты:
0x00 - RequestAuthLogin (запрос на авторизацию - содержит логин и пароль)
0x02 - RequestServerLogin (запрос на заход на сервер)
0x05 - RequestServerList (запрос на список серверов)
Клиентом же обрабатываются
пакеты следующих типов:
0x01 - авторизация не прошла
0x03 - вы успешно авторизованы
0x04 - ответ на RequestServerLogin
0x06 - ответ на RequestServerList

как? откуда он про это узнал?

в общем, у меня темнота.

буду рад абсолютно любой точной информации.
Заранее спасибо.

извините если не в тот раздел написал.
Название всех пакетов, как и их структура берётся из клиента, а вот за что отвечает тот или иной пакет Вы никак не сможете узнать, кроме как методом тыка/смекалки/догадки/и т.д.. Все данные, которые описаны в статье, доставались упорнейшим многочасовым трудом многих и многих людей, а в последствии стали общественным достоянием.

На вопрос "как?" ответить парой строчек не получится. Скажу только, что для этого нужно реверсить клиент и очень хорошо разбираться в отладчиках, ASM'e и вообще иметь понимание того, как устроена работа сетей. Именно таким образом было установлено, что протокол l2 работает со следующими типами данных:

Код:
char   – может принимать значение от -128 до 127. Имеет длину 1 байт
short  – может принимать значение от -32768 до 32767. Имеет длину 2 байта
int    – может принимать значение от -2147483648 до 2147483647. Имеет длину 4 байта
int64  – может принимать значение от -9223372036854775808 до 9223372036854775807. Имеет длину 8 байт.
float  – может принимать значение от 2.22507e-308 до 1.79769e+308. Имеет длину 8 байт
string – текстовая строка в юникоде(UTF8). Каждая буква представлена двумя байтами, первый байтом код буквы, а второй –
	 номер кодовой таблицы. Индикатором конца строки служит символ с кодом 0.
Да, да. Это те самые writeD(), writeC(), writeS(). Из них формируется пакет. Пакет содержит некоторую структуру. Структура берётся опять же из клиента.
__________________
Fortuna - non penis, in manus non recipe.
Ashe вне форума Ответить с цитированием