Как исправить скилл

Black Judge

Друг форума
Участник
Сообщения
32
Розыгрыши
0
Репутация
0
Реакции
3
Баллы
925
Запрещено публиковать исходный код без BB-кода — CODE
Хроники
  1. Fafurion
Исходники
Присутствуют
Сборка
L2jMobius
Привет всем форумчанам. помогите пожалуйста разобраться в проблеме.
Есть скилл
HTML:
<skill id="22940" toLevel="1" name="Vitality Recovery Potion"> <!-- на данный момент скилл просто замораживает виталку но не пополняет. -->
        <!-- For 60 min., recovers Vitality upon XP gain. -->
        <icon>BranchSys2.br_essence_rose_i00</icon>
        <operateType>A2</operateType>
        <hitTime>3000</hitTime>
        <reuseDelay>14400000</reuseDelay>
        <abnormalType>VP_KEEP</abnormalType>
        <basicProperty>NONE</basicProperty>
        <magicCriticalRate>5</magicCriticalRate>
        <specialLevel>-1</specialLevel>
        <hitCancelTime>0</hitCancelTime>
        <activateRate>0</activateRate>
        <abnormalLevel>1</abnormalLevel>
        <abnormalTime>3600</abnormalTime>
        <trait>ETC</trait>
        <irreplacableBuff>true</irreplacableBuff>
        <blockActionUseSkill>true</blockActionUseSkill>
        <abnormalVisualEffect>VP_UP</abnormalVisualEffect>
        <isMagic>4</isMagic>
        <targetType>SELF</targetType>
        <affectScope>SINGLE</affectScope>
        <effects>
            <effect name="VitalityPointsRate">
                <amount>-100</amount>
            </effect>
        </effects>
    </skill>

Он должен пополнять виталку во время фарма, но он ее просто замораживает и она не уменьшается, но и не увеличивается.
Заранее благодарен за помощь
 
Последнее редактирование модератором:
Я понял, писать тут ничего нельзя. Извиняюсь что попытался спросить.
 
Почему вы так решили, раздел вы выбрали верный.
да просто сразу предупреждение прилетело, я новичок и не знаю тонкостей оформления тем и сообщений на данном форуме, но теперь знаю. Лучше просто читать.
 
получается в каждой сборке работает по своему?
Получается, что конкретно этот скилл, конкретно в вашей сборке, работает не правильно. Скорее всего проблема не в том, что записано в XML, а в том, как эти данные потом уже обрабатываются в коде. Там очень много тонкостей и каждый случай, как правило, разбирается индивидуально.
 
Получается, что конкретно этот скилл, конкретно в вашей сборке, работает не правильно. Скорее всего проблема не в том, что записано в XML, а в том, как эти данные потом уже обрабатываются в коде. Там очень много тонкостей и каждый случай, как правило, разбирается индивидуально.
как я думал тут проблема на уровне ядра скорее всего, благодарю за ответы
 
как я думал тут проблема на уровне ядра скорее всего, благодарю за ответы
У меня нет под рукой фафуриона, но есть хомункулус.

Класс: org.l2jmobius.gameserver.model.actor.stat.PlayerStat, метод updateVitalityPoints(int value, boolean useRates, boolean quiet)

Java:
    public synchronized void updateVitalityPoints(int value, boolean useRates, boolean quiet) {
        if ((value == 0) || !Config.ENABLE_VITALITY) {
            return;
        }

        int points = value;
        if (useRates) {
            if (getActiveChar().isLucky()) {
                return;
            }

            if (points < 0) // vitality consumed
            {
                double consumeRate = getMul(Stat.VITALITY_CONSUME_RATE, 1); //Тут у вас при подвешивании эффекта происходит инвертирование знака.
                if (consumeRate <= 0) { //А вот тут просто прерывается действие эффекта, если значение отрицательное.
                    return;
                }
                points *= consumeRate;
            }

            if (points > 0) {
                // vitality increased
                points *= Config.RATE_VITALITY_GAIN;
            } else {
                // vitality decreased
                points *= Config.RATE_VITALITY_LOST;
            }
        }

        if (points > 0) {
            points = Math.min(getVitalityPoints() + points, MAX_VITALITY_POINTS);
        } else {
            points = Math.max(getVitalityPoints() + points, MIN_VITALITY_POINTS);
        }

        if (Math.abs(points - getVitalityPoints()) <= 1e-6) {
            return;
        }

        setVitalityPoints(points);
    }

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

Класс: org.l2jmobius.gameserver.model.actor.stat.PlayerStat, метод updateVitalityPoints(int value, boolean useRates, boolean quiet)

