Плохо! Плохо!:  0
Страница 1 из 7 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 64

Тема: [VX ACE][MV][MZ] Время/Дата (Game Time)

  1. #1

    По умолчанию [VX ACE][MV][MZ] Время/Дата (Game Time)

    Время/Дата
    Автор: DKPlugins

    Описание:
    Система времени.


    Мейкер: VX Ace
    Версия: 6.1 Финальная Версия от 03.10.19
    Тип: Добавляющий возможности

    Использование:
    Вся инструкция и настройки в шапке скрипта!

    Внимание!
    Нововведений в данном скрипте больше не будет!

    Исправление ошибок:
    Спойлер spoiler:

    Если вы не используете скрипт khas на освещение и встречаете такую ошибку line 994: NoMethodError occurred.
    undefined method `effect_surface' for #<Game_Map:0x8b24c44>
    отредактируйте скрипт на 994 строчке.
    На 994 строчке находится
    Код:
    tint_color = $game_map.effect_surface.color
    вставьте выше этой строчки
    Код:
    return if !GAME_TIME_LIGHT_IN_BATTLE
    Должно получиться так:
    Код:
    return if !GAME_TIME_LIGHT_IN_BATTLE
    tint_color = $game_map.effect_surface.color
    И отключите параметр GAME_TIME_LIGHT_IN_BATTLE в настройках скрипта!



    Скрипт:

    Спойлер Код:
    Код:
    =begin
    ###############################################################################
    #                                                                             #
    #          					Game Time (Время/Дата)  	  				   	  #
    #                                                                             #
    ###############################################################################
    
    Автор: DKPlugins
    Версия: 6.1 Финальная версия
    Релиз от: 03.10.19
    Существует дополнение: Game Time Settings
    
    Что нового в этой версии:
    - Немного изменены вызовы скрипта
    - Добавлены операции над временем
    - Множественные исправления и улучшения
    
    ############# ИНСТРУКЦИЯ #######################################################
    
      Чтобы установить новую дату, воспользуйтесь скриптом:
      set_game_time(sec, min, hour, day, dayweek, month, year)
      sec - секунды
      min - минуты
      hour - час
      day - день
      dayweek - день недели
      month - месяц
      year - год
      Пример: set_game_time(0, 15, 10, 3, 2, 3, 479)
      
      Чтобы получить текущую дату используйте:
      $Game_Time.sec
    	sec, min, hour, day, dayweek, month, year
    
    	Чтобы сохранить текущее время или загрузить ранее сохраненное время, используйте:
    	save_game_time
    	load_game_time
    
      Чтобы добавить время, используйте скрипт:
      change_game_time(:min, 5) - добавит 5 минут
      change_game_time(:hour, -10) - удалит 10 часов
      Возможно: :sec, :min, :hour, :day, :month, :year
    
    	Чтобы принудительно показать / скрыть окно времени, воспользуйтесь
    	game_time_window_visible(flag)
    	где flag может быть или true, или false (показать / скрыть)
    
    	Чтобы включить / отлючить переключение переключателя в дневном диапозоне, используйте
    	setup_use_khas_day_light(flag)
    	где flag может быть или true, или false (вкл / выкл)
    
    	Чтобы изменить скорость времени, вызовите скрипт:
    	speed может быть от 1 до 120
    	change_game_time_speed(speed)
    	
    	Чтобы остановить обновление времени:
    	stop_update_game_time
    
    	Чтобы узнать остановлено ли время:
    	Вернет true, если время обновляется, иначе false
    	game_time_update?
    
    	Чтобы возобновить обновление времени:
    	continue_update_game_time
    	
    	Чтобы установить час статического освещения на карте:
    	hour - час
    	set_game_time_static_light_hour(hour)
    
    	# Чтобы на определенной карте остановить обновление времени, 
    		пропишите в заметках карты: <No Game Time Update>
    
    	# Чтобы на определенной карте выставить освещение определенного часа, 
    		используйте заметки карты: <Light Hour = N>
    	# где N - нужный час
    
    	### ДЛЯ БОЛЕЕ ОПЫТНЫХ ПОЛЬЗОВАТЕЛЕЙ И РАЗРАБОТЧИКОВ ###
    
    	класс Game_Time поддерживает создание следующих экземпляров:
    	1. Без параметров (будет создано время на основе настроек скрипта)
    	Пример: $Game_Time = Game_Time.new
    
    	2. С параметром в виде другого времени (объект класса Game_Time)
    	Пример: $Saved_Game_Time = Game_Time.new($Game_Time)
    
    	3. С параметрами в виде чисел времени и даты (7 параметров - sec, min, hour, day, dayweek, month, year)
    	Пример: time = Game_Time.new(0, 15, 10, 3, 2, 3, 479)
    
    	для класса Game_Time определены следующие операции:
    	Больше >
    	Вернет true, если время слева больше времени справа
    	Пример: $Game_Time > $Saved_Game_Time
    
    	Меньше <
    	Вернет true, если время слева меньше времени справа
    	Пример: $Game_Time < $Saved_Game_Time
    
    	Больше и/или равно >=
    	Вернет true, если время слева больше и/или равно времени справа
    	Пример: $Game_Time >= $Saved_Game_Time
    
    	Меньше и/или равно <=
    	Вернет true, если время слева меньше и/или равно времени справа
    	Пример: $Game_Time <= $Saved_Game_Time
    
    	Операции сравнения == нет, но есть 2 метода сравнения:
    	equals_without_seconds(time) - сравнение без секунд
    	Вернет true, если все параметры кроме секунд равны
    	Пример: $Game_Time.equals_without_seconds($Saved_Game_Time)
    
    	equals_with_seconds(time) - сравнение с секундами
    	Вернет true, если все параметры вместе с секундами равны
    	Пример: $Game_Time.equals_with_seconds($Saved_Game_Time)
    
    =end
    
    ############# НАCТРОЙКА ########################################################
    
    module Game_Date_Settings
    	
    	# Название дней недели
    	GAME_TIME_DAYS_WEEK = [ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
    	
    	# Название месяцев
    	GAME_TIME_MONTHS = [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", 
    		"Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ]
    	
    	# Формативный вывод месяцев
    	GAME_TIME_FORMAT_MONTHS = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", 
    		"Сентября", "Октября", "Ноября", "Декабря" ]
    	
    end # module Game_Date_Settings
    
    module Game_Time_Settings
    	
    	include Game_Date_Settings
    	
    	#----- Начало настройки дня и ночи ---------------------------------------------	
    	# Использовать смену дня и ночи (оттенки экрана) ? true - да, false - нет
    	GAME_TIME_LIGHT_TINT = true
    	
    	# Использовать стандартную смену дня и ночи ? true - да, false - нет
    	# Встроенная в скрипт функция
    	# Если используете эту опцию, то установите GAME_TIME_KHAS_LIGHT = false и GAME_TIME_VICTOR_LIGHT = false
    	GAME_TIME_DEFAULT_LIGHT = false	
    	
    	# Использовать Khas Light Effects ? true - да, false - нет
    	# Требуется Khas Light Effects
    	GAME_TIME_KHAS_LIGHT = true
    	
    	# Использовать Victor Light Effects ? true - да, false - нет
    	# Требуется Victor Light Effects
    	GAME_TIME_VICTOR_LIGHT = false
    	
    	# Использовать автоматическое переключение переключателя в диапазоне времени ?
    	# Только если вы используете Khas Light Effect
    	# Динамическая смена дня и ночи сама контролирует переключатель, если он используется
    	$GAME_TIME_USE_KHAS_DAY_LIGHT = true
    	# Номер переключателя, который будет выключаться внутри диапазона времени
    	# Если вы используете $GAME_TIME_USE_KHAS_DAY_LIGHT
    	# Чтобы не использовать установите -1
    	GAME_TIME_KHAS_LIGHT_SWITCH = 3
    	# Диапазон времени, когда переключатель выключен
    	# Если вы используете $GAME_TIME_USE_KHAS_DAY_LIGHT
    	GAME_TIME_KHAS_DAY_LIGHT = [8, 19]
    	
    	# Использовать динамическую смену дня и ночи ?
    	GAME_TIME_DYNAMIC_LIGHT = false
    	
    	# Использовать оттенки экрана в битвах ? true - да, false - нет
    	GAME_TIME_LIGHT_IN_BATTLE = true
    	
    	# Настройка оттенков экрана для каждого часа.
    	# Если используете GAME_TIME_DYNAMIC_LIGHT, то эта настройка ничего не даст.
    	# Я подбирал оптимальные настройки для Khas Light Effect
    	# Диапазон значений: 0-255
    	# [ Color.new(RED, GREEN, BLUE, ALPHA) ]
    	GAME_TIME_TINTS = [ Color.new(30, 0, 40, 165), 	# => 0 час
    		Color.new(20, 0, 30, 165), 		 			# => 1 час
    		Color.new(20, 0, 30, 155), 		 			# => 2 час
    		Color.new(10, 0, 30, 145), 		 			# => 3 час
    		Color.new(10, 0, 20, 125), 		 			# => 4 час
    		Color.new(0, 0, 20, 125), 		   		# => 5 час
    		Color.new(75, 20, 20, 115), 		 		# => 6 час
    		Color.new(100, 30, 10,105),    			# => 7 час
    		Color.new(75, 20, 10, 85), 		 			# => 8 час
    		Color.new(0, 0, 0, 55), 				 		# => 9 час
    		Color.new(0, 0, 0, 30), 				 		# => 10 час
    		Color.new(0, 0, 0, 10), 				 		# => 11 час
    		Color.new(0, 0, 0, 0), 				 			# => 12 час
    		Color.new(0, 0, 0, 0), 				 			# => 13 час
    		Color.new(0, 0, 0, 0), 				 			# => 14 час
    		Color.new(0, 0, 0, 5), 				 			# => 15 час
    		Color.new(0, 0, 0, 15), 				 		# => 16 час
    		Color.new(0, 0, 10, 45), 			 			# => 17 час
    		Color.new(75, 20, 20, 85), 		 			# => 18 час
    		Color.new(100, 40, 30, 105),  	 		# => 19 час
    		Color.new(75, 20, 40, 125), 		 		# => 20 час
    		Color.new(10, 0, 45, 140), 		 			# => 21 час
    		Color.new(20, 0, 45, 145), 		 			# => 22 час
    		Color.new(20, 0, 50, 160) ]		 			# => 23 час
    	
    	#----- Конец настройки дня и ночи ----------------------------------------------
    	
    	#----- Начало настройки времени ------------------------------------------------
    	
    	# Использовать время и дату с компьютера ? true - да, false - нет
    	# Обновляется постоянно
    	GAME_TIME_REAL_TIME = false
    	
    	# Настройка начала игры! Если не используете реальное время.
    	GAME_TIME_START_SECONDS 	= 0 # Секунды
    	GAME_TIME_START_MINUTES 	= 33 # Минуты
    	GAME_TIME_START_HOUR  		= 15 # Час
    	GAME_TIME_START_DAY   		= 15 # День
    	GAME_TIME_START_DAYWEEK 	= 4 # День недели (0 - Понедельник, 6 - Воскресенье)
    	GAME_TIME_START_MONTH 		= 9 # Месяц (0 - январь, 11 - декабрь)
    	GAME_TIME_START_YEAR 			= 2015 # Год
    	
    	# Количество секунд в одной минуте (минимум 1)
    	GAME_TIME_SECONDS_IN_MINUTE = 10
    	# Количество минут в одном часе (минимум 1)
    	GAME_TIME_MINUTES_IN_HOUR = 60
    	# Количество часов в одном дне (минимум 1)
    	GAME_TIME_HOURS_IN_DAY = 24
    	
    	# Количество дней в каждом месяце
    	GAME_TIME_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    	
    	# Обновлять время в меню ? true - да, false - нет
    	GAME_TIME_UPDATE_TIME_IN_MENU = false
    	
    	# Использовать обновление времени в битве ? true - да, false - нет
    	GAME_TIME_UPDATE_TIME_IN_BATTLE = false
    	
    	# Остановить время, если на экране сообщение ? true - да, false - нет
    	GAME_TIME_STOP_TIME_IN_MESSAGE = true
    	
    	# Скорость времени
    	# (Минимум - 1, Максимум - 120)
    	# Чем меньше цифра, тем быстрее идет время
    	GAME_TIME_SPEED = 1
    	
    	# Отображать секунды в часах ? true - да, false - нет
    	GAME_TIME_WINDOW_SECONDS = false
    	
    	# Частота обновления ":" в отображении времени (30 - оптимально)
    	# -1 чтобы не использовать
    	GAME_TIME_BLINK_SPEED = 30
    	
    	# Настройка часов на карте игры
    	# GAME_TIME_MAP_CLOCK = {} чтобы не отображать часы в игре
    	# :x => значение (координата х) (требуется обязательно)
    	# :y => значение (координата у) (требуется обязательно)
    	# :width => значение (ширина окна) (требуется обязательно)
    	# :height => значение (высота окна) (требуется обязательно)
    	# :windowskin => "имя_файла" (обложка окна из папки Graphics/System)
    	# :modify => true/false (измененный вид окна)
    	# :opacity => [значение, значение, значение] (прозрачность окна, прозрачность текста, прозрачность фона)
    	# :z => значение (глубина окна)
    	# :tone => Tone.new(Red, Green, Blue) (тон окна)
    	# :font => ["имя_шрифта", true/false (жирный текст), true/false (курсив)]
    	# :custom_clock_date => [ "параметры" ]
    	# Параметры:
    	# День, День недели, Месяц(число), Месяц(название), Год
    	# Также возможны свои параметры
    	# :custom_clock_time => [ "параметры" ]
    	# Параметры:
    	# Час, Двоеточие, Минуты, Секунды
    	# Также возможны свои параметры
    	# Можно указывать только требующиеся настройки (размеры окна)
    	# -1 для значений, чтобы использовать стандартное значение (кроме размеров окна)
    	GAME_TIME_MAP_CLOCK = {
    		:x => Graphics.width - 192,
    		:y => Graphics.height - 72,
    		:width => 192,
    		:height => 72,
    		:windowskin => "",
    		:modify => true,
    		:opacity => [-1, -1, -1],
    		:z => -1,
    		:tone => Tone.new(0, 0, 0),
    		:font => [-1, false, false],
    		:custom_clock_date => [],
    		:custom_clock_time => []
    	}
    	
    	# Настройка часов в меню игры
    	# Внимание! Если Вы не используете обновление времени в меню
    	# Вместо "Двоеточие" в custom_clock_time укажите ":"
    	# GAME_TIME_MENU_CLOCK = {} чтобы не отображать часы в меню
    	GAME_TIME_MENU_CLOCK = {
    		:x => 0,
    		:y => 264,
    		:width => 160,
    		:height => 48,
    		:z => -1,
    		:opacity => [],
    		:windowskin => "",
    		:tone => Tone.new(0, 0, 0),
    		:font => [-1, false, true],
    		:custom_clock_date => [], #["День", " ", "Месяц(название)", " ", "Год"],
    		:custom_clock_time => ["Час", ":", "Минуты"]
    	}
    	
    	# Настройка часов в битве
    	# Внимание! Если Вы не используете обновление времени в битве
    	# Вместо "Двоеточие" в custom_clock_time укажите ":"
    	# GAME_TIME_BATTLE_CLOCK = {} чтобы не отображать часы в битве
    	GAME_TIME_BATTLE_CLOCK = {
    		#~ :x => 0,
    		#~ :y => 0,
    		#~ :width => 192,
    		#~ :height => 72,
    		#~ :z => -1,
    		#~ :opacity => [],
    		#~ :windowskin => "",
    		#~ :tone => Tone.new(0, 0, 0),
    		#~ :font => [],
    		#~ :custom_clock_date => [],
    		#~ :custom_clock_time => []
    	}
    	
    	# Символ кнопки для отображения / скрытия окна времени
    	# -1 чтобы не использовать
    	GAME_TIME_WINDOW_BUTTON = :Z
    	
    	# Показывать окно времени в начале игры ? true - да, false - нет
    	$GAME_TIME_SHOW_WINDOW = true
    	
    	############# КОНЕЦ НАСТРОЙКИ ################################################
    	
    end # module Game_Time_Settings
    
    class Game_Time_Functions
    	
    	include Game_Time_Settings
    	
    	def self.game_time_create_objects # создание объектов
    		$Game_Time = Game_Time.new
    		$Game_Time_Tint = Game_Time_Tint.new
    		$Saved_Game_Time = Game_Time.new($Game_Time)
    	end
    	
    	def self.setup_use_khas_day_light(setup)
    		return if !GAME_TIME_KHAS_LIGHT
    		$GAME_TIME_USE_KHAS_DAY_LIGHT = setup
    	end
    	
    	def self.setup_khas_light_switch(setup) # устанавливаем переключателю значение
    		return if !GAME_TIME_KHAS_LIGHT || GAME_TIME_KHAS_LIGHT_SWITCH == -1
    		$game_switches[GAME_TIME_KHAS_LIGHT_SWITCH] = setup
    	end
    	
    	def self.check_khas_light_switch(hour)
    		setup = false
    		setup = true if hour < GAME_TIME_KHAS_DAY_LIGHT[0] || hour > GAME_TIME_KHAS_DAY_LIGHT[1]
    		setup_khas_light_switch(setup)
    	end
    	
    end # class Game_Time_Functions
    
    class Game_Time
    	
    	include Game_Time_Settings
    	
    	attr_reader :sec
    	attr_reader :min
    	attr_reader :hour
    	attr_reader :day
    	attr_reader :dayweek
    	attr_reader :month
    	attr_reader :year
    	attr_reader :time_count
    	attr_reader :time_speed
    	attr_accessor :time_update
    	
    	def initialize(*args)
    		set_time(GAME_TIME_START_SECONDS, GAME_TIME_START_MINUTES, GAME_TIME_START_HOUR, GAME_TIME_START_DAY, GAME_TIME_START_DAYWEEK, GAME_TIME_START_MONTH, GAME_TIME_START_YEAR) if args.empty?
    		set_time(args[0].sec, args[0].min, args[0].hour, args[0].day, args[0].dayweek, args[0].month, args[0].year) if args.size == 1 && args[0].is_a?(Game_Time)
    		set_time(args[0], args[1], args[2], args[3], args[4], args[5], args[6]) if args.size == 7
    		@time_speed = [[1, GAME_TIME_SPEED].max, 120].min
    		@time_update = true
    	end
    	
    	def time_speed=(speed)
    		@time_speed = [[1, speed].max, 120].min
    	end
    	
    	def update
    		return real_time if GAME_TIME_REAL_TIME
    		return if $game_message.busy? && GAME_TIME_STOP_TIME_IN_MESSAGE
    		return if !@time_update
    		@time_count += 1
    		return unless @time_count % @time_speed == 0
    		return add_sec(1)
    	end
    	
    	def >(time) # время слева больше времени справа
    		return true if @year > time.year
    		return true if @year == time.year && @month > time.month
    		return true if @year == time.year && @month == time.month && @day > time.day
    		return true if @year == time.year && @month == time.month && @day == time.day && @hour > time.hour
    		return true if @year == time.year && @month == time.month && @day == time.day && @hour == time.hour && @min > time.min
    		return @year == time.year && @month == time.month && @day == time.day && @hour == time.hour && @min == time.min && @sec > time.sec
    	end
    	
    	def <(time) # время слева меньше времени справа
    		return true if @year < time.year
    		return true if @year == time.year && @month < time.month
    		return true if @year == time.year && @month == time.month && @day < time.day
    		return true if @year == time.year && @month == time.month && @day == time.day && @hour < time.hour
    		return true if @year == time.year && @month == time.month && @day == time.day && @hour == time.hour && @min < time.min
    		return @year == time.year && @month == time.month && @day == time.day && @hour == time.hour && @min == time.min && @sec < time.sec
    	end
    	
    	def >=(time) # не меньше
    		return !(self < time)
    	end
    	
    	def <=(time) # не больше
    		return !(self > time)
    	end
    	
    	def equals_without_seconds(time)
    		return @year == time.year && @month == time.month && @day == time.day && @hour == time.hour && @min == time.min
    	end
    	
    	def equals_with_seconds(time)
    		return equals_without_seconds(time) && @sec == time.sec
    	end
    	
    	def set_time(sec, min, hour, day, dayweek, month, year)
    		@sec = sec
    		@min = min
    		@hour = hour
    		@day = day
    		@dayweek = dayweek
    		@month = month
    		@year = year
    		@time_count = 0
    	end
    	
    	def change_time(type, value)
    		text = "add_"
    		text = "rem_" if value < 0
    		value.abs.times do eval(text + type.to_s + "(1)") end
    	end
    	
    	def enable_update_dynamic_tints
    		return if !GAME_TIME_LIGHT_TINT || !GAME_TIME_DYNAMIC_LIGHT
    		$Game_Time_Tint.update_dynamic_tints = true
    	end
    	
    	def real_time # время с компьютера
    		@sec = Time.now.sec
    		@min = Time.now.min
    		@hour = Time.now.hour
    		if @day != Time.now.day
    			@day = Time.now.day
    			enable_update_dynamic_tints
    		end
    		@dayweek = Time.now.wday
    		if @month != Time.now.month - 1
    			@month = Time.now.month - 1
    			enable_update_dynamic_tints
    		end
    		@year = Time.now.year
    	end
    	
    	def add_sec(n = 1)
    		@sec += n
    		return unless @sec == GAME_TIME_SECONDS_IN_MINUTE
    		@sec = 0
    		add_min(1)
    	end
    	
    	def add_min(n = 1)
    		@min += n
    		return unless @min == GAME_TIME_MINUTES_IN_HOUR
    		@min = 0
    		add_hour(1)
    	end
    	
    	def add_hour(n = 1)
    		@hour += n
    		return unless @hour == GAME_TIME_HOURS_IN_DAY
    		@hour = 0
    		add_day(1)
    	end
    	
    	def add_day(n = 1)
    		@day += n
    		@dayweek += n
    		@dayweek = 0 if @dayweek == GAME_TIME_DAYS_WEEK.size
    		enable_update_dynamic_tints
    		return unless @day == GAME_TIME_DAYS[@month] + 1
    		@day = 1
    		add_month(1)
    	end
    	
    	def add_month(n = 1)
    		@month += n
    		enable_update_dynamic_tints
    		return unless @month == GAME_TIME_MONTHS.size
    		@month = 0
    		add_year(1)
    	end
    	
    	def add_year(n = 1)
    		@year += n
    	end
    	
    	def rem_sec(n = 1)
    		@sec -= n
    		return unless @sec == -1
    		@sec = GAME_TIME_SECONDS_IN_MINUTE - 1
    		rem_min(1)
    	end
    	
    	def rem_min(n = 1)
    		@min -= n
    		return unless @min == -1
    		@min = GAME_TIME_MINUTES_IN_HOUR - 1
    		rem_hour(1)
    	end
    	
    	def rem_hour(n = 1)
    		@hour -= n
    		return unless @hour == -1
    		@hour = GAME_TIME_HOURS_IN_DAY - 1
    		rem_day(1)
    	end
    	
    	def rem_day(n = 1)
    		@day -= n
    		@dayweek -= n
    		@dayweek = GAME_TIME_DAYS_WEEK.size - 1 if @dayweek == -1
    		enable_update_dynamic_tints
    		return unless @day == 0
    		@day = GAME_TIME_DAYS[@month - 1]
    		rem_month(1)
    	end
    	
    	def rem_month(n = 1)
    		@month -= n
    		enable_update_dynamic_tints
    		return unless @month == -1
    		@month = CALENDAR_MONTHS.size - 1
    		rem_year(1)
    	end
    	
    	def rem_year(n = 1)
    		@year -= n
    	end
    	
    end # class Game_Time
    
    class Game_Time_Tint < Sprite_Base
    	
    	include Game_Time_Settings
    	
    	attr_reader :static_light_hour
    	
    	def initialize
    		super
    		self.bitmap = Bitmap.new(Graphics.width, Graphics.height) if GAME_TIME_DEFAULT_LIGHT
    		self.z = 1
    		self.visible = false
    		@update_dynamic_tints = GAME_TIME_DYNAMIC_LIGHT
    		@static_light_hour = -1
    		update
    	end
    	
    	def update_dynamic_tints=(setup)
    		@update_dynamic_tints = setup
    		update if setup
    	end
    	
    	def static_light_hour=(hour)
    		@static_light_hour = hour
    		update
    	end
    	
    	def update
    		return if !GAME_TIME_LIGHT_TINT
    		return if @now_min == $Game_Time.min && @static_light_hour == -1
    		return use_default_light if GAME_TIME_DEFAULT_LIGHT
    		return use_khas_light if GAME_TIME_KHAS_LIGHT
    		return use_victor if GAME_TIME_VICTOR_LIGHT
    	end
    	
    	def settings
    		self.visible = false
    		@now_min = $Game_Time.min
    		@hour = $Game_Time.hour
    		if @static_light_hour != -1
    			@now_min = GAME_TIME_MINUTES_IN_HOUR / 2
    			@hour = @static_light_hour
    		end
    		Game_Time_Functions.check_khas_light_switch(@hour) if $GAME_TIME_USE_KHAS_DAY_LIGHT
    		return setup_dynamic_light_tints if GAME_TIME_DYNAMIC_LIGHT
    		@now_hour = GAME_TIME_TINTS[@hour]
    		@next_hour = GAME_TIME_TINTS[(@hour + 1) % GAME_TIME_HOURS_IN_DAY]
    	end
    	
    	def use_default_light
    		settings
    		tint = get_tint
    		tint[0] /= 2
    		tint[2] *= 0.9
    		tint[3] *= 1.2
    		tint[3] = [255, [0, tint[3]].max].min
    		self.visible = true
    		self.bitmap.clear
    		self.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(tint[0], tint[1], tint[2], tint[3]))
    	end
    	
    	def use_khas_light
    		settings
    		tint = get_tint
    		begin
    			$game_map.effect_surface.change_color(1, tint[0], tint[1], tint[2], tint[3])
    			$game_map.effect_surface.refresh if SceneManager.scene_is?(Scene_Battle)
    		rescue
    		end
    	end
    	
    	def use_victor
    		settings
    		tint = get_tint
    		tint[0] /= 2
    		tint[2] *= 0.9
    		tint[3] *= 1.2
    		tint[3] = [255, [0, tint[3]].max].min
    		$game_map.screen.shade.show if !$game_map.screen.shade.visible
    		$game_map.screen.shade.change_color(tint[0], tint[1], tint[2], 0)
    		$game_map.screen.shade.change_opacity(tint[3], 0)
    	end
    	
    	def get_tint
    		r = [255, [0, @now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f) / 60 * @now_min].max].min
    		g = [255, [0, @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f) / 60 * @now_min].max].min
    		b = [255, [0, @now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f) / 60 * @now_min].max].min
    		a = [255, [0, @now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f) / 60 * @now_min].max].min
    		return [r, g, b, a]
    	end
    	
    	def red(hour, month) # здесь творится магия программирования :)
    		tint = [
    			[0, 0, 0, 0, 0, 10, 20, 60, 100, 70, 20, 10, 0, 0, 20, 40, 100, 80, 50, 20, 10, 0, 0, 0],
    			[0, 0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 10, 20, 40, 100, 80, 50, 20, 10, 0, 0],
    			[0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10, 0],
    			[0, 10, 20, 30, 50, 80, 100, 60, 20, 10, 0, 0, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10],
    			[10, 20, 30, 50, 80, 100, 60, 20, 10, 5, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 100, 80, 60, 30],
    			[20, 40, 60, 80, 100, 60, 45, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
    			[10, 30, 50, 75, 100, 75, 50, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
    			[10, 20, 45, 60, 80, 100, 60, 35, 15, 10, 0, 0, 0, 0, 0, 10, 15, 30, 50, 75, 100, 75, 50, 20],
    			[0, 10, 20, 30, 40, 60, 100, 80, 45, 30, 15, 10, 0, 0, 0, 10, 30, 50, 80, 100, 70, 50, 20, 0],
    			[0, 0, 10, 20, 30, 45, 75, 100, 80, 60, 40, 20, 0, 10, 30, 45, 80, 100, 80, 60, 40, 20, 0, 0],
    			[0, 0, 10, 20, 30, 50, 70, 100, 80, 60, 30, 20, 10, 20, 40, 75, 100, 80, 60, 40, 20, 10, 0, 0],
    			[0, 0, 0, 10, 20, 30, 50, 70, 100, 70, 50, 20, 0, 10, 30, 60, 100, 75, 40, 20, 10, 0, 0, 0]]
    		return tint[month][hour]
    	end
    	
    	def green(hour, month)
    		tint = [
    			[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 25, 15, 10, 0, 0, 0, 0, 0],
    			[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 20, 25, 15, 10, 0, 0, 0, 0],
    			[0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 5, 10, 25, 10, 5, 0, 0, 0, 0],
    			[0, 0, 0, 0, 5, 10, 30, 20, 10, 5, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0],
    			[0, 0, 0, 10, 15, 30, 15, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 15, 10, 0],
    			[0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 0],
    			[0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 0],
    			[0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0],
    			[0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0],
    			[0, 0, 0, 0, 0, 10, 15, 30, 10, 0, 0, 0, 0, 0, 0, 5, 15, 25, 15, 10, 0, 0, 0, 0],
    			[0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0],
    			[0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0]]
    		return tint[month][hour]
    	end
    	
    	def blue(hour, month)
    		tint = [ 
    			[10, 15, 20, 25, 30, 45, 30, 20, 10, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0, 0],
    			[10, 15, 20, 25, 30, 40, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0],
    			[10, 15, 25, 30, 40, 30, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 45, 40, 35, 20],
    			[15, 20, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 35, 50, 40, 35, 20],
    			[15, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30],
    			[15, 30, 50, 35, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 30],
    			[15, 30, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 25],
    			[10, 15, 30, 50, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 50, 35, 20],
    			[10, 15, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 55, 35, 20, 15],
    			[10, 15, 20, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30, 20, 15, 10],
    			[10, 10, 15, 20, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 40, 55, 35, 20, 15, 15, 10, 10],
    			[10, 15, 20, 25, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 45, 60, 40, 30, 20, 15, 15, 10]]
    		return tint[month][hour]
    	end
    	
    	def alpha(hour, month)
    		tint = [
    			[175, 170, 160, 160, 150, 150, 145, 140, 120, 90, 55, 20, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 180],
    			[170, 165, 155, 150, 140, 130, 130, 125, 110, 80, 50, 20, 10, 10, 10, 15, 25, 70, 95, 125, 140, 150, 160, 175],
    			[165, 160, 150, 135, 130, 110, 115, 110, 90, 70, 45, 20, 10, 10, 10, 10, 20, 60, 80, 105, 120, 135, 150, 160],
    			[160, 150, 140, 120, 120, 100, 90, 85, 70, 60, 40, 15, 10, 10, 10, 10, 20, 40, 60, 85, 100, 120, 135, 150],
    			[155, 140, 130, 110, 105, 85, 75, 70, 50, 45, 35, 15, 10, 10, 10, 10, 10, 20, 40, 70, 85, 110, 125, 140],
    			[150, 130, 120, 100, 90, 70, 55, 50, 40, 30, 35, 10, 10, 10, 10, 10, 10, 15, 25, 55, 65, 100, 105, 130],
    			[145, 120, 110, 110, 100, 80, 70, 65, 55, 40, 35, 10, 10, 10, 10, 10, 10, 25, 40, 70, 80, 110, 125, 140],
    			[150, 130, 120, 120, 110, 100, 85, 80, 70, 50, 40, 15, 10, 10, 10, 10, 10, 40, 60, 80, 100, 120, 130, 140],
    			[155, 140, 130, 130, 120, 110, 100, 95, 85, 60, 45, 15, 10, 10, 10, 10, 10, 50, 70, 90, 115, 130, 140, 150],
    			[160, 150, 140, 140, 130, 120, 115, 110, 100, 70, 50, 20, 10, 10, 10, 10, 15, 60, 80, 100, 130, 140, 150, 155],
    			[165, 160, 150, 150, 140, 130, 130, 125, 110, 80, 55, 20, 10, 10, 10, 15, 20, 70, 90, 115, 145, 150, 155, 160],
    			[170, 170, 160, 160, 150, 150, 145, 140, 120, 90, 60, 25, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 170]]
    		return tint[month][hour]
    	end
    	
    	def setup_dynamic_light_tints
    		return dynamic_light_settings if !@update_dynamic_tints
    		@tint = []
    		minus = 7 # сколько вычитать из значения для рандома
    		no_zero = 6 + minus * 1.5 # сколько прибавить в рандоме
    		month = $Game_Time.month
    		for i in 0..23
    			@tint[i] = Color.new(red(i, month) - minus + rand(no_zero), green(i, month) - minus + rand(no_zero), blue(i, month) - minus + rand(no_zero), alpha(i, month) - minus + rand(no_zero))
    		end
    		@update_dynamic_tints = false
    		return dynamic_light_settings
    	end
    	
    	def dynamic_light_settings
    		Game_Time_Functions.setup_use_khas_day_light(false) # отключаем работу диапазона времени для переключателя
    		setup = false
    		setup = true if @tint[@hour].alpha > 100 
    		Game_Time_Functions.setup_khas_light_switch(setup) # включить переключатель, если уже темно
    		@now_hour = @tint[@hour]
    		@next_hour = @tint[(@hour + 1) % GAME_TIME_HOURS_IN_DAY]
    	end
    	
    end # class Game_Time_Tint < Sprite_Base
    
    class Game_Time_Window < Window_Base
    	
    	include Game_Time_Settings
    	
    	def initialize(preset = nil)
    		return if preset.nil?
    		@preset = preset # настройки окна
    		super(@preset[:x], @preset[:y], @preset[:width], @preset[:height])
    		window_setup
    	end
    	
    	def window_setup
    		if @preset[:windowskin]
    			self.windowskin = Cache.system(@preset[:windowskin]) if @preset[:windowskin] != "" && @preset[:windowskin] != -1
    		end
    		modify if @preset[:modify]
    		if @preset[:tone]
    			self.tone = @preset[:tone] if @preset[:tone] != -1
    		end
    		if @preset[:opacity]
    			if @preset[:opacity] != []
    				self.opactiy = @preset[:opacity][0] if @preset[:opacity][0] != -1
    				self.back_opacity = @preset[:opacity][1] if @preset[:opacity][1] != -1
    				self.contents_opacity = @preset[:opacity][2] if @preset[:opacity][2] != -1
    			end
    		end
    		if @preset[:z]
    			self.z = @preset[:z] if @preset[:z] != -1
    		end
    		if @preset[:font]
    			if @preset[:font] != []
    				contents.font.name = @preset[:font][0] if @preset[:font][0] != -1
    				contents.font.bold = @preset[:font][1] if @preset[:font][1] != -1
    				contents.font.italic = @preset[:font][2] if @preset[:font][2] != -1
    			end
    		end
    		@use_custom_clock = false
    		@use_custom_clock = true if @preset[:custom_clock_date] != [] || @preset[:custom_clock_time] != []
    		@custom_clock_date = @preset[:custom_clock_date]
    		@custom_clock_time = @preset[:custom_clock_time]
    	end
    	
    	def modify
    		dup_skin = self.windowskin.dup
    		dup_skin.clear_rect(64,  0, 64, 64)
    		self.windowskin = dup_skin
    	end
    	
    	def get_date # дата
    		date = ($Game_Time.day.to_s + " " + GAME_TIME_FORMAT_MONTHS[$Game_Time.month] + " " + $Game_Time.year.to_s)
    		return date if !@use_custom_clock
    		return date if @custom_clock_date.nil?
    		date = ""
    		@custom_clock_date.each do |index|
    			case index
    			when "День"
    				date += $Game_Time.day.to_s
    			when "День недели"
    				date += GAME_TIME_DAYS_WEEK[$Game_Time.month]
    			when "Месяц(число)"
    				date += $Game_Time.month.to_s
    			when "Месяц(название)"
    				date += GAME_TIME_FORMAT_MONTHS[$Game_Time.month]
    			when "Год"
    				date += $Game_Time.year.to_s
    			else
    				date += index.to_s
    			end
    		end
    		return date 
    	end
    	
    	def get_seconds
    		return $Game_Time.sec < 10 ? "0" + $Game_Time.sec.to_s : $Game_Time.sec.to_s
    	end
    	
    	def get_minutes
    		return $Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s
    	end
    	
    	def get_hours
    		return $Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s
    	end
    	
    	def get_blink # мигающее двоеточие
    		return ":" if !$Game_Time.time_update
    		return ":" if $Game_Time.time_count % GAME_TIME_BLINK_SPEED >= GAME_TIME_BLINK_SPEED / 2
    		return " "		
    	end
    	
    	def get_time # время
    		time = get_hours + (GAME_TIME_BLINK_SPEED != -1 ? get_blink : ":") + get_minutes + (GAME_TIME_WINDOW_SECONDS ? ((GAME_TIME_BLINK_SPEED != -1 ? get_blink : ":") + get_seconds) : "")
    		return time if !@use_custom_clock
    		return time if @custom_clock_time.nil?
    		time = ""
    		@custom_clock_time.each do |index|
    			case index
    			when "Час"
    				time += get_hours
    			when "Двоеточие"
    				time += GAME_TIME_BLINK_SPEED != -1 ? get_blink : ":"
    			when "Минуты"
    				time += get_minutes
    			when "Секунды"
    				time += GAME_TIME_WINDOW_SECONDS ? get_seconds : ""
    			else
    				time += index.to_s
    			end
    		end
    		return time
    	end
    	
    	def update
    		if (@now_sec != $Game_Time.sec && GAME_TIME_WINDOW_SECONDS) || @now_min != $Game_Time.min || GAME_TIME_BLINK_SPEED != -1 || @now_hour != $Game_Time.hour || @now_day != $Game_Time.day || @now_month != $Game_Time.month || @now_year != $Game_Time.year
    			setup_variables
    			contents.clear
    			date = get_date
    			time = get_time
    			if date != "" && time != ""
    				draw_text(0, 0, contents_width, contents_height - line_height, date, 1)
    				draw_text(0, 0, contents_width, contents_height + line_height, time, 1)
    			end
    			draw_text(0, 0, contents_width, contents_height, date, 1) if time == "" && date != ""
    			draw_text(0, 0, contents_width, contents_height, time, 1) if time != "" && date == ""
    		end
    	end
    	
    	def setup_variables
    		@now_sec = $Game_Time.sec
    		@now_min = $Game_Time.min
    		@now_hour = $Game_Time.hour
    		@now_day = $Game_Time.day
    		@now_month = $Game_Time.month
    		@now_year = $Game_Time.year
    	end
    	
    end # class Game_Time_Window < Window_Base
    
    class Scene_Map < Scene_Base
    	
    	include Game_Time_Settings
    	
    	alias denis_kyznetsov_game_time_scene_map_create_all_windows create_all_windows
    	def create_all_windows
    		denis_kyznetsov_game_time_scene_map_create_all_windows
    		create_game_time_window if $GAME_TIME_SHOW_WINDOW
    	end
    	
    	def create_game_time_window
    		dispose_game_time_window
    		return if GAME_TIME_MAP_CLOCK == {}
    		@create_game_time_window = Game_Time_Window.new(GAME_TIME_MAP_CLOCK)
    	end
    	
    	def dispose_game_time_window
    		return if @create_game_time_window.nil?
    		@create_game_time_window.dispose
    		@create_game_time_window = nil
    	end
    	
    	def game_time_window_visible(flag)
    		if flag
    			create_game_time_window
    		else
    			dispose_game_time_window
    		end
    		$GAME_TIME_SHOW_WINDOW = flag
    	end
    	
    	alias denis_kyznetsov_game_time_scene_map_update update
    	def update
    		$Game_Time.update
    		$Game_Time_Tint.update
    		denis_kyznetsov_game_time_scene_map_update
    		return if GAME_TIME_WINDOW_BUTTON.is_a?(Integer)
    		game_time_window_visible(!$GAME_TIME_SHOW_WINDOW) if Input.trigger?(GAME_TIME_WINDOW_BUTTON)
    	end
    	
    end # Scene_Map < Scene_Base
    
    class Scene_Menu < Scene_MenuBase
    	
    	include Game_Time_Settings
    	
    	alias denis_kyznetsov_game_time_scn_menu_start start
    	def start
    		denis_kyznetsov_game_time_scn_menu_start
    		create_game_time_window
    	end
    	
    	def create_game_time_window
    		return if GAME_TIME_MENU_CLOCK == {}
    		@create_game_time_window = Game_Time_Window.new(GAME_TIME_MENU_CLOCK)
    	end
    	
    	alias denis_kyznetsov_game_time_scene_menu_update update
    	def update
    		$Game_Time.update if GAME_TIME_UPDATE_TIME_IN_MENU
    		denis_kyznetsov_game_time_scene_menu_update
    	end
    	
    end # Scene_Menu < Scene_MenuBase
    
    class Scene_Battle < Scene_Base
    	
    	include Game_Time_Settings
    	
    	alias denis_kyznetsov_game_time_scene_battle_start start
    	def start
    		denis_kyznetsov_game_time_scene_battle_start
    		create_game_time_window
    	end
    	
    	def create_game_time_window
    		return if GAME_TIME_BATTLE_CLOCK == {}
    		@create_game_time_window = Game_Time_Window.new(GAME_TIME_BATTLE_CLOCK)
    	end
    	
    	alias denis_kyznetsov_game_time_scene_battle_update update
    	def update
    		$Game_Time.update if GAME_TIME_UPDATE_TIME_IN_BATTLE
    		$Game_Time_Tint.update if GAME_TIME_LIGHT_IN_BATTLE
    		denis_kyznetsov_game_time_scene_battle_update
    	end
    	
    end # class Scene_Battle < Scene_Base
    
    class Spriteset_Battle
    
    	include Game_Time_Settings
    
    	alias denis_kyznetsov_game_time_spriteset_Battle_initialize initialize
    	def initialize
    		denis_kyznetsov_game_time_spriteset_Battle_initialize
    		create_tint if battleback1_name || battleback2_name
    		update
    	end
    	  
    	def create_tint
    		@tint_sprite = Sprite.new(@viewport1)
    		@tint_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    		@tint_sprite.blend_type = 2
    		@tint_sprite.z = @viewport2.z - 1
    		update_tint
    	end
    	  
    	alias denis_kyznetsov_game_time_spriteset_Battle_update update
    	def update
    		denis_kyznetsov_game_time_spriteset_Battle_update
    		update_tint if GAME_TIME_LIGHT_IN_BATTLE && GAME_TIME_UPDATE_TIME_IN_BATTLE
    	end
    	  
    	def update_tint
    		tint_color = $game_map.effect_surface.color
    
    		if @tint_sprite && @last_tint_color != tint_color
    			@tint_sprite.bitmap.clear
    			@tint_sprite.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, tint_color)
    			@tint_sprite.opacity = $game_map.effect_surface.alpha
          
    			@last_tint_color = tint_color
    		end
    	end
    	  
    	alias denis_kyznetsov_game_time_spriteset_Battle_dispose dispose
    	def dispose
    		denis_kyznetsov_game_time_spriteset_Battle_dispose
    		dispose_tint
    	end
    	  
    	def dispose_tint
    		@tint_sprite.dispose if @tint_sprite
    	end
    
    end # class Spriteset_Battle
    
    $imported = {} if $imported.nil?
    $imported["DenKyz_Game_Time"] = true
    
    class Game_Map
    	
    	alias denis_kyznetsov_game_time_game_map_setup setup
    	def setup(map_id)
    		denis_kyznetsov_game_time_game_map_setup(map_id)
    		return if $Game_Time.nil?
    		$Game_Time.time_update = !@map.note.include?("<No Game Time Update>")
    		return if $Game_Time_Tint.nil?
    		if @map.note =~ /<[\s]*Light[\w\s]*Hour[\s]*=[\s]*([\d]+)[\s]*>/i
    			$Game_Time_Tint.static_light_hour = $1.to_i
    		else
    			$Game_Time_Tint.static_light_hour = -1
    		end
    	end
    	
    end # class Game_Map
    
    class Game_Interpreter
    	
    	def save_game_time # сохранить текущее время
    		$Saved_Game_Time = Game_Time.new($Game_Time)
    	end
    	
    	def load_game_time # загрузить другое время
    		$Game_Time = Game_Time.new($Saved_Game_Time)
    	end
    	
    	def game_time_window_visible(flag) # пок / скр все окна
    		SceneManager.scene.game_time_window_visible(flag)
    	end
    	
    	def set_game_time(sec, min, hour, day, dayweek, month, year) # установить дату
    		$Game_Time.set_time(sec, min, hour, day, dayweek, month, year)
    	end
    	
    	def change_game_time(type, value) # изменить дату
    		$Game_Time.change_time(type, value)
    	end
    	
    	def setup_use_khas_day_light(setup) #вкл / выкл диапазон переключения света
    		Game_Time_Functions.setup_use_khas_day_light(setup)
    	end
    	
    	def change_game_time_speed(speed)
    		$Game_Time.time_speed = speed
    	end
    	
    	def stop_update_game_time
    		$Game_Time.time_update = false
    	end
    	
    	def continue_update_game_time
    		$Game_Time.time_update = true
    	end
    	
    	def set_game_time_static_light_hour(hour)
    		$Game_Time_Tint.static_light_hour = hour
    	end
    	
    	def game_time_update?
    		return $Game_Time.time_update
    	end
    	
    end # class Game_Interpreter
    
    module DataManager
    	
    	class << self
    		alias denis_kyznetsov_game_time_data_manager_create_game_objects create_game_objects
    		alias denis_kyznetsov_game_time_data_manager_make_save_contents make_save_contents
    		alias denis_kyznetsov_game_time_data_manager_extract_save_contents extract_save_contents
    	end
    	
    	def self.create_game_objects
    		denis_kyznetsov_game_time_data_manager_create_game_objects
    		Game_Time_Functions.game_time_create_objects
    	end
    	
    	def self.make_save_contents
    		contents = denis_kyznetsov_game_time_data_manager_make_save_contents
    		contents[:Game_Time] = $Game_Time
    		contents[:Game_Time_time_update] = $Game_Time.time_update
    		contents[:Game_Time_time_speed] = $Game_Time.time_speed
    		contents[:Game_Time_Tint_static_light_hour] = $Game_Time_Tint.static_light_hour
    		contents[:Saved_Game_Time] = $Saved_Game_Time
    		contents[:GAME_TIME_USE_KHAS_DAY_LIGHT] = $GAME_TIME_USE_KHAS_DAY_LIGHT
    		contents[:GAME_TIME_SHOW_WINDOW] = $GAME_TIME_SHOW_WINDOW
    		contents
    	end
    	
    	def self.extract_save_contents(contents)
    		denis_kyznetsov_game_time_data_manager_extract_save_contents(contents)
    		$Game_Time = contents[:Game_Time]
    		$Game_Time.time_update = contents[:Game_Time_time_update]
    		$Game_Time.time_speed = contents[:Game_Time_time_speed]
    		$Game_Time_Tint.static_light_hour = contents[:Game_Time_Tint_static_light_hour]
    		$Saved_Game_Time = contents[:Saved_Game_Time]
    		$GAME_TIME_USE_KHAS_DAY_LIGHT = contents[:GAME_TIME_USE_KHAS_DAY_LIGHT]
    		$GAME_TIME_SHOW_WINDOW = contents[:GAME_TIME_SHOW_WINDOW]
    	end
    	
    end # module DataManager



    Мейкер: MV/MZ
    Версия: 2.8.0

    Дополнения:
    Календарь

    Скачать с сайта DK Plugins: DK Plugins

    Динамическая Погода
    Мейкер: VX Ace
    Версия: 1.2 от 21.10.15

    Требования:
    Скрипт Время/Дата (Game Time) версии 6.0
    Скрипт Погода (Game Weather) версии 3.0

    Если ссылки умерли, то можете поискать скрипты здесь: https://github.com/DKPlugins/RPG-Maker-VX-Ace

    Скрипт:
    Спойлер Код:
    Код:
    =begin
    ###############################################################################
    #                                                                             #
    #          				   		  	  Динамическая Погода     	      	   	          #
    #                                                                             #
    ###############################################################################
    
    Автор: Денис Кузнецов (http://vk.com/id8137201)
    Версия: 1.2
    Релиз от: 21.10.15
    Зависимость: Game Time (Время/Дата) by Denis Kyznetsov (версия 6.0)
    Зависимость: Game Weather (Погода) by Denis Kyznetsov (версия 3.0)
    Установка: разместить ниже Game Time (Время/Дата)
    
    Инструкция:
    
    Чтобы на определенной карте отключить динамическую погоду, используйте заметку карты
    <No Dynamic Weather>
    
    =end
    
    module Game_Time_Dynamic_Weather_Settings
    	
    	# Использовать Динамическую Погоду ? true - да, false - нет
    	GAME_TIME_DYNAMIC_WEATHER_ENABLE = true
    	
    	# Какое максимальное количество часов идет Динамическая Погода ?
    	# Минимум 1, Максимум 6
    	GAME_TIME_DYNAMIC_WEATHER_HOUR = 3
    	
    	# Настройка Динамической Погоды для каждой графики
    	# :type и :power - параметры из скрипта Погода (Game Weather)
    	# :month - необязательный параметр, который можно не указывать (если не указан, то участвуют все месяцы)
    	# :month - указывает в какие месяцы погода может быть (нумерация с 0)
    	# :chance - вероятность появления погоды от 0 до 100 (обшая вероятность)
    	# :chance будет использоваться, если не указаны настройки в таблице GAME_TIME_DYNAMIC_WEAHTER_MONTH_SETTINGS)
    	# "Имя_Графики" => { :type => тип_погоды, :power => сила_погоды, :month => [месяцы], :chance => вероятность_погоды }
    	GAME_TIME_DYNAMIC_WEATHER_SETTINGS = {
    		"Rain" => { :type => 1, :power => 10, :chance => 20 },
    		"Snow" => { :type => 0, :power => 10, :month => [0, 1, 11, 12], :chance => 10 }
    	}
    	
    	# Настройка вероятности Динамической Погоды для каждого месяца и для каждой графики
    	# номер_месяца => { "имя_графики" => вероятность и т. д. }
    	GAME_TIME_DYNAMIC_WEAHTER_MONTH_SETTINGS = {
    		0 => { "Rain" => 5, "Snow" => 30 } # Январь
    	}
    	
    	# ниже не трогать :)
    	
    end # module Game_Time_Dynamic_Weather_Settings
    
    class Game_Time_Dynamic_Weather
    	
    	include Game_Time_Dynamic_Weather_Settings, Game_Time_Settings
    	
    	attr_reader :stop_dynamic_weather_on_map
    	
    	def initialize
    		@stop_dynamic_weather_on_map = false # блокировка динамической погоды на карте
    		@dynamic_weather_active = false # идет ли динамическая погода
    		@dynamic_weather_start_time_count = 0 # счетчик времени для отсчета минут, чтобы проверять включение погоды
    		@dynamic_weather_stop_time_count = 0 # счетчик времени для отсчеты минут, чтобы проверить выключение погоды
    		@dynamic_weather_start_range = GAME_TIME_MINUTES_IN_HOUR # кол-во минут перед первой проверкой включения времени
    	end
    	
    	def stop_dynamic_weather_on_map=(setup)
    		@stop_dynamic_weather_on_map = setup
    		stop_dynamic_weather if setup
    	end
    	
    	def update_time_count
    		if @dynamic_weather_active
    			@dynamic_weather_stop_time_count += 1
    			stop_dynamic_weather if @dynamic_weather_stop_time_count >= @dynamic_weather_stop_time
    		else
    			@dynamic_weather_start_time_count += 1
    			check_start_dynamic_weather if @dynamic_weather_start_time_count >= @dynamic_weather_start_range
    		end
    	end
    	
    	def check_start_dynamic_weather
    		@dynamic_weather_start_range = [rand(GAME_TIME_MINUTES_IN_HOUR * [rand(13), 3].max), GAME_TIME_MINUTES_IN_HOUR].max
    		chance = rand(101)
    		month = $Game_Time.month
    		GAME_TIME_DYNAMIC_WEATHER_SETTINGS.each do |index|
    			if index[1].has_key?(:month)
    				next if !index[1][:month].include?(month)
    			end
    			if GAME_TIME_DYNAMIC_WEAHTER_MONTH_SETTINGS.has_key?(month)
    				if GAME_TIME_DYNAMIC_WEAHTER_MONTH_SETTINGS[month].has_key?(index[0])
    					next if chance > GAME_TIME_DYNAMIC_WEAHTER_MONTH_SETTINGS[month][index[0]]
    					return start_dynamic_weather(index)
    				end
    			else
    				return start_dynamic_weather(index) if chance <= index[1][:chance]
    			end
    		end
    		@dynamic_weather_start_time_count = 0
    	end
    	
    	def start_dynamic_weather(index)
    		@dynamic_weather_active = true
    		@dynamic_weather_start_time_count = 0
    		@dynamic_weather_stop_time_count = 0
    		@dynamic_weather_stop_time = [[rand(GAME_TIME_DYNAMIC_WEATHER_HOUR + 1), 1].max, 6].min * GAME_TIME_MINUTES_IN_HOUR + rand(GAME_TIME_MINUTES_IN_HOUR)
    		$Game_Weather.start_weather(index[1][:type], index[1][:power], index[0], true)
    	end
    	
    	def stop_dynamic_weather
    		$Game_Weather.stop_all_weather
    		@dynamic_weather_active = false
    		@dynamic_weather_start_time_count = 0
    		@dynamic_weather_stop_time_count = 0
    		@dynamic_weather_stop_time = 0
    	end
    	
    end # class Game_Time_Dynamic_Weather
    
    class Game_Map
    	
    	alias denis_kyznetsov_game_time_dynamic_weather_game_map_setup setup
    	def setup(map_id)
    		denis_kyznetsov_game_time_dynamic_weather_game_map_setup(map_id)
    		return if $Game_Time_Dynamic_Weather.nil?
    		$Game_Time_Dynamic_Weather.stop_dynamic_weather_on_map = @map.note.include?("<No Dynamic Weather>")
    	end
    	
    end # class Game_Map
    
    class Game_Time
    	
    	alias denis_kyznetsov_game_time_dynamic_weather_game_time_add_min add_min
    	def add_min(n = 1)
    		$Game_Time_Dynamic_Weather.update_time_count if SceneManager.scene.is_a?(Scene_Map)
    		denis_kyznetsov_game_time_dynamic_weather_game_time_add_min(n)
    	end
    	
    end # class Game_Time
    
    $imported = {} if $imported.nil?
    $imported["DenKyz_Game_Time_Dynamic_Weather"] = true
    
    module DataManager
    	
    	include Game_Time_Dynamic_Weather_Settings
    	
    	class << self
    		alias denis_kyznetsov_game_time_dynamic_weather_data_manager_create_game_objects create_game_objects
    		alias denis_kyznetsov_game_time_dynamic_weather_data_manager_setup_new_game setup_new_game
    	end
    	
    	def self.create_game_objects
    		denis_kyznetsov_game_time_dynamic_weather_data_manager_create_game_objects
    		$Game_Time_Dynamic_Weather = Game_Time_Dynamic_Weather.new
    	end
    	
    	def self.setup_new_game
    		check_denkyz_scripts if GAME_TIME_DYNAMIC_WEATHER_ENABLE
    		denis_kyznetsov_game_time_dynamic_weather_data_manager_setup_new_game
    	end
    	
    	def self.check_denkyz_scripts
    		if !$imported["DenKyz_Game_Time"]
    			msgbox("Ошибка! Отсутствует скрипт Game Time (Время/Дата)")
    			exit
    		end
    		if !$imported["DenKyz_Game_Weather"]
    			msgbox("Ошибка! Отсутствует скрипт Game Weather (Погода)")
    			exit
    		end
    	end
    	
    end # module DataManager
    Последний раз редактировалось DK; 12.09.2023 в 10:07. Причина: Обновление 2.8.0

  2. #2
    Местный Аватар для ReDS
    Информация о пользователе
    Регистрация
    26.07.2009
    Адрес
    Петропавловск-Камчатский
    Сообщений
    129
    Записей в дневнике
    1
    Репутация: 23 Добавить или отнять репутацию

    По умолчанию

    Для вычисления текущей даты в RGSS есть встроенный класс Time.
    Можно использовать, например, так:

    $game_variables[22] = Time.now.mday
    $game_variables[24] = Time.now.mon
    $game_variables[26] = Time.now.year
    $game_variables[28] = Time.now.hour
    $game_variables[30] = Time.now.min

    "Главное не суть идеи, а её реализация." (с)

  3. #3

    По умолчанию

    Внимание! Я не выкладывал сюда версию 5.0. Напишу, что там изменял:
    Спойлер Версия 5.0:

    Версия 5.0 - Исправлены ошибки, повышена стабильность, вырезан календарь для уменьшения скрипта (календарь теперь в виде аддона), улучшена кастомизация окон, вырезал все, что связано с погодой (в будущем будет, как аддон). Поправил немного методику изменения времени, исправил небольшую ошибку, связанную с календарем, удалил неиспользуемые методы


    Обновление 5.1 от 02.02.15
    Что нового:
    Исправил ошибки, изменил настройки: переключатель для Khas Light Effect теперь отключается значением -1, добавил возможность вкл/выкл работу диапазона переключения переключателя (можно настроить в шапке скрипта + изменять во время игры вызовом скрипта: Now_Time.setup_khas_day_light(flag), где flag - true/false (вкл/выкл), добавил возможность отключить использование кнопки отображения окна времени в игре (установите переменную = -1 вместо символа кнопки).

    Добавил динамическую смену дня и ночи. Работает автоматически. Никаких настроек нет и скорее всего не будет (только вкл и выкл). Если не использовать динамическую смену, то можно обычную, где вы сами можете настроить оттенки экрана для каждого часа. Опишу подробнее: работает для 12 месяцев/24 часа. Оттенки экрана старался сделать максимально реалистичными. Закаты и восходы пытался максимально приблизить к реальным (вкратце: зимой темнеет рано и светлеет поздно, летом светлеет рано и темнеет поздно) + также присутствует частичка рандома, которая делает каждый день непохожим на предыдущий (динамическая смена обновляется в начале каждого дня), переключатель Khas света регулируется автоматически (если вы его используете)

    Если что не так с сменой дня и ночи, отписывайтесь сюда.



    Спойлер Скрипт:
    =begin
    ################################################## #############################
    # #
    # Game_Time (Время/Дата) #
    # #
    ################################################## #############################

    Автор: Денис Кузнецов (http://vk.com/id8137201)
    Версия: 5.1
    Релиз от: 02.02.15

    ############# ИНСТРУКЦИЯ ################################################## #####
    Время/Дата:
    Чтобы изменить время, воспользуйтесь скриптом
    Now_Time.change(sec, min, hour, day, dayweek, month, year)
    sec - секунды
    min - минуты
    hour - час
    day - день
    dayweek - день недели
    month - месяц
    year - год
    Пример: Now_Time.change(30, 2, 3, 5, 7, 4, 201)

    Чтобы получить текущую дату используйте:
    $Game_Time.sec
    min, hour, day, dayweek, month, year

    Чтобы сохранить время или загрузить его, используйте:
    Now_Time.save_time
    Now_Time.load_time

    Чтобы добавить время, используйте скрипты:
    Now_Time.time(+5, :min) - добавит 5 минут
    Now_Time.time(-10,:hour) - удалит 10 часов
    Возможно: :sec, :min, :hour, :day, :month, :year

    Чтобы показать/скрыть все окна принудительно, воспользуйтесь
    Now_Time.windows_visible?(flag)
    где flag - true/false (показать/скрыть)

    Чтобы включить/отлючить переключение света в дневном диапозоне, используйте
    Now_Time.setup_khas_day_light(flag)
    где flag - true/false (вкл/выкл)

    =end

    ############# НАТРОЙКА ################################################## #######

    module Calendar_Settings
    # Название дней недели
    DAYS_WEEK = [ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
    # Формативный вывод месяцев
    CALENDAR_MONTHS = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа",
    "Сентября", "Октября", "Ноября", "Декабря" ]
    end

    module Time_Settings
    include Calendar_Settings
    # не трогать это настройки ниже
    begin
    include Weather_Settings_Module
    rescue
    end
    # не трогать это настройки ниже

    #----- Начало настройки дня и ночи ---------------------------------------------
    # Использовать смену дня и ночи ? true - да, false - нет
    USE_LIGHT_TINT = true

    # Исользовать стандартную смену дня и ночи ? true - да, false - нет
    # Если используете эту опцию, то установите USE_KHAS_LIGHT = false
    USE_DEFAULT_LIGHT = false

    # Использовать Khas Light Effect ? true - да, false - нет
    USE_KHAS_LIGHT = true

    # Номер переключателя
    # Если вы используете $USE_KHAS_LIGHT_SWITCH
    # Чтобы не использовать установите -1
    KHAS_LIGHT_SWITCH = 3

    # Использовать диапозон времени для переключения переключателя ?
    # Только если вы используете Khas Light Effect
    $USE_KHAS_DAY_LIGHT = false

    # Диапозон времени, когда свет не горит (день),
    # Если вы используете смену дня и ночи
    KHAS_DAY_LIGHT = [8, 19] # с 8 утра до 7 вечера свет не горит
    # То есть переключатель будет false


    # Использовать динамическую смену дня и ночи ?
    # Если используется Khas Light Effect
    # Переключатель будет контролироваться автоматически
    USE_DYNAMIC_LIGHT = true


    # Использовать оттенки экрана в битвах ? true - да, false - нет
    USE_LIGHT_IN_BATTLE = true

    # Настройка оттенков экрана для каждого часа.
    # Если используете USE_DYNAMIC_LIGHT, то эта настройка ничего не даст.
    # [Color.new(R, G, B, A)]
    TINTS = [ Color.new(30, 0, 40, 165), # => 0 час
    Color.new(20, 0, 30, 165), # => 1 час
    Color.new(20, 0, 30, 155), # => 2 час
    Color.new(10, 0, 30, 145), # => 3 час
    Color.new(10, 0, 20, 125), # => 4 час
    Color.new(0,0,20,125), # => 5 час
    Color.new(75,20,20,115), # => 6 час
    Color.new(100,30,10,105), # => 7 час
    Color.new(75,20,10,85), # => 8 час
    Color.new(0,0,0,55), # => 9 час
    Color.new(0,0,0,30), # => 10 час
    Color.new(0,0,0,10), # => 11 час
    Color.new(0,0,0,0), # => 12 час
    Color.new(0,0,0,0), # => 13 час
    Color.new(0,0,0,0), # => 14 час
    Color.new(0,0,0,5), # => 15 час
    Color.new(0,0,0,15), # => 16 час
    Color.new(0,0,10,45), # => 17 час
    Color.new(75,20,20,85), # => 18 час
    Color.new(100,40,30,105), # => 19 час
    Color.new(75,20,40,125), # => 20 час
    Color.new(10,0,45,140), # => 21 час
    Color.new(20,0,45,145), # => 22 час
    Color.new(20,0,50,160) ] # => 23 час

    #----- Конец настройки дня и ночи ----------------------------------------------

    #----- Начало настройки времени ------------------------------------------------

    # Использовать дату с компьюетера ? true - да, false - нет
    USE_REAL_TIME = false

    # Остановить время в меню ? true - да, false - нет
    PAUSE_IN_MENU = true

    # Отображать окно в меню ? true - да, false - нет
    TIME_IN_MENU = true

    # Секунд в минуте (минимум 2)
    # Для лучшего эффекта лучше оставить 60, если SHOW_SECONDS = false, но это
    # уже на ваше усмотрение
    SECONDS_IN_MINUTE = 2
    # Минут в часе (минимум 2)
    MINUTES_IN_HOUR = 60
    # Часов в дне
    HOURS_IN_DAY = 24

    # Использовать обновление времени в битве ? true - да, false - нет
    USE_TIME_UPDATE_IN_BATTLE = true

    # Отображать секунды в часах ? true - да, false - нет
    SHOW_SECONDS = false

    # Использовать кастомные часы в игре ? true - да, false - нет
    USE_CUSTOM_CLOCK_ON_MAP = false

    # Ширина окна времени в игре
    CLOCK_WIDTH = 180
    # Высота окна времени в игре
    CLOCK_HEIGHT = 74
    # Координата X окна времени в игре
    CLOCK_X = Graphics.width - CLOCK_WIDTH
    # Координата Y окна времени в игре
    CLOCK_Y = Graphics.height - CLOCK_HEIGHT
    # Непрозрачность окна в игре. -1 = стандартное
    OPACITY_CLOCK = -1

    # Использовать кастомные часы в игре ? true - да, false - нет
    USE_CUSTOM_CLOCK_IN_MENU = false

    # Ширина окна времени в игре
    MENU_CLOCK_WIDTH = 200
    # Высота окна времени в игре
    MENU_CLOCK_HEIGHT = 90
    # Координата X окна времени в игре
    MENU_CLOCK_X = 0
    # Координата Y окна времени в игре
    MENU_CLOCK_Y = 0
    # Непрозрачность окна в меню. -1 = стандартное
    OPACITY_MENU_CLOCK = -1

    # Настройка кастомных часов
    # Возможно: День, День недели, Месяц(число), Месяц(название), Год
    # Также возможны свои команды
    CUSTOM_CLOCK_DATE = ["День", "Месяц(название)", "Год"]
    # Возможно: Час, blink(":"), Минуты, Секунды
    CUSTOM_CLOCK_TIME = ["Час", "blink", "Минуты"]

    # Скорость времени
    # (Минимум - 1, Максимум - 60!).
    # Чем меньше цифра, тем быстрее идет время. 60 - Реальное время
    $TIME_SPEED = 1

    # Использовать мерцание ":" в часах ? true - да, false - нет. Отключение может повысить FPS на 1-5
    USE_BLINK = false

    # Частота обновления ":" в отображении времени и частота обновления завершающихся квестов (40 - оптимально)
    BLINK_SPEED = 40

    # Чтобы на определенной карте приостановить обновление времени, используйте заметки карты и пропишите там: <No_Time_Update>
    # Чтобы на определенной карте выставить освещение определенного часа, используйте заметки карты: <Light_Hour = H>
    # где H - нужный час

    # Настройка начала игры! Если не используете реальное время.
    SEC = 0 # Секунды
    MIN = 0 # Минуты
    HOUR = 0 # Час
    DAY = 2 # День
    DAY_WEEK = 1 # В диапозоне от 1 до 7 (1 - Понедельник, 7 - Воскресенье)
    MONTH = 1 # Месяц
    YEAR = 2015 # Год

    # Количество дней в каждом месяце
    DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    # Кнопка отображения/скрытия окна времени
    # -1, чтобы не использовать
    GAME_TIME_BUTTON = :Z

    # Показывать окно времени в начале игры ? true - да, false - нет
    $SHOW_START_GAME_TIME_WINDOW = true

    ############# КОНЕЦ НАСТРОЙКИ ##################################################
    ############# НИЖЕ НЕ ТРОГАТЬ !!! ##############################################

    # Обновление времени
    $STOP_TIME_UPDATE = false
    # Час статического освещения
    $STOP_TIME_UPDATE_LIGHT_HOUR = -1

    end

    $imported = {} if $imported.nil?
    $imported["DenKyz_Game_Time"] = true

    class Functions
    include Time_Settings

    def self.new_game # новая игра
    $QUESTS = []
    $LAST_QUESTS = []
    $NOTIFICATION_WINDOW = []
    Now_Time.new
    end

    def self.setup_khas_light_switch(hour) # hour - час, если диапозон вкл; bool, если диапозон выкл.
    return if !USE_KHAS_LIGHT || KHAS_LIGHT_SWITCH == -1
    return if ($USE_KHAS_DAY_LIGHT && !hour.is_a?(Integer)) || (!$USE_KHAS_DAY_LIGHT && hour.is_a?(Integer))
    if $USE_KHAS_DAY_LIGHT
    if (hour < KHAS_DAY_LIGHT[0] || hour > KHAS_DAY_LIGHT[1])
    $game_switches[KHAS_LIGHT_SWITCH] = true
    else
    $game_switches[KHAS_LIGHT_SWITCH] = false
    end
    else
    $game_switches[KHAS_LIGHT_SWITCH] = hour
    end
    end

    end # class Functions

    class Now_Time
    include Time_Settings

    def initialize
    # 0 и больше 60 не будет обновляться
    $TIME_SPEED = 60 if $TIME_SPEED > 60
    $TIME_SPEED = 1 if $TIME_SPEED < 1
    $Game_Time = Game_Time.new
    $UPDATE_DYNAMIC_TINT = true
    $Game_Time_Tint = Game_Time_Tint.new if USE_LIGHT_TINT
    begin
    $CALENDAR_NOTIFY = 1 if $CALENDAR_NOTIFY > MINUTES_IN_HOUR
    rescue
    end
    begin
    $USE_DEFAULT_WEATHER = USE_DEFAULT_WEATHER
    $Cur_day_temp = TEMPERATURE_MAX if !USE_DYNAMIC_TEMPERATURE
    $Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
    $Game_Time_Temperature = Functions.new_game_calculation_degrees if USE_TEMPERATURE
    rescue
    end
    end

    def self.change(sec, min, hour, day, dayweek, month, year)
    $Game_Time.change(sec, min, hour, day, dayweek, month, year)
    update # насколько он тут нужен ?
    end

    def self.update
    $Game_Time.update
    end

    def self.save_time # сохраняем время
    $Game_Time_DUP = $Game_Time.dup
    end

    def self.load_time # загружаем время
    $Game_Time = $Game_Time_DUP.dup
    end

    def self.time(value, type) #изменение времени
    $Game_Time.time(value, type)
    end

    def self.windows_visible?(flag) # пок/скр все окна
    SceneManager.scene.all_visible(flag)
    end

    def self.setup_khas_day_light(setup) #вкл/выкл диапозон переключения света
    $USE_KHAS_DAY_LIGHT = setup
    end

    end # class Now_Time

    class Game_Time
    include Time_Settings

    attr_reader :sec
    attr_reader :min
    attr_reader :hour
    attr_reader :day
    attr_reader :dayweek
    attr_reader :month
    attr_reader :year

    def initialize
    @sec = SEC
    @min = MIN
    @hour = HOUR
    @day = DAY
    # потому что от 0-6, а игрок указывает от 1-7. 0 - Понедельник
    # а от 0-6 потому что в массиве дней недели индексы с 0
    # та же причина и у MONTH ниже
    @dayweek = DAY_WEEK - 1
    @month = MONTH - 1
    @year = YEAR
    $FIRST_DAY = DAY_WEEK # первый день января (для календаря). Там 1-7 значения
    end


    def update
    return if !USE_TIME_UPDATE_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle)
    return if $game_message.busy?
    return real_time if USE_REAL_TIME
    return if !SceneManager.scene.is_a?(Scene_Map) || (SceneManager.scene.is_a?(Scene_Menu) && PAUSE_IN_MENU)
    return unless Graphics.frame_count % $TIME_SPEED == 0
    add_sec(1)
    end

    def change(sec, min, hour, day, dayweek, month, year)
    sec > @sec ? (sec - @sec).times do add_sec(1) end : (@sec - sec).times do rem_sec(1) end
    min > @min ? (min - @min).times do add_min(1) end : (@min - min).times do rem_min(1) end
    hour > @hour ? (hour - @hour).times do add_hour(1) end : (@hour - hour).times do rem_hour(1) end
    day > @day ? (day - @day).times do add_day(1) end : (@day - day).times do rem_day(1) end
    @dayweek = dayweek - 1
    month -= 1
    month > @month ? (month - @month).times do add_month(1) end : (@month - month).times do rem_month(1) end
    year > @year ? add_year(year - @year) : rem_year(@year - year)
    all_days = 0 # сумма дней с января до нужного месяца (не включая)
    for i in 0..month - 1
    all_days += Time_Settings:AYS[i]
    end
    $FIRST_DAY = (dayweek + 1 -(day + all_days % DAYS_WEEK.size)) % DAYS_WEEK.size
    enable_dynamic_tint_update
    end

    def time(value, type)
    # логика такая: чтобы не пропустить события на карте вместо просто изменения
    # времени я прибавляю меньшие значения.
    # Пример 1: +2 минуты = + прибавляю 120 секунд
    # Пример 2: +1 месяц = + кол-во часов в месяце
    # Все сделать через секунды нельзя (слишком большая задержка на экране возникает)
    case type
    when :sec
    set = :sec
    when :min
    set = :sec
    value *= SECONDS_IN_MINUTE
    when :hour
    set = :min
    value *= MINUTES_IN_HOUR
    when :day
    set = :hour
    value *= HOURS_IN_DAY
    when :month
    set = :hour
    for i in 1..(value > 0 ? value : value * -1) # value - сколько было
    val = DAYS[@month] * HOURS_IN_DAY # val - считаем для текущего месяца часы
    if value > 0
    val.times do eval("add_" + set.to_s + "(1)") end
    else
    val.times do eval("rem_" + set.to_s + "(1)") end
    end
    end
    return
    when :year
    set = :day
    sum = 0
    for i in 0..DAYS.size - 1
    sum += DAYS[i]
    end
    value *= sum
    end # case type

    if value > 0
    value.times do eval("add_" + set.to_s + "(1)") end
    else
    value = -value
    value.times do eval("rem_" + set.to_s + "(1)") end
    end
    enable_dynamic_tint_update
    end

    def enable_dynamic_tint_update
    return if !USE_DYNAMIC_LIGHT
    $UPDATE_DYNAMIC_TINT = true
    end

    def real_time # время с компьютера
    @sec = Time.now.sec
    @sec = 0 if @sec >= SECONDS_IN_MINUTE
    @min = Time.now.min
    @hour = Time.now.hour
    if @day != Time.now.day
    @day = Time.now.day
    enable_dynamic_tint_update
    end
    @dayweek = Time.now.wday
    if @month != Time.now.month - 1
    @month = Time.now.month - 1 # причина в initialize
    enable_dynamic_tint_update
    end
    @year = Time.now.year
    end

    def add_sec(n = 1)
    @sec += n
    return unless @sec == SECONDS_IN_MINUTE
    @sec = 0
    add_min(1)
    end

    def add_min(n = 1)
    if $imported["DenKyz_Game_Time_Weather"]
    begin
    if (@min % 10 == 0) && USE_TEMPERATURE
    $Game_Time_Temperature += Functions.add_degrees
    end
    rescue # обработка исключения
    end
    end
    @min += n
    return unless @min == MINUTES_IN_HOUR
    @min = 0
    add_hour(1)
    end

    def add_hour(n = 1)
    @hour += n
    return unless @hour == HOURS_IN_DAY
    @hour = 0
    add_day(1)
    end

    def add_day(n = 1)
    @day += n
    @dayweek += n
    if $imported["DenKyz_Game_Time_Weather"]
    begin
    $Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
    rescue
    end
    end
    enable_dynamic_tint_update
    @dayweek = 0 if @dayweek == DAYS_WEEK.size
    return unless @day == DAYS[@month] + 1
    @day = 1
    add_month(1)
    end

    def add_month(n = 1)
    @month += n
    enable_dynamic_tint_update
    return unless @month == MONTHS.size
    @month = 0
    add_year(1)
    end

    def add_year(n = 1)
    @year += n
    end

    def rem_sec(n = 1)
    @sec -= n
    return unless @sec == -1
    @sec = SECONDS_IN_MINUTE - 1
    rem_min(1)
    end

    def rem_min(n = 1)
    @min -= n
    return unless @min == -1
    @min = MINUTES_IN_HOUR - 1
    rem_hour(1)
    end

    def rem_hour(n = 1)
    @hour -= n
    return unless @hour == -1
    @hour = HOURS_IN_DAY - 1
    rem_day(1)
    end

    def rem_day(n = 1)
    @day -= n
    @dayweek -= n
    if $imported["DenKyz_Game_Time_Weather"]
    begin
    $Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
    rescue
    end
    end
    @dayweek = DAYS_WEEK.size - 1 if @dayweek == -1
    return unless @day == 0
    @day = DAYS[@month-1]
    rem_month(1)
    end

    def rem_month(n = 1)
    @month -= n
    return unless @month == -1
    @month = MONTHS.size - 1
    rem_year(1)
    end

    def rem_year(n = 1)
    @year -= n
    end

    end # class Game_Time

    class Game_Time_Tint < Sprite_Base
    include Time_Settings

    def initialize(viewport = nil)
    super(viewport)
    self.z = 1
    create_contents
    update
    end

    def create_contents
    self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    self.visible = false
    end

    def update
    return if !USE_LIGHT_TINT
    return use_default_light if USE_DEFAULT_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
    return use_khas_light if USE_KHAS_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
    end

    def settings
    Functions.setup_khas_light_switch($Game_Time.hour) if $STOP_TIME_UPDATE_LIGHT_HOUR == -1

    @now_min = $Game_Time.min
    @hour = $Game_Time.hour

    if $STOP_TIME_UPDATE_LIGHT_HOUR != -1
    @hour = $STOP_TIME_UPDATE_LIGHT_HOUR
    elsif USE_DYNAMIC_LIGHT
    return update_dynamic_light
    end

    @now_hour = TINTS[@hour]
    @next_hour = TINTS[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
    @next_hour = TINTS[0] if @hour + 1 == HOURS_IN_DAY
    end

    def use_default_light
    settings
    r = (@now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min)/2
    g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
    b = 0.9 * (@now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min)
    a = 1.3 * (@now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min)
    self.visible = true
    self.bitmap.clear
    self.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(r, g, b, a))
    end

    def use_khas_light
    settings
    begin
    r = @now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min
    g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
    b = @now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min
    a = @now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min
    $game_map.effect_surface.change_color(1, r, g, b, a)
    rescue
    end
    end

    def red(hour, month) # здесь творится магия программирования
    tint = [
    [0, 0, 0, 0, 0, 10, 20, 60, 100, 70, 20, 10, 0, 0, 20, 40, 100, 80, 50, 20, 10, 0, 0, 0],
    [0, 0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 10, 20, 40, 100, 80, 50, 20, 10, 0, 0],
    [0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10, 0],
    [0, 10, 20, 30, 50, 80, 100, 60, 20, 10, 0, 0, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10],
    [10, 20, 30, 50, 80, 100, 60, 20, 10, 5, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 100, 80, 60, 30],
    [20, 40, 60, 80, 100, 60, 45, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
    [10, 30, 50, 75, 100, 75, 50, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
    [10, 20, 45, 60, 80, 100, 60, 35, 15, 10, 0, 0, 0, 0, 0, 10, 15, 30, 50, 75, 100, 75, 50, 20],
    [0, 10, 20, 30, 40, 60, 100, 80, 45, 30, 15, 10, 0, 0, 0, 10, 30, 50, 80, 100, 70, 50, 20, 0],
    [0, 0, 10, 20, 30, 45, 75, 100, 80, 60, 40, 20, 0, 10, 30, 45, 80, 100, 80, 60, 40, 20, 0, 0],
    [0, 0, 10, 20, 30, 50, 70, 100, 80, 60, 30, 20, 10, 20, 40, 75, 100, 80, 60, 40, 20, 10, 0, 0],
    [0, 0, 0, 10, 20, 30, 50, 70, 100, 70, 50, 20, 0, 10, 30, 60, 100, 75, 40, 20, 10, 0, 0, 0]]
    return tint[month][hour]
    end

    def green(hour, month)
    tint = [
    [0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 25, 15, 10, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 20, 25, 15, 10, 0, 0, 0, 0],
    [0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 5, 10, 25, 10, 5, 0, 0, 0, 0],
    [0, 0, 0, 0, 5, 10, 30, 20, 10, 5, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0],
    [0, 0, 0, 10, 15, 30, 15, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 15, 10, 0],
    [0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 0],
    [0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 0],
    [0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0],
    [0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0],
    [0, 0, 0, 0, 0, 10, 15, 30, 10, 0, 0, 0, 0, 0, 0, 5, 15, 25, 15, 10, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0]]
    return tint[month][hour]
    end

    def blue(hour, month)
    tint = [
    [10, 15, 20, 25, 30, 45, 30, 20, 10, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0, 0],
    [10, 15, 20, 25, 30, 40, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0],
    [10, 15, 25, 30, 40, 30, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 45, 40, 35, 20],
    [15, 20, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 35, 50, 40, 35, 20],
    [15, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30],
    [15, 30, 50, 35, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 30],
    [15, 30, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 25],
    [10, 15, 30, 50, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 50, 35, 20],
    [10, 15, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 55, 35, 20, 15],
    [10, 15, 20, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30, 20, 15, 10],
    [10, 10, 15, 20, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 40, 55, 35, 20, 15, 15, 10, 10],
    [10, 15, 20, 25, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 45, 60, 40, 30, 20, 15, 15, 10]]
    return tint[month][hour]
    end

    def alpha(hour, month)
    tint = [
    [175, 170, 160, 160, 150, 150, 145, 140, 120, 90, 55, 20, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 180],
    [170, 165, 155, 150, 140, 130, 130, 125, 110, 80, 50, 20, 10, 10, 10, 15, 25, 70, 95, 125, 140, 150, 160, 175],
    [165, 160, 150, 135, 130, 110, 115, 110, 90, 70, 45, 20, 10, 10, 10, 10, 20, 60, 80, 105, 120, 135, 150, 160],
    [160, 150, 140, 120, 120, 100, 90, 85, 70, 60, 40, 15, 10, 10, 10, 10, 20, 40, 60, 85, 100, 120, 135, 150],
    [155, 140, 130, 110, 105, 85, 75, 70, 50, 45, 35, 15, 10, 10, 10, 10, 10, 20, 40, 70, 85, 110, 125, 140],
    [150, 130, 120, 100, 90, 70, 55, 50, 40, 30, 35, 10, 10, 10, 10, 10, 10, 15, 25, 55, 65, 100, 105, 130],
    [145, 120, 110, 110, 100, 80, 70, 65, 55, 40, 35, 10, 10, 10, 10, 10, 10, 25, 40, 70, 80, 110, 125, 140],
    [150, 130, 120, 120, 110, 100, 85, 80, 70, 50, 40, 15, 10, 10, 10, 10, 10, 40, 60, 80, 100, 120, 130, 140],
    [155, 140, 130, 130, 120, 110, 100, 95, 85, 60, 45, 15, 10, 10, 10, 10, 10, 50, 70, 90, 115, 130, 140, 150],
    [160, 150, 140, 140, 130, 120, 115, 110, 100, 70, 50, 20, 10, 10, 10, 10, 15, 60, 80, 100, 130, 140, 150, 155],
    [165, 160, 150, 150, 140, 130, 130, 125, 110, 80, 55, 20, 10, 10, 10, 15, 20, 70, 90, 115, 145, 150, 155, 160],
    [170, 170, 160, 160, 150, 150, 145, 140, 120, 90, 60, 25, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 170]]
    return tint[month][hour]
    end

    def update_dynamic_light
    return set_dynamic_light if !$UPDATE_DYNAMIC_TINT
    @tint = []
    minus = 7
    no_zero = 6 + minus * 1.5
    month = $Game_Time.month

    for i in 0..23
    @tint[i] = Color.new(red(i, month) - minus + rand(no_zero), green(i, month) - minus + rand(no_zero), blue(i, month) - minus + rand(no_zero), alpha(i, month) - minus + rand(no_zero))
    end

    $UPDATE_DYNAMIC_TINT = false
    return set_dynamic_light
    end

    def set_dynamic_light
    Now_Time.setup_khas_day_light(false) # отключаем обычную смену переключателя
    setup = false
    setup = true if @tint[@hour].alpha > 100
    Functions.setup_khas_light_switch(setup)
    @now_hour = @tint[@hour]
    @next_hour = @tint[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
    @next_hour = @tint[0] if @hour + 1 == HOURS_IN_DAY
    end

    end # class Game_Time_Tint < Sprite_Base

    class Scene_Base

    alias denis_kyznetsov_game_time_scn_base_update update
    def update
    denis_kyznetsov_game_time_scn_base_update
    $Game_Time.update if $Game_Time && !$STOP_TIME_UPDATE
    $Game_Time_Tint.update if $Game_Time_Tint || ($Game_Time_Tint && USE_LIGHT_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle))
    end

    end # class Scene_Base

    class Scene_Map < Scene_Base
    include Time_Settings

    alias denis_kyznetsov_game_time_scn_map_create_all_windo ws create_all_windows
    def create_all_windows
    denis_kyznetsov_game_time_scn_map_create_all_windo ws

    if $SHOW_START_GAME_TIME_WINDOW
    create_time_window
    @time_window_exist = true
    end
    if $imported["DenKyz_Game_Time_Calendar"]
    begin
    if USE_CALENDAR && $SHOW_START_GAME_CALENDAR_WINDOW && USE_CALENDAR_WINDOW
    create_calendar_window
    @calendar_window_exist = true
    end
    rescue
    end
    end
    if $imported["DenKyz_Game_Time_Weather"]
    begin
    if USE_TEMPERATURE_WINDOW && USE_TEMPERATURE && $SHOW_START_GAME_TIME_TEMPERATURE
    create_temp_window
    @temp_window_exist = true
    end
    rescue
    end
    end
    end

    def all_visible(flag)
    time_visible(flag)
    calendar_visible(flag)
    temp_visible(flag)
    end

    def time_visible(flag)
    if !flag
    return if !@time_window_exist
    $SHOW_START_GAME_TIME_WINDOW = !$SHOW_START_GAME_TIME_WINDOW
    @create_time_window.dispose
    @create_time_window = 0
    @time_window_exist = false
    else
    return if @time_window_exist
    $SHOW_START_GAME_TIME_WINDOW = !$SHOW_START_GAME_TIME_WINDOW
    create_time_window
    @time_window_exist = true
    end
    end

    def calendar_visible(flag)
    return if !USE_CALENDAR || !$imported["DenKyz_Game_Time_Calendar"]
    if !flag
    return if !@calendar_window_exist
    $SHOW_START_GAME_CALENDAR_WINDOW = !$SHOW_START_GAME_CALENDAR_WINDOW
    @create_calendar_scene_map.dispose
    @create_calendar_scene_map = 0
    @calendar_window_exist = false
    else
    return if @calendar_window_exist
    $SHOW_START_GAME_CALENDAR_WINDOW = !$SHOW_START_GAME_CALENDAR_WINDOW
    create_calendar_window
    @calendar_window_exist = true
    end
    end

    def temp_visible(flag)
    return if !USE_TEMPERATURE || !$imported["DenKyz_Game_Time_Weather"]
    if !flag
    return if !@temp_window_exist
    $SHOW_START_GAME_TIME_TEMPERATURE = !$SHOW_START_GAME_TIME_TEMPERATURE
    @create_temp_window.dispose
    @create_temp_window = 0
    @temp_window_exist = false
    else
    return if @temp_window_exist
    $SHOW_START_GAME_TIME_TEMPERATURE = !$SHOW_START_GAME_TIME_TEMPERATURE
    create_temp_window
    @temp_window_exist = true
    end
    end

    def create_temp_window
    dx, dy = TEMPERATURE_X, TEMPERATURE_Y
    dw, dh = 120, 50
    @create_temp_window = Temperature_Window.new(dx, dy, dw, dh)
    end

    def create_time_window
    x, y, w, h = CLOCK_X, CLOCK_Y, CLOCK_WIDTH, CLOCK_HEIGHT
    w, h = 180, 76 if !USE_CUSTOM_CLOCK_ON_MAP
    @create_time_window = Time_Window.new(x, y, w, h, OPACITY_CLOCK)
    end

    def create_calendar_window
    dx, dy = CALENDAR_X, CALENDAR_Y
    dw, dh = 214, 100
    @create_calendar_scene_map = Calendar_Scene_Map_Window.new(dx, dy, dw, dh)
    end

    alias denis_kyznetsov_game_time_scn_map_update update
    def update
    denis_kyznetsov_game_time_scn_map_update
    if $Game_Time.sec % 2 == 0 && $imported["DenKyz_Game_Time_Calendar"]
    Functions.transfer?
    Functions.complete?
    end

    if $Game_Time_Notification && USE_CALENDAR_WINDOW_NOTIFICATION
    $Game_Time_Notification.update if !$Game_Time_Notification.disposing
    end

    if !GAME_TIME_BUTTON.is_a?(Integer)
    if Input.trigger?(GAME_TIME_BUTTON) && @time_window_exist && $SHOW_START_GAME_TIME_WINDOW
    time_visible(false)
    elsif Input.trigger?(GAME_TIME_BUTTON) && !@time_window_exist && !$SHOW_START_GAME_TIME_WINDOW
    time_visible(true)
    end
    end

    if $imported["DenKyz_Game_Time_Calendar"]
    begin
    if USE_CALENDAR && USE_CALENDAR_WINDOW && !CALENDAR_TIME_BUTTON.is_a?(Integer)
    if Input.trigger?(CALENDAR_TIME_BUTTON) && @calendar_window_exist && $SHOW_START_GAME_CALENDAR_WINDOW
    calendar_visible(false)
    elsif Input.trigger?(CALENDAR_TIME_BUTTON) && !@calendar_window_exist && !$SHOW_START_GAME_CALENDAR_WINDOW
    calendar_visible(true)
    end
    end
    rescue
    end
    end

    if $imported["DenKyz_Game_Time_Weather"]
    begin
    if USE_TEMPERATURE && USE_TEMPERATURE_WINDOW && !TEMPERATURE_BUTTON.is_a?(Integer)
    if Input.trigger?(TEMPERATURE_BUTTON) && @temp_window_exist && $SHOW_START_GAME_TIME_TEMPERATURE
    temp_visible(false)
    elsif Input.trigger?(TEMPERATURE_BUTTON) && !@temp_window_exist && !$SHOW_START_GAME_TIME_TEMPERATURE
    temp_visible(true)
    end
    end
    rescue
    end
    end
    end

    end # Scene_Map < Scene_Base

    class Game_Map
    include Time_Settings

    alias denis_kyznetsov_game_time_game_map_setup setup
    def setup(map_id)
    denis_kyznetsov_game_time_game_map_setup(map_id)

    if $imported["DenKyz_Game_Time_Weather"]
    begin
    # отключить погоду на карте с тегом внутри
    $USE_DEFAULT_WEATHER = false if USE_DEFAULT_WEATHER && @map.note.include?("<No_Weather>")

    # получаем грацицы температуры для карты, если они есть
    if @map.note =~ /<Temp\s*=\s*((-?[\d]+)\s*,\S?\s*(-?[\d]+))>/i
    $Custom_Temperature[0] = $2.to_i
    $Custom_Temperature[1] = $3.to_i
    else
    $Custom_Temperature = []
    end
    rescue
    end
    end

    $STOP_TIME_UPDATE = (@map.note.include?("<No_Time_Update>") ? true : false)

    if @map.note =~ /<Light_Hour\s*=\s*([\d+])>/i
    $STOP_TIME_UPDATE_LIGHT_HOUR = $1.to_i
    else
    $STOP_TIME_UPDATE_LIGHT_HOUR = -1
    end
    end

    end # class Game_Map

    class Time_Window < Window_Base
    include Time_Settings

    def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height, opacity)
    super(x, y, w, h)
    if opacity != -1 # прозрачность, указанная пользователем, если есть
    self.opacity = opacity
    self.back_opacity = opacity
    self.contents_opacity = opacity
    end
    @width = w
    @height = h
    update
    end

    def blink # мигающее двоеточие
    return ":" if Graphics.frame_count % BLINK_SPEED > BLINK_SPEED/2
    return " "
    end

    def date # дата
    return ($Game_Time.day.to_s + " " + CALENDAR_MONTHS[$Game_Time.month] + " " + $Game_Time.year.to_s) if !USE_CUSTOM_CLOCK_ON_MAP
    date = ""
    return date if CUSTOM_CLOCK_DATE == []
    for i in 0..CUSTOM_CLOCK_DATE.size - 1
    case CUSTOM_CLOCK_DATE[i]
    when "День"
    date += " " + $Game_Time.day.to_s
    when "День недели"
    date += " " + DAYS_WEEK[$Game_Time.month]
    when "Месяц(число)"
    date += " " + $Game_Time.month.to_s
    when "Месяц(название)"
    date += " " + CALENDAR_MONTHS[$Game_Time.month]
    when "Год"
    date += " " + $Game_Time.year.to_s
    else
    date += " " + CUSTOM_CLOCK_DATE[i].to_s
    end
    end
    return date
    end

    def plus_minutes
    return $Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s
    end

    def plus_seconds
    return $Game_Time.sec < 10 ? "0" + $Game_Time.sec.to_s : $Game_Time.sec.to_s
    end

    def time # время
    return ($Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s) +
    (USE_BLINK ? blink : ":") + plus_minutes +
    (SHOW_SECONDS ? ((USE_BLINK ? blink : ":") + plus_seconds) : "") if !USE_CUSTOM_CLOCK_ON_MAP
    time = ""
    return time if CUSTOM_CLOCK_TIME == []
    for i in 0..CUSTOM_CLOCK_TIME.size - 1
    case CUSTOM_CLOCK_TIME[i]
    when "Час"
    time += $Game_Time.hour.to_s
    when "blink"
    time += USE_BLINK ? blink : ":"
    when "Минуты"
    time += plus_minutes
    when "Секунды"
    time += SHOW_SECONDS ? plus_seconds : ""
    else
    time += CUSTOM_CLOCK_TIME[i].to_s
    end
    end
    return time
    end

    def update
    if (@now_sec != $Game_Time.sec && SHOW_SECONDS) || (@now_min != $Game_Time.min && !SHOW_SECONDS) || USE_BLINK || @now_hour != $Game_Time.hour || @now_day != $Game_Time.day || @now_month != $Game_Time.month || @now_year != $Game_Time.year
    setup_variables
    contents.clear
    show_date = date
    show_time = time
    y = 0
    draw_text(0, y, @width - 24, 32, show_date, 1)
    return if show_time == ""
    y += 24 if show_date != ""
    draw_text(0, y, @width - 24, 32, show_time, 1)
    end
    end

    def setup_variables
    @now_sec = $Game_Time.sec
    @now_min = $Game_Time.min
    @now_hour = $Game_Time.hour
    @now_day = $Game_Time.day
    @now_month = $Game_Time.month
    @now_year = $Game_Time.year
    end

    end # class Time_Window < Window_Base

    class Scene_Menu < Scene_MenuBase
    include Time_Settings

    alias denis_kyznetsov_game_time_scn_menu_start start
    def start
    denis_kyznetsov_game_time_scn_menu_start
    create_time_window if TIME_IN_MENU
    end

    def create_time_window
    x, y, w, h = MENU_CLOCK_X, MENU_CLOCK_Y, MENU_CLOCK_WIDTH, MENU_CLOCK_HEIGHT
    x, y, w, h = @gold_window.x, @gold_window.y - 74, 160, 74 if !USE_CUSTOM_CLOCK_IN_MENU
    @create_time_window = Time_Window.new(x, y, w, h, OPACITY_MENU_CLOCK)
    end

    alias denis_kyznetsov_game_time_scn_menu_create_command_ window create_command_window
    def create_command_window
    denis_kyznetsov_game_time_scn_menu_create_command_ window
    begin
    @command_window.set_handler(:calendar, method(:calendar)) if USE_CALENDAR
    rescue
    end
    end

    end # Scene_Menu < Scene_MenuBase

    module DataManager
    class << self

    alias denis_kyznetsov_dt_mngr_setup_new_game setup_new_game
    def setup_new_game
    denis_kyznetsov_dt_mngr_setup_new_game
    Functions.new_game
    end

    alias denis_kyznetsov_dt_mngr_make_save_contents make_save_contents
    def make_save_contents
    contents = denis_kyznetsov_dt_mngr_make_save_contents
    contents[:Game_Time] = $Game_Time
    contents[:Game_Time_Quests] = $QUESTS
    contents[:Game_Time_Last_Quests] = $LAST_QUESTS
    contents[:Game_Time_First_Day] = $FIRST_DAY
    contents[:Game_Time_DUP] = $Game_Time_DUP
    contents
    end

    alias denis_kyznetsov_dt_mngr_extract_save_contents extract_save_contents
    def extract_save_contents(contents)
    denis_kyznetsov_dt_mngr_extract_save_contents(cont ents)
    Functions.new_game
    $Game_Time = contents[:Game_Time]
    $QUESTS = contents[:Game_Time_Quests]
    $LAST_QUESTS = contents[:Game_Time_Last_Quests]
    $FIRST_DAY = contents[:Game_Time_First_Day]
    $Game_Time_DUP = contents[:Game_Time_DUP]
    end
    end

    end # module DataManager

  4. #4

    По умолчанию

    Не выкладывал версии с 5.1 до 5.7.
    Что нового в версии 5.7:
    Отредактировал настройки скрипта
    Настройки окон стали компактнее
    Возможность менять скорость течения времени в игре
    Другие вызовы скриптов (инструкция в шапке скрипта)
    Исправлены ошибки

    Кто использует дополнение Game Time Settings обновитесь до версии 1.4!
    Последний раз редактировалось DK; 12.08.2015 в 15:24.

  5. #5

    По умолчанию

    Тестирую Динамическую Погоду.
    Все, что до квадратных скобок - количество игровых минут между проверками на запуск погоды.
    Проще говоря, пришлось ждать 17 игровых часов, чтобы пошла погода.
    Конечно, это время может быть меньше или больше (зависит от вероятности появления погоды)
    Спойлер Скриншот:

  6. #6

    По умолчанию

    Новая версия: 5.8

    Что нового:
    Функция отключения окна времени
    Изменен один вызов скрипта
    Добавлена поддержка для Динамической Погоды
    Небольшие исправления в коде

  7. #7

    По умолчанию

    Обновил шапку.

    Демо версии 6.0 будет выложено позже, также будет обновлена Динамическая Погода и дополнение Game Time Settings.

    У данного скрипта больше не будет нововведений, т. к. в связи со скорым выходом нового мейкера, скорее всего, перейду на него и буду портировать свои скрипты и продолжать их развивать уже там.

  8. #8

    По умолчанию

    Обновил шапку. Добавил демо и обновил Динамическую Погоду до версии 1.2.

    P.S. Хоть в шапке темы и указана версия 6.0, сам скрипт версии 6.01 и отличие от версии 6.0 всего одной строчкой.

  9. #9

    По умолчанию

    Начал портирование на MV.
    Спойлер Скриншот:

  10. #10

    По умолчанию

    Тестовая версия.

    Кому не сложно протестите

    Сначала включите Ядро, потом Время

    Основное ядро
    Время

    P.S. На счет Ядра буду думать еще, но скорее всего оно нужно будет для всех остальных моих плагинов, чтобы не плодить один и тот же код в каждом из них.

Страница 1 из 7 123 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[VX ACE][MV][MZ] Время/Дата (Game Time)