Перейти к содержанию
Авторизация  
Viorel

Не работает Заточка в сборке Essence

Рекомендуемые сообщения

Помогите найти причину почему при заточке пушек в сборке Essence в статах персонажа не повышается физичиская и магичиская атака? Хотя зашита при заточке вещей и бижы - повышается. И такая проблема во всех исходников Essence что нашел и интернете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. После заточки переоденте оружие, возможно проблема в в том, что не шлеться пакет после обновления статов

2. Найдите в ваших исходниках класс, который реализует функцию заточки, он может називаться примерно так: FunсEnchant, смотрите все ли там реализовано верно

3. Нужно убедиться, что функция добавляется в список функций предмета и учавствует в вычеслениях конченой статы, это может быть либо в xml, в разделе "for" (что-то вроде <enchant stat="pAtk" order="0x0C" value="0"/>) либо возможно както захардкодено. Вообщем ищите в вашем коде использования класа функции заточки и смотрите где он используется

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. При одевание пушки, добавляется П атака от Не заточенной пушки. Снял и одевал несколько рас и до точки в после точки пушки но статы персонажу от  точки на прибавление П атаки не прибавляются. Тоесть П атака при одевание пушки +0 такая же как и п атака пушки +10. Но в пушке  П атака прибавляется. Забыл сказать что заточка на п и м деф работает на ура, даже если приписать к пушке код заточки на защиту в XML файле к примеру 

<enchant stat="pDef" order="0x0C" value="0"/>  то при точке пушки броня повыситься но атака не меняется.

Заточка ссылается на несколько файлах и еще используя калькулятор который не очень понятен.

2. В исходниках есть 1 папка которая отвечает за заточку и это в gameserver/skills/funcs/  и тут есть FunctEnchant класс --> вот и код ниже

Спойлер

package Essence.gameserver.skills.funcs;

import Essence.gameserver.Config;
import Essence.gameserver.model.Player;
import Essence.gameserver.model.items.L2ItemInstance;
import Essence.gameserver.skills.Env;
import Essence.gameserver.skills.Stats;
import Essence.gameserver.templates.item.L2Item;
import Essence.gameserver.templates.item.L2Item.Grade;
import Essence.gameserver.templates.item.L2ItemType;
import Essence.gameserver.templates.item.L2WeaponType;

public class FuncEnchant extends Func
{
    public FuncEnchant(Stats stat, int order, Object owner, double value)
    {
        super(stat, order, owner);
    }

