Lineage 2: In theDark - ep. 1

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Lineage 2: In theDark - ep. 1 » XML, HTML... » Урок 2. Основы XML разработки в сфере l2 сервера.


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

Сообщений 1 страница 2 из 2

1

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

Здесь предоставлен урок по детальному изучению и освоению "XML" для работы с датапаком сервера l2 ява.

Как вы уже поняли, речь пойдет о датапаке, а именно о его части - xml документах.
Для начала, приведу вам мое понимание "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>. Пример :

Код:

<мой_тег параметр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>

Этот контейнерный тег отвечает за начало документа и его конец. При его отсутствии - файл считываться не будет. Обязателен как в начале каждого документа-мультиселла (<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).
Тег, обязательно должен быть контейнерным - начало <item> и конец </item>
В 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>

0

2

Урок 2. Основы XML разработки в сфере l2 сервера. продолжение...


Итак приступим по пунктам.
а) Минимально необходимые теги (обязательные).
Как вы наверное догадались - у любого описания какого либо скила - должны быть какие-либо минимальные значения, чтобы его смог обработать ява код.
В скилах - выделяют ТРИ обязательных тега, без которых не произойдет прогрузка скила(ошибка в контролерах ява кода, из-за отсутсвия одного из них).
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> в наших скилах. Зачастую, данный тег используется для "добавления сложны действий" к скиллу. Если скил, имеет сложный вариант реализации - то зачастую, в тег <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 - это значения уже описаные в данном скиле(использование переменных) или же значения и переменные с ядра сервера.
Внимание! Некогда не вставляйте ефекты с 1ой сборки на другую - так как их в ядре той сборки просто может не быть (получите грабли).
Думаю со скилами мы с вами разрабрались, движемся дальше.
П.с. - 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="имя_зоны"/>


Всё)

Копирайт  http://allcheats.ru/t152212/

0


Вы здесь » Lineage 2: In theDark - ep. 1 » XML, HTML... » Урок 2. Основы XML разработки в сфере l2 сервера.