Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
CON STR DEX WIT MEN INT
#1
Такой вопрос, в формулах есть код
Код:
    private static final double[] STRCompute = new double[]{1, 30}; //{1.016, 28.515}; for C1
    private static final double[] INTCompute = new double[]{1, 30}; //{1.020, 31.375}; for C1
    private static final double[] DEXCompute = new double[]{1, 30}; //{1.009, 19.360}; for C1
    private static final double[] WITCompute = new double[]{1, 30}; //{1.050, 20.000}; for C1
    private static final double[] CONCompute = new double[]{1, 30}; //{1.015, 12.488}; for C1
    private static final double[] MENCompute = new double[]{1, 30}; //{1.010, -0.060}; for C1

    protected static final double[] WITbonus = new double[MAX_STAT_VALUE];
    protected static final double[] MENbonus = new double[MAX_STAT_VALUE];
    protected static final double[] INTbonus = new double[MAX_STAT_VALUE];
    protected static final double[] STRbonus = new double[MAX_STAT_VALUE];
    protected static final double[] DEXbonus = new double[MAX_STAT_VALUE];
    protected static final double[] CONbonus = new double[MAX_STAT_VALUE];

    // These values are 100% matching retail tables, no need to change and no need add
    // calculation into the stat bonus when accessing (not efficient),
    // better to have everything precalculated and use values directly (saves CPU)
    static
    {
        for (int i = 0; i < STRbonus.length; i++)
            STRbonus[i] = i/STRCompute[1];
        for (int i = 0; i < INTbonus.length; i++)
            INTbonus[i] = i/INTCompute[1];
        for (int i = 0; i < DEXbonus.length; i++)
            DEXbonus[i] = i/DEXCompute[1];
        for (int i = 0; i < WITbonus.length; i++)
            WITbonus[i] = i/WITCompute[1];
        for (int i = 0; i < CONbonus.length; i++)
            CONbonus[i] = i/CONCompute[1];
        for (int i = 0; i < MENbonus.length; i++)
            MENbonus[i] = i/MENCompute[1];
    }

Код:
    static class FuncPAtkMod extends Func
    {
        static final FuncPAtkMod _fpa_instance = new FuncPAtkMod();

        static Func getInstance()
        {
            return _fpa_instance;
        }

        private FuncPAtkMod()
        {
            super(Stats.POWER_ATTACK, 0x30, null);
        }

        @Override
        public void calc(Env env)
        {
            env.value *= STRbonus[env.player.getSTR()] * env.player.getLevelMod();
        }
    }
Вопрос такой. Я бы хотел что бы при стате в 30, модификатор был 0, а далее вверх или вниз шёл по 3.33(3)%.
Я пытался изменить на
Код:
        public void calc(Env env)
        {
            env.value *= (int)(env.player.getSTR()/30) * env.player.getLevelMod();
        }
Неполучилось. Пытался
Код:
for (int i = 0; i < STRbonus.length; i++)
            STRbonus[i] = i/30;
Неполучилось. Думаю надо добавить значения в
Код:
    private static final double[] STRCompute = new double[]{1, 30}; //{1.016, 28.515}; for C1
Но где то то уже должно быть это прописано. Кто знает где дайте наводочку ^^
[Изображение: master.gif]
Ответ
#2
(в формулах шарю но) не хрена не понял что и как хотите, что бы выглядело
[Изображение: 2ewe.jpg][Изображение: 1.gif]
Ответ
#3
PaInKiLlEr Написал:(в формулах шарю но) не хрена не понял что и как хотите, что бы выглядело