    @Override
    public void calc(Env env)
    {
        if (_cond != null && !_cond.test(env))
        {
            return;
        }
        L2ItemInstance item = (L2ItemInstance) _funcOwner;
        if (item.getItem().getCrystalType() == Grade.NONE)
        {
            return;
        }
        int enchant = item.getEnchantLevel();
        if (enchant <= 0)
        {
            return;
        }
        int overenchant = Math.max(0, enchant - 3);
        /*if (env.character != null && env.character.isPlayer() && Config.ALT_OLY_ENCHANT > 0)
        {
            Player player = (Player) env.character;
            if (player.isInOlympiadMode() && (enchant + overenchant) > Config.ALT_OLY_ENCHANT)
            {
                if (Config.ALT_OLY_ENCHANT > 3)
                {
                    overenchant = Config.ALT_OLY_ENCHANT - 3;
                }
                else
                {
                    overenchant = 0;
                    enchant = Config.ALT_OLY_ENCHANT;
                }
            }
        }*/
        //System.out.println(_stat);
        if (_stat == Stats.MAGIC_DEFENCE || _stat == Stats.POWER_DEFENCE)
        {
            //System.out.println(env.value);
            env.value += enchant + overenchant * 3;
            return;
        }
        switch (_stat)
        {
            case SHIELD_DEFENCE:
            case MAGIC_DEFENCE:
            case POWER_DEFENCE:
            {
                //System.out.println(env.value);
                env.value += enchant + overenchant * 2;
                return;
            }
            case MAGIC_ATTACK:
            {
                switch (item.getItem().getCrystalType().cry)
                {
                    case L2Item.CRYSTAL_S:
                        env.value += 4 * (enchant + overenchant);
                        break;
                    case L2Item.CRYSTAL_A:
                        env.value += 3 * (enchant + overenchant);
                        break;
                    case L2Item.CRYSTAL_B:
                        env.value += 3 * (enchant + overenchant);
                        break;
                    case L2Item.CRYSTAL_C:
                        env.value += 3 * (enchant + overenchant);
                        break;
                    case L2Item.CRYSTAL_D:
                    case L2Item.CRYSTAL_NONE:
                        env.value += 2 * (enchant + overenchant);
                        break;
                }
                //System.out.println(env.value);
                return;
            }
            case POWER_ATTACK:
            {
                L2ItemType itemType = item.getItemType();
                boolean isBow = itemType == L2WeaponType.BOW;
                boolean isSword = (itemType == L2WeaponType.DUALFIST || itemType == L2WeaponType.DUAL || itemType == L2WeaponType.BIGSWORD || itemType == L2WeaponType.SWORD) && item.getItem().getBodyPart() == L2Item.SLOT_LR_HAND;
                switch (item.getItem().getCrystalType().cry)
                {
                    case L2Item.CRYSTAL_S:
                        if (isBow)
                        {
                            env.value += 10 * (enchant + overenchant);
                        }
                        else if (isSword)
                        {
                            env.value += 6 * (enchant + overenchant);
                        }
                        else
                        {
                            env.value += 5 * (enchant + overenchant);
                        }
                        break;
                    case L2Item.CRYSTAL_A:
                        if (isBow)
                        {
                            env.value += 8 * (enchant + overenchant);
                        }
                        else if (isSword)
                        {
                            env.value += 5 * (enchant + overenchant);
                        }
                        else
                        {
                            env.value += 4 * (enchant + overenchant);
                        }
                        break;
                    case L2Item.CRYSTAL_B:
                    case L2Item.CRYSTAL_C:
                        if (isBow)
                        {
                            env.value += 6 * (enchant + overenchant);
                        }
                        else if (isSword)
                        {
                            env.value += 4 * (enchant + overenchant);
                        }
                        else
                        {
                            env.value += 3 * (enchant + overenchant);
                        }
                        break;
                    case L2Item.CRYSTAL_D:
                    case L2Item.CRYSTAL_NONE:
                        if (isBow)
                        {
                            env.value += 4 * (enchant + overenchant);
                        }
                        else
                        {
                            env.value += 2 * (enchant + overenchant);
                        }
                        break;
                }
                //System.out.println(env.value);
            }
            default:
                break;
        }
    }
}

3. В xml файлах пушек такой же код как и для брони хотя для брони точка работает на ура

а вот и код xml для дайгера к примеру

Спойлер

    <weapon id="6367" name="Angel Slayer">
        <set name="icon" value="icon.weapon_angel_slayer_i00"/>
        <set name="type" value="DAGGER"/>
        <set name="soulshots" value="1"/>
        <set name="spiritshots" value="1"/>
        <set name="weight" value="950"/>
        <set name="atkRange" value="40"/>
        <set name="crystalType" value="S"/>
        <set name="material" value="ADAMANTAITE"/>
        <set name="price" value="48800000"/>
        <set name="crystalCount" value="2440"/>
        <set name="durability" value="100"/>
        <set name="rndDam" value="5"/>
        <set name="hitModify" value="-3.75"/>
        <set name="canEnchant" value="true"/>
        <equip>
            <slot id="RIGHT_HAND"/>
        </equip>
        <for>
            <set stat="pAtk" order="0x10" value="246"/>
            <set stat="mAtk" order="0x10" value="132"/>
            <set stat="baseCrit" order="0x08" value="120"/>
            <set stat="atkBaseSpeed" order="0x08" value="433"/>
            <add stat="accCombat" order="0x10" value="-3.75"/>
            <enchant stat="pAtk" order="0x0C" value="0"/>
            <enchant stat="mAtk" order="0x0C" value="0"/>
        </for>
    </weapon>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...