Показать сообщение отдельно
Непрочитано 06.07.2013, 12:34   #6
Супергерой

Автор темы (Топик Стартер) Re: client files editor

Я реализовал простенький компилятор, который ищет классы в заданной папке + добавляет необходимые импорты и аннотации.

Например пишем исходный файл episodion/SetItemGrp.java с таким содержанием:
PHP код:
@DatFile(value "SetItemGrp"localizable true)
@
SafePackage
class SetItemGrpDat{
    
SetItemGrp[] setItemGrp;
}
class 
SetItemGrp{
    
int setId;
    
ItemVariable[] items;
    
String[] itemBonus;
    
ItemVariable[] shileds;
    
String[] shieldBonus;
    @
IntConst(0)
    
int unk1;
    @
IntConst(0)
    
int unk2;
    
EnchantBonus[] enchantBonus;
}
class 
ItemVariable {
    
int[] itemId;
}
class 
EnchantBonus{
    
int level;
    
String bonus;

Вызов компилятора и генерация xml:
PHP код:
File srcFolder = new File("dat");
File outFolder = new File("classes");

new 
SimpleCompiler(outFolder).compile(srcFolder);

ClassLoader cl = new URLClassLoader(new URL[]{
        new 
File("classes").toURI().toURL()
});
Class 
clazz cl.loadClass("episodion.SetItemGrpDat");

Object dat = new L2DatInputStream(
        new 
L2FileInputStream(
                new 
FileInputStream("G:\\Lineage II Kr\\system\\"DatNameUtil.getFileName(clazz"k"))
        )
).
readObject(clazz);

JAXBContext context JAXBContext.newInstance(clazz);
Marshaller marshaller context.createMarshaller();
marshaller.setProperty("jaxb.formatted.output"true);
marshaller.marshal(datSystem.out); 
 
<?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>&#49464;&#53944; &#54952;&#44284; &#50630;&#51020;</itemBonus>
        <itemBonus>&#47932;&#47532;&#48169;&#50612;&#47141; 2% &#51613;&#44032;, &#52572;&#45824;HP 41 &#51613;&#44032;.</itemBonus>
        <unk1>0</unk1>
        <unk2>0</unk2>
    </setItemGrp>
    ...
</setItemGrpDat>
 
Code: XML

Описывать формат такими простыми классами не намного сложнее ddf.
Cразу получаем маппинг в xml и кучу других плюшек.
acmi вне форума Отправить сообщение для acmi с помощью ICQ Ответить с цитированием