Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Постоянные данные

Постоянные данные 9 года 10 мес. назад #77644

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Программист RubyПереводчикДаритель Стимкея2 место 2 место Сбитая кодировкаОрганизатор конкурсов
Постоянные данные
Информация:
Автор: Стрелок, он же Халфер, он же Стрелокхалфер
Версия: 1.0
Тип: Компонент для управления переменными

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

Код:
=begin
    Постоянные данные
    Автор: strelokhalfer
    При поддержке DeadElf
    Требования: Мозг и прямые руки :)
    Описание:
      Данный скрипт позволяет запоминать значения определенных переменных
      и переключателей в отдельный файл.
    Лицензия: 
    Скрипт защищён лицензией CC BY-NC-ND 4.0, что означает:
      Вы МОЖЕТЕ распространять скрипт, использовать в проектах, НО:
        Вы ОБЯЗАНЫ указать моё авторство.
        Вы НЕ МОЖЕТЕ использовать скрипт в коммерческих проектах,
          но вы МОЖЕТЕ узнать стоимость разрешения, написав мне на
            [email protected]
        Вы НЕ МОЖЕТЕ изменять данный скрипт или делать свой на основе этого.
    Использование:
      Можно использовать для создания "Новой игры+"
      Все настройки хранятся в модуле 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 за помощь с хэш-таблицами и загрузкой.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Последнее редактирование: 9 года 3 мес. назад от strelokhalfer. Причина: Обновлено демо.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Sn@ke, Lekste, Ren310, Демий, MaltonTheWarrior, Eokati, TheMaximGames, peter8031983, DesKarD

Постоянные данные 9 года 10 мес. назад #77645

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист JavaScript Программист RubyОраторВетеранДаритель Стимкея
Круто. Хотя лучше было бы сделать какой-нибудь префикс к имени сохраняемого свитча и определять, какие из них сохранять, автоматически.
Было б проще использовать и более понятно для пользователей.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Постоянные данные 9 года 10 мес. назад #77646

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоПроект месяца 1 местоПроект месяца 2 местоУчительВетеран1 место в ГотвПрограммист RubyОрганизатор конкурсовПисатель 3 место
На будущее, Стрелок ^_^
Администратор запретил публиковать записи гостям.

Постоянные данные 9 года 10 мес. назад #77648

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Программист RubyПереводчикДаритель Стимкея2 место 2 место Сбитая кодировкаОрганизатор конкурсов
Я не понял, как имя получить.
Но на будущее возьму.
Йелф, ну ты(
У меня же все в шапке скрипта описано. или мне в пост вынести?
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Последнее редактирование: 9 года 10 мес. назад от strelokhalfer.
Администратор запретил публиковать записи гостям.

Постоянные данные 9 года 10 мес. назад #77649

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоПроект месяца 1 местоПроект месяца 2 местоУчительВетеран1 место в ГотвПрограммист RubyОрганизатор конкурсовПисатель 3 место
Стрелок, у нас все скрипты так оформляются со времени вступления шаблона в действие и утверждения его администрацией) Выноси в пост, никто не читает инструкций в скриптах ^_^
Администратор запретил публиковать записи гостям.

Постоянные данные 9 года 10 мес. назад #77656

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Программист RubyПереводчикДаритель Стимкея2 место 2 место Сбитая кодировкаОрганизатор конкурсов
Чуток пофиксил скрипт и добавил шапку.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.

Постоянные данные 9 года 10 мес. назад #77657

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • УчительПаладинВетеранОраторПроект месяца 2 местоПроект месяца 3 местоРазработчик2 место Программист RubyПрограммист JavaScript
если про имя переключателей/переменных, то можно так: $data_system.switches[data_id]
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer

Постоянные данные 9 года 3 мес. назад #84401

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Программист RubyПереводчикДаритель Стимкея2 место 2 место Сбитая кодировкаОрганизатор конкурсов
Обновлено демо и скрипт.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna
Модераторы: NeKotZima
Время создания страницы: 0.271 секунд