Читай RSS - будь умным! Мы в Twitter! Мы VKontakte! Главная Форум Услуги Рекламодателям Карта сайта Контакты
Авторизация
Вход через
социальные сети
Вход через сайт
Регистрация
Забыли пароль?

l2maxi - всё для lineage 2
l2maxi - всё для lineage 2: ява сервера, дополнения, программы, галерея, улучшения, клиенты, файлы, боты, баги.

  [Гайд] Основы XML разработки в сфере l2 сервера.


[Гайд] Основы 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" параметр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 - это значения уже описаные в данном скиле(использование переменных) или же значения и переменные с ядра сервера.
Внимание! Некогда не вставляйте ефекты с 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="имя_зоны"/>


Вот собственно по зонам и всё.

Ключевые теги: Мо3олЬ, мануал, статьи

>> Lineage 2 » Статьи, [Гайд] Основы XML разработки в сфере l2 сервера.

Другие новости по теме:
[Гайд] Рипаем дизайны [Гайд] Рипаем дизайны
В данном мануале описано как все таки научиться рипать сайты.
[Гайд] Как делать фиксы скилов [Гайд] Как делать фиксы скилов
Мануал для новичков, что не знают как отредактировать скилы, к примеру при большом дисбалансе на сервере и для других целей.Первое что Вам нужно понять, что фиксить скилы вы сможете только те которым
[Гайд] Переходим на другую сборку без потери данных [Гайд] Переходим на другую сборку без потери данных
В данной статье я расскажу вам как перейти на другую сборку без потерь данных

Разместил: Мо3олЬ Прочитано: 6490


 
Автор: x-rage, 18 июля 2011 23:14
Группа: Посетитель
Комментариев: 54
Публикаций: 25
ICQ: 492
Харош)




 
Автор: SystemOfADown, 19 июля 2011 07:30
Группа: Гость
Комментариев: 0
Публикаций: 0
ICQ: --
Спасибо, многим кому пригодиться. clapping




 
Автор: Мо3олЬ, 19 июля 2011 09:54
Группа: Посетитель
Комментариев: 26
Публикаций: 60
ICQ: 636983076
все для людей)))




 
Автор: forze96, 27 февраля 2013 00:58
Группа: Гость
Комментариев: 0
Публикаций: 0
ICQ: --
Я так и не понял... как сделать, чтобы скилл отнял себе хр? и можно ли задать количество?




Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии в данной новости.


Реклама
Опрос
Используете ли вы "Вход через Вконтакте" на нашем сайте?

Да, конечно
Недавно начал использовать
Нет, у меня уже есть аккаунт

Архив новостей
Октябрь 2017 (1)
Сентябрь 2017 (4)
Август 2017 (4)
Июль 2017 (4)
Июнь 2017 (4)
Май 2017 (4)
Реклама

Наверх
Любое копирование материалов сайта строго запрещено!