Все ломаю голову, как адекватно сделать пассивные навыки, которые повышают получаемый опыт и золото за убийство врагов.
Нет, конечно сам скилл сделать не проблема, проблемы заключаются в вычислении конечного результата.
Скилл в БД - как болванка, само значение привязано к переменной.
В стандартных скриптах нашел 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.
Лови мой говнокод. В 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;
}
}
Социальные закладки