Jump to content

Основы XML разработки в сфере lineage 2 сервера


JeeJee
 Share

Recommended Posts

 

Для начала, приведу вам мое понимание "xml". XML в сборках ява серверов l2, это набор каких либо заранее установленных переменных, с введением в них ограничений и ряда правил выполнения. Тоесть, xml файлы не описывают процесс, а лиш придают ему численные значения, такие как стоимость(шмот), время, сила, эффект, радиус, скорость и так далее(скилы), координаты и ограничения(зоны) и прочие.

Глава 1. Распространенность файлов в датапаке (xml)


Итак, рассмотрим архитектуру, где же мы можем встретить .xml файлы и за что они отвечают.
1. Мультиселлы. Место расположения - /data/multisell. Файлы, имеют формат .xml.
Основное предназначение - листы магазинов(покупка/обмен). Зачастую применимы в так называемых "гм шопах" и прочих шалостях.
2. Статы - файлы, располагаются в папке /data/stats, здесь можно выделить несколько типов "статов" :
a) Статы арморов(/data/stats/armor) - предназначены для обозначения параметров того или иного армора (брони в мире lineage2), к примеру - p-def , m-def, и прочие.
b) Статы оружия(/data/stats/weapon) - предназначены для обозначения параметров Weapons(оружия) в мире Lineage2 и ява эмулятора, к примеру - p-atack, m-atack и другие.
c) Статы скилов (/data/stats/skill) - предназначены для описания скилов, придают им совокупность каких то свойств под каким то "id" (номером), к примеру - m-damage, m-def, critical rate, effect.
d) Аугментации (/data/stats/augmentation) - используется для описания лайф стонов и их действия когда находятся "в рабочем состоянии" (тоесть какой скилл или стат юзать).
3. Зоны. Место расположения - /data/zones/ , используются для работы с различными квадратами мира Lineage2, точек возрождения и прочих. Активно сотрудничают с базой данных(аналогичная таблица). Зачастую, помогают при отсутствии гео-даты (ограничивают зону - по координатам Y к примеру, это удобно).
4. Прочие файлы. Это файлы, одиночно встречающиеся в датапаке ява эмулятора. Вот вам некоторые из них (не все) : /data/ тут файлы : servername.xml (отвечает за имена серверов при их регистрации), recipes.xml(отвечает за рецепты - что заберет и что получим), dimentionalrift.xml (обеспечивает респавн мобов с промежутком в ремени в комнатах дименшин рифта), а так же другие файлы (найти можно руками и подумать над их назначением).

Глава 2. Основные теги и их использование.


В xml, как и в хтмл - есть как контейнерные теги, так и одиночные.
Напомню вам, контейнерные теги, это те теги, которые имеют сначала открывающий тег : а после окончания его описания - закрывающий тег .

Пример :

<мой_тег параметр 1="значение 1" параметр 2="значение 2">
</мой_тег>

Или, может использоваться сокращенная запись :

<мой_тег параметр 1="значение 1" параметр 2="значение 2" />

Одиночные теги - те теги, которые не имеют закрывающего тега после значений.

Пример :

<мой тег параметр="значение">

Основным тегом, принятым почти в каждом файле считается :
 

<?xml version="1.0" encoding="UTF-8"?>


Это характеризует - версию документа(version), и тип его языка (encoding=). Это - что то похожее на мета-теги(поясняют его).
Вроде бы это просто, останавливатся не будем.
В каждом документе, обязательно будет "основной контейнерный тег", который обозначит начало документа(открытый тег) и конец документа (закрытый тег).
Вот вам пример документа, думаю с выше поясненным вы поймете его :
 

<?xml version="1.0" encoding="UTF-8"?>
<начало_документа>

содержимое документа
значения
переменные

</начало_документа>

Таким образом - тело документа, которое будет считываться и обрабатываться :

содержимое документа
значения
переменные


В теле документа, может быть уйма тегов, чаше всего - они однотипны (так как содержимое одного xml документа - однотипно, тоесть описание 1го похоже на другое, кроме значений).
Итак, приступим к описанию по разделам документов.

