↑ ↓

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

Тема в разделе "Руководства и гайды", создана пользователем SlipKnot, 24 янв 2017.

  1. TopicStarter Overlay
    Offline

    SlipKnot Рядовой

    23
    10
    29
    Кредиты:
    $204,00
    Репутация:
    1
    Здесь предоставлен урок по детальному изучению и освоению "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, как и в хтмл - есть как контейнерные теги, так и одиночные.
    Напомню вам, контейнерные теги, это те теги, которые имеют сначала открывающий тег : а после окончания его описания - закрывающий тег .

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

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


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

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

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

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



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



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

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


    Как мы с вами уже выяснили, статы могут быть как у weapon, так и у armor.
    Начнем рассматривать некоторые значения и как с ними работать.
    Данным тегом принято обозначение начала описания того или иного предмета (armor / weapon).
    Тег, обязательно должен быть контейнерным - начало и конец
    В id - принято указывать "id" предмета. Как мы с вами знаем, все ID фиксируются в базе данных. Так что "от фары" ставить не получится.
    Рассмотрим самые распространёные описания итемов.
    а)
    - данный тег, означает прибавление того или иного параметра(несет действие "+" в расчетах).
    Приведем пример :
    На казаном примере, мы видим - что в add может быть несколько переменных. Разберемся с ними.
    val="значение" - указывает, сколько же нужно добавить. К примеру, если мы поставим "100" - то получим в формуле "+100 единиц".
    order="место_в_формуле" - это место расположения данного параметра в формуле расчета. Для параметра "ADD" приняты 2 значения "order" :
    -0x10
    -0x08(почти не используется)
    -0x40(для производных значений - к примеру "regHP", "rootRes" и прочие)
    Не буду вам морочить голову этими формулами, приведу лиш небольшой пример расчета функционала того или иного значения.
    Припустим, у нашего итема несколько "add" и есть и другие значения "mul" , "sub" и прочие.
    В какое место машина должна пихнуть их? Всё очень просто. Это, как арифметика - сначала сложение, потом - умножение / деление. Здесь - аналогично.
    Вот наглядный пример :
    Так вот, за скобки и будет отвечать "order". Если его не будет, или он будет не правильный - догадываемся что получиться (попробуйте убрать скобки и решить уравнение).
    stat="что_добавлять" - здесь всё просто. Как вы наверно догадались - здесь должен быть указан тот или иной параметр который будет "увеличен"(+) при использовании данного значения.
    Тоесть по простому, здесь должен быть указан "стат". Примеры : "pDef", "mDef", "evesion", "shield_rate", "pDam", "mDam" и так далее. Более подробно эти значения - можете найти в ДП вашего кода.
    Пример готового значения :
    Здесь - мы добавим "150" (+150) к параметру "pDef". Как работает? Пример - шмотка. Одели бронь - получили бонус "+150" к защите.
    Дальше - ваша фантазия.
    б)

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


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

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


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

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


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


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


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

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


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


    Глава 5. Описание общепринятых значений в скиллах (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 не может быть использован (он пассивный).
    б) Общепринятая орфография. В скилах, принято так, что большинство стандартных параметров(значений) - начинаются с тега

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


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


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



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



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

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

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

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

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

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


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

    и тега





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

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


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


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

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


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



    Вот собственно по зонам и всё.
     
    yayaya и Дмитрий нравится это.