JeeJee Posted October 1, 2024 Share Posted October 1, 2024 Для начала, приведу вам мое понимание "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="имя_зоны"/> Quote Link to comment Share on other sites More sharing options...
scryde2019 Posted October 4, 2024 Share Posted October 4, 2024 спасибо полезная статья Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.