Глава 3. Описание общепринятых значений в мультиселлах.



Как мы уже выяснили с вами, мультиселы находятся в папке /data/multisell.
Цель использования - листы итемов в магазинах (их покупка, цены и т д).
Рассмотрим употребляемые здесь теги.
1. Тег начала документа :

<list>
содержание
</list>

Этот контейнерный тег отвечает за начало документа и его конец. При его отсутствии - файл считываться не будет. Обязателен как в начале каждого документа-мультиселла () так и в его конце ( )
2. Тег описания итема :

<item id="порядковый номер">
описание
</item>

Данный тег, поясняет начало и конец описания того или иного итема. Заметте, параметр id="порядковый номер", отвечает за место итема в том или ином листе в игре. Важно - id здесь не могут повторятся, и эти id - это НЕ id предмета или чего либо.
Как правило, нумеруются порядково. Тоесть цифрами, 1, 2, 3, и так далее.
Приведу пример :

<item id="1">
содержание
</item>
<item id="2">
содержание
</item>
...................
<item id="100">
содержание
</item>

3. Теги пояснения цен итемов. Их два.
а) тег который показывает - что мы отдадим за тот или иной итем :
 

<ingredient id="ид_предмета" count="кол-во_которое_заберет" />



Другими словами, это то что у вас ЗАБЕРЕТ при покупке того или иного итема. Тоесть что вы должны ОТДАТЬ..
id="ид_предмета" - это предмет, который у вас заберет. Пример : id="57" - значит заберет адену.
count="кол-во_которое_заберет" - ну тут все понятно, кол-во забраных предметов. К примеру при count="100" - заберет 100 штук id=".."
б) тег который показывает, что мы получим за тот или иной итем :

<production id="ид_предмета" count="кол-во" />

Здесь - аналогично вышесказанному.
Только учитываем - здесь, описывается то что мы ПОЛУЧИМ. Id="ид_предмета" - показывает, какой предмет мы получим, count="кол-во" - показывает сколько мы получим количественно того или иного предмета. Пример : id="57" - получаем адену, count="500" - получаем 500 штук id="..".
Теперь, обьединим наши знания одним примером :

<?xml version="1.0" encoding="UTF-8"?>
<list>
<item id="1">
<ingredient id="57" count="500" />
<production id="4037" count="1" />
</item>
<item id="2">
<ingredient id="4037" count="1" />
<production id="57" count="500" />
</item>
</list>

В первом случае - мы отдадим магазину 500 итемов с id 57 и получим один итем с id 4037.
Во втором случае - наоборот, мы отдадим магазину 1 итем с id 4037 и получим 500 аден.
Так же, можете эксперементировать с шмотками, банками да всем чем угодно.

Глава 4. Описание общепринятых значений в статах armor и weapon.


Как мы с вами уже выяснили, статы могут быть как у weapon, так и у armor.
Начнем рассматривать некоторые значения и как с ними работать.

<item id="ид_предмета" name="название_предмета>
содержимое
</item>

Данным тегом принято обозначение начала описания того или иного предмета (armor / weapon).
Тег, обязательно должен быть контейнерным - начало и конец
В id - принято указывать "id" предмета. Как мы с вами знаем, все ID фиксируются в базе данных. Так что "от фары" ставить не получится.
Рассмотрим самые распространёные описания итемов.
а)

<add ... >

- данный тег, означает прибавление того или иного параметра(несет действие "+" в расчетах).
Приведем пример :

<add val="значение" order="место_в_формуле" stat="что_Добавлять"/>

На казаном примере, мы видим - что в add может быть несколько переменных. Разберемся с ними.
val="значение" - указывает, сколько же нужно добавить. К примеру, если мы поставим "100" - то получим в формуле "+100 единиц".
order="место_в_формуле" - это место расположения данного параметра в формуле расчета. Для параметра "ADD" приняты 2 значения "order" :
-0x10
-0x08(почти не используется)
-0x40(для производных значений - к примеру "regHP", "rootRes" и прочие)
Не буду вам морочить голову этими формулами, приведу лиш небольшой пример расчета функционала того или иного значения.
Припустим, у нашего итема несколько "add" и есть и другие значения "mul" , "sub" и прочие.
В какое место машина должна пихнуть их? Всё очень просто. Это, как арифметика - сначала сложение, потом - умножение / деление. Здесь - аналогично.
Вот наглядный пример :

