Вернуться   CoderX :: Forums > Другие игры > Aion
Войти через OpenID

Aion Форум посвященный игре Aion

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

Вот, что уже имеем в pakets.ini.

Код:
Для L2PacketHack3.5.167+
From AION X Engine 2.1

Типы данных, используемые в пакетах:
c: Byte (1 байт)
h: Word (2 байта)
d: DWord (4 байта)
i: integer (4 байта)
f: Real/Double (8 байт) используется в Lineage II
n: Real/Double (4 байт) используется в Aion
q: Int64 (8 байт целое)
s: String
Во многих пакетах, очень часто встречаются циклические списки, пример:
Код:
18=StatusUpdate:o(ObjectID)d(ListSize:Loop.0002.0002)d(unk)d(ID)d(Value)

здесь в куске d(ListSize:Loop.0002.0002)
ListSize - количество повторов цикла
Loop - означает что будет цикл
0002 - элемент пакета с которого начинать цикл
0002 - сколько элементов циклить
т.е. элементы d(ID) и d(Value) будут повторятся ListSize количество раз, d(unk) просто выводится и в цикле не участвует.
или
Код:
18=StatusUpdate:o(ObjectID)d(ListSize:For.0002)d(ID)d(Value)

здесь в куске d(ListSize:For.0002)
ListSize - количество повторов цикла
For - означает что будет цикл
0002 - сколько элементов циклить
т.е. элементы d(ID) и d(Value) будут повторятся ListSize количество раз.
Оператор выбора switch в java имеет следующий вид:
Код:
switch (выражение) { case
значение1:
// последовательность операторов
break;
case значение2:
// последовательность операторов 
break;
... 
case значениеN:
// последовательность операторов 
break;
default: 
// последовательность операторов, выполняемая по умолчанию
У нас оператор выбора выглядит так, пример:
Код:
17=SM_MESSAGE:h(id2)c(chatType:switch.0002.0003)c(RaceId)d(ObjectId)_(id:case.0.2)h(unk)s(message)_(id:case.1.3)h(unk)d(unk)s(message)_(id:case.2.4)h(unk) d(unk)d(unk)s(message) s(Name)s(message)
Код:
здесь в куске c(chatType:switch.0002.0003)
chatType  - выражение, тип чата (1 байт)
 switch  - ключевое слово оператора выбора
0002 - сколько элементов после switch пропускать, т.е. элементы c(RaceId)d(ObjectId) просто выводятся в расшифровке на экран
0003 - сколько элементов _(id:case присутствует в switch

в куске _(id:case.0000.0002)h(unk)s(message)
_ - пропускается
id - пропускается, сюда можно вписать имя идентификатора
case - ключевое слово для элемента выбора со значением 0000
0002 – количество элементов в блоке case, т.е. элементы h(unk)s(message)
Последние элементы s(Name)s(message) попадают под выбор default, т.е. если chatType не соответствует ни одному case, то в расшифровку попадают элементы s(Name)s(message).
Не значащие нули везде можно опускать, т.е. вместо 0001 пишем 1.

to be continued ...
Вложения
Тип файла: rar packetsAion.rar (6.8 Кб, 138 просмотров)
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 30.04.2011 в 03:20.
NLObP вне форума   Ответить с цитированием
Старый 13.04.2011, 22:47   #2
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Есть проблемы. Вот например кусок пакета SM_PLAYER_INFO по данным aionxemu
Код:
        List<Item> items = player.getEquipment().getEquippedItemsWithoutStigma();
        short mask = 0;
        for (Item item : items) {
            mask |= item.getEquipmentSlot();
        }

        writeH(buf, mask);

        for (Item item : items) {
            if (item.getEquipmentSlot() < Short.MAX_VALUE * 2) {
                writeD(buf, item.getItemSkinTemplate().getTemplateId());
                GodStone godStone = item.getGodStone();
                writeD(buf, godStone != null ? godStone.getItemId() : 0);
                writeD(buf, item.getItemColor());
                writeH(buf, 0x00);// unk (0x00)
            }
        }
никак не заменить куском

Код:
h(mask:Loop.1.4)d(ItemSkinTemplateId)d(ItemId)d(ItemColor)h(0)
Код:
0109 h  mask: 32767 (0x7FFF)
0111 d  ItemSkinTemplateId: 101500796 (0x060CC77C)
0115 d  ItemId: 0 (0x00000000)
0119 d  ItemColor: 0 (0x00000000)
0123 h  0: 0 (0x0000)
элемент mask имеет нереальное значение, хотя в пакете реальное повторение от 12 до 15 раз.

В каком месте узнать величину повторений for (Item item : items)? Как это клиент узнает?
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 13.04.2011 в 22:56.
NLObP вне форума   Ответить с цитированием
Старый 14.04.2011, 16:00   #3
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от NLObP Посмотреть сообщение
элемент mask имеет нереальное значение, хотя в пакете реальное повторение от 12 до 15 раз.

В каком месте узнать величину повторений for (Item item : items)? Как это клиент узнает?
хех, всё очень просто, mask это битовая маска, сколько бит в ней установлено столько и элементов в списке, правда в пакетхаке для такого придётся дополнительный костыль мутить ибо ничего встроенного чтоб превратить эту маску в число элементов нету
я вот так количество вычислял:
delphi Код:
k:=fp.ReadH; // EquipmentMask     c:=0;     for i:=0 to 15 do c:=c+((k shr i)and 1);

Добавлено через 4 минуты
Эта битовая маска заодно указывает на что надета каждая вещь из списка
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 14.04.2011 в 16:00. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 14.04.2011, 23:47   #4
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

xkor, спасибо, получилось! Добавил оператор LoopM в котором параметр цикла маска.

Добавлено через 31 минуту
Ещё вопрос.
Это
java Код:
writeH(buf, -1 * this.size & 0xFFFF);
эквивалентно этому?
delphi Код:
size:=(size XOR $FFFF)+1

Добавлено через 34 минуты
Блин, голову сломаешь с такого пакета 19=SM_INVENTORY_INFO
java Код:
protected void writeImpl(AionConnection con, ByteBuffer buf) {         if (this.packetType == EMPTY) {             writeD(buf, 0);             writeH(buf, 0);             return;         }         // something wrong with cube part.         writeC(buf, 1); // TRUE/FALSE (1/0) update cube size         writeC(buf, CUBE); // cube size from npc (so max 5 for now)         writeC(buf, 0); // cube size from quest (so max 2 for now)         writeC(buf, 0); // unk?         writeH(buf, size); // number of entries         for (Item item : items) {             writeGeneralInfo(buf, item);             ItemTemplate itemTemplate = item.getItemTemplate();             if (itemTemplate.getTemplateId() == ItemId.KINAH.value()) {                 writeKinah(buf, item, true);             } else if (itemTemplate.isWeapon()) {                 writeWeaponInfo(buf, item, true);             } else if (itemTemplate.isArmor()) {                 writeArmorInfo(buf, item, true, false, false);             } else if (itemTemplate.isStigma()) {                 writeStigmaInfo(buf, item);             } else {                 writeGeneralItemInfo(buf, item, false, false);                 writeC(buf, 0);             }         }     }

Добавлено через 2 минуты
Вот эти соответствия в цифрах есть?
Код:
itemTemplate.getTemplateId() == ItemId.KINAH.value()
Код:
itemTemplate.isWeapon
Код:
itemTemplate.isArmor
Код:
itemTemplate.isStigma
Добавлено через 1 минуту
Пока только нашел
Код:
  KINAH(182400001), 
  ANGELS_EYE(186000037), 
  DEMONS_EYE(186000038), 
  BROKEN_COIN(182005367), 
  PLATINUM_ELYOS(186000005), 
  PLATINUM_ASMODIANS(186000010);
правда в пакетах таких цифр не нахожу

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



Последний раз редактировалось NLObP, 14.04.2011 в 23:48. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
Старый 20.03.2013, 15:46   #5
Новичок
 
Аватар для mars2107
 
Регистрация: 08.12.2011
Сообщений: 3
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
mars2107 пока неопределено
По умолчанию

Во избежания лишних тем, спрошу здесь. Будет ли расшифровка пакетов для 3.5-3.9 или у вас в планах на 4.0 переключиться сразу?
__________________
mars2107 вне форума   Ответить с цитированием
Старый 20.03.2013, 23:11   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от mars2107 Посмотреть сообщение
Во избежания лишних тем, спрошу здесь. Будет ли расшифровка пакетов для 3.5-3.9 или у вас в планах на 4.0 переключиться сразу?
Если есть исходники джава сервера для 3.5-3.9, то есть шанс на подготовку packets.ini
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 26.03.2013, 16:40   #7
Новичок
 
Аватар для mars2107
 
Регистрация: 08.12.2011
Сообщений: 3
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
mars2107 пока неопределено
По умолчанию

Точно не могу скачать какая версия, но то что 3.5+ точно.

http://rghost.ru/44786541

пасс: 2212
__________________
mars2107 вне форума   Ответить с цитированием
Старый 27.03.2013, 00:03   #8
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от mars2107 Посмотреть сообщение
Точно не могу скачать какая версия, но то что 3.5+ точно.

http://rghost.ru/44786541

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


NLObP вне форума   Ответить с цитированием
Старый 27.03.2013, 13:22   #9
Новичок
 
Аватар для mars2107
 
Регистрация: 08.12.2011
Сообщений: 3
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
mars2107 пока неопределено
По умолчанию

Вы информацию берете для создания *.ini файла с этих классов?




как это сделать указано выше, я правильно понял?
__________________

Последний раз редактировалось mars2107, 29.03.2013 в 02:55.
mars2107 вне форума   Ответить с цитированием
Старый 27.03.2013, 23:51   #10
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от mars2107 Посмотреть сообщение
как это сделать указано выше, я правильно понял?
Да. Еще можно почитать здесь.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 27.03.2013 в 23:57.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Ответ

  CoderX :: Forums > Другие игры > Aion


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

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

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


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

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

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