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

Набор утилит для работы с пакетами.

MakePacketsIni v0.2 - для подготовки packetsX.ini из *.java файлов.
[+] обновил до версии 0.3

описание пакета берем из процедур readImpl() и writeImpl(), имена пакетов берем из packets.ini. Сами java файлы исходников пакетов должны лежать в папках script\clientpackets и script\serverpackets.

PS: допиливать packets.ini руками обязательно!

Давайте разберем как допиливать packets.ini, на примере пакета CM_CASTSPELL
Исходник
Код:
    protected void readImpl() {
        spellid = readH();
        level = readC();
        targetType = readC();
        switch (targetType) {
            case 0:
                targetObjectId = readD();
                break;
            case 1:
                x = readF();
                y = readF();
                z = readF();
                break;
            default:
                break;
        }
        time = readH();
    }
Кусочек
Код:
spellid = readH();
это будет
Код:
h(spellid)
Кусочек
Код:
level = readC();
это будет
Код:
c(level)
Кусочек
Код:
        targetType = readC();
        switch (targetType) {
это будет
Код:
c(targetType:switch.0.2)
где первый параметр после switch это элемент_с_которого_начинать, т.е. 0 - начать с первого
второй параметр после switch это сколько_элементов_входит, т.е. 2 - подсчитываем сколько case входит в этот switch (default не учитывать)

Кусочек
Код:
l           case 0:
                targetObjectId = readD();
                break;
это будет
Код:
_(id:case.0.1)d(targetOID)
где _(подчерк) просто так должно быть, id просто так должно быть,
первый параметр после case это с чем идет сравнение, в нашем случае с цифрой 0 (ноль)
второй параметр после case это количество_элементов_в_блоке, в нашем случае 1 (один)

Кусочек
Код:
l            case 1:
                x = readF();
                y = readF();
                z = readF();
                break;
это будет
Код:
_(id:case.1.3)n(x)n(y)n(z)
где _(подчерк) просто так должно быть, id просто так должно быть,
первый параметр после case это с чем идет сравнение, в нашем случае с цифрой 1 (один)
второй параметр после case это количество_элементов_в_блоке, в нашем случае 3 (три)

и в конце
Кусочек
Код:
time = readH();
это будет
Код:
h(time)
В итоге получаем строку
Код:
0090=CM_CASTSPELL:c(static)h(id2)h(spellID)c(level)c(targetType:switch.0.2)_(id:case.0.1)d(targetOID)_(id:case.1.3)n(x)n(y)n(z)h(time)
Конструкция FOR по аналогии (можно глянуть описание в packetsGracia.ini). Конструкцию IF надо преобразовать в конструкцию switch, так как IF в пакетхаке не поддерживается.

PS: надеюсь понятно объяснил.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный4.png
Просмотров: 77
Размер:	47.2 Кб
ID:	2555  
Вложения
Тип файла: rar packetsAion27.rar (8.6 Кб, 60 просмотров)
Тип файла: rar makePacketsIni.rar (405.8 Кб, 57 просмотров)
Тип файла: rar makePacketsIniSrc.rar (25.4 Кб, 53 просмотров)
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



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