Постоянные данные
Информация:
Автор: Стрелок, он же Халфер, он же Стрелокхалфер
Версия: 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 за помощь с хэш-таблицами и загрузкой.