Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Разработка
Войти через OpenID

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 21.09.2011, 00:12   #1
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Альтернативный парсер пакетов

Неспешно делается парсер пакетов в пакетхаке на основе java исходников серверов. Есть определенные успехи.
Как известно из java исходников можно сделать расшифровку пакетов для packets.ini. Дело муторное, не все возможности предусмотрены. Захотелось сделать, что то типа такого, чтобы кинул эти исходники с минимальными исправлениями в папку settings и пакетхак мог сам их просматривая показывать содержимое пакета.

Так выглядит исходник пакета SM_SKILL_LIST для Aion.
java Код:
protected void writeImpl(AionConnection con, ByteBuffer buf) {         final int size = skillList.length;         writeH(buf, size); //skills list size         for (SkillListEntry entry : size)         {                 writeH(buf, entry.getSkillId());                 writeH(buf, entry.getSkillLevel());                 writeC(buf, 0x00);                 writeC(buf, entry.getExtraLvl());                 writeD(buf, 0); //use time? [s]                 writeC(buf, entry.isStigma() ? 1 : 0); // stigma flag         }         writeD(buf, messageId);         if (messageId != 0) ;         {             writeH(buf, 0x24);             writeD(buf, skillNameId);             writeH(buf, 0x00);             writeS(buf, skillLvl);         } }

Во вложении картинка как выглядит пакет в пакетхаке.

Планируется исходники пакетов хранить так:


Код:
settings
    packets.ini
         aion21
           clientpackets
                CM_ABYSS_RANKING_LEGIONS.java
                CM_ABYSS_RANKING_PLAYERS.java
                ...
           serverpackets
                SM_ABNORMAL_EFFECT.java
                SM_ABNORMAL_STATE.java
                ...
         aion25
           clientpackets
           serverpackets
         gracia
           clientpackets
                 Action.java
                 AddTradeItem.java
                 ...
           serverpackets
                 AbnormalStatusUpdate.java
                 AcquireSkillDone.java
                 ...
и т.д.
Имеются и плюсы и минусы.
Из плюсов: легко модифицировать пакет.
Из минусов: неспешность вывода показа пакета, особенно заметно если исходник имеет большой размер.

Осталось найти приличные исходники java сервера Aion и LineageII и подготовить пакеты.
В принципе за день я смог в черновом варианте обработать клиентские пакеты Aion 2.1, так что это может занять не так много времени.

PS: код до конца еще не дописан.
PPS: просьба накидать мне логов пакетов для Aion 2.1 и 2.5, чтобы можно было тестировать правильность разбора пакетов.

PPPS: тестовый вариант я выложу на FTP (Внимание! При ошибках в описании пакета намертво виснет пакетхак!).
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный21.jpg
Просмотров: 533
Размер:	86.8 Кб
ID:	2370  Нажмите на изображение для увеличения
Название: Безымянный20.jpg
Просмотров: 439
Размер:	248.7 Кб
ID:	2371  
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 21.09.2011 в 01:23.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 6 спасибками от:
Старый 21.09.2011, 23:19   #2
Новичок
 
Регистрация: 03.05.2011
Сообщений: 4
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
warlock9000 пока неопределено
По умолчанию

Тестировал на 2.5 (http://aion.atomixro.com/) пакеты бредовые показывает, совсем не соответствующие действительности. *.166 версия л2пх показывает нормальные пакеты. И еще вопрос не в тему (сорри), gamezaion.com работает на 2.6 евроклиенте пакеты вообще непонятно что показывают... кодировка поменялась чтоль в 2.6?
warlock9000 вне форума   Ответить с цитированием
Старый 22.09.2011, 09:19   #3
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

не легче ли переводить в нормальный формат?
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 22.09.2011, 21:36   #4
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

warlock9000, дай мне в лс лог пакетов для тестирования.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 28.09.2011, 18:39   #5
Новичок
 
Регистрация: 03.05.2011
Сообщений: 4
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
warlock9000 пока неопределено
По умолчанию

Хоть бы отписал, как идет процесс доводки
warlock9000 вне форума   Ответить с цитированием
Старый 30.09.2011, 12:08   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Кратко, как работает.
В папке \settings находится packetsAionXX.ini из которого по коду пакета выбирается имя пакета, например для серверного пакета 00 находим имя пакета SM_STATUPDATE_HP
Код:
[server]
00=SM_STATUPDATE_HP
...
Сами пакеты лежат в папке \settings\packets.ini\aionXX или для LineageII лежат в папке \settings\packets.ini\gracia и т.д по названию хроник соответственно в папках clientpackets и serverpackets
Код:
\settings
|packetsAion21.ini
|packetsGracia.ini
+-\packets.ini
    +aion21
     |clientpackets
     |serverpackets
    +gracia
     |clientpackets
     |serverpackets
...
Описание для клиентских пакетов ищется в секции readImpl()
Код:
protected void readImpl() 
{
...
}
Описание для серверных пакетов ищется в секции writeImpl()
Код:
protected void writeImpl() 
{
...
}
Фигурные скобки {} должны быть на отдельной строке!

Обрабатываются конструкции:
Чтение из пакета c=1 байт, h=2 байта, d=4 байта, s=string, f=8 байт, n=4 байта, b=блок в N байт:
Код:
writeD(buf, effectedId); //имя поля будет effectedId
или
raceId = readC(); //имя поля будет raceId

writeB(buf, new byte[18]); //будет пропущено 18 байт
Цикл:
Код:
  writeH(buf, size); //// цикл по переменной size
  for (size) 
  {
        ...  
  }
или
Код:
  amount = readH(); // цикл по переменной amount
  for (int i = 0; i < amount; i++) 
  {
     ...
  }
Условия:
Код:
  raceId = readC();
  switch (raceId) 
  {
    case 0:
        ...
        break;
    case 1:
        ...
        break;
    default:
        ...
        break;
  }
или

Код:
  if (type == 2) // возможные варианты (>|>=|<|<=|!|!=|==)
  {
     ...
  }
  else
  {
   ...
  }

или

  if (type) // возможные варианты (>|>=|<|<=|!|!=|==)
  {
     ...
  }
Поддерживаются подпрограммы (SM_INVENTORY_UPDATE.java):
Код:
protected void writeGeneralInfo() 
{
  ...
}

protected void writeImpl(AionConnection con, ByteBuffer buf) 
{
  ...
  writeH(buf, size); // number of entries
  for (size) 
  {
       writeGeneralInfo(buf, item);
       ...
  }
}
Присвоение:
Код:
Size = 8;
//size будет равно 8

или
Size = 8;
Len=Size
//Len будет равно 8

или
int size = 134 - (history.getName().length() * 2 + 2);
//size будет равно вычислению 134 - длина строки getName *2+2
Комментарии в тексте пропускаются
Код:
writeC(buf, chatType); // type

или 

/*
* 0 : all 1 : elyos 2 : asmodians
*/
writeD(buf, senderObjectId); // sender object id
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 30.09.2011 в 13:11.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 30.09.2011, 12:38   #7
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Для подготовки packetsAionXX.ini по данным из файлов AionPacketHandlerFactory.java и ServerPacketsOpcodes.java сделана маленькая утилита makeOpcodesAion.
Обновил до версии 0.2
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 126
Размер:	35.4 Кб
ID:	2518  
Вложения
Тип файла: rar makeOpcodesAion.rar (365.1 Кб, 72 просмотров)
Тип файла: rar makeOpcodesAionSrc.rar (9.8 Кб, 55 просмотров)
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 19.12.2011 в 23:34.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 30.09.2011, 12:47   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

NLObP, и всё таки мне кажется что оптимальнее было бы делать не в пакетхаке возможность использовать сорци явы, а просто конвертер сорцев в packets.ini
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 30.09.2011, 12:51   #9
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
NLObP, и всё таки мне кажется что оптимальнее было бы делать не в пакетхаке возможность использовать сорци явы, а просто конвертер сорцев в packets.ini
Я не настаиваю. Могу исходники отдельно выложить.
В packets.ini плохо проработана работа с пакетами. Да и саму её трудно делать. И для понимания одна длинная строка хуже чем нормальный листинг программы.

PS: причем совместимость со старыми packets.ini не потеряна. Новый парсер включается галочкой в настройках.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 30.09.2011 в 13:01.
NLObP вне форума   Ответить с цитированием
Старый 30.09.2011, 23:59   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от NLObP Посмотреть сообщение
Я не настаиваю. Могу исходники отдельно выложить.
а я не протестую против твоей фичи, просто выражаю мнение, ничего против её наличия не имею)
ЗЫ в новом пакетхаке (если всётfки допишу когданить что то внятное) у меня наборот будет просто: разбираться пакеты будут скриптом, но скрипт сможет генерироваться из формата похожего на текущий packets.ini
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка


Опции темы
Опции просмотра

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

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


Часовой пояс GMT +4, время: 00:11.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!