RolePlay-S

RolePlay-S 0.4.7

AleDerXan

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

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Кстати, когда соберешься добавлять предметы продавцам...
Я могу подсказать, как их добавить так, чтоб не лезть в диалоги с ними. Метод с json - он для централизованного добавления. Тут требуется чтоб Эккма выполнил квест на о-json-ивание продавцов. Ну или это имеет смысл, если добавлений реально дофига. Тогда этот квест может выполнить и мододел лично для своих предметов.
А пока что, можно сделать все гораздо проще.
не, пока не добрался. Над маной экспериментировал и пытался заставить игру при повышении хп или стамины Навыком, хилить на это количество. Ну то есть повысил ты хп на 14 ед., но у тебя все равно все еще 10, а не 14. А еще выяснил, что на 87 лвл Лона от "медитации" получает 6к опыта, по новой системе опыта.)))
И пытался понять как один модуль, может добавить в другой - строку. К примеру, вот этот код нужен только ради одной строки "@prev_mp = self.mp # MP", а приходится копировать весь.
Ruby:
    def setup(actor_id)
        p "actor setup actor_id=>#{actor_id}"
        @actor_id = actor_id
        @name = actor.name
        @nickname = actor.nickname
        init_graphics
        @class_id = actor.class_id
        @level = actor.initial_level
        @exp = {}
        @ext_items = [nil,nil,nil,nil,nil]
        @equips = []
        @hom_effects_data = []
        @immune_tgt_states = []
        @original_immune_tgt_states = []
        @immune_tgt_state_type = []
        @equip_part_covered = []
        @add_specs=Note.get_data(actor.note)
        @chs_configured=@add_specs["chs_config"]
        @debug_attribute=false
        #@portrait_sync=true #unuse
        @mouth_block=0
        @weigth_carried=0 #?????????
        @max_stats=Hash.new
        @hit_LinkToMaster = false
        @is_object = false
        @immune_state_effect = false
        @immune_damage = false
        @master = nil
     
        @actStat=LonaActorStat.new #??????????????stat??????????????????????????????
        @actStat.npc_name="Lona"
        @state_frames={}
        @name_order = $data_lona_portrait[0]
        init_exp
        init_lonaStat #??????@stat???????portrait?????@prt_stat??
        init_statMap
        initialize_battle_system
        stat["Race"] = "Human"
        stat["always"]="on"
        stat["persona"]="typical"
        stat["sex_pos"]=-1
        init_cums
        clear_param_plus
        clear_states
        init_rec_stats #96_Game_Actor_Attribute.rb
        @prev_health = self.health
        @prev_sta = self.sta
        @prev_mp = self.mp # MP
        @actStat.check_stat_old
        @actStat.actor = self
    end
 
Последнее редактирование:

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
не, пока не добрался. Над маной экспериментировал и пытался заставить игру при повышении хп или стамины Навыком, хилить на это количество. Ну то есть повысил ты хп на 14 ед., но у тебя все равно все еще 10, а не 14. А еще выяснил, что на 87 лвл Лона от "медитации" получает 6к опыта, по новой системе опыта.)))
И пытался понять как один модуль, может добавить в другой - строку. К примеру, вот этот код для нужен только ради одной строки "@prev_mp = self.mp # MP", а приходится копировать весь.
1) Ну, усложняй математику. Ну или фирменная медитация Лоны - весьма могуча, чо.
2)
Прицепись к def через алиас-метод.
В своей версии - вызови старый def .
И добавь одну строку после него, или до него.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Так вот как у меня сделано:
Ruby:
class Game_Actor < Game_Battler
    attr_accessor        :prev_arousal_corsys
   
    alias_method :setup_corsys, :setup
    def setup(actor_id)
        setup_corsys(actor_id)
        @prev_arousal_corsys = self.arousal
    end

end


