RolePlay-S

RolePlay-S 0.4.7

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
0
Сообщения
229
Реакции
236
Có phải là tạo thêm 1 chỉ số mới không, ví dụ tên chỉ số mới là reload, giá trị tối đa 100, thấp nhất -65535, 1 giây += 1reload, lowest_req của tất cả các kĩ năng = 99, ví dụ khi Lona xài skill 1 (cost: 15 reload) thì sau 15 giây Lona có thể sử dụng lại skill 1 (100-15=85=>85+1*15=100) . Sau đó tạo thêm vài chỉ số reload1, reload2,... tương tự như trên ta có thể khiến cho nhiều skill phải chờ để được sử dụng hoặc 1 trong 2 skill được sử dụng.
Есть еще один параметр времени - пол дня. К нему привязан откат квестов, смена суток, сон и т.д. Можешь попробовать использовать его. Я думал о том, что бы сделать заклинания, которые можно будет использовать только 1 раз в день. 😄
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
0
Сообщения
229
Реакции
236
Может спросишь у ОбамаБайдена, может он знает, как добавить характеристику, вроде sta, mood, health итд, полноценно причем из ModScripts? И чтоб она менялась через те же команды, что и остальные, и чтоб ее можно было указывать в эффектах в json, с теми же current max tmax min tmin.
Или скажет, что это невозможно.
В API тоже вроде все в порядке. Я записал вот так, ошибок не было.

1728373865824.png
 
Последнее редактирование:

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
191
Реакции
102
Возраст
32
В API тоже вроде все в порядке. Я записал вот так, ошибок не было.

1728373865824.png
Надо не просто чтоб ошибок не было, а чтоб с «mana» можно было работать теми же командами, которые применимы и к «health».

————————————

Кстати… Я тут пытался создать универсальный загрузчик json файлов из папки мода в игру. Чтоб можно было просто накидать их в аналогичные папки в моде, и изменять их, и все файлы автоматически бы подгружались в игру, если новое и уникальное - то как новая «штука», а если есть совпадения с существующими, то делать перезапись.
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}"
   
        FileGetter.getFileList("#{modFolder}/Data/Effects/Skill/*.json").each{|file|
            add_new_smth(file, "skill")}
   
        FileGetter.getFileList("#{modFolder}/Data/Effects/States/*.json").each{|file|
            add_new_smth(file, "state")}
   
        FileGetter.getFileList("#{modFolder}/Data/Effects/Armors/*.json").each{|file|
            add_new_smth(file, "armor")}
   
        FileGetter.getFileList("#{modFolder}/Data/Effects/Items/*.json").each{|file|
            add_new_smth(file, "item")}
   
        FileGetter.getFileList("#{modFolder}/Data/Effects/Weapons/*.json").each{|file|
            add_new_smth(file, "weapon")}
    end

    def self.add_new_smth(path, type)  #Если хотите использовать для полной перезаписи существующей статы, то в json файле должно быть «id» «name» и «item_name» как в оригинальном. С учетом скрытых в rvdata2 данных статы. А если хотите, чтоб стата была новой, то не указывайте id, а name и item_name берите уникальные. Если укажите id - то произойдет перезапись.
   
        if type == "state"
            data = $data_states
            data_name = $data_StateName
        elsif type == "skill"
            data = $data_skills
            data_name = $data_SkillName
        elsif type == "item"
            data = $data_items
            data_name = $data_ItemName
        elsif type == "weapon"
            data = $data_weapons
            data_name = $data_ItemName
        elsif type == "armor"
            data = $data_armors
            data_name = $data_ItemName
        else
            return
        end
   
        tmpid = data.length
        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"]
        elsif temp_hash["name"] != nil && data_name[temp_hash["name"]] != nil
            data_name[temp_hash["name"]].load_additional_data(path)
            return
        end
   
        if type == "state"
            data << RPG::State.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "skill"
            data << RPG::Skill.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "item"
            data << RPG::Item.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "weapon"
            data << RPG::Weapon.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "armor"
            data << RPG::Armor.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        end

    end
end

module FileGetter
    class << self
        alias_method :load_skill_from_json_UNIQUE_CODENAME, :load_skill_from_json
    end
 
    #Перезапись существующих «arpg» навыков и установка новых из папки Data/Effects/Skill/. Предупрждаю. Файлы должны быть полными. Работает в том числе с навыками, у которых не указано name, и которые в игре невидимы для игрока.
    def self.load_skill_from_json(target="Data/Effects/Skill/")
        mod_name = "MOD FOLDER NAME"
        modFolder = "ModScripts/_Mods/#{mod_name}"
        skills1 = load_skill_from_json_UNIQUE_CODENAME(target)
        skills2 = load_skill_from_json_UNIQUE_CODENAME("#{modFolder}/#{target}")
        skills = skills1.merge(skills2)
        return skills
    end
end
 
Последнее редактирование:

NâmBờQuanh

Пользователь
Регистрация
25.09.2024
Темы
0
Сообщения
18
Реакции
4
Возраст
20
Tôi có 1 lời khuyên thế này:
1. Tạo thêm 1 đặc điểm tính cách "bình thường" cho Lona (+5 DEF, +2.5 SUR, -5 HP, *0.975 STA) nằm giữa IronWill và WeakSoul, không hạn chế bất kì đặc điểm kỹ năng nào, ngoại trừ IronWill, WeakSoul và Nymph;
2. Các chức nghiệp có thể thêm 1 trong 4 đặc điểm tính cách (đặc điểm tính cách bình thường, IronWill, WeakSoul, Nymph), ví dụ:
WiseMan (+2 DEF) có thể thêm WeakSoul hoặc đặc điểm tính cách bình thường, đổi lại WiseMan sẽ bị -6 DEF (8 - 6 = 2 DEF, 5 - 6 = -1 DEF), nhưng không thể thêm IronWill.
KnightBlood (+6 DEF) có thể thêm IronWill hoặc đặc điểm tính cách bình thường, đổi lại KnightBlood sẽ bị -2 DEF cộng thêm nên chỉ được +4 DEF (2 + 4 = 6 DEF, 5 + 4 = 9 DEF), nhưng không thể thêm WeakSoul;
3. Các chức nghiệp nên bị giảm chỉ số cộng thêm theo công thức như sau:
1 DEF ≈ 2.5 WIS = 1.25 ATK = 2.5 SUR = 2.5 SCU = 2.5 CON = 7.5 HP = 9.375 STA (18.75W).
1 CON = 3 HP = 3.75 STA (7.5W) = 15W, STA luôn tăng W.
2 Skill WaterStaffWiseMan và FireStaffWiseMan = 5 WIS + 5 WIS + 1.067 CON (8W + 8W = 16W), 2 Skill BloodyBullet và BloodWave = 5 WIS + 5 WIS + 0.933 CON (8W + 6W = 14W).
IronWill lời ≈ 8 điểm kỹ năng sau khi trừ lượng CON [95%HP, 95%STA (95%W)] giảm cho nên các chức nghiệp khi +- chỉ nên tính toán sao cho chỉ lời 8 điểm kỹ năng;
4. Will, MoveSpeed, Weak, Sexy không quan trọng, coi chúng như là lợi ích riêng hay tác dụng phụ của các chức nghiệp là được;
5. Chỉ số cộng thêm của các chức nghiệp bằng nhau là cân bằng rồi, không cần cân bằng gì nữa đâu, còn lại tùy vào vấn đề kỹ năng của mỗi người thôi;
 

Вложения

Screenshot_2024-10-08-18-55-55-334_com.tuyware.jsongenie.jpg Screenshot_2024-10-08-20-15-29-994_com.tuyware.jsongenie.jpg Screenshot_2024-10-08-20-16-42-472_com.tuyware.jsongenie.jpg Screenshot_2024-10-08-20-17-24-719_com.tuyware.jsongenie.jpg
Последнее редактирование:

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
191
Реакции
102
Возраст
32
Если не брать первые 3 черты, открывается мультикласс… А если хорошо в этом мультиклассе качнуться - то первые черты, все три, будут заблокированы автоматически.
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
0
Сообщения
229
Реакции
236
Надо не просто чтоб ошибок не было, а чтоб с «mana» можно было работать теми же командами, которые применимы и к «health».

————————————

Кстати… Я тут пытался создать универсальный загрузчик json файлов из папки мода в игру. Чтоб можно было просто накидать их в аналогичные папки в моде, и изменять их, и все файлы автоматически бы подгружались в игру, если новое и уникальное - то как новая «штука», а если есть совпадения с существующими, то делать перезапись.
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}"
  
        FileGetter.getFileList("#{modFolder}/Data/Effects/Skill/*.json").each{|file|
            add_new_smth(file, "skill")}
  
        FileGetter.getFileList("#{modFolder}/Data/Effects/States/*.json").each{|file|
            add_new_smth(file, "state")}
  
        FileGetter.getFileList("#{modFolder}/Data/Effects/Armors/*.json").each{|file|
            add_new_smth(file, "armor")}
  
        FileGetter.getFileList("#{modFolder}/Data/Effects/Items/*.json").each{|file|
            add_new_smth(file, "item")}
  
        FileGetter.getFileList("#{modFolder}/Data/Effects/Weapons/*.json").each{|file|
            add_new_smth(file, "weapon")}
    end

    def self.add_new_smth(path, type)  #Если хотите использовать для полной перезаписи существующей статы, то в json файле должно быть «id» «name» и «item_name» как в оригинальном. С учетом скрытых в rvdata2 данных статы. А если хотите, чтоб стата была новой, то не указывайте id, а name и item_name берите уникальные. Если укажите id - то произойдет перезапись.
  
        if type == "state"
            data = $data_states
            data_name = $data_StateName
        elsif type == "skill"
            data = $data_skills
            data_name = $data_SkillName
        elsif type == "item"
            data = $data_items
            data_name = $data_ItemName
        elsif type == "weapon"
            data = $data_weapons
            data_name = $data_ItemName
        elsif type == "armor"
            data = $data_armors
            data_name = $data_ItemName
        else
            return
        end
  
        tmpid = data.length
        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"]
        elsif temp_hash["name"] != nil && data_name[temp_hash["name"]] != nil
            data_name[temp_hash["name"]].load_additional_data(path)
            return
        end
  
        if type == "state"
            data << RPG::State.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "skill"
            data << RPG::Skill.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "item"
            data << RPG::Item.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "weapon"
            data << RPG::Weapon.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "armor"
            data << RPG::Armor.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        end

    end
end

module FileGetter
    class << self
        alias_method :load_skill_from_json_UNIQUE_CODENAME, :load_skill_from_json
    end
 
    #Перезапись существующих «arpg» навыков и установка новых из папки Data/Effects/Skill/. Предупрждаю. Файлы должны быть полными. Работает в том числе с навыками, у которых не указано name, и которые в игре невидимы для игрока.
    def self.load_skill_from_json(target="Data/Effects/Skill/")
        mod_name = "MOD FOLDER NAME"
        modFolder = "ModScripts/_Mods/#{mod_name}"
        skills1 = load_skill_from_json_UNIQUE_CODENAME(target)
        skills2 = load_skill_from_json_UNIQUE_CODENAME("#{modFolder}/#{target}")
        skills = skills1.merge(skills2)
        return skills
    end
end
Крутотень!) Но у меня все подобные штуки не работали в текущей версии игры.))
 

NâmBờQuanh

Пользователь
Регистрация
25.09.2024
Темы
0
Сообщения
18
Реакции
4
Возраст
20
Если не брать первые 3 черты, открывается мультикласс… А если хорошо в этом мультиклассе качнуться - то первые черты, все три, будут заблокированы автоматически.
Tôi không biết mình có hiểu đúng ý của bạn không nhưng bỏ hạn chế trong 92_Game_Actor_Traits được mà.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
191
Реакции
102
Возраст
32
Этот код, который я скинул - работает. По крайней мере, в 0.9.3.0
 

NâmBờQuanh

Пользователь
Регистрация
25.09.2024
Темы
0
Сообщения
18
Реакции
4
Возраст
20
Tôi nghĩ rằng chẳng có ai thèm lựa chọn đặc điểm Pessimist nên Tôi đã tăng sức mạnh cho Pessimist thêm *1.047 ATK mỗi stack MoodBad trong MoodBad.json để khi đủ 4 stack, Lona sẽ nhận thêm tối đa khoảng 120% ATK. Tôi không biết làm vậy có mất cân bằng game quá không, mọi người thấy thế nào. Và tôi cũng xin lỗi mọi người vì tôi có hơi bị ám ảnh sự hoàn hảo và cân bằng nên mong mọi người tha thứ cho.
 

Вложения

Screenshot_2024-10-08-20-36-03-744_com.tuyware.jsongenie.jpg

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
0
Сообщения
229
Реакции
236
Tôi nghĩ rằng chẳng có ai thèm lựa chọn đặc điểm Pessimist nên Tôi đã tăng sức mạnh cho Pessimist thêm *1.047 ATK mỗi stack MoodBad trong MoodBad.json để khi đủ 4 stack, Lona sẽ nhận thêm tối đa khoảng 120% ATK. Tôi không biết làm vậy có mất cân bằng game quá không, mọi người thấy thế nào. Và tôi cũng xin lỗi mọi người vì tôi có hơi bị ám ảnh sự hoàn hảo và cân bằng nên mong mọi người tha thứ cho.
Я человек спокойный и легкомысленный. Экспериментируй в свое удовольствие. 🙃
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
191
Реакции
102
Возраст
32
Кстати…
Я посмотрел лог разраба игры…
И он сделал защиту для mood. Теперь если mood больше 100, по идее, не должны глючить лица.
Это сделано в версии 0.9.3.0
Так что, теперь можно повышать максимум mood. Все что больше 100, для графики равняется 100.
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
0
Сообщения
229
Реакции
236
Надо не просто чтоб ошибок не было, а чтоб с «mana» можно было работать теми же командами, которые применимы и к «health».

————————————

Кстати… Я тут пытался создать универсальный загрузчик json файлов из папки мода в игру. Чтоб можно было просто накидать их в аналогичные папки в моде, и изменять их, и все файлы автоматически бы подгружались в игру, если новое и уникальное - то как новая «штука», а если есть совпадения с существующими, то делать перезапись.
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}"
 
        FileGetter.getFileList("#{modFolder}/Data/Effects/Skill/*.json").each{|file|
            add_new_smth(file, "skill")}
 
        FileGetter.getFileList("#{modFolder}/Data/Effects/States/*.json").each{|file|
            add_new_smth(file, "state")}
 
        FileGetter.getFileList("#{modFolder}/Data/Effects/Armors/*.json").each{|file|
            add_new_smth(file, "armor")}
 
        FileGetter.getFileList("#{modFolder}/Data/Effects/Items/*.json").each{|file|
            add_new_smth(file, "item")}
 
        FileGetter.getFileList("#{modFolder}/Data/Effects/Weapons/*.json").each{|file|
            add_new_smth(file, "weapon")}
    end

    def self.add_new_smth(path, type)  #Если хотите использовать для полной перезаписи существующей статы, то в json файле должно быть «id» «name» и «item_name» как в оригинальном. С учетом скрытых в rvdata2 данных статы. А если хотите, чтоб стата была новой, то не указывайте id, а name и item_name берите уникальные. Если укажите id - то произойдет перезапись.
 
        if type == "state"
            data = $data_states
            data_name = $data_StateName
        elsif type == "skill"
            data = $data_skills
            data_name = $data_SkillName
        elsif type == "item"
            data = $data_items
            data_name = $data_ItemName
        elsif type == "weapon"
            data = $data_weapons
            data_name = $data_ItemName
        elsif type == "armor"
            data = $data_armors
            data_name = $data_ItemName
        else
            return
        end
 
        tmpid = data.length
        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"]
        elsif temp_hash["name"] != nil && data_name[temp_hash["name"]] != nil
            data_name[temp_hash["name"]].load_additional_data(path)
            return
        end
 
        if type == "state"
            data << RPG::State.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "skill"
            data << RPG::Skill.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "item"
            data << RPG::Item.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "weapon"
            data << RPG::Weapon.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        elsif type == "armor"
            data << RPG::Armor.new
                data[tmpid].id = tmpid
                data[tmpid].load_additional_data(path)
        end

    end
end

module FileGetter
    class << self
        alias_method :load_skill_from_json_UNIQUE_CODENAME, :load_skill_from_json
    end
 
    #Перезапись существующих «arpg» навыков и установка новых из папки Data/Effects/Skill/. Предупрждаю. Файлы должны быть полными. Работает в том числе с навыками, у которых не указано name, и которые в игре невидимы для игрока.
    def self.load_skill_from_json(target="Data/Effects/Skill/")
        mod_name = "MOD FOLDER NAME"
        modFolder = "ModScripts/_Mods/#{mod_name}"
        skills1 = load_skill_from_json_UNIQUE_CODENAME(target)
        skills2 = load_skill_from_json_UNIQUE_CODENAME("#{modFolder}/#{target}")
        skills = skills1.merge(skills2)
        return skills
    end
end
Мой фрагмент выполняющий проверку и вытаскивающий всякие штуки, выглядит вот так:
Ruby:
        # Проверяет и переписывает или добавляет Оружие, Навыки или Предметы
        categories = ['Item', 'Skill', 'Weapons']
        categories.each do |category|
        # Получить список / Get a list
        file_list = FileGetter.getFileList(File.join(modFolder, "#{category}", '*.json'))
        file_list.each do |tgt_path|
            # Декодирует JSON / Decodes JSON
            tmp_json_data = JSON.decode(open(tgt_path).read)
            # Проверка / Check
            existing_item = case category
            when 'Item'
                $data_items.find { |item| item && item.item_name == tmp_json_data["item_name"] }
            when 'Skill'
                $data_skills.find { |item| item && item.item_name == tmp_json_data["item_name"] }
            when 'Weapons'
                $data_weapons.find { |item| item && item.item_name == tmp_json_data["item_name"] }
            end
            if existing_item
                # Если существует, обновить / If exists, update
                existing_item.load_additional_data(tgt_path)
            else
                # Если нет, добавить новое / If not, add a new one
                new_item = case category
                        when 'Item'
                            RPG::Item.new
                        when 'Skill'
                            RPG::Skill.new
                        when 'Weapons'
                            RPG::Weapon.new
                end
                new_item.load_additional_data(tgt_path)
                new_item.id = case category
                        when 'Item'
                            $data_items.length
                        when 'Skill'
                            $data_skills.length
                        when 'Weapons'
                            $data_weapons.length
                end
                case category
                        when 'Item'
                            $data_items << new_item
                        when 'Skill'
                            $data_skills << new_item
                        when 'Weapons'
                            $data_weapons << new_item
                end
            end
        end
            # Загрузка навыков / Load skills
            if category == 'Skill'
                tgtSkills = FileGetter.load_skill_from_json(target="#{modFolder}/Skill/")
                $data_arpgskills = $data_arpgskills.merge(tgtSkills)
            end
        end
 
Сверху Снизу