Цитата:
Сообщение от 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(). Из них формируется пакет. Пакет содержит некоторую структуру. Структура берётся опять же из клиента.