Плохо! Плохо!:  0
Показано с 1 по 2 из 2

Тема: Пассив. навыки на бонус к опыту и золоту

  1. #1

    По умолчанию Пассив. навыки на бонус к опыту и золоту

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

    Скилл в БД - как болванка, само значение привязано к переменной.

    В стандартных скриптах нашел 2 места вычисления опыта:
    * Game_Enemy
    Код:
    def exp
    enemy.exp
    end
    * Game_Troop
    Код:
    def exp_total
    dead_members.inject(0) {|r, enemy| r += enemy.exp }
    end
    Попытался отредактировать строчки, получив вид: (где $game_variables[1]=1,05 (105%))
    Код:
    def exp
    enemy.exp*$game_variables[1]
    end
    или
    Код:
    def exp_total
    dead_members.inject(0) {|r, enemy| r += enemy.exp } * $game_variables[1]
    end
    Все вроде бы ничего, работает... только вот десятичный результат сильно мозолит глаза..

    Попытался избавиться от остатка путем его вычитания:
    Код:
    def exp
    (enemy.exp*$game_variables[1])-(enemy.exp*$game_variables[1]%1)
    end
    Но блин, он мне возвращает вместо 23,6 (пример) 23,0

    Вопрос, как правильно отредактировать формулу, чтобы при любых процентах бонуса он мне возвращал только целое число?


    Та же тема и с золотом за убийство противников.. Однако, если опыт в статус окне все же пишется целым, то вот голды так и начисляются дробью((

    Спойлер скрин:




    На скрине действует бонус в 12% на голд и опыт
    2 врага: 10 опыта и 5 голда с каждого
    Последний раз редактировалось soulshard; 25.09.2015 в 01:39.

  2. #2
    Пользователь Аватар для Plush
    Информация о пользователе
    Регистрация
    06.06.2014
    Адрес
    Gallifrey
    Сообщений
    54
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Лови мой говнокод. В ruby почти не шарю, но что-то да сделал.
    Для того чтоб сократить любое число, достаточно написать:

    q(23.0/67.0) // вернёт 0.6
    или
    q(твоё float значение/переменная float) // вернёт что-то с 1 числом после запятой
    если дать q целочисленное значение, вернёт float-овое. Например
    q(3 / 3) // вернёт 1.0

    У меня все отлично работает.
    Код:
    def q(integer)
      arr = integer.to_s.split('.')
      if (arr.size == 1)
        return (integer.to_s + ".0").to_f
      end
      return (arr[0] + "." + arr[1].to_s[0]).to_f
    end
    Последний раз редактировалось Plush; 25.09.2015 в 12:34.
    while (Plush.isAlive) {
    Plush.loveCSharp();
    if (curDay == Plush.happyBirthday)
    if (++Plush.age >= Plush.maxAge)
    {
    Plush.die();
    break;
    }
    }

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Пассив. навыки на бонус к опыту и золоту