Вот, что уже имеем в 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 ...