RolePlay-S

RolePlay-S 0.4.7

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
понятно. Нужно подумать и все проверить.
Этот код сделает любое добавление опыта в игре - относительным.
И чтоб сделать его абсолютным потребуется дополнительное уточнение в виде добавления второго аргумента в функцию в виде false.
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Этот код сделает любое добавление опыта в игре - относительным.
И чтоб сделать его абсолютным потребуется дополнительное уточнение в виде добавления второго аргумента в функцию в виде false.
ага-ага, я понял, я с радостью избавлюсь от гребанных 47 скриптов. Я уже раньше пробовал манипулировать с gain_exp и у меня не очень приятный опыт остался, поэтому я забил, но хорошо что сейчас ты в случае чего можешь рассказать, как что программируется,)) так что попробую поменять еще раз.)
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
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
Хм……………
Так… Вижу еще способы как сделать проще………………………
Итак………
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) ), а если указан, то такой какой указан.

Но это так-то лишнее.
Хватит и первого варианта, с true-false.
 
Последнее редактирование:

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Хм……………
Так… Вижу еще способы как сделать проще………………………
Итак………
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) ), а если указан, то такой какой указан.
А если вот так напишу, это будет работать?

Ruby:
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

Хочу избавиться от лишнего и перенести сигмойду.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
А если вот так напишу, это будет работать?
Ruby:
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
 
Последнее редактирование:

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
И тогда
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.
А мне с числом как-то больше понравилось,) гибче и выглядит лучше. К тому же false немного сбивает с толку.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
И думаю…………
Раз тебе нравится число…
То будет еще проще:
Ruby:
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
 
Последнее редактирование:

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
А кстати, почему round(-1) ???
Это ведь округление до десятков?
Тогда любая экспа которая меньше 5 - будет нулем? Тебе это точно надо?
Но фишка optain в том что там пузырёк сообщения с числом.
Так что лучше чтоб там gain_exp был абсолютным, а расчет был до пузырька. И пузырек уже показывал число после расчетов.
 
Последнее редактирование:

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Вот:


Ruby:
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
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
А кстати, почему round(-1) ???
Это ведь округление до десятков?
Тогда любая экспа которая меньше 5 - будет нулем? Тебе это точно надо?
Но фишка optain в том что там пузырёк сообщения с числом.
Так что лучше чтоб там gain_exp был абсолютным, а расчет был до пузырька. И пузырек уже показывал число после расчетов.
а, ну это для красоты,)) и у меня там где-то есть .min и .max, так что все нормально. Хм... но раз теперь это еще и для секс-опыта, то и правда, наверное нужно убирать.

В общем! я потестировал и ошибок было всего несколько, но у меня почету-то не режется опыт выданный через optain_exp, то есть если optain_exp(3000) то он дает ровно 3000.
 
Сверху Снизу