Java:
    public synchronized void updateVitalityPoints(int value, boolean useRates, boolean quiet) {
        if ((value == 0) || !Config.ENABLE_VITALITY) {
            return;
        }

        int points = value;
        if (useRates) {
            if (getActiveChar().isLucky()) {
                return;
            }

            if (points < 0) // vitality consumed
            {
                double consumeRate = getMul(Stat.VITALITY_CONSUME_RATE, 1); //Тут у вас при подвешивании эффекта происходит инвертирование знака.
                if (consumeRate <= 0) { //А вот тут просто прерывается действие эффекта, если значение отрицательное.
                    return;
                }
                points *= consumeRate;
            }

            if (points > 0) {
                // vitality increased
                points *= Config.RATE_VITALITY_GAIN;
            } else {
                // vitality decreased
                points *= Config.RATE_VITALITY_LOST;
            }
        }

        if (points > 0) {
            points = Math.min(getVitalityPoints() + points, MAX_VITALITY_POINTS);
        } else {
            points = Math.max(getVitalityPoints() + points, MIN_VITALITY_POINTS);
        }

        if (Math.abs(points - getVitalityPoints()) <= 1e-6) {
            return;
        }

        setVitalityPoints(points);
    }

Нужно дописать эффект так, чтобы он учитывал отрицательные значения стата и корректно его отрабатывал.
тут еще особенность в том, что при получении опыта должны увеличиваться очки виталки, то есть xp=gain vp=gain и процентовка от опыта или просто если персонаж получает любое количество опыта учитывается сам факт этого получения, то тогда начисляется столько то очков виталки
 
тут еще особенность в то что при получение опыта должны увеличиваться очки виталки, то xp=gain vp=gain и процентовка от опыта, или просто если персонаж получает любое количество опыт учитавается сам факт этого получения то тогда начисляется столько то очков виталки
Вот вам нужно учесть эту особенность и написать верную реализацию. Возможную причину и ее локализацию я вам попробовал помочь найти.
 
Привет всем форумчанам. помогите пожалуйста разобраться в проблеме.
Есть скилл
HTML:
<skill id="22940" toLevel="1" name="Vitality Recovery Potion"> <!-- на данный момент скилл просто замораживает виталку но не пополняет. -->
        <!-- For 60 min., recovers Vitality upon XP gain. -->
        <icon>BranchSys2.br_essence_rose_i00</icon>
        <operateType>A2</operateType>
        <hitTime>3000</hitTime>
        <reuseDelay>14400000</reuseDelay>
        <abnormalType>VP_KEEP</abnormalType>
        <basicProperty>NONE</basicProperty>
        <magicCriticalRate>5</magicCriticalRate>
        <specialLevel>-1</specialLevel>
        <hitCancelTime>0</hitCancelTime>
        <activateRate>0</activateRate>
        <abnormalLevel>1</abnormalLevel>
        <abnormalTime>3600</abnormalTime>
        <trait>ETC</trait>
        <irreplacableBuff>true</irreplacableBuff>
        <blockActionUseSkill>true</blockActionUseSkill>
        <abnormalVisualEffect>VP_UP</abnormalVisualEffect>
        <isMagic>4</isMagic>
        <targetType>SELF</targetType>
        <affectScope>SINGLE</affectScope>
        <effects>
            <effect name="VitalityPointsRate">
                <amount>-100</amount>
            </effect>
        </effects>
    </skill>

Он должен пополнять виталку во время фарма, но он ее просто замораживает и она не уменьшается, но и не увеличивается.
Заранее благодарен за помощь
та я больше скажу... у мобиуса гризои даже не сделано :\
Вроде механике уже лет 15, ну зато самый топовый эмулятор. Где-то на уровне ПВ...
Как править? Ну написать свой хендлер, который будет при убийстве монстра считать полученый опыт (что не возможно сделать обычными ивентами) или пойти простой путей и добавлять при убийстве монстров какое-то фиксированное значение виталки. Так же не стоит забывать именно об эффект заморозки виталки. Именно этот эффект уменьшает использование очков виталки, а в реалиях ПОСТ ГОДовской линейки - там процент использования виталки до 2к% разгоняется как нефиг делать.
 
та я больше скажу... у мобиуса гризои даже не сделано :\
Вроде механике уже лет 15, ну зато самый топовый эмулятор. Где-то на уровне ПВ...
Как править? Ну написать свой хендлер, который будет при убийстве монстра считать полученый опыт (что не возможно сделать обычными ивентами) или пойти простой путей и добавлять при убийстве монстров какое-то фиксированное значение виталки. Так же не стоит забывать именно об эффект заморозки виталки. Именно этот эффект уменьшает использование очков виталки, а в реалиях ПОСТ ГОДовской линейки - там процент использования виталки до 2к% разгоняется как нефиг делать.
получается еще нужно привязать к проверке персонажа на наличие этого эффекта на нем, то есть начисление очков виталки будет происходить только в случае если на персонажа наложены такие то ИД эффекты
 
Назад
Сверху Снизу