- Регистрация
- 29.05.2024
- Темы
- 1
- Сообщения
- 341
- Реакции
- 265
понятно. Нужно подумать и все проверить.Пока не добавишь false в gain_exp(exp,false) - относительно.
понятно. Нужно подумать и все проверить.Пока не добавишь false в gain_exp(exp,false) - относительно.
Этот код сделает любое добавление опыта в игре - относительным.понятно. Нужно подумать и все проверить.
ага-ага, я понял, я с радостью избавлюсь от гребанных 47 скриптов. Я уже раньше пробовал манипулировать с gain_exp и у меня не очень приятный опыт остался, поэтому я забил, но хорошо что сейчас ты в случае чего можешь рассказать, как что программируется,)) так что попробую поменять еще раз.)Этот код сделает любое добавление опыта в игре - относительным.
И чтоб сделать его абсолютным потребуется дополнительное уточнение в виде добавления второго аргумента в функцию в виде false.
Хм……………Ruby:def optain_exp(temp_exp) temp_exp = sigmoid_exp(temp_exp) SndLib.sys_LvUp $game_map.popup(0,"EXP+#{temp_exp}",0,0) $game_player.actor.gain_exp(temp_exp,false) end def sigmoid_exp(exp_output) #0.45 - предел 24к для 1600, 0.66 - 16к player_level = $game_player.actor.level exp_amount = (exp_output / 5) * (7 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5) exp_amount.round(-1) end
class Game_Actor < Game_Battler
alias_method(:gain_exp_role_play, :gain_exp)
def gain_exp(exp, mult=true)
if mult == true
exp = exp * ( 0.1 + (self.level * 0.01) )
else
exp = exp*mult.to_f
end
gain_exp_role_play(exp)
end
end
def optain_exp(temp_exp)
temp_exp = sigmoid_exp(temp_exp)
SndLib.sys_LvUp
$game_map.popup(0,"EXP+#{temp_exp}",0,0)
$game_player.actor.gain_exp(temp_exp)
end
def sigmoid_exp(exp_output) #0.45 - предел 24к для 1600, 0.66 - 16к
player_level = $game_player.actor.level
exp_amount = (exp_output / 5) * (7 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5)
exp_amount.round(-1)
end
alias_method(:optain_exp_role_play, :optain_exp)
def optain_exp(temp_exp)
player_level = $game_player.actor.level
exp_amount = 0.2 * (7 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5)
SndLib.sys_LvUp
$game_map.popup(0,"EXP+#{(temp_exp*exp_amount).round(-1)}",0,0)
$game_player.actor.gain_exp(temp_exp,exp_amount)
end
А если вот так напишу, это будет работать?Хм……………
Так… Вижу еще способы как сделать проще………………………
Итак………
Ruby:class Game_Actor < Game_Battler alias_method(:gain_exp_role_play, :gain_exp) def gain_exp(exp, mult=true) if mult == true exp = exp * ( 0.1 + (self.level * 0.01) ) else exp = exp*mult.to_f end gain_exp_role_play(exp) end end
Тогда вот это:
Ruby:def optain_exp(temp_exp) temp_exp = sigmoid_exp(temp_exp) SndLib.sys_LvUp $game_map.popup(0,"EXP+#{temp_exp}",0,0) $game_player.actor.gain_exp(temp_exp) end def sigmoid_exp(exp_output) #0.45 - предел 24к для 1600, 0.66 - 16к player_level = $game_player.actor.level exp_amount = (exp_output / 5) * (7 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5) exp_amount.round(-1) end
Можно будет переделать в это:
И тогдаRuby:alias_method(:optain_exp_role_play, :optain_exp) def optain_exp(temp_exp) player_level = $game_player.actor.level exp_amount = 0.2 * (7 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5) SndLib.sys_LvUp $game_map.popup(0,"EXP+#{(temp_exp*exp_amount).round(-1)}",0,0) $game_player.actor.gain_exp(temp_exp,exp_amount) end
gain_exp(num) - даст num* ( 0.1 + (self.level * 0.01) ) опыта.
gain_exp(num,1) - даст num абсолютного опыта
gain_exp(num,2) - даст num*2 абсолютного опыта
То есть, прицепил множитель, который можно сразу указывать при вызове gain_exp. И если он не указан, то будет * ( 0.1 + (self.level * 0.01) ), а если указан, то такой какой указан.
class Game_Actor < Game_Battler
alias_method(:gain_exp_role_play, :gain_exp)
def gain_exp(exp, mult=true)
if mult == true
player_level = $game_player.actor.level
exp = (exp / 5) * (7 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5)
exp.round(-1)
else
exp = exp*mult
end
gain_exp_role_play(exp)
end
end
А если вот так напишу, это будет работать?
class Game_Actor < Game_Battler
alias_method(:gain_exp_role_play, :gain_exp)
def gain_exp(exp, mult=true)
if mult == true
player_level = $game_player.actor.level
exp = (exp*0.2) * (7.00 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5)
exp.round(-1)
else
exp = exp*mult.to_f
end
gain_exp_role_play(exp)
end
end
А мне с числом как-то больше понравилось,) гибче и выглядит лучше. К тому же false немного сбивает с толку.И тогда
gain_exp(num) - даст num* ( 0.1 + (self.level * 0.01) ) опыта.
gain_exp(num,1) - даст num абсолютного опыта
gain_exp(num,2) - даст num*2 абсолютного опыта
То есть, прицепил множитель, который можно сразу указывать при вызове gain_exp. И если он не указан, то будет * ( 0.1 + (self.level * 0.01) ), а если указан, то такой какой указан.
—
Но это так-то лишнее.
Хватит и первого варианта, с true-false.
И кстати:——
Или
class Game_Actor < Game_Battler
alias_method(:gain_exp_role_play, :gain_exp)
def gain_exp(exp, mult=nil)
if mult == nil
player_level = $game_player.actor.level
exp = (exp*0.2) * (7.00 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5)
exp.round(-1)
else
exp = exp*mult.to_f
end
gain_exp_role_play(exp)
end
end
def optain_exp(temp_exp)
player_level = $game_player.actor.level
temp_exp *= 0.2 * (7.00 / (0.45 + Math.exp(-0.1 * (player_level - 25))) - 0.5)
SndLib.sys_LvUp
$game_map.popup(0,"EXP+#{(temp_exp).round(-1)}",0,0)
$game_player.actor.gain_exp(temp_exp,1)
end
а, ну это для красоты,)) и у меня там где-то есть .min и .max, так что все нормально. Хм... но раз теперь это еще и для секс-опыта, то и правда, наверное нужно убирать.А кстати, почему round(-1) ???
Это ведь округление до десятков?
Тогда любая экспа которая меньше 5 - будет нулем? Тебе это точно надо?
Но фишка optain в том что там пузырёк сообщения с числом.
Так что лучше чтоб там gain_exp был абсолютным, а расчет был до пузырька. И пузырек уже показывал число после расчетов.
Мы используем основные cookies для обеспечения работы этого сайта, а также дополнительные cookies для обеспечения максимального удобства пользователя. Предоставляя нам персональные данные, вы соглашаетесь на их обработку в соответствии с этой политикой.
Посмотрите дополнительную информацию и настройте свои предпочтения