Постоянные данные
Информация:
Автор: Стрелок, он же Халфер, он же Стрелокхалфер
Версия: 1.0
Тип: Компонент для управления переменными

Описание:
Данный скрипт позволяет запоминать значения определенных переменных и переключателей в отдельный файл. Подходит, например, для возможности "Новая игра +"

Код:
Код:
=begin
    Постоянные данные
    Автор: strelokhalfer
    При поддержке DeadElf
    Требования: Мозг и прямые руки :)
    Описание:
      Данный скрипт позволяет запоминать значения определенных переменных
      и переключателей в отдельный файл.
    Лицензия: 
    Скрипт защищён лицензией CC BY-NC-ND 4.0, что означает:
      Вы МОЖЕТЕ распространять скрипт, использовать в проектах, НО:
        Вы ОБЯЗАНЫ указать моё авторство.
        Вы НЕ МОЖЕТЕ использовать скрипт в коммерческих проектах,
          но вы МОЖЕТЕ узнать стоимость разрешения, написав мне на
            strelokhalfer@gmail.com
        Вы НЕ МОЖЕТЕ изменять данный скрипт или делать свой на основе этого.
    Использование:
      Можно использовать для создания "Новой игры+"
      Все настройки хранятся в модуле Settings
      Для добавления своей настройки, просто напишите новую строку:
      ["тип данных", "индекс", "id карты", "id события"]
      "тип данных" - может быть:
                     "switch"(переключатель)
                     "variable"(переменная)
                     "selfswitch"(Локальный переключатель)
      "индекс" - если это переключатель или переменная, то это номер в
                 базе данных. Если локальный переключатель, то это буква.
      "id карты" - для локальных переключателей.
      "id события" - для локальных переключателей.
=end
#РЕДАКТИРОВАТЬ ТОЛЬКО В ЭТОМ МОДУЛЕ
module Settings
  PERSISTENT = [
  #Не забывайте ставить запятые!
  ["switch", 1],
  ["selfswitch", "A", 1, 1],
  ["variable", 1]
  ]
end
#НАСТРОЙКИ КОНЧИЛИСЬ
#~ Модуль данных
module DataManager
  def self.saveper  #Метод сохранения
    File.open("Persistent.rvdata2", "wb") do |file|
      $game_system.on_before_save
      Marshal.dump(make_persistent_contents, file)
    end
  end
  #--------------------------------------------------------------------------
  # * Execute Load (No Exception Processing)
  #--------------------------------------------------------------------------
  def self.loadper
    if (File.exist?("Persistent.rvdata2"))
      File.open("Persistent.rvdata2", "rb") do |file|
        extract_persistent_contents(Marshal.load(file))
      end
    else
      saveper
    end
    return true
  end
 
  def self.make_persistent_contents
    persistent=[] 
    Settings::PERSISTENT.each_index { |i|
      data = Settings::PERSISTENT[i]
      case data[0].to_s
        when 'switch'
          persistent.push( [ data[0], data[1], $game_switches[ data[1] ] ]) # вгоняем новый элемент с данными
        when 'variable'
          persistent<<[ data[0], data[1], $game_variables[ data[1] ]]# выглядит по другому, но работает точно также
        when 'selfswitch'
          persistent<<[ data[0], data[2], data[3], data[1], $game_self_switches[ [ data[2], data[3], data[1] ] ] ]
      end
    }
    persistent
  end
  
  def self.extract_persistent_contents(persistent)
    persistent.each{|data|
    case data[0].to_s
      when 'switch'
        $game_switches[ data[1] ] = data[2]
      when 'variable'
        $game_variables[ data[1] ] = data[2]
      when 'selfswitch'
        $game_self_switches[ [ data[1], data[2], data[3] ] ] = data[4]
      end
    }
  end
  class << self
    alias old_create_game_objects create_game_objects
    def create_game_objects
      old_create_game_objects
      loadper
    end
  end
end
 
#~ Переопределяю действие при сохранении
class Scene_Save
  alias mody_savefile_ok on_savefile_ok #Делаю псевдоним метода
  def on_savefile_ok
    mody_savefile_ok  #Сохранить игру
    DataManager.saveper #Сохранить данные
  end
end
 
#~ Сохранить данные при выходе из игры
class Scene_End
  alias title_psave command_to_title #Делаю псевдоним метода
  def command_to_title
    DataManager.saveper #Сохранить данные
    title_psave #Оригинальный метод
  end
  alias mody_shutdown command_shutdown #Делаю псевдоним метода
  def command_shutdown
    DataManager.saveper #Сохранить данные
    mody_shutdown #Оригинальный метод
  end  
end
Скачать:
Демо (Архив 7z, 1.3 МБ).

Благодарности:
DeadElf79 за помощь с хэш-таблицами и загрузкой.