есть такая игра как Vincitus. И там значения STR\DEX и т.д. идут огромные, от 100 до 2к. И там прибавка к динамичным параметрам идет исходя из этих показателей. дак вот, обьясню на примере.
STR<100 => 1str=2 p.atk
STR>100 => 1str=3 p.atk
имея больше 100 str, ты получаешь прибавку в 3 p.att за каждый str))
так понятно?)думаю ТС это и имел ввиду.
Если помог, ткни плюсеГ, это же так просто
Ответ
#4
Я имел ввиду что хотел в файле формул изменить прибавку от базовых статов. Тоесть если стат равен 30 прибавки нету. При стате в + или - 30 идёт прибавка\уменьшение на 3% за единицу стата
[Изображение: master.gif]
Ответ
#5
Ключевой вопрос. 3% от чего? Потому что 3% от 0 будет примерно 0 Smile
Ответ
#6
3% от базового значения
[Изображение: master.gif]
Ответ
#7
Вариант
Код:
for (int i = 0; i < STRbonus.length; i++)
            STRbonus[i] = i/30;
Правильный, и
Код:
public void calc(Env env)
        {
            env.value *= STRbonus[env.player.getSTR()];
                        env.value = env.value == 0 ? 1 : env.value;
        }
Ответ
#8
Неа не помогает становится 1 П атака... да кстати такая прабла же с откатом. Хочу сделать зависимость отката от каста
Код:
        else
        {
            if(skill.isMagic())
            {
                reuseDelay = (int)(skill.getReuseDelay() * getStat().getMReuseRate(skill));
            }
            else
            {
                reuseDelay = (int)(skill.getReuseDelay() * getStat().getPReuseRate(skill));
            }
        }
я изменил
Код:
                reuseDelay = (int)(skill.getReuseDelay() * getStat().getMReuseRate(skill))*(int)(getMAtkSpd()/1000));
При умножении на число(допустим 0,75) откат нормальный но если (int)(getMAtkSpd()/1000) становится меньше 1, то откат становится походу то же 1...

Добавлено через 10 часов 43 минуты
Вобщем прабла была в том что переменные должны были быть double, т.е. писать не \30 а \30.0
[Изображение: master.gif]
Ответ
#9
XD ой как мне смешно Smile))

а зачем то сразу лесть в ядро? при том не зная явы Big Grin

Если ты про l2
Есть у всех персов (Абсолютно у всех) скил common mastery (пассивный)
допиши в этот скил что то типа такого плана
<mul order="0x30" stat="DEX" val="1.03" />
где 1.03 и = 3%

даже если нету такого скила то сделать самому и выдать всем не пробелма

или вообще создать свой скил выдать всем и некто нечего не увидит!
Ответ
#10
Привет, Эрозек-конкурент=) Помогу немного чтоли.

Вот как бы что можно сделать (и я сделал), чтобы адекватно прибавлять (и отнимать) бонус.
Вот на примере рассчёта ХП, для п.атаки сделаешь себе сам думаю:

Код:
public void calc(Env env)
        {
            [B]L2PcInstance p = (L2PcInstance) env.player;
            L2PcTemplate t = (L2PcTemplate) env.player.getTemplate();[/B]
            env.value *= (1 + [B](p.getCON() - t.baseCON)[/B] / 10 + p.getLevel() / 100);
        }
Нужное тебе я выделил.
Удачи.

Добавлено через 3 минуты
Astend Написал:XD ой как мне смешно Smile))

а зачем то сразу лесть в ядро? при том не зная явы Big Grin

Если ты про l2
Есть у всех персов (Абсолютно у всех) скил common mastery (пассивный)
допиши в этот скил что то типа такого плана
<mul order="0x30" stat="DEX" val="1.03" />
где 1.03 и = 3%

даже если нету такого скила то сделать самому и выдать всем не пробелма

или вообще создать свой скил выдать всем и некто нечего не увидит!
Вась, ты вообще понял что требуется и что сделал ты? Ты умножил параметр DEX на 3%. И зачем?
Автору требуется при прибавке +1 DEX от какого-нить шмота или оружия, добавлять 3% п.атаки персу. Не вообще давать бонус, а именно прибавлять и отнимать при изменении параметра. Думай что пишешь, если уж пытаешься советовать, да ещё в такой хамской форме.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)