Для 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:
// последовательность операторов, выполняемая по умолчанию
здесь в куске 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.
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)? Как это клиент узнает?
элемент mask имеет нереальное значение, хотя в пакете реальное повторение от 12 до 15 раз.
В каком месте узнать величину повторений for (Item item : items)? Как это клиент узнает?
хех, всё очень просто, mask это битовая маска, сколько бит в ней установлено столько и элементов в списке, правда в пакетхаке для такого придётся дополнительный костыль мутить ибо ничего встроенного чтоб превратить эту маску в число элементов нету
я вот так количество вычислял:
delphi Код:
k:=fp.ReadH; // EquipmentMask
c:=0;
for i:=0to15do c:=c+((k shr i)and1);
Добавлено через 4 минуты
Эта битовая маска заодно указывает на что надета каждая вещь из списка
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Последний раз редактировалось xkor, 14.04.2011 в 16:00.
Причина: Добавлено сообщение