((val_1 + val_2) * val3) / val4 = checksum_val

Так вот, за скобки и будет отвечать "order". Если его не будет, или он будет не правильный - догадываемся что получиться (попробуйте убрать скобки и решить уравнение).
stat="что_добавлять" - здесь всё просто. Как вы наверно догадались - здесь должен быть указан тот или иной параметр который будет "увеличен"(+) при использовании данного значения.
Тоесть по простому, здесь должен быть указан "стат". Примеры : "pDef", "mDef", "evesion", "shield_rate", "pDam", "mDam" и так далее. Более подробно эти значения - можете найти в ДП вашего кода.
Пример готового значения :

<add val="150" order="0x10" stat="pDef"/>

Здесь - мы добавим "150" (+150) к параметру "pDef". Как работает? Пример - шмотка. Одели бронь - получили бонус "+150" к защите.
Дальше - ваша фантазия.
б)

<sub .... >


- параметр, обозначающий "вычитание" значений. Принцип работы - аналогично выше изложенному (про добавление) - только работает в обратную сторону - вычитает статы.
Вот небольшой пример и принцип его работы :

<sub val="8" order="0x10" stat="pDef"/>



При его обработке(одели шмотку/оружие) - будет уменьшена ваша защита на "8" единиц( -8 ).
Описывать не буду, работает как выше изложенное, order - аналогично будет 0x10, так как действие обратно "сложению".
в)

<set... >


- тег, который "назначает" кол-во того или иного стата. Он - исполняется в формуле до "+" или "-", и поэтому - имеет первое место. Это, как бы назначение того или иного стата для дальнейшей работы. Пример :

<set val="значение" order="место_в_формуле" stat="стат"/>



