База Знаний LineageII

LineageII Online
Главная страница | Регистрация | Вход
Меню сайта
Разделы новостей
Новые Видео Lineage II [1]
Механика Саммонов [1]
Кланы и Альянсы [9]
Расы [6]
Заточка Скилов [1]
Subclass [1]
Питомцы/Самоны [7]
Бижа Рейд Босов [1]
Система PvP и CP [1]
Эвенты [4]
Читерский раздел [0]
Боты [3]
Создание Сервера [8]
Новости LineageII [32]
Квесты [9]
Герои и Олимпиада [1]
Дворянство [1]
Наш опрос
База знаний LineageII
Какие рейты сервера вы хотите?
Всего ответов: 1240
Начало » 2008 » Апрель » 8 » Редактирование XML таблиц
Редактирование XML таблиц

==========================================================

Оружие, броня, параметры скиллов сохранены в XML файлах и в базе данных. В скором времени использование базы данных для скиллов будет удалено. В XML файлах сохранено описание как вещи и скиллы должны влиять на статы (которые используются для подсчета повреждений, шансов и т.д.).

Вот пример XML файла для оружия и брони:

<item id='21' name="shirt"> <for> <cond><player race="Human"/></cond> <add stat='pDef' order='0x10' val='36'> <target kind="skeleton"> </add> </for> </item>

Первая строчка нужна только для самого языка XML, пропустите её.

Вторая строка указывает ID вещи и её название (они должны совпадать с такими же в БД).

Затем есть некоторые условия (condition) для принятия вещью изменений для статов (когда оружие одето или снято).
Таких условий может быть от ноль, один, два, или более. Условие заключено в тэг <for>.

Тэг условия состоит из самого условия которое следует проверить на игроке и эффекта на статы игрока. В вышенаписанном примере условие добавление эффекта - это расса людей (если не хуман - эффект не включится). Условие заключено в тэг <cond>, и оно не обязательно. Если условия не указаны - все игроки (которые одевают эту броню\оружие) будут получать эффект от него.

Эффект - это добавление или умножение статов игрока на заданное количество. В примере стат 'pDef' (power defence) и его значение 36. Это означает, что к power defence игрока будет добавлено значение 36. Я опишу 'order' ниже.

В конце, даже если функцию подключена к игроку, необходимо чтобы было условие когда оно будет работать. В нашем примере условие таково: pDef будет увеличен только тогда, когда цель игрока - атака skeleton.

И снова: может быть множество условий <for>, они могут иметь условие присоединенное к игроку <cond>, и каждый из них может влиять на один или несколько статов игрока ( <add>, <sub>, <mul>, <div> ), и каждый стат будет добавлен только в том случае когда условие будет выполнено.

Конечно, всё это не обязательно. Для большинства предметов брони и оружия вы будете иметь что-то простое похожее на это:

<item id='21' name="shirt"> <for> <add stat='pDef' order='0x10' val='36'/> </for> </item>

которое всего лишь добавляет 36 пунктов к power defence для каждого игрока который оденет её, без каких-либо условий.

Скиллы описаны практически так же, но с одним дополнением - у скиллов есть уровни. По-этому значение для увеличения\уменьшения стата будет зависеть от уровня скилла. Для этих целей мы имеем таблицы:

<skill id='113' levels='2' name="Long Shot"> <table name="#dist"> 200 400 </table> <for> <add stat='rAtk' order='0x10' val='#dist'> <using kind="Bow"/> </add> </for> </skill>

В строке <skill> вы выборочно указываете количество уровней. Затем вы провозглашаете таблицу (вы можете провозгласить много ), каждый из них будет иметь 'level' значения отделенные друг от друга пробелами. Название таблицы может быть любым, но должно начинаться с символа #. В значениях вы указываете название вашей таблицы.

Сейчас я опишу "order" параметр. "Order" это порядок проведения расчетов. Давайте представим что мы имеем base power defence игрока: basePDef
защита одетого доспеха: armourPDef
level modifier of the player: lvl
passive skill of power defence которое надо добавить: skillPDef1
buff of power defence которое надо умножить: skillPDef2

Получаем такую формулу:
basePDef + armorPDef)*lvl + skillPDef1)*skillPDef2

Знаки умножение\суммы в этой формуле указаны 'order'ом расчета. Получается:
basePDef будеть иметь order 0x10
armorPDef будеть иметь order 0x10
lvl будеть иметь order 0x30
skillPDef1 будеть иметь order 0x40
skillPDef2 будеть иметь order 0x50

Значения с одинаковыми 'order'ами расчета будут рассчитаны в не предсказуемом порядке. По-этому, никогда не указывай одинаковый order параметрам add/substiture и multiplay/divide.

Немного больше о условиях. Вы можете указывать логические операции <and>, <or>, <not>:

=========================================================


==========================================================

<and><player race="Human"/><player level="11"/></and> <or><player race="Human"/><player race="Orc"/></or> <not><player race="Human"/></not> <and> <not> <player race="Human"/> </not> <or> <player level="11"/> <not> <player level=40> </not> </or> </and>

Условиями являются:
Код:

<player race="..."/> <!-- проверяет рассу игрока -->
<player level="..."/> <!-- проверяет является ли уровень игрока таким, или выше указанного здесь -->
<player state="..."/> <!-- Делает проверку игрока на выполнение действий: sit, walk, run, swim, etc -->
<target level="..."> <!-- проверяет является ли уровень цели таким, или выше указанного здесь -->
<using kind="..."/> <!-- игроков одета броня указанного типа, или оружие указанного вида.
Броня бывает Light, Heavy, Magic,
оружие: Shield, Sword, Blunt, Dagger, Bow, Pole, Etc, Fist, Dual Sword, Dual Fist -
список типа разделен запятыми -->

Операциями над значениями являются:

<add stat='...' val='...'/> <!-- add a value --> <sub stat='...' val='...'/> <!-- значение подстановки --> <mul stat='...' val='...'/> <!-- умножить на значение --> <div stat='...' val='...'/> <!-- разделить на значение -->

Операция для "случайных" чисел и корней и других математический функций возможно будут добавлены позже, в случае необходимости.

Вы должны указать значение не как константу, а как выражение:

<skill id='256' levels='1' name="Accuracy"> <table name="#acc"> 10 </table> <table name="#mana"> 0.2 </table> <for> <add val='#acc' order='0x10' stat='accCombat'/> <effect name="ManaDamOverTime" time="5" count="0x7fffffff"> <val> <add val="$player_level"/> <mul val="#mana"/> </val> </effect> </for> </skill>

Такое выражение начинает расчитывать со значение 0, и для примера вверху мы имеем уровень игрока умноженный на значение с таблицы, и это значение будет использовано для для расчета повреждений манны для каждого периода эффекта. Итого, в результате мы имеем - повышеную точность (accuracy) в бою плюс отнимание за это манны (МР).
Возможные значения для рассчетов:

$player_level $target_level $player_max_hp $player_max_mp

Продолжительными эффектами скиллов являются:

==========================================================


==========================================================

<effect name="Buff"> <!-- buff/debuff, для debuff исользуйте отрицательные значения --> <effect name="DamOverTime"> <!-- единоразовое отнятие HP --> <effect name="ManaDamOverTime"> <!-- единоразовое отнятие MP --> <effect name="HealOverTime"> <!-- единоразовое увеличение HP --> <effect name="Charge"> <!-- "заряжает" игрока, подготавливает его для использования другого скилла --> <effect name="Relaxing"> <!-- relaxing skill -->

Вот некоторые статы для редактирования.

'rEvas'
'cAtk'
'pAtkSpd'
'mAtkSpd'
'maxНp'
'maxMp'
'pAtk'
'mAtk'
'regMp'
'mDef'
'pDef'
'runSpd'
'reflectDam'
' sleepRes'
'rootRes'
'stunRes'
'poisonRes'
'bleedRes'

Их можно посмотреть в ядре сервера
\net\sf\l2j\gameserver\skills\stats.java

И так, выбираем шмотик который хотим усовершенствовать: я для себя выбрал

<item id='616' name="cloak_of_magic"> <for> <add val='11' order='0x10' stat='pDef' /> <enchant val='0' order='0x0C' stat='pDef' /> </for> </item>

Открываем data\stats\armor\0600-0699.xml, находим строчку с нашим "плащом магии".

Так как он плащ магии, неп***о было бы сделать его для магов. А что надо магам? Правильно МР, реген МР, скорость каста, сила каста. Но давать всё это сразу - слишком много, по-этому сделаем какие-нибудь три изменения, например увеличим интеллект на +1, regMp, ну и скорость каста (mAtkSpd).

Хм, с бонусами вроде определились, теперь надо определится в количестве этого бонуса, будет ли оно просто добавлять какое-то заданное число (константу) либо проценты от уже имеющегося стата (тобишь был mdef 100, добавили 10% - получили 110).

Для себя я выбираю так:
INTу добавляю 1.
Регенерацию МР - повышаю на 20%.
Скорость каста на 25%.

Теперь что касается соответсвующего кода:

Так как мы добавляем (знак +) INT, то используем тэг <add>:

<add val='1' order='0x10' stat='INT'/>

С интом разобрались, теперь что касающееся regMp (знак *, умножение):

<mul val='1.20' order='0x20' stat='regMp'/>

Обратите внимание на order!
Теперь скорость каста на 25%:

<mul val='1.20' order='0x20' stat='mAtkSpd'/>

В итоге наш плащ будет иметь такой вид:

<item id='616' name="cloak_of_magic"> <for> <add val='11' order='0x10' stat='pDef' /> <add val='1' order='0x10' stat='INT'/> <mul val='1.20' order='0x20' stat='regMp'/> <mul val='1.20' order='0x20' stat='mAtkSpd'/> <enchant val='0' order='0x0C' stat='pDef' /> </for> </item>

Все, встраивание бонуса закончено Теперь этот плащик можно попробывать спихнуть за реал глупым игрокам

А вообще я такого рода шмот, даю в награду за турниры.

==========================================================

Категория: Создание Сервера | Просмотров: 177 | Добавил: DVX | Рейтинг: 5.0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Приветствую Вас,
Прохожий!
E-mail:
Пароль:
Календарь новостей
«  Апрель 2008  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930
Поиск по новостям
Друзья сайта
L2top.ru: Рейтинг-каталог серверов Lineage2
Статистика
la2online™ ;) 2006 Сайт управляется системой uCoz