class LonaActorStat < ActorStat
    alias_method :set_stat_corsys, :set_stat
   
    def set_stat(stat_name, value, type=CURRENT_STAT)
        set_stat_corsys(stat_name, value, type)
       
       
        #return if !stat_name
        return p "stats not exist on PlayerActor stat_name=>#{stat_name} V=>#{value} t=>#{type}" if @stat[stat_name].nil?
        value=value.round(3) if value.is_a?(Float)
        @stat[stat_name][type]=value
        #when setting MAX_STAT or MIN_STAT we need to not check them in order to prevent situation when we first increase MAX_STAT, then round to MAX_TRUE, then apply reduction by decreasing MAX_STAT
        #setting MAX_TRUE and MIN_TRUE will break whole chain of checks with how they're made anyway, so it'll be applied only on next refresh.
        check_current_stat(stat_name) if type == CURRENT_STAT
       
        #those calls were in update_state_frames each frame
        if type == CURRENT_STAT && !@actor.nil? then
            if stat_name == "arousal".freeze then
                @actor.check_prev_arousal_to_sta
                @actor.prev_arousal_corsys = @actor.arousal
            end
        end

    end
   
end
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
1) Ну, усложняй математику. Ну или фирменная медитация Лоны - весьма могуча, чо.
2)
Прицепись к def через алиас-метод.
В своей версии - вызови старый def .
И добавь одну строку после него, или до него.
ага, я тоже почитал про алиас и почти ничего не понял.)))
то есть, если я прицеплю и вызову старый, то и новый метод тоже будет сам подключаться, потому что ассоциируется со старым?
 

AleDerXan

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

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
И фишка алиасов в том, что если все моды будут делать так, с одной и той же функцией, (не забываем что переименование должно быть уникальным!!!) то каждый следующий мод будет переименовывать def предыдущего, и добавлять туда своё. И таким образом, цепочка однажды дойдет до оригинального игрового, и все добавления от модов, сколько бы их ни было - будут работать.
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Нет. Алиас - переименовывает старый def. (или создает копию под новым именем, я не разбирался)
И потом ты можешь написать def под тем же именем как в игре, и внутри вызвать переименованный старый def. Вместо того чтоб копировать из него код.
я сделал вот так и это сработало :D В руководствах очень непонятно пишут...

Ruby:
    alias_method(:setup_role_play, :setup)
   
    def setup_role_play
        setup(actor_id)
        @prev_mp = self.mp # MP
    end

Хорошо. Теперь можно будет посокращать все те горы мусора, которые я наворотил.))
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Посмотри у меня на вторую часть кода.
Она тоже важна.
Лучше сделай так. На всякий случай.
И потом туда можно будет прицепить личный def для работы с prev.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Если можешь использовать алиас - лучше всегда использовать алиас и вызывать в нем старый (переименованный) def (можно в начале своего, можно в конце. можно в середине…). Если тебе нужно лишь внести изменения, что-то дописать, то лучше использовать этот способ. Чтоб было меньше конфликтов с другими модами, и меньше работы, если Эккма там что-то поменяет.
 

AleDerXan

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

Ruby:
    alias_method(:setup_role_play, :setup)
 
    def setup_role_play
        setup(actor_id)
        @prev_mp = self.mp # MP
    end

Хорошо. Теперь можно будет посокращать все те горы мусора, которые я наворотил.))
Надо вот так:

Ruby:
    attr_accessor        :prev_mp # По аналогии с другими статами типа prev. Я не особо разбирался нафиг оно надо, просто делал как Эккма.
    alias_method(:setup_role_play, :setup) #переименовать setup → setup_role_play
 
    def setup(actor_id) #Наш новый def. При его запуске в него подаются данные об actor_id другими def. Как и в оригинальный.
#И остальной код игры будет принимать его за оригинальный потому что имя то же самое.
      
        setup_role_play(actor_id) # вызов старой версии def, который мы переименовали. И мы передаем ему эстафетным методом данные об actor_id.
        @prev_mp = self.mp # MP
    end
 
Последнее редактирование:
Сверху Снизу