Растолкую вам : это назначение "значения" того или иного "стат"`a. Пояснение "val" и "stat" есть выше.
Order используется "0x08" (то о чем я говорил в "add").
г)

<mul ...>


- тег, используемый для "умножения" того или иного значения.
Приведем пример :

<mul val="значение" order="место_в_формуле" stat="стат" />



Итак, аналогично val="значение" - это значение на которое нужно умножить ваш "стат".
Возможные order :
-0x30
Приведем пример :

<mul val="3.5" order="0x30" stat="pDef" />



Это означает, что стат 'pDef' при выполнении умножится на 3.5 (тоесть станет больше в 3.5 раза).
Если использовать грамотно, можно реализовывать и деление, к примеру :

<mul val="0.5" order="0x30" stat="pDef" />



Это означает, что стат 'pDef' будет умножен на '0.5', а тоесть - станет в 2 раза меньше(тут на любителей).
г)

<enchant ...>


- тег, показывающий, на сколько при заточке на уровень выше (при каждом +1) будет увеличен тот или иной стат.
Пример :

<enchant val="значение" order="место_в_формуле" stat="стат"/>



Обычно, order здесь "0x0C".


Глава 5. Описание общепринятых значений в скиллах (skill).


Данную главу - считаем наиболее важной. Здесь не будут описаны те или иные значения, которые употреблялись выше (мы же не попугаи повторять несколько раз).
Любой скил, начинается с открытого тега

<skill>


и заканчивается - закрывающим тегом

</skill>



Вот вам наглядный пример :

<skill id="ид_скила" levels="кол-во_уровней_скила" name="имя_скила">
описание скилла
</skill>

Итак приступим по пунктам.
а) Минимально необходимые теги (обязательные).
Как вы наверное догадались - у любого описания какого либо скила - должны быть какие-либо минимальные значения, чтобы его смог обработать ява код.
В скилах - выделяют ТРИ обязательных тега, без которых не произойдет прогрузка скила(ошибка в контролерах ява кода, из-за отсутствия одного из них).
target="val" - Один из обязательных тегов. При его отсутствии - не будет работать не 1н скилл. Что он делает? Он определяет - на ково будет направлен тот или иной скил.
Возможные "val"(значения).
-TARGET_SELF - обозначает, что скилл будет использоваться исключительно на его владельца (в мире линягеров - селф баф и т д).
-TARGET_NONE - обозначает, что цель - не определена (неизвестно на кого будет использовано и как).
-TARGET_ONE - обозначает, что цель вашего скила - тот кто в таргете.
-TARGET_AGGREMENT (не везде работает) - обозначает, что целью будет тот, кто вас бьет(не важно в таргете он или нет)
-TARGET_AREA - обозначает, что скилл будет массовым (сплеш)
Так же есть и другие значения, но они менее важны.
skillType - указывает на тип скилла. Тоесть, какой градировкой обозначен его ефект (в ядре). От типа скила - зависит его исполнение. Приведем некие примеры типов скилов :
-BUFF - обозначает, что скил имеет магический / физический тип, и выступает как "баф" - тоесть имеет время каста или использование.
-DEBUFF - обозначает, что скилл будет иметь какой либо маг / физ негативный ефект, у линягеров - дебаф.
Все рамки этих типов забиты в ядре.
А так же другие типы скилов, найти вы их сможете в вашем датапаке скилов (/data/stats/skill)
operateType - назначает тип скила по принципу - Active / Passive. Для использования, приняты значения :
-OP_ACTIVE - активный скилл, значит он может быть использован
-OP_PASSIVE - пассивный скил, скил с таким operateType не может быть использован (он пассивный).
б) Общепринятая орфография. В скилах, принято так, что большинство стандартных параметров(значений) - начинаются с тега

<set >


. Приведем наглядный пример :

<set name="тип_переменной" val="её_значение" />



в name - указывают "тип переменной", тоесть значение с которым будем работать.
Вот как выглядит к примеру тэг "target".

<set name="target" val="TARGET_ONE" />



При таком использовании - мы видим, что назначается тип переменой - "target" со значением : "TARGET_ONE". Как это сработает - описано выше.
Аналогично и другие переменные приобретают подобный вид, такие как "operateType", "power" и другие.
Так же, есть еще здесь контейнерные теги, здесь орфография немного иная.
Не редко, для удобства использования левелов скилов (если он не один, а к примеру 15 и т.д) применяются "табличные значения". Что же это такое? Ну к примеру, у нас есть скилл, который имеет 15 уровней прокачки и на каждом уровне - у него разная сила действия. Как же быть с этим? Для этого, мы используем некий контейнерный тег :
 

<table name="#тип_переменной"> val1 val2 val3 </table>



В таком случае, при использовании : "#тип_переменной" - будет использоваться табличная структура.
Не буду грузить теорией, объясню вам это наглядно, на моём небольшом примере :
 

<skill id="1" levels="5" />
<table name="#power"> 10 20 30 40 50</table>
+ тут 3 нужных тега(обязательных)
......................
</skill>



Здесь нам интересно, как же будут использоваться значения в теге

<table>


?! А очень просто. Здесь будет выполняться некое "условие". Как мы видем (параметр levels="5") что у скила есть 5 уровней прокачки. Если у игрока, скилл находится в состоянии level='1' (тоесть уровень изучения скила = 1), то будет принято ПЕРВОЕ значение из тега

<table>


. Если уровень скила будет level='3' у игрока, то будет выбрано третье значение из тега

<table>


(а тоесть, - "30"). Ну и так далее.
Вот и весь основной принцип орфографии.
в) Другие употребляемые теги в скиллах.
Не секрет, что переменных в скилах - уйма. Я постараюсь вам описать некоторые из них и слегка принцип их работы.
-power - отвечает за "силу" скила (тоесть сколько нанесет урона или на сколько эффективен)
-hitTime - отвечает за "скорость" нанесения того или иного скила (если баф - то скорость чтения, боевой - скорость удара)
-reuseDelay - отвечает за "скорость перезарядки" того или иного скила.
-hpconsume , mpconsume - сколько потребляет hp / mp тот или иной скилл
-castRage - это дальность использования того или иного скила (дистанция)
-isMagic, isDebuff, isBuff - это наводящие теги, могут иметь значение "true" и "false". Определяют - 'да' или 'нет'. К примеру, isMagic = true, обозначит скилл как "магический"
-efectRage - это радиус на который будет действовать скилл (к примеру у сплешевых скилов)
-agro - с какой силой агрить
И многие другие переменные, устанавливаем их роль самостоятельно (а то всё я расказываю а вы лодарничаете).
г) Значение

<for>


в скиллах.
Нередко, мы встречаем использование тега

<for> </for>


в наших скилах. Зачастую, данный тег используется для "добавления сложны действий" к скиллу. Если скил, имеет сложный вариант реализации - то зачастую, в тег добавляют некоторые отдельные значения, которые реализованы в ЯДРЕ ява сервера l2. Самый важный тег для использования здесь -

<effect ... / >



Приведем пример использования тега

<for> </for>


и тега

<effect>



 

<skill id="ид" name="имя_скила">
+3 основных тега
......................
<for>
<effect name="тип_ефекта" val="значение" time="время" stackOrder="#переменная1" stackType="переменная_ядра">
</effect>
</for>
</skill>



Расскажем о каждой буковке эффекта нашего :
name - это тип эффекта используемого скилом. Все эффекты - реализованы скилом. В каждой сборке или ядре - свои эффекты. Их список вы можете составить колупаясь по файлам скилов.
val - это значение того или иного эффекта. Если это боевой эффект - то это его сила, если дебаф - то шанс прохождения (как и у бафа) ну и так далее.
time - это время действия того или иного эффекта.
StackOrder и stackType - это значения уже описные в данном скиле (использование переменных) или же значения и переменные с ядра сервера.
Внимание! Некогда не вставляйте эффекты с одной сборки на другую - так как их в ядре той сборки просто может не быть (получите грабли).
Думаю со скилами мы с вами разобрались, движемся дальше.
П.с. - argumentation - вам на досугу (изучение лично). Там сложного нечего нету.

Глава 6. Описание общепринятых значений в зонах(zones).


Как мы уже выяснили, файлы xml зон находятся в /data/zones/
Описание квадратов зон - находятся в базе данных, и сопоставляются с ID наших XML зон.
Итак, для начала описания зон используется тег :

<zone id="ид_зоны" type="тип" shape="вид" minZ="мин_z_координата" maxZ="макс_z_координата">
..........описание............
</zone>



Итак по буквам :
a) id - это идентификатор той или иной зоны. Он не столь важен, важен он только для базы данных.
б) type - это тип зоны. Для понятия - рассмотрим некоторые :
-Town - это означает, что зона будет являться мирной (город)
-Arena - зона будет боевой (пвп)
-JailZone - это для тюрьмы(запрещает Телепорт и прочие шалости).
И многие другие типы. Они выступают неким "ограничителем" на ту или иную площадь.
в) shape - это вид зоны. Увы, сам точно не помню. Они могут быть 2х типов :
-nPoly
-Cupoid
г)minZ - это минимально допустимая координата высоты (z) в данной зоне(квадрате).
д)maxZ - это максимально допустимая координата высоты (z) в этом квадрате.
minZ и maxZ используются для избежания "провалов" чаров, "прохождения через текстуры" и т.д.
Внутри тегов

<zone> </zone>


используется описание точек "респавна" чара в них.
Приведем пример :

<stat name="spawnX" val="x-координата"/>
<stat name="spawnY" val="y-координата"/>
<stat name="spawnZ" val="z-координата"/>



они создадут некую точку появления чара, если он находится в этой зоне. Для более настырных - это совокупность координат, которые образуют точку в декартовом пространстве(для школьников - декартовые координаты) - {x;y;z}=Respawn_pice.
Так же, зоны могут иметь имена, задаются они так :

<stat name="name" val="имя_зоны"/>
Link to comment
Share on other sites

  • 6 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...