client files editor
В общем, как я писал ранее, я сел за написание утилиты для редактирования файлов клиента Lineage 2.
Итак, уже есть чем поделиться(правда конвертирование пока только в одну сторону). На данный момент реализованы 2 ключевых класса для чтения. L2FileInputStream Как можно догадаться по названию, этот класс предоставляет возможность читать данные из файлов клиента. Он служит заменой утилите l2encdec, на лету снимает крипт и распаковывает. L2DataInputStream Этот класс реализует интерфейс DataInput, предоставляя методы для чтения базовых классов. Также он умеет считывать объекты по классу через рефлекшн. Структура файлов описывается классами Поэтому мы сразу получаем богатый набор инструментов для работы с ними(ORM, OXM, итд). Пример использования(Клиент Lindvior NA) PHP код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <actionNameDat> <actionName> <tag>1</tag> <id>5000</id> <type>-1</type> <category>5</category> <unkIds>1538</unkIds> <name>Hand of Warmth</name> <icon>BranchSys.icon.br_rudolf_hand_i00</icon> <icon2>none</icon2> <desc>Can express affection to Rudolph. Affection Level rises by 25%. Warning: Can be used only when a Rudolph requests expression of affection, and cannot be used while transformed!</desc> <unkBool>false</unkBool> <cmd>usepetskill</cmd> </actionName> ... </actionNameDat>Как видите, всего лишь описав формат дат-файла в виде класса, мы получили возможность его экспорта в xml. По-моему это круто:) Можно как в l2jc1 генерировать датапак на основе файлов клиента. Числа и строки Типы из DDF: CNTR - INT, записанный в компактном виде. В классах описывается как переменная с типом int или Integer, с добавлением аннотации @Compact. ASCF/UNICODE - Строки, в классах описываются типом String. Если это UNICODE, то добавляется аннотация @Unicode. Для проверки данных определены 2 аннотации IntConst/StrConst. Если определенные значения не совпадают со считанными, то выбрасывается исключение(мб и найдется применение). Массивы Поддерживаются только одномерные массивы. Длина массива по умолчанию считывается как int. Если длина массива константа, и ее не нужно считывать, то добавляется аннотация @Length(<значение>). Если длина массива определяется CNTR, то добавляется аннотация @Length(lengthType = LengthType.COMPACT). Планы на ближайшее будущее:
Проект на гитхабе/src Жду ваших замечаний/пожеланий. Если хотите поучаствовать - пишите. |
Re: client files editor
Спасибо, забрал в архив.
|
Re: client files editor
Рано пока в архив:) Это только начало...
|
Re: client files editor
я уже увидел, но все же декрипт есть а остальное думаю не составит труда написать.
|
Re: client files editor
Давайте подумаем - Вы суете в классы, это неудобно - в плане того что прийдется перекомпиливать.
а так посмотрите в мою сторону https://github.com/VISTALL/l2ce |
Re: client files editor
Я реализовал простенький компилятор, который ищет классы в заданной папке + добавляет необходимые импорты и аннотации.
Например пишем исходный файл episodion/SetItemGrp.java с таким содержанием: PHP код:
PHP код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <setItemGrpDat> <setItemGrp> <setId>0</setId> <items> <itemId>23</itemId> </items> <items> <itemId>2386</itemId> </items> <items> <itemId>43</itemId> </items> <itemBonus>세트 효과 없음</itemBonus> <itemBonus>물리방어력 2% 증가, 최대HP 41 증가.</itemBonus> <unk1>0</unk1> <unk2>0</unk2> </setItemGrp> ... </setItemGrpDat> Описывать формат такими простыми классами не намного сложнее ddf. Cразу получаем маппинг в xml и кучу других плюшек. |
Re: client files editor
Ну я б не сказал бы что проще.
Нужна IDE что б менять. Вручную - можно сделать кучу ошибок(если Notepad++). А что за разномерные масивы? типо таких http://pastebin.com/xr3cJTc1 |
Re: client files editor
Если ошибетесь, то получите вывод стандартного java-компилятора
PHP код:
Код:
Error on line 11 in /lindvior/Schema24hzDat.java:11: error: ';' expected Поддержки многомерных массивов не делал из-за различного представления длины(int или compact int). PHP код:
PHP код:
|
Re: client files editor
Извини моя ошибка, я про вложеные масивы в масивы
PHP код:
Тоисть что б проверить валидность нужно всегда запускать, лишнии движения. Плюс будет туча классов, когда файл большой |
Re: client files editor
В данном случае будет что-то типо такого:
PHP код:
PHP код:
|
Текущее время: 13:56. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot