Как создавать свои грейды, редактировать кристаллы и модифицировать бонусы заточки

В этой теме мы разберём, как работать с грейдами кристаллов, создавать новые грейды и изменять бонусы базовых характеристик игрока после заточки.

Формат: XML
Путь: gameserver/data/crystal_grades.xml

Параметры грейда​

Пример:
XML:
<grade id="S" crystal="1462" crystalMod="250" externalOrdinal="5">

  • id="S" - название грейда. Для новых может быть произвольное: S80, S84, R99, R999 и т.д.
  • crystal="1462" - кристаллы, которые будут получены при кристаллизации предмета.
  • crystalMod="250" - модификатор бонусов при кристаллизации.
    • Формула для оружия: crystalMod / 10 * enchant_level
    • Формула для брони: crystalMod / 5 * enchant_level
    • Если уровень больше 3, то: crystalMod / 5
  • externalOrdinal="5" - используется для определения родительского грейда. Например, S80 и S84 имеют родительский грейд S.

Бонусы характеристик при заточке​

Изначально характеристики берутся из предметов: data/items
XML:
<weapon id="7575" name="Draconic Bow">
    <!-- [draconic_bow] -->
    <set name="atk_reuse" value="1500"/>
    <set name="crystal_count" value="2440"/>
    <set name="crystal_type" value="S"/>
    <set name="crystallizable" value="true"/>
    <set name="icon" value="icon.weapon_draconic_bow_i00"/>
    <set name="mp_consume" value="6"/>
    <set name="price" value="48800000"/>
    <set name="rnd_dam" value="5"/>
    <set name="soulshots" value="1"/>
    <set name="spiritshots" value="1"/>
    <set name="type" value="BOW"/>
    <set name="weight" value="1650"/>
    <equip>
        <slot id="LEFT_RIGHT_HAND"/>
    </equip>
    <for>
        <add stat="pAtk" order="0x10" value="581"/>
        <add stat="mAtk" order="0x10" value="132"/>
        <set stat="baseCrit" order="0x08" value="120"/>
        <set stat="atkBaseSpeed" order="0x08" value="293"/>
        <add stat="accCombat" order="0x10" value="-4.0000"/>
        <enchant stat="pAtk" order="0x0C" value="0"/>
        <enchant stat="mAtk" order="0x0C" value="0"/>
    </for>
</weapon>
Нас интересует, какой грейд у оружия. В данном примере:
XML:
<set name="crystal_type" value="S"/>
Также важны модифицируемые характеристики:
XML:
<enchant stat="pAtk" order="0x0C" value="0"/>
<enchant stat="mAtk" order="0x0C" value="0"/>

Теперь проверяем модификаторы для грейда S в data/crystal_grades.xml:
XML:
<grade id="S" crystal="1462" crystalMod="250" externalOrdinal="5">
    <enchant_mod stat="mAtk" multiplier="4"/>
    <enchant_mod stat="sDef" multiplier="2"/>
    <enchant_mod stat="mDef" multiplier="2"/>
    <enchant_mod stat="pDef" multiplier="2"/>
    <enchant_mod stat="pAtkBow" multiplier="10"/>
    <enchant_mod stat="pAtkDoubleSword" multiplier="6"/>
    <enchant_mod stat="pAtk" multiplier="5"/>
    <enchant_mod stat="pAtkSpd" multiplier="1.5"/>
    <enchant_mod stat="mAtkSpd" multiplier="1.5"/>
    <enchant_mod stat="maxHp" multiplier="1.5"/>
    <enchant_mod stat="maxMp" multiplier="1.5"/>
    <enchant_mod stat="maxCp" multiplier="1.5"/>
</grade>

Для нашего лука используется модификатор:

XML:
<enchant_mod stat="pAtkBow" multiplier="10"/>

Формула расчёта:
XML:
overEnchant = Math.max(0, enchantLevel - 3);
grade.getPhysicAttackBow * (enchantLevel + overEnchant)

Добавление новых грейдов​

Пример нового грейда S80 в data/crystal_grades.xml:
XML:
<grade id="S80" crystal="1462" crystalMod="250" externalOrdinal="5">
    <enchant_mod stat="mAtk" multiplier="4"/>
    <enchant_mod stat="sDef" multiplier="2"/>
    <enchant_mod stat="mDef" multiplier="2"/>
    <enchant_mod stat="pDef" multiplier="2"/>
    <enchant_mod stat="pAtkBow" multiplier="10"/>
    <enchant_mod stat="pAtkDoubleSword" multiplier="6"/>
    <enchant_mod stat="pAtk" multiplier="5"/>
    <enchant_mod stat="pAtkSpd" multiplier="1.5"/>
    <enchant_mod stat="mAtkSpd" multiplier="1.5"/>
    <enchant_mod stat="maxHp" multiplier="1.5"/>
    <enchant_mod stat="maxMp" multiplier="1.5"/>
    <enchant_mod stat="maxCp" multiplier="1.5"/>
</grade>

Добавьте новый грейд в скил игрока в data/stats/skills:
XML:
<skill id="239" levels="7" name="Expertise D">
    <table name="#magicLevel">20 40 52 61 76 76 76</table>
    <set name="icon" val="icon.skill0239"/>
    <set name="magicLevel" val="#magicLevel"/>
    <set name="target" val="TARGET_SELF"/>
    <set name="skillType" val="HARDCODED"/>
    <set name="operateType" val="OP_PASSIVE"/>
    <set name="canLearn" val=""/>
    <set name="isCommon" val="true"/>
</skill>

Если нужно добавить нужные уровни:
XML:
<table name="#magicLevel">20 40 52 61 76 80 84</table>

Создание собственного грейда​

Пример нового грейда R:
XML:
<grade id="R" crystal="17371" crystalMod="255" externalOrdinal="6">
    <enchant_mod stat="mAtk" multiplier="4"/>
    <enchant_mod stat="sDef" multiplier="2"/>
    <enchant_mod stat="mDef" multiplier="2"/>
    <enchant_mod stat="pDef" multiplier="2"/>
    <enchant_mod stat="pAtkBow" multiplier="10"/>
    <enchant_mod stat="pAtkDoubleSword" multiplier="6"/>
    <enchant_mod stat="pAtk" multiplier="5"/>
    <enchant_mod stat="pAtkSpd" multiplier="1.5"/>
    <enchant_mod stat="mAtkSpd" multiplier="1.5"/>
    <enchant_mod stat="maxHp" multiplier="1.5"/>
    <enchant_mod stat="maxMp" multiplier="1.5"/>
    <enchant_mod stat="maxCp" multiplier="1.5"/>
</grade>

Создание нового уровня скила:
XML:
<skill id="239" levels="8" name="Expertise D">
    <table name="#magicLevel">20 40 52 61 76 80 84 86</table>
    <set name="icon" val="icon.skill0239"/>
    <set name="magicLevel" val="#magicLevel"/>
    <set name="target" val="TARGET_SELF"/>
    <set name="skillType" val="HARDCODED"/>
    <set name="operateType" val="OP_PASSIVE"/>
    <set name="canLearn" val=""/>
    <set name="isCommon" val="true"/>
</skill>
Создание скрола заточки:
XML:
<scroll id="88888" infallible="false" reset_lvl="0" on_fail="RESET" chance_bonus="0" grade="R">
    <levels min="0" max="20"/>
    <items_restrict type="WEAPON"/>
    <chances type="WEAPON">
        <chance val="100"/>
        <chance val="100"/>
        <chance val="100"/>
        <chance val="50"/>
        <chance val="50"/>
        <chance val="33"/>
        <chance val="25"/>
        <chance val="20"/>
        <chance val="14"/>
        <chance val="11"/>
        <chance val="8"/>
        <chance val="6"/>
        <chance val="5"/>
        <chance val="4"/>
        <chance val="3"/>
        <chance val="2"/>
        <chance val="2"/>
        <chance val="1"/>
        <chance val="1"/>
        <chance val="1"/>
    </chances>
</scroll>
Создание Soulshot:

XML:
<etcitem id="88889" name="Soulshot: R-grade">
    <!-- [soulshot_s] -->
    <set name="class" value="CONSUMABLE"/>
    <set name="crystal_type" value="R"/>
    <set name="icon" value="icon.etc_spirit_bullet_gold_i00"/>
    <set name="price" value="100"/>
    <set name="stackable" value="true"/>
    <set name="type" value="SHOT"/>
    <set name="weight" value="2"/>
    <skills>
        <skill id="2154" level="1"/>
    </skills>
</etcitem>
В данном примере создаётся новый грейд, независимый от других.
Если есть вопросы или предложения, пишите в этой теме.

Данная система работает для всех хроник и вы можете модифицировать грейды, делать новые, выдумывать свои и делать любые модификаторы под свои нужды!​

 
Last edited:
Это только на стороне сервера редактируется, в клиенте правки не нужны?
 
Это только на стороне сервера редактируется, в клиенте правки не нужны?
Плохо прочитал. В клиенте только скил грейда нужно добавить уровни . <skill id="239" levels="7" name="Expertise D">
 
Тема очень хорошая но есть вопрос.
Вопрос на уровне клиента, например на интерлюде создали грейд R,
как я понял нужно в текстурах добавить соотстветствующую иконку, добавили.
grade_r.jpg
а как быть с параметром crystal_type в файлах armor\weapongrp там значения только 0-5 (ng,d,c,b,a,s).

Есть файл Symbolname, где прописаны значения и какую картинку грейда присвоить. Если мы добавим свою новую строку с указанием пути к "R". Толку не будет.
Есть ли решение где добавить значение 6 и присвоить ему показ иконки грейда R?
Насколько я понимаю всё в unterface.u. Есть ли умельцы, кто сможет добавить возможность новых иконочек к новым грейдам?
 
Back
Top