RolePlay-S

RolePlay-S 0.4.7

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Хм…
Посмотрим. Вроде должно быть норм.
Но у него обязательно должна быть запись item_name. Я же еще добавил проверку, чтоб если на файл с таким же названием ссылается стата или скилл - то тоже шла перезапись, даже если нет name item_name и id. Как например с файлами статов. Так чтоб их было достаточно скопировать из оригинальной директории, и не указывать лишнего. Просто оставить название файла оригинальным.
Но приёмчики я погляжу. Есть варианты, как упростить мой код. Хотя я и сам мог через case, но мне было лениво...
 

AleDerXan

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

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Хм…
Посмотрим. Вроде должно быть норм.
Но у него обязательно должна быть запись item_name. Я же еще добавил проверку, чтоб если на файл с таким же названием ссылается стата или скилл - то тоже шла перезапись, даже если нет name item_name и id. Как например с файлами статов. Так чтоб их было достаточно скопировать из оригинальной директории, и не указывать лишнего. Просто оставить название файла оригинальным.
Но приёмчики я погляжу. Есть варианты, как упростить мой код. Хотя я и сам мог через case, но мне было лениво...
А, чем проще, тем лучше, иначе я просто запутаюсь... А case я просто люблю, не смотря даже на то, что не люблю программирование в целом.)) Ну, да, у меня там тоже проверка - есть - переписать, нету - добавить новый. Изначально, у меня были отдельные папки - для перезаписываемых и для новых, теперь одна для тех и других.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
У меня, в планах, хотелось, чтоб, взять файлы из effects, нужные, перенести в папку мода, и править что там записано. Но многие файлы не содержат ни id ни name ни item_name. В самой игре записан путь до них, вручную автором игры, в записи eff_cfg. И там не полные данные, а обрывки, кусочки.
1728402211817.png
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Проблема в том, что автор навел хаоса, когда начал в одних местах использовать name а в других - item_name…
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Вот… переделал… (Если в json указать «"id": num,», то оно принудительно встанет на место того или иного навыка/статы/предмета, даже если item_name и name будут отличаться. Если указано id, то оно имеет приоритет. И если названия будут отличаться, то у статы станет два названия, по которым ее можно вызвать.)
Ruby:
module DataManager

    class << self
        alias_method :load_mod_database_UNIQUE_CODENAME, :load_mod_database
    end

    def self.load_mod_database
        load_mod_database_UNIQUE_CODENAME
        mod_name = "MOD FOLDER NAME"
 
        modFolder = "ModScripts/_Mods/#{mod_name}"
 
        arpgSkills = FileGetter.load_skill_from_json("#{modFolder}/Data/Effects/Skill/")
        $data_arpgskills = $data_arpgskills.merge(arpgSkills)
 
        types = ["Skill", "States", "Items", "Weapons", "Armors" ]
        types.each{|type|
            FileGetter.getFileList("#{modFolder}/Data/Effects/#{type}/*.json").each{|file|
                add_new_smth(file, type)
            }
        }
    end

    def self.add_new_smth(path, type)  #Если хотите использовать для полной перезаписи существующей статы, то в json файле должно быть «id» «name» и «item_name» как в оригинальном. С учетом скрытых в rvdata2 данных статы. А если хотите, чтоб стата была новой, то не указывайте id, а name и item_name берите уникальные. Если укажите id - то произойдет перезапись.
 
        case type
            when "States"
                data = $data_states
                data_name = $data_StateName
            when "Skill"
                data = $data_skills
                data_name = $data_SkillName
            when "Items"
                data = $data_items
                data_name = $data_ItemName
            when "Weapons"
                data = $data_weapons
                data_name = $data_ItemName
            when "Armors"
                data = $data_armors
                data_name = $data_ItemName
            else
                return
        end
 
        temp_hash = nil
        begin; temp_hash = JSON.decode(open(path).read); rescue msgbox("Error in Json == [[ #{path} ]] :: def self.add_new_smth"); end
        return if temp_hash == nil
 
        if temp_hash["name"] == nil && temp_hash["item_name"] == nil  && temp_hash["id"] == nil
            file_name = path.split('/').last
            data_name.each{|wut,state|
                next if state.addData == nil
                next if state.addData["eff_cfg"] == nil
                if state.addData["eff_cfg"].include?("#{file_name}")
                    data_name[wut].load_additional_data(path)
                end
            }
            return
 
        elsif temp_hash["id"] != nil
            tmpid = temp_hash["id"]
            data[tmpid].load_additional_data(path)
            return
        elsif temp_hash["name"] != nil && data_name[temp_hash["name"]] != nil
            data_name[temp_hash["name"]].load_additional_data(path)
            return
        elsif temp_hash["item_name"] != nil && data_name[temp_hash["item_name"]] != nil
            data_name[temp_hash["item_name"]].load_additional_data(path)
            return
        end
        
        if type == "Skill" && temp_hash["name"] == nil #arpgSkill
            return
        end

        tmpid = data.length
        case type
            when "States"
                data << RPG::State.new
            when "Skill"
                data << RPG::Skill.new
            when "Items"
                data << RPG::Item.new
            when "Weapons"
                data << RPG::Weapon.new
            when "Armors"
                data << RPG::Armor.new
        end
        data.last.id = tmpid
        data.last.load_additional_data(path)
    end

end

ПС. Меня начало раздражать, что папка в игре называется Skill, а не Skills.
Все остальные во множественном числе, а эта - в единственном. Немного ОКР…
 
Последнее редактирование:

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Вот… переделал… (Если в json указать «"id": num,», то оно принудительно встанет на место того или иного навыка/статы/предмета, даже если item_name и name будут отличаться. Если указано id, то оно имеет приоритет. И если названия будут отличаться, то у статы станет два названия, по которым ее можно вызвать.)
Ruby:
module DataManager

    class << self
        alias_method :load_mod_database_UNIQUE_CODENAME, :load_mod_database
    end

    def self.load_mod_database
        load_mod_database_UNIQUE_CODENAME
        mod_name = "MOD FOLDER NAME"
 
        modFolder = "ModScripts/_Mods/#{mod_name}"
 
        arpgSkills = FileGetter.load_skill_from_json("#{modFolder}/Data/Effects/Skill/")
        $data_arpgskills = $data_arpgskills.merge(arpgSkills)
 
        types = ["Skill", "States", "Items", "Weapons", "Armors" ]
        types.each{|type|
            FileGetter.getFileList("#{modFolder}/Data/Effects/#{type}/*.json").each{|file|
                add_new_smth(file, type)
            }
        }
    end

    def self.add_new_smth(path, type)  #Если хотите использовать для полной перезаписи существующей статы, то в json файле должно быть «id» «name» и «item_name» как в оригинальном. С учетом скрытых в rvdata2 данных статы. А если хотите, чтоб стата была новой, то не указывайте id, а name и item_name берите уникальные. Если укажите id - то произойдет перезапись.
 
        case type
            when "States"
                data = $data_states
                data_name = $data_StateName
            when "Skill"
                data = $data_skills
                data_name = $data_SkillName
            when "Items"
                data = $data_items
                data_name = $data_ItemName
            when "Weapons"
                data = $data_weapons
                data_name = $data_ItemName
            when "Armors"
                data = $data_armors
                data_name = $data_ItemName
            else
                return
        end
 
        temp_hash = nil
        begin; temp_hash = JSON.decode(open(path).read); rescue msgbox("Error in Json == [[ #{path} ]] :: def self.add_new_smth"); end
        return if temp_hash == nil
 
        if temp_hash["name"] == nil && temp_hash["item_name"] == nil  && temp_hash["id"] == nil
            file_name = path.split('/').last
            data_name.each{|wut,state|
                next if state.addData == nil
                next if state.addData["eff_cfg"] == nil
                if state.addData["eff_cfg"].include?("#{file_name}")
                    data_name[wut].load_additional_data(path)
                end
            }
            return
 
        elsif temp_hash["id"] != nil
            tmpid = temp_hash["id"]
            data[tmpid].load_additional_data(path)
            return
        elsif temp_hash["name"] != nil && data_name[temp_hash["name"]] != nil
            data_name[temp_hash["name"]].load_additional_data(path)
            return
        elsif temp_hash["item_name"] != nil && data_name[temp_hash["item_name"]] != nil
            data_name[temp_hash["item_name"]].load_additional_data(path)
            return
        end
       
        if type == "Skill" && temp_hash["name"] == nil #arpgSkill
            return
        end

        tmpid = data.length
        case type
            when "States"
                data << RPG::State.new
            when "Skill"
                data << RPG::Skill.new
            when "Items"
                data << RPG::Item.new
            when "Weapons"
                data << RPG::Weapon.new
            when "Armors"
                data << RPG::Armor.new
        end
        data.last.id = tmpid
        data.last.load_additional_data(path)
    end

end

ПС. Меня начало раздражать, что папка в игре называется Skill, а не Skills.
Все остальные во множественном числе, а эта - в единственном. Немного ОКР…
Утречка! А ты сделай проверку всех папок, с добавлением к имени "s", помимо прочего. 😆
 

AleDerXan

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

И так… Понял момент еще один. (Это пока только идея. Может не сработать.)
Можно и параметры статов и навыков - сделать динамическими, и хранить их изменения в сейв-файле.
Любая штука по типу:
$game_player.actor.stat["Что годно!!!"] = Что угодно
Попадает в сохранение. И туда можно записывать текущее состояние всего $data_skills или _states… Или состояние отдельного навыка или статы.
А потом просто $data_SkillName["Навык"] = $game_player.actor.stat["Навык Фулл Дейт"] в те или иные моменты.
И можно добавить в функцию загрузки сохранения, как сделано для LIST черт…
И тогда, можно делать так, чтоб по мере прокачки менялось всякое разное в навыках. В том числе даже описание. Или требования, или стоимость… И все это попадало в сохранение, и подгружалось оттуда во время загрузки.
Но целиком сохранять дата скилл нейм или дата стейт нейм, думаю, не стоит. Мало ли, другой мод там что-то меняет, и его установили позже. Лучше так делать для отдельных записей.
 
Последнее редактирование:

Timon20i40

Новичок
Регистрация
12.10.2024
Темы
0
Сообщения
1
Реакции
1
Возраст
22
Похоже не судьба мне с этим модом поиграть. Решил даж переустановить лону и на неё поставить мод, но так тож не вышло. версия игры 0.9.3.0.
Насколько знаю это ж последняя версия? замену сделал вручную, ибо я слишком туп и не знаю можно ли как то по другому сделать. при запуске выдало 4 маленькие ошибки, а когда в обучении решил пройтись, то у меня вылезла одна ошибка на полэкрана и игра крякнулась
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Похоже не судьба мне с этим модом поиграть. Решил даж переустановить лону и на неё поставить мод, но так тож не вышло. версия игры 0.9.3.0.
Насколько знаю это ж последняя версия? замену сделал вручную, ибо я слишком туп и не знаю можно ли как то по другому сделать. при запуске выдало 4 маленькие ошибки, а когда в обучении решил пройтись, то у меня вылезла одна ошибка на полэкрана и игра крякнулась
В нескольких местах написано - Требуется версия игры: B.0.9.1.1.1
 

AleDerXan

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