ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker VX ACEУлучшающие или добавляющее новое скриптыВремя/Дата v. 6.1 Финальная Версия
																				Войти на сайт
×
			ТЕМА: Время/Дата v. 6.1 Финальная Версия
Время/Дата v. 6.1 Финальная Версия 11 года 6 мес. назад #68684
					
  | 
			
				
 
		Скрипт Время/Дата. Система времени в играх. 
Инструкция: Вся инструкция и настройки в шапке скрипта! Версия: 6.1 Финальная Версия Внимание! Нововведений в данном скрипте больше не будет! Что нового: Демо: Демо 6.0 Динамическая погода: Динамическая Погода версия 1.2 Исправление ошибок: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] Если вы не используете скрипт khas на освещение и встречаете такую ошибку line 994: NoMethodError occurred. undefined method `effect_surface' for #<Game_Map:0x8b24c44> отредактируйте скрипт на 994 строчке. На 994 строчке находится tint_color = $game_map.effect_surface.colorreturn if !GAME_TIME_LIGHT_IN_BATTLEreturn if !GAME_TIME_LIGHT_IN_BATTLE
tint_color = $game_map.effect_surface.colorЕсли ссылки умерли, то можете поискать скрипты здесь: https://github.com/DKPlugins/RPG-Maker-VX-Ace Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =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 | 
		
| 
				 
		
		Последнее редактирование: 4 года 10 мес. назад от  DK.			
		 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: Lekste, strelokhalfer, poca, Jas6666, Yros, aval__, Pinamal, 4ert24, TheMaximGames, Eugenius  
			 | 
		
Календарь 11 года 6 мес. назад #68685
					
  | 
			
				
 
		Очень интересный и полезный скрипт  
 | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Календарь 11 года 6 мес. назад #68692
					
  | 
			
				
 
		С радостью бы проверил этот скрипт, но мне лень искать специально для этого Game Time и Night/Day... 
А если названия месяцев поменять, что будет? :3 А то коммент стоит: "не трогать", а я, если уж и полезу ковырять, то обязательно поторгаю... В другом мире ведь может быть и другие названия! @^~^@ Так, еще немного слияния постов в один. --Эльф  | 
		
| 
				
 
		
		Последнее редактирование: 11 года 4 мес. назад от  DeadElf79.			
		 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Календарь 11 года 6 мес. назад #68697
					
  | 
			
				
 
		Название можно месяцев можно поменять. Там написано "лучше не трогать", потому как все как в жизни стоит.	 
 | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Календарь 11 года 6 мес. назад #68698
					
  | 
			
				
 
		- add_quest(text, day, month) - должен поддерживать год; 
- в списке квестов не нужно выводить год квеста или если точнее, наоборот, в списке квестов, например, за апрель, игрок должен бы видеть квесты на текущий апрель, а не все апрельские квесты на десять лет вперед; - если есть года, то нужно добавить листание календаря и по годам тоже; - выполненные квесты хорошо бы отмечать другим цветом; - окно непосредственно под календарь большое, но шрифт там почему-то пережат словно под крохотное виртуальное окошко.  | 
		
| 
				
 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: DK  
			 | 
		
Календарь 11 года 6 мес. назад #68715
					
  | 
			
				
 
		Subzeroy пишет:
 
6. Теперь скрипт полностью зависим от Game Time + Night/Day А то зря, наверное, теперь скрипт превратился из более-менее универсального в адд-он к вышеупомянутым. Это, конечно, мои проблемы, но не все используют Game Time же.  | 
		
| 
				
 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: DK  
			 | 
		
Календарь 11 года 6 мес. назад #68717
					
  | 
			
				
 
		Я еще подумаю, как можно сделать по-другому.	 
 | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата + Календарь 11 года 6 мес. назад #68789
					
  | 
			
				
 
		Посмотрел очень вяло в notepad++, пока что придумал только, что 
- По фреймкаунту отчет будет идти даже вне карты, в частности в меню, или я ошибаюсь? Просто имо с этой чертой надо считаться, ибо если задать параллельное событие с проверкой на один момент, то его можно профукать в меню. - Не вижу смысла в диспозе окна, можно его скрыть методом hide и показать методом show, а проверять через поле visible. Или для красоты close и open с проверкой по open? Кстати, если сделаешь так, то в update тоже поставь проверку на открытость.  | 
		
| 
				 
		Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.	 
	
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата + Календарь 11 года 6 мес. назад #68791
					
  | 
			
				
 
		На счет первого ты прав. Я придумаю что-нибудь. На счет второго... Просто я где-то читал, что окна лучше уничтожать, а не скрывать, чтобы экономить ресурсы. Если это не так, то поправьте.	 
 | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата + Календарь 11 года 6 мес. назад #68794
					
  | 
			
				
 
		Так то оно так, и лишний раз апдейт не зовется, и память освобождается. Но потом снова зовется конструктор, да и на сцене еще окон куча находится, которые энтербрейном уже расписаны через close. В принципе можно, я не против, просто любопытно.	 
 | 
		
| 
				 
		Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.	 
	
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: DK  
			 | 
		
Время/Дата + Календарь 11 года 6 мес. назад #68800
					
  | 
			
				
 
		С ходу наводка: названия модуля Settings лучше поменять во избежание конфликтов (хотя бы и на Time_Settings).	 
 | 
		
| 
				 
		Жуть болотная, на лапках, в тапках и с пулемётом...	 
	
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: DK  
			 | 
		
Время/Дата + Календарь 11 года 6 мес. назад #68820
					
  | 
			
				
 
		Новая версия 1.8: 
-Поддержка MOG Weather EX, есть разные настройки. -Исправлены ошибки. В разработке собственная погода и день/ночь. Работа ведется. Отписывайтесь как скрипт Прилагаю демо: Демо Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
#                                                                             #
#                          Время/Дата + Календарь                             #
#                                                                             #
###############################################################################
 
Автор: Денис Кузнецов (http://vk.com/id8137201)
Релиз от: 27.04.14
Версия: 1.8
 
############# ИНСТРУКЦИЯ #######################################################
  Время/Дата:
  Чтобы изменить время, воспользуйтесь скриптом
  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)
 
  Чтобы получить текущую дату используйте вызовы скрипта:
  Now_Time.sec?
  Now_Time.min?
  Now_Time.hour?
  Now_Time.day?
  Now_Time.dayweek?
  Now_Time.month?
  Now_Time.year?
 
  Чтобы добавить время, используйте скрипты:
  Now_Time.time("add","sec", n) - добавит n секунд
  Now_Time.time("rem","sec", n) - удалит n секунд
  Возможно: "sec", "min", "hour", "day", "month", "year"
  Пример: Now_Time.time("add", "hour", 2) - добавит 2 часа
 
  Календарь:
  Чтобы добавить запись в календарь, воспользуйтесь вызовом скрипта:
  add_quest(text, day, month, year)
  text - текст, что будет отображаться в календаре
  day - день
  month - месяц
  year - год
  Например: add_quest("Сходить за посылкой", 2, 1, 2014) - вызов этого скрипта добавит
  запись в календарь на 2 января 2014 года.
  2 Пример: add_quest("Получить почту") - добавит запись на сегодняшний день
  Прошедшие события будут автоматически удаляться !
  Но вы также можете самостоятельно завершать записанные события вызовом скрипта:
  complete_quest(text, day, month, year)
  где text - текст записи
  day - день
  month - месяц
  year - год
  Чтобы, например, удалить запись из первого примера выше, нужно вызвать скрипт:
  complete_quest("Сходить за посылкой", 2, 1, 2014)
=end
 
############# НАТРОЙКА #########################################################
 
module CalVocab
  # Информация на месяцы, на которых нет записей
  No_Info = "В этом месяце ничего нет"
  # Информация в окне, если сегодня нет событий
  Game_No_Info = "На сегодня ничего нет"
end
 
module Calendar_Settings
  # Название дней недели
  Days_Week = %w[ Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье ]
 
  # Название месяцев
  Months = %w[ Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь
  Ноябрь Декабрь ]
end
 
module Time_Settings
  # Использовать дату с компьюетера ? true - да, false - нет
  Use_Real_Time = false
 
  # Исользовать календарь ? true - да, false - нет
  Use_Calendar = true
 
	# Остановить время в меню ? true - да, false - нет
	Pause_In_Menu = false
 
	# Отображать время в меню ? true - да, false - нет
	# Если Pause_In_Menu = true, то будет отображаться только дата.
	Time_In_Menu = true
 
	# Использовать Khas Light Effect ? true - да, false - нет
	Use_Khas_Light = false
 
	# Номер переключателя, который отвечает за включение света в событиях,
	# Если вы используете Khas_Light Effect
	Game_Night_Switch = 3
 
	# Диапозон времени, когда свет не горит (день),
	# Если вы используете Khas_Light Effect
	Day_light = [8, 19] # с 8 утра до 7 вечера свет не горит
 
	# Настройка оттенков экрана для каждого часа
		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(80,20,20,115), 		 # => 6 час
        Color.new(110,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(100,20,20,85), 		 # => 18 час
        Color.new(130,40,30,105),  	 # => 19 час
        Color.new(80,20,40,125), 		 # => 20 час
        Color.new(10,0,50,135), 		 # => 21 час
        Color.new(20,0,60,135), 		 # => 22 час
        Color.new(30,0,70,155)] 		 # => 23 час
 
	# Использовать MOG Wheather EX ? true - да, false - нет
	# Вы можете переключать погоду, вызовом скрипта: Now_Time.set_weather
	$Use_Weather = true
 
	# Часы, когда действует погода 
	Weather_hours = [10, 19]
 
	# Если используете погоду
	# [ТИП, СИЛА, ИМЯ_ГРАФИКИ] Подробнее в MOG Weather EX
	Weather_Periods = [
		[0,5,"Snow_01"],  # Январь
		[1,3,"Snow_01"],  # Февраль
		[2,4,"Leaf_01A"], # Март
		[3,6,"Leaf_02A"], # Апрель
		[4,8,"Leaf_02A"], # Май
		[5,5,"Fog_01A"],  # Июнь
		[6,6,"Fog_01A"],  # Июль
		[0,5,"Fog_01A"],  # Август
		[1,4,"Leaf_01B"], # Сентябрь
		[2,6,"Leaf_02B"], # Октябрь
		[3,5,"Leaf_02B"], # Ноябрь
		[4,6,"Snow_01"]]   # Декабрь
 
	# Секунд в минуте
	Seconds_In_Minute = 60
	# Минут в часе
	Minutes_In_Hour = 60
	# Часов в дне
	Hours_In_Day = 24
 
  # Скорость времени
  # (Минимум - 1, Максимум - сколько угодно). 
	# Чем меньше цифра, тем быстрее идет время.
  Time_Speed = 1
 
	# Частота обновления ":" в отображении времени
	Time_Update = 40
 
  # Начало игры! Если не используете реальное время.
  Sec   = 12 # Секунды
  Min   = 5 # Минуты
  Hour  = 9 # Час
  Day   = 15 # День
  Day_Week = 7 # В диапозоне от 1 до 7 (1 - Понедельник, 7 - Воскресенье)
  Month = 4 # Месяц
  Year = 756 # Год
 
  # Количество дней в каждом месяце
  Days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 
  # День с которого начинается отображения первого дня первого месяца
  $First_Day = 1 # В диапозоне от 1 до 7
 
  # Позиция окна календаря
	# (1-слева вверху, 2-справа вверху, 3-слева внизу, 4-справа внизу)
  Calendar_Position = 1
 
	# Позиция окна времени
	#(1-слева вверху, 2-справа вверху, 3-слева внизу, 4-справа внизу)
  $Time_Position = 2
 
  # Кнопка отображения окон (время и календарь)
  Game_Time_Button = :Z 
 
############# КОНЕЦ НАСТРОЙКИ ##################################################
############# НИЖЕ НЕ ТРОГАТЬ !!! ##############################################
 
  Months_Day = [] # Не трогать !!!
  Quests = [] # Не трогать !!!
  $Quests_Size = 0 # Не трогать !!!
  Sort = [] # Не трогать !!!
 
end
 
 
class Now_Time
 
  def initialize
    $Game_Time = Denis_Kyznetcov_Game_Time.new
  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.sec?
    return $Game_Time.sec
  end
 
  def self.min?
    return $Game_Time.min
  end
 
  def self.hour?
    return $Game_Time.hour
  end
 
  def self.day?
    return $Game_Time.day
  end
 
  def self.dayweek?
    return $Game_Time.dayweek
  end
 
  def self.month?
    return $Game_Time.month
  end
 
  def self.year?
    return $Game_Time.year
  end
 
	def self.time(command, type, n)
		case command
		when "add"
			case type
				when "sec"
					n.times do $Game_Time.add_sec(1) end
				when "min"
					n.times do $Game_Time.add_min(1) end
				when "hour"
					n.times do $Game_Time.add_hour(1) end
				when "day"
					n.times do $Game_Time.add_day(1) end
				when "month"
					n.times do $Game_Time.add_month(1) end
				when "year"
					n.times do $Game_Time.add_year(1) end
			end
		when "rem"
			case type
				when "sec"
					n.times do $Game_Time.rem_sec(1) end
				when "min"
					n.times do $Game_Time.rem_min(1) end
				when "hour"
					n.times do $Game_Time.rem_hour(1) end
				when "day"
					n.times do $Game_Time.rem_day(1) end
				when "month"
					n.times do $Game_Time.rem_month(1) end
				when "year"
					n.times do $Game_Time.rem_year(1) end
			end
		end
	end
 
	def self.set_weather
		$Use_Weather == false ? $Use_Weather = true : $Use_Weather = false
	end
 
end # Game_Time
 
class Denis_Kyznetcov_Game_Time
  include Time_Settings, Calendar_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
    @dayweek = Day_Week - 1
    @month = Month - 1
    @year = Year
  end
 
  def change(sec = 0, min = 0, hour = 0, day = 0, dayweek = 0, month = 0, year = 0)
    @sec = sec
    @min = min
    @hour = hour
    @day = day
    @dayweek = dayweek - 1
    @month = month - 1
    @year = year
  end
 
  def update
		if SceneManager.scene.is_a?(Scene_Map) || (SceneManager.scene.is_a?(Scene_Menu) && !Pause_In_Menu)
			return Real_Time if Use_Real_Time
			return unless Graphics.frame_count % Time_Speed == 0
				add_sec(1)
		end
   end
 
  def Real_Time
    @sec = Time.now.sec
    @sec = 0 if @sec >= Seconds_In_Minute
    @min = Time.now.min
    @hour = Time.now.hour
    @day = Time.now.day
    @dayweek = Time.now.wday
    @month = Time.now.month - 1
    @year = Time.now.year
  end
 
  def add_sec(n)
    @sec += n
    return unless @sec == Seconds_In_Minute
    @sec = 0
    add_min(1)
  end
 
  def add_min(n)
    @min += n
    return unless @min == Minutes_In_Hour
    @min = 0
    add_hour(1)
  end
 
  def add_hour(n)
    @hour += n
    return unless @hour == Hours_In_Day
    @hour = 0
    add_day(1)
  end
 
  def add_day(n)
    @day += n
    @dayweek += n
    @dayweek = 0 if @dayweek == Days_Week.size
    return unless @day == Days[@month]
    @day = 0
    add_month(1)
  end
 
  def add_month(n)
    @month += n
    return unless @month == Months.size
    @month = 0
    add_year(1)
  end
 
  def add_year(n)
    @year += n
  end
 
	def rem_sec(n)
		@sec -= n
		return unless @sec == -1
		@sec = Seconds_In_Minute
		rem_min(1)
	end
 
	def rem_min(n)
      @min -= n
      return unless @min == -1
      @min = Minutes_In_Hour
      rem_hour(1)
	end
 
    def rem_hour(n)
      @hour -= n
      return unless @hour == -1
      @hour = Hours_In_Day - 1
      rem_day(1)
	end
 
    def rem_day(n)
    @day -= n
    @dayweek -= n
    @dayweek = Days_Week.size - 1 if @dayweek == -1
    return unless @day == 0
    @day = Days[@month-1]
    rem_month(1)
	end
 
  def rem_month(n)
    @month -= n
    return unless @month == -1
    @month = Months.size - 1
    rem_year(1)
	end
 
   def rem_year(n)
    @year -= n
   end
end
 
Now_Time.new
 
class Scene_Base
  alias denis_kyznetcov_scn_base_update update
  def update
    denis_kyznetcov_scn_base_update
    $Game_Time.update
  end
end
 
 
 
 
class Spriteset_Map
	include Time_Settings
	alias denis_kyznetcov_sprset_map_update update
	def update
		denis_kyznetcov_sprset_map_update
		return if !Use_Khas_Light
		if $Game_Time.hour < Day_light[0] || $Game_Time.hour > Day_light[1]
			$game_switches[Game_Night_Switch] = true 
		else
			$game_switches[Game_Night_Switch] = false
		end
		now_hour = Tints[$Game_Time.hour]
    next_hour = Tints[$Game_Time.hour + 1] unless $Game_Time.hour + 1 == Hours_In_Day
    next_hour = Tints[0] if $Game_Time.hour + 1 == Hours_In_Day
    min = $Game_Time.min
		r = now_hour.red.to_f + (next_hour.red.to_f - now_hour.red.to_f)/Seconds_In_Minute * min
		g = now_hour.green.to_f + (next_hour.green.to_f - now_hour.green.to_f)/Seconds_In_Minute * min
		b = now_hour.blue.to_f + (next_hour.blue.to_f - now_hour.blue.to_f)/Seconds_In_Minute * min
		a = now_hour.alpha.to_f + (next_hour.alpha.to_f - now_hour.alpha.to_f)/Seconds_In_Minute * min
		$game_map.effect_surface.change_color(1, r, g, b, a)
	end
end # class Spriteset_Map
 
class Scene_Map < Scene_Base
  include Time_Settings
	alias denis_kyznetcov_scn_map_create_all_windows create_all_windows
	def create_all_windows
		denis_kyznetcov_scn_map_create_all_windows
		create_time_window
    @time_window_exist = true
    if Use_Calendar
      create_calendar_window
      @calendar_window_exist = true
    end
	end
 
  def create_time_window
		dx, dy = 0, 0
		$Time_Position += 1 if $Time_Position == Calendar_Position
		$Time_Position = 1 if $Time_Position == 5
		case $Time_Position
		when 2
			dx = Graphics.width-180
		when 3
			dy = Graphics.height-90
		when 4
			dx = Graphics.width-180
			dy = Graphics.height-90
		end
    @create_time_window = Time_Window.new(dx, dy, 180, 90)
  end
 
    def create_calendar_window
    dx, dy = 0, 0
    case Calendar_Position
    when 2
      dx = Graphics.width-200
    when 3
      dy = Graphics.height-100
    when 4
      dx = Graphics.width-200
      dy = Graphics.height-100
    end
    @create_calendar_scene_map = Calendar_Scene_Map_Window.new(dx, dy, 200, 100)
  end
 
  alias denis_kyznetcov_gmtime_scnmap_update update
  def update
		denis_kyznetcov_gmtime_scnmap_update
		if $Use_Weather
			if $Game_Time.hour >= Weather_hours[0] && $Game_Time.hour <= Weather_hours[1] && $game_system.weather == [-1, 0, ""] || @now_month != $Game_Time.month
				@now_month = $Game_Time.month
				$game_temp.weather_fade = false
				month = $Game_Time.month
				$game_system.weather = [Weather_Periods[month][0], Weather_Periods[month][1], Weather_Periods[month][2]]
			elsif $game_system.weather != [-1, 0, ""] && ($Game_Time.hour < Weather_hours[0] || $Game_Time.hour > Weather_hours[1])
				$game_temp.weather_fade = true
				$game_system.weather = [-1, 0, ""]
			end
		else
			$game_temp.weather_fade = true
			$game_system.weather = [-1, 0, ""]
		end
    if Input.trigger?(Game_Time_Button) && @time_window_exist == true
      @create_time_window.dispose
      @create_time_window = 0
      @time_window_exist = false
    elsif Input.trigger?(Game_Time_Button) && @time_window_exist == false
      create_time_window
      @time_window_exist = true
    end
    if Use_Calendar
      if Input.trigger?(Game_Time_Button) && @calendar_window_exist == true
        @create_calendar_scene_map.dispose
        @create_calendar_scene_map = 0
        @calendar_window_exist = false
      elsif Input.trigger?(Game_Time_Button) && @calendar_window_exist != true
        create_calendar_window
        @calendar_window_exist = true
      end
    end
  end
 
end # Scene_Map < Scene_Base
 
class Time_Window < Window_Base
  include Calendar_Settings
  def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height)
    super(x, y, w, h)
    update
  end
 
	def blink
		return ":" if Graphics.frame_count % Time_Settings::Time_Update > Time_Settings::Time_Update/2
		return " "
	end
 
  def date
    return ($Game_Time.day.to_s + " " + Months[$Game_Time.month] + " " + $Game_Time.year.to_s)
  end
 
  def time
    return ($Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s) + blink + ($Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s)
  end
 
  def update
			contents.clear
			draw_text(0, 5, 150, 32, date, 1)
			draw_text(50, 30, 200, 32, time)
  end
end
 
 
################################################################################
 
class Calendar_Time_Window_Base < Window_Base
  include Time_Settings, Calendar_Settings
  def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height)
    super(x, y, w, h)
		@year = $List_Year
		static_text
		draw_text(0, 40, 190, 32, "Календарь на: " + $List_Year.to_s + " г")
    update
  end
 
	def static_text
		draw_text(10, 0, 180, 32, "Текущая дата:")
		draw_text(10, 20, 160, 32, $Day.to_s + ", " + Months[$Month].to_s + " " + $Year.to_s + " г")
	end
 
  def update
		if @year != $List_Year
			@year = $List_Year
			contents.clear
			static_text
			draw_text(0, 40, 190, 32, "Календарь на: " + $List_Year.to_s + " г")
		end
  end
 
end # class Calendar_Time_Window_Base < Window_Base
 
class Calendar_Month_Window_Base < Window_Base
  include Time_Settings, Calendar_Settings
  def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height)
    super(x, y, w, h)
    @now_year = $List_Year
    @mow_month = $month_cursor
    month_math
		update
  end
 
  def month_math
    Months_Day[0] = $First_Day
    for i in 1..11
      Months_Day[i] = (Days[i-1]+Months_Day[i-1]) % 7
      Months_Day[i] = 7 if Months_Day[i] == 0
    end
  end
 
 
  def show_days_info # организация отображения календаря в цифрах
    dx, dy, i, k, week = 60, 20, 1, Months_Day[$month_cursor], 4
    if (Months_Day[$month_cursor] > 5 && $month_cursor == 1) || (Months_Day[$month_cursor] > 1) 
      week = 5
    end 
    if Days[$month_cursor] > 30 || (Months_Day[$month_cursor] > 5 && Days[$month_cursor] >= 30)
      week = 6
    end
    change_color(normal_color)
    draw_text(dx, 0, 260, 25, "Пн  Вт  Ср  Чт  Пт  Сб  Вс")
    i = draw_week(dx, dy, Months_Day[$month_cursor], 1, i)
    for j in 2..week
      i = draw_week(dx, dy, 1, j, i)
    end
  end
 
  def draw_week(dx, dy, k, j, i) # отображение календаря в цифрах
    for s in k..7
       if i > Days[$month_cursor]
          break
        end
      if i == $Day && $Month == $month_cursor && $Year == $List_Year
        change_color(text_color(24))
      else
        change_color(normal_color)
      end
      for ind in 0..Quests.size - 1
        if Quests[ind] != nil
          if $List_Year == Quests[ind][:year] && i == Quests[ind][:date] && Quests[ind][:month] == $month_cursor && i != $Day
            change_color(text_color(20))
          elsif i == Quests[ind][:date] && $Month == Quests[ind][:month] && $Month == $month_cursor && $Year == Quests[ind][:year] && $Year == $List_Year
             change_color(text_color(21))
          elsif i != $Day && $Year != $List_Year
            change_color(normal_color)
          end
        end
      end
      draw_text(dx + (s-1)*24*1.35, dy + (j-1)*20, 460, 25, i.to_s)
      i += 1
    end
    return i
  end
 
  def update
    if @now_year != $List_Year || @now_month != $month_cursor || delete? > 0
      if @now_year != $List_Year
				@now_year = $List_Year  
				month_math
			end
      @now_month = $month_cursor if @now_month != $month_cursor
      contents.clear
      show_days_info 
    end
  end
 
  def delete?
		k = 0
    for i in 0..Quests.size-1
      if Quests[i] != nil
        Functions.new.delete_quest(i) if Quests[i][:date] < $Day && Quests[i][:month] == $Month && Quests[i][:year] == $Year
				k += 1
      end
    end
		return k
  end
 
end # Calendar_Month_Window_Base < Window_Base
 
 
class Functions
  include Time_Settings
 
  def delete_quest(index) # удаление записей
    for i in index..Quests.size - 1
      Quests[i] = Quests[i+1]
    end
    Quests[Quests.size-1] = nil
  end
 
end
 
class Calendar_Strings_Window_Base < Window_Base
  include Time_Settings, Calendar_Settings, CalVocab
  def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height)
    super(x, y, w, h)
		@now_month = $month_cursor
		@now_year = $List_Year
    if Quests.size > 0
      proverka(year) if Quests.size > 1
      show_month_info
    else
      draw_text(50, 80, 350, 50, No_Info, 0)
    end
  end
 
  def show_month_info # отображение текстовых записей и организцаия удаления прошедших событий
    dh, k = 20, 0
    size = Quests.size
      for i in 0..size-1
        if Quests[i] != nil && Quests[i][:month] == $month_cursor
          if ($Year > Quests[i][:year] || (($Year >= Quests[i][:year] && Quests[i][:month] < $Month)) || ($Year >= Quests[i][:year] && Quests[i][:month] == $Month && Quests[i][:date] < $Day))
            Functions.new.delete_quest(i)
          else
            if ($Day == Quests[i][:date] && Quests[i][:month] == $Month && $Year == Quests[i][:year])
              change_color(text_color(20))
            end
            draw_text(0, k*dh, 350, 30, Quests[i][:text] + " " + (Quests[i][:date].to_s), 0) if Quests[i][:year] == $List_Year
            k += 1 if $List_Year == Quests[i][:year]
            change_color(normal_color)
          end
        end
      end
    draw_text(50, 80, 350, 50, No_Info, 0) if k == 0
  end
 
 
  def year # какой максимальный год в записях
    if Quests[0] != nil
      max_year = Quests[0][:year]
      for i in 0..Quests.size-1
        if Quests[i] != nil
          if Quests[i][:year] < $Year
            Functions.new.delete_quest(i)
            break
          end
          if Quests[i][:year] > max_year
            max_year = Quests[i][:year]
          end
        end
      end
      return max_year
    end
    return 0
  end
 
  def proverka(max_year = $Year) # организация проверки записей на сортировку
    size = Quests.size - 1
    for years in $Year..max_year
      ind = 0
      for index in 0..size
        if Quests[index] != nil
          if Quests[index][:year] == years
            ind = index
          end
          if Quests[index][:year] < Quests[ind][:year]
            sortirovka(ind, index)
        end
      end
    end
 
      for months in 0..11 # цикл для месяцев
        for index in 0..size # цикл для массива квестов
          if Quests[index] != nil
            if Quests[index][:month] == months
              ind1 = index # индекс первого элемента
              for index1 in 0..size # цикл от найденного элемента
                if Quests[index1] != nil
                  if Quests[ind1][:date] < Quests[index1][:date] && Quests[ind1][:year] == Quests[index1][:year]
                    sortirovka(ind1, index1)
                    break
                  end
                end
              end
            end
          end
        end
      end
    end
  end
 
  def sortirovka(i, m) # сортировка записей
    Sort[0] = { :text => Quests[i][:text], :date => Quests[i][:date], :month => Quests[i][:month], :year => Quests[i][:year] }
    Quests[i] = Quests[m]
    Quests[m] = Sort[0]
  end
 
  def update
		if @now_month != $month_cursor || @now_year != $List_Year
			contents.clear
			@now_month = $month_cursor
			@now_year = $List_Year
			if Quests.size > 0
				show_month_info
			else
				draw_text(50, 80, 350, 50, No_Info, 0)
			end
		end
  end
 
end # class Calendar_Month_Window_Base < Window_Base
 
class Window_MenuCommand < Window_Command
  include Time_Settings
  alias denis_kyznetcov_calendar_wnd_menu_cmmd_add_original_commands add_original_commands
  def add_original_commands
    denis_kyznetcov_calendar_wnd_menu_cmmd_add_original_commands
    add_command("Календарь", :calendar) if Use_Calendar
  end
end
 
class Scene_Menu < Scene_MenuBase
  include Time_Settings
 
	alias denis_kyznetcov_time_scn_menu_start start
	def start
		denis_kyznetcov_time_scn_menu_start
		create_time_window if Time_In_Menu
	end
 
	def create_time_window
		@create_time_window = Menu_Time_Window.new(@gold_window.x, @gold_window.y - 80, 160, 80)
	end
 
  alias denis_kyznetcov_scn_menu_create_command_window  create_command_window
  def create_command_window
    denis_kyznetcov_scn_menu_create_command_window
    @command_window.set_handler(:calendar, method(:calendar)) if Use_Calendar
  end
 
  def calendar
    SceneManager.call(CalendarScene) 
  end
end # Scene_Menu < Scene_MenuBase
 
class Menu_Time_Window < Window_Base
	include Time_Settings, Calendar_Settings
	def initialize(x, y, w, h)
    super(x, y, w, h)
		update
  end
 
	def blink
		return ":" if Graphics.frame_count % Time_Update > Time_Update/2
		return " "
	end
 
	def date
		return ($Game_Time.day.to_s + " " + Months[$Game_Time.month] + " " + $Game_Time.year.to_s)
	end
 
	def time
		return ($Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s) + blink + ($Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s)
	end
 
	def update
		contents.clear
		Pause_In_Menu ? dy = 10 : dy = 0
		draw_text(0, dy, 140, 32, date, 1)
		draw_text(40, 25, 200, 32, time) if !Pause_In_Menu
	end
 
end # Menu_Time_Window < Window_Base
 
class Quest_Window < Window_Base
 
  def initialize(x, y, w, h)
    super(x, y, w, h)
		update
  end
end # Quest_Window < Window_Base
 
class CalendarScene < Scene_MenuBase
  include Time_Settings
 
  def start
    super
    $Year = $Game_Time.year
    $Month = $Game_Time.month
    $Day = $Game_Time.day
		$List_Year = $Year
    create_main_window
    create_month_window
    create_time_window
    create_strings_window
  end
 
  def create_main_window
    @create_main_window = Calendar_Window_Command.new(0, 100)
  end
 
  def create_strings_window
    dw = Graphics.width/3
    @create_strings_window = Calendar_Strings_Window_Base.new(dw, 176, Graphics.width - dw, Graphics.height - 176)
  end
 
  def create_month_window
    dw = Graphics.width/3
    @create_month_window = Calendar_Month_Window_Base.new(dw, 0, Graphics.width - dw, 176)
  end
 
  def create_time_window
    @create_time_window = Calendar_Time_Window_Base.new(0, 0, Graphics.width/3, 100)
  end
 
  def update
    super
    return_scene if Input.trigger?(:B)
  end
 
end # class CalendarScene < Scene_MenuBase
 
class Game_Interpreter
  include Time_Settings
 
  def add_quest(text, date = 0, month = 0, year = 0) # добавление записей в массив
    $Year = $Game_Time.year
    $Month = $Game_Time.month
    $Day = $Game_Time.day
    date = $Day if date == 0
    month = $Month + 1 if month == 0
    year = $Year if year == 0
    Quests[Quests.size] = { :text => text, :date => date, :month => month - 1, :year => year }
    $Quests_Size = Quests.size
  end
 
  def complete_quest(text, day = $Game_Time.day, month = $Game_Time.month, year = $Game_Time.year)
		month -= 1 if month != $Game_Time.month
    for i in 0..Quests.size - 1
      if Quests[i] != nil
        if Quests[i][:text] == text && Quests[i][:date] == day && Quests[i][:month] == month && Quests[i][:year] == year
            Functions.new.delete_quest(i)
          break
        end
      end
    end
  end
 
end # class Game_Interpreter
 
class Calendar_Window_Command < Window_Command
  include Time_Settings, Calendar_Settings
 
  def initialize(x, y)
    super
    select($Month)
  end
 
  def make_command_list
    $month_cursor = $Month
    $List_Year = $Year
    Months.each do |index|
      add_command(index, index)
    end
  end
 
    def window_width
    return Graphics.width/3
  end
 
   def window_height
    return 2*Graphics.height/3 + 40
  end
 
  def cursor_up(wrap = true)
    $month_cursor -= 1
    if $month_cursor < 0
      $month_cursor = 11
    end
    select($month_cursor)
end
 
  def cursor_down(wrap = true)
    $month_cursor += 1
    if $month_cursor > 11
      $month_cursor = 0
    end
    select($month_cursor)
  end
 
  def cursor_right(wrap = true)
    $List_Year += 1
    $First_Day += 1
    $First_Day = 1 if $First_Day > 7
  end
 
  def cursor_left(wrap = true)
    $List_Year -= 1
    $First_Day -= 1 if $List_Year >= $Year
    $First_Day = 7 if $First_Day < 1
    $List_Year = $Year if $List_Year < $Year
  end
end # Calendar_Window_Command < Window_Command
 
 
class Calendar_Scene_Map_Window < Window_Base
  include Time_Settings, Calendar_Settings, CalVocab
 
  def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height)
    super(x, y, w, h)
    @now_day = $Game_Time.day
		@draw = false
    update
  end
 
  def draw_now_quests
    k = 0
    for i in 0..Quests.size - 1
      if Quests[i] != nil
        if Quests[i][:date] == $Game_Time.day && Quests[i][:month] == $Game_Time.month && Quests[i][:year] == $Game_Time.year
          draw_text(0, k*25, 200, 32, Quests[i][:text])
          k += 1
        elsif Quests[i][:date] < $Game_Time.day && Quests[i][:month] <= $Game_Time.month && Quests[i][:year] <= $Game_Time.year
          Functions.new.delete_quest(i)
        end
      end
    end
    return false if k == 0
		return true
  end
 
  def update
    contents.clear
    if @now_day != $Game_Time.day
      @now_day = $Game_Time.day
      delete?
      @draw = draw_now_quests
      draw_text(0, 20, 200, 32, Game_No_Info) if @draw == false
    else
      @draw = draw_now_quests
      draw_text(0, 20, 200, 32, Game_No_Info) if @draw == false
    end
  end
 
  def delete?
    for i in 0..Quests.size - 1
      if Quests[i] != nil
        if Quests[i][:date] < $Game_Time.day && Quests[i][:month] <= $Game_Time.month && Quests[i][:year] <= $Game_Time.year
          Functions.new.delete_quest(i)
        end
      end
    end
  end
 
end # Calendar_Scene_Map_Window | 
		
| 
				 
		
		Последнее редактирование: 11 года 6 мес. назад от  DK.		Причина: Ссылка на демо	
		 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: Pinamal  
			 | 
		
Время/Дата+Времена Года+Погода+Календарь. v. 2.6.2 11 года 5 мес. назад #69426
					
  | 
			
				
 
		Здравствуйте. Нужна помощь по данному скрипту, есть несколько вопросов. Очень нравится его совмещение с Khas Awesome Light Effects и относительно легкая настройка. (для меня -я нуб=)). Я не разбираюсь в скриптинге, но может быть кто то поможет. 
1. Ест ли возможность вырезать из него «записи в календаре», что бы не было окна с "В этот день ничего нет"? и настроек с этим связанных. (Оставить только сам календарь с днями, числами и т.д и время.) 2. Где что поменять, что бы в начале игры не было видно даты и время? (по нажатию окна убираются, а как сделать что бы изначально были убраны и по нажатию появились?) 3. Если возможность отключить смену времени на определенных картах. (Ну скажем на одной карте идет время, смена дня и ночи, а заходим в другую локацию и там статичный свет – темень всегда.)? З.ы. Извиняюсь если это все надо было спрашивать в какой то другой теме.  | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата+Времена Года+Погода+Календарь. v. 2.6.2 11 года 5 мес. назад #69427
					
  | 
			
				
 
		4ert24 пишет:
 
Здравствуйте. Нужна помощь по данному скрипту, есть несколько вопросов. Очень нравится его совмещение с Khas Awesome Light Effects и относительно легкая настройка. (для меня -я нуб=)). Я не разбираюсь в скриптинге, но может быть кто то поможет. Здравствуйте. 1. Вы имеете в виду отдельно календарь без погоды и времени ? Отдельно пока нельзя сделать.1. Ест ли возможность вырезать из него «записи в календаре», что бы не было окна с "В этот день ничего нет"? и настроек с этим связанных. (Оставить только сам календарь с днями, числами и т.д и время.) 2. Где что поменять, что бы в начале игры не было видно даты и время? (по нажатию окна убираются, а как сделать что бы изначально были убраны и по нажатию появились?) 3. Если возможность отключить смену времени на определенных картах. (Ну скажем на одной карте идет время, смена дня и ночи, а заходим в другую локацию и там статичный свет – темень всегда.)? 2. Пока такого нет, но в следующей версии добавлю. 3. Также будет добавлено в следующей версии.  | 
		
| 
				 
		
		Последнее редактирование: 11 года 5 мес. назад от  DK.			
		 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: 4ert24  
			 | 
		
Время/Дата+Времена Года+Погода+Календарь. v. 2.6.2 11 года 5 мес. назад #69428
					
  | 
			
				
 
		По поводу первого вопроса, я не так выразился…. Когда запускаешь игру в ней два окошка. 1-время и дата 2-событя на день. Я имел в виду убирания окна с событиями в игре (что бы события на день были видны только в меню – там где инвентарь, навыки и т.д). Ну то есть, что бы во время игры было  только окошко с часами и датой, которое хайдится по нажатию.  Благодарю за такой быстрый ответ и ваш труд! =)  Буду ждать новых версий.	 
 | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата+Времена Года+Погода+Календарь. v. 2.6.2 11 года 5 мес. назад #69429
					
  | 
			
				
 
		4ert24 пишет:
 
По поводу первого вопроса, я не так выразился…. Когда запускаешь игру в ней два окошка. 1-время и дата 2-событя на день. Я имел в виду убирания окна с событиями в игре (что бы события на день были видны только в меню – там где инвентарь, навыки и т.д). Ну то есть, что бы во время игры было  только окошко с часами и датой, которое хайдится по нажатию.  Благодарю за такой быстрый ответ и ваш труд! =)  Буду ждать новых версий. Разные клавиши для окон ? Ну и настройка использовать ли вообще это окно. Если вы про это, то ждите в новой версии)	 | 
		
| 
				 
		
		Последнее редактирование: 11 года 5 мес. назад от  DK.			
		 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: 4ert24  
			 | 
		
Время/Дата+Времена Года+Погода+Календарь. v. 2.8 11 года 4 мес. назад #69702
					
  | 
			
				
 
		Да-да именно, что бы была возможность настроить нужно ли мне окно или нет. Оставить только одно со временем, датой/событием или оба. Спасибо, буду ждать. =)
 
Прошу прощения еще раз =) Новая версия отлично работает. Удобная настройка. Единственное, я не совсем понял с освещением. Я сделал маленький тест проект. В одной локации все идет как надо в определение время горит свет, погода, время и т.д. И есть вторая локайцыя, в заметках которой стоит <No_Time_Update>. При в ходе в нее освещение останавливается на том, которое было на локации где должно идти время. Если с нее уйти назад на первую локацию – там опять все идет как надо. Собственно вопрос: как сделать что бы во второй локации было определенное освещение всегда? Ставить эвенты с оттенком экрана или скриптом - не помогает ибо тогда во ВСЕХ локациях отключается смена времени. Для наглядности ссылка на проект. yadi.sk/d/hrCLeWBISAXTr Извеняюсь если что, наверное уже надоел. =) Большое спасибо v2.8 отлично работает. Спасибо а вашу работу! Весь монолог о работе скрипта из трех постов слит в один. --Эльф  | 
		
| 
				 
		
		Последнее редактирование: 11 года 4 мес. назад от  DeadElf79.			
		 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: DK  
			 | 
		
Время/Дата+New Dynamic Weather System v. 5.0a 11 года 2 мес. назад #72910
					
  | 
			
				
 
		Новая версия: 5.0 alpha. 
Внимание! Это альфа-версия! Что это значит ? Что-то работает, а что-то нет. Что работает: все возможности из предыдущей части, кроме погоды. Что не работает: убрана совместимость с MOG EX WEATHER. Будет интеграция с Game Weather. Ее пока нет, потому что готовится апдейт к тому скрипту. Что нового: Исправлены ошибки, повышена стабильность, вырезан календарь для уменьшения скрипта (календарь теперь в виде аддона), добавлена температура (пока просто отображение температуры - на погоду никак не влияет), улучшена кастомизация окон, немного изменен принцип прибавления времени (для тесной интеграции с условиями в эвентах) Устанавливайте этот скрипт, если вам нужно только время/дата + календарь. С погодой пока трудности возникли. Скрипт 5.0: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
#                                                                             #
#          							 Game_Time + Динамическая Погода    		   	          #
#                                                                             #
###############################################################################
 
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 5.0 alpha
Релиз от: 23.08.14
 
############# ИНСТРУКЦИЯ #######################################################
  Время/Дата:
  Чтобы изменить время, воспользуйтесь скриптом
  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 (показать/скрыть)
 
=end
 
############# НАТРОЙКА #########################################################
 
module Calendar_Settings
	# Название дней недели
	DAYS_WEEK = [ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
	# Сокращенное название дней недели для календаря
	SHORT_DAYS_WEEK = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
	# Название месяцев
	MONTHS = [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", 
		"Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]
	# Формативный вывод месяцев в календаре
	CALENDAR_MONTHS = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", 
		"Сентября", "Октября", "Ноября", "Декабря" ]
end
 
module Time_Settings
#------ Настройка календаря ----------------------------------------------------
# Должен быть установлен аддон - Календарь
 
	# Использовать календарь ? true - да, false - нет
	USE_CALENDAR = true
 
	# Использовать окно с календарем в игре ? true - да, false - нет
	USE_CALENDAR_WINDOW = true
 
	# Использовать окно уведомлений о квестах ? true - да, false - нет
	USE_CALENDAR_WINDOW_NOTIFICATION = true
 
	# Использовать локации для записей ? true - да, false - нет
	USE_CALENDAR_LOCATION = true
 
	# Использовать отображение конца квеста ? true - да, false - нет
	USE_CALENDAR_QUEST_END = true
 
	# Использовать статус квеста ? true - да, false - нет
	USE_CALENDAR_QUEST_STATUS = true
 
	# Использовать прокрутку большого текста в календаре ? true - да, false - нет
	USE_CALENDAR_SCROLL_TEXT = true
 
	# Через сколько секунд текст будет прокручиваться ?
	CALENDAR_SCROLL_TIME = 6
 
	# Использовать прошедшие события ? true - да, false - нет
	USE_LAST_QUESTS = true
 
	# Координата X окна календаря
	CALENDAR_X = 0
	# Координата Y окна календаря
	CALENDAR_Y = 0
 
	#----- Конец настройки календаря -----------------------------------------------
 
	#----- Начало настройки дня и ночи ---------------------------------------------	
	# Использовать смену дня и ночи ? true - да, false - нет
	USE_LIGHT_TINT = false
 
	# Исользовать стандартную смену дня и ночи ? true - да, false - нет
	# Если используете эту опцию, то установите USE_KHAS_LIGHT = false
	USE_DEFAULT_LIGHT = false	
 
	# Использовать Khas Light Effect ? true - да, false - нет
	USE_KHAS_LIGHT = true
 
	# Использовать переключатель для света.
	# Если вы используете Khas Light Effect
	USE_SWITCH = true
 
	# Номер переключателя
	# Если вы используете Khas Light Effect
	GAME_NIGHT_SWITCH = 3
 
	# Диапозон времени, когда свет не горит (день),
	# Если вы используете смену дня и ночи
	DAY_LIGHT = [8, 19] # с 8 утра до 7 вечера свет не горит
	# То есть переключатель будет false
 
	# Использовать оттенки экрана в битвах ? true - да, false - нет
	USE_LIGHT_IN_BATTLE = true
 
	# Настройка оттенков экрана для каждого часа
	# [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 час
 
	#----- Конец настройки дня и ночи ----------------------------------------------
 
	#----- Начало настройки погоды и температуры -----------------------------------
	# Использовать Game Weather ? true - да, false - нет
	USE_DEFAULT_WEATHER = true # пока не работает
 
	# Чтобы на определенной карте отключить погоду используйте заметку карты
	# <No_Weather> P.S. Можно будет опять включить скриптом выше.
 
	# Периоды месяцев для погоды
	# Вероятность дождя, снега, ветра, облаков и пользовательских погодных условий (0-100)
	# в зависимости от графики погоды
	# Одновременно может быть несколько погодных условий. 
	# Вы можете составлять сколько угодно столбцов, но кол-во столбцов должно
	# соответствовать кол-ву строк в таблице ниже.
	MONTH_PERIODS = [
		[17, 40, 3, 3], # 1-ый месяц
		[13, 35, 4, 3], # 2-ой месяц...
		[10, 0, 3, 3],
		[15, 3, 0, 0],
		[10, 0, 7, 3],
		[10, 0, 7, 3],
		[10, 0, 7, 3],
		[10, 0, 7, 3],
		[18, 0, 9, 4],
		[23, 4, 8, 4],
		[30, 15, 3, 3],
		[20, 45, 2, 1] ]
 
	# Настройка графики для погодных условий
	WHEATHER_GRAPHICS = [
		["Rain", "Rain_01A", "Rain_02"], # Соответствует первому столбцу из таблицы выше
		["Snow", "Snow_01"],
		["Leaf_01A","Leaf_01B", "Leaf_02A", "Leaf_02B"],
		["Fog_01A", "Fog_02B"] ]
 
	# Тип и сила погоды для каждой типо графики
	# Например: для графики "Rain_01A" будет установлен тип - 0, сила - 7
	WHEATHER_TYPE_POWER = [
		[0, 6, 0, 7, 0, 6],
		[4, 8, 4, 8],
		[2, 5, 2, 6, 2, 7, 2, 6],
		[2, 5, 2, 5],
		[0, 4] ]
 
	# Почасовая вероятность погоды(0-100)
	#                0    1   2   3...
	HOUR_PERCENTS = [15, 10, 20, 15, 20, 15, 10, 40, 55, 40, 30, 50, 60, 10, 5, 0,
		20, 40, 35, 20, 25, 55, 20, 25]
 
	# Использовать температуру в погоде ? true - да, false - нет
	USE_TEMPERATURE = true
 
	# Использовать окно для отображения текущей температуры ? true - да, false - нет
	USE_TEMPERATURE_WINDOW = true
 
	# Порог погоды по температуре каждая строка соответствует строке WHEATHER_GRAPHICS
	WHEATHER_TEMPERATURE = [
		[25], # Выше указанной температуры дождя не будет
		[-5], # Снег
		[], # Если оставить пустым, то всегда будет рассчитываться вероятность этой погоды
		[],
		[] ]
 
	# Минимум и максимум температуры для каждого месяца
	# Чтобы на определенной карте сделать свой произвольный промежуток температуры
	# Используйте <Temp = a, b> 
	# где a - первое число, b - второе. Например, <Temp = -45, 50>
	MONTH_TEMPERATURE = [
		[-40, -7],
		[-18, 0],
		[-5, 13],
		[0, 17],
		[13, 21],
		[18, 30],
		[20, 35],
		[16, 25],
		[10, 18],
		[7, 15],
		[3, 10],
		[-20, -5] ]
 
	# Использовать динамическую температуру ? true - да, false - нет
	# Возможность температуры выходить за гарницы таблицы выше на пару градусов, то
	# есть более естественная температура.
	USE_DYNAMIC_TEMPERATURE = true
 
	# Час, когда температура набирает свой максимум
	# При динамической температуре значения может отличаться ± 1
	TEMPERATURE_MAX = 15
 
	# Координата X окна температуры в игре
	TEMPERATURE_X = Graphics.width - 120
	# Координата Y окна температуры в игре
	TEMPERATURE_Y = 0
 
	# Размер текста температуры
	TEMPERATURE_TEXT_SIZE = 40
 
	#----- Конец настройки погоды и температуры ------------------------------------
 
	#----- Начало настройки времени ------------------------------------------------
 
	# Использовать дату с компьюетера ? true - да, false - нет
	USE_REAL_TIME = false
 
	# Остановить время в меню ? true - да, false - нет
	PAUSE_IN_MENU = true
 
	# Отображать окно в меню ? true - да, false - нет
	TIME_IN_MENU = true
 
	# Секунд в минуте. 
	# Для лучшего эффекта лучше оставить 60, если SHOW_SECONDS = false
	SECONDS_IN_MINUTE = 15
	# Минут в часе (минимум 2)
	MINUTES_IN_HOUR = 60
	# Часов в дне
	HOURS_IN_DAY = 24
 
	# За сколько минут оповещать о завершении квеста ? не больше MINUTES_IN_HOUR
	$NOTIFY = 5
 
	# Использовать обновление времени в битве ? true - да, false - нет
	USE_TIME_UPDATE_IN_BATTLE = true
 
	# Отображать секунды в часах ? true - да, false - нет
	SHOW_SECONDS = false
 
	# Использовать кастомные часы в игре ? true - да, false - нет
	USE_CUSTOM_CLOCK_ON_MAP = true
 
	# Ширина окна времени в игре
	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 - оптимально)
	TIME_UPDATE = 40
 
	# Чтобы на определенной карте приостановить обновление времени, используйте заметки карты и пропишите там: <No_Time_Update>
	# Чтобы на определенной карте выставить освещение определенного часа, используйте заметки карты: <Light_Hour = H>
	# где H - нужный час
 
	# Настройка начала игры! Если не используете реальное время.
	SEC   = 0 # Секунды
	MIN   = 0 # Минуты
	HOUR  = 10 # Час
	DAY   = 15 # День
	DAY_WEEK = 7 # В диапозоне от 1 до 7 (1 - Понедельник, 7 - Воскресенье)
	MONTH = 1 # Месяц
	YEAR = 756 # Год
 
	# Количество дней в каждом месяце
	DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 
	# День с которого начинается отображение первого дня первого месяца
	$FIRST_DAY = 1 # В диапозоне от 1 до 7 Пример: $FIRST_DAY = 1 (1 января - понедельник)
 
	# Кнопка отображения/скрытия окна времени
	GAME_TIME_BUTTON = :Z
 
	# Кнопка отображения/скрытия окна календаря
	CALENDAR_TIME_BUTTON = :Z
 
	# Кнопка отображения/скрытия окна температуры
	TEMPERATURE_BUTTON = :Z
 
	#Показывать окно температуры в начале игры ? true - да, false - нет
	$SHOW_START_GAME_TIME_TEMPERATURE = true
 
	# Показывать окно времени в начале игры ? true - да, false - нет
	$SHOW_START_GAME_TIME_WINDOW = true
 
	# Показывать окно календаря в начале игры ? true - да, false - нет
	$SHOW_START_GAME_CALENDAR_WINDOW = true
 
	############# КОНЕЦ НАСТРОЙКИ ##################################################
	############# НИЖЕ НЕ ТРОГАТЬ !!! ##############################################
 
	MONTHS_DAY = []
	SORT = []
	$STOP_TIME_UPDATE = false
	$STOP_TIME_UPDATE_LIGHT_HOUR = -1
	$Custom_Temperature = [] if USE_TEMPERATURE
	HOUR_PERIODS = [
		["Ночь", 0, 5], 
		["Утро", 6, 11], 
		["День", 12, 17], 
		["Вечер", 18, 23] ]
end
 
$imported = {} if $imported.nil?
$imported["DenKyz_CalTime"] = true
 
class Functions
	include Time_Settings, Calendar_Settings
 
	def self.new_game
		$QUESTS = []
		$LAST_QUESTS = []
		$NOTIFICATION_WINDOW = []
		Now_Time.new
	end
 
	def self.new_game_calculation_degrees
		month = $Game_Time.month
		current_month_temperature = MONTH_TEMPERATURE[month]
		current_month_temperature = $Custom_Temperature if $Custom_Temperature != []
		razn = current_month_temperature[1] - current_month_temperature[0].to_f
		hour = $Game_Time.hour
		max = $Cur_day_temp
		result = hour*razn/max
		temp = current_month_temperature[0]
		case $Game_Time.hour
		when 1..$Cur_day_temp - 1
			return temp + result
		when $Cur_day_temp
			return current_month_temperature[1]
		when $Cur_day_temp + 1..HOURS_IN_DAY-1
			razn = current_month_temperature[0] - current_month_temperature[1].to_f
			max = HOURS_IN_DAY - $Cur_day_temp
			return current_month_temperature[1] + (9 - (HOURS_IN_DAY - hour))*razn/max
		end
		return temp.to_f
	end
 
	def self.add_degrees
		month = $Game_Time.month
		current_month_temperature = MONTH_TEMPERATURE[month]
		current_month_temperature = $Custom_Temperature if $Custom_Temperature != []
		$Cur_day_temp = TEMPERATURE_MAX if !USE_DYNAMIC_TEMPERATURE
		if $Game_Time.hour < $Cur_day_temp
			if $Game_Time.hour == 0 && USE_DYNAMIC_TEMPERATURE
				plus = [30 + rand(35), 30 + rand(55)].max/100.0
				plus *= -1
				return plus.to_f.round 2
			elsif $Game_Time.hour == 0 && !USE_DYNAMIC_TEMPERATURE && $Game_Time.min == 0
				return -1 if $Game_Time_Temperature.to_i != current_month_temperature[0]
			end
			razn = current_month_temperature[1] - $Game_Time_Temperature
			plus = (razn.to_f/($Cur_day_temp - $Game_Time.hour))/(MINUTES_IN_HOUR/10)
			plus += [0.005, rand(6)/100.0].max if USE_DYNAMIC_TEMPERATURE
		else
			if $Game_Time.hour == $Cur_day_temp && USE_DYNAMIC_TEMPERATURE
				plus = [35 + rand(35), 25 + rand(75)].max/100.0
				return plus.to_f.round 2
			elsif $Game_Time.hour == $Cur_day_temp && !USE_DYNAMIC_TEMPERATURE && $Game_Time.min == 0
				return -1 if current_month_temperature[0] < 0 && current_month_temperature[1] < 0
				return 1
			end
			razn = $Game_Time_Temperature - current_month_temperature[0]
			plus = (razn.to_f/(HOURS_IN_DAY - $Game_Time.hour))/(MINUTES_IN_HOUR/10)
			plus += [0.005, rand(6)/100.0].max if USE_DYNAMIC_TEMPERATURE
			plus *= -1
		end
		return plus.to_f.round 2
	end
 
	def self.temp_color
		return Color.new(255, 50, 60) if $Game_Time_Temperature > 25
		return Color.new(30, 70, 255) if $Game_Time_Temperature < -25
		return Color.new(255, 255, 255) if $Game_Time_Temperature > -15 && $Game_Time_Temperature < 15
		return Color.new($Game_Time_Temperature*15, $Game_Time_Temperature*5, $Game_Time_Temperature*5) if $Game_Time_Temperature >= 15 && $Game_Time_Temperature <= 25
		return Color.new((45 + $Game_Time_Temperature)*4, (45 + $Game_Time_Temperature)*8, $Game_Time_Temperature*-15) if $Game_Time_Temperature <= -15 && $Game_Time_Temperature >= -25
	end
 
	def self.get_index_from_hour_periods
		HOUR_PERIODS.each_with_index do |key, index|
			return index if key[2] >= $Game_Time.hour
		end
	end	
 
end # class Functions
 
class Now_Time
	include Time_Settings
	def initialize
		$TIME_SPEED = 60 if $TIME_SPEED > 60
		$TIME_SPEED = 1 if $TIME_SPEED < 1
		$NOTIFY = 1 if $NOTIFY > MINUTES_IN_HOUR
		$Game_Time = Game_Time.new
		$Game_Time_Tint = Game_Time_Tint.new if USE_LIGHT_TINT
		$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
	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
 
end # class Now_Time
 
class Game_Time
	include Time_Settings, Calendar_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
		@dayweek = DAY_WEEK - 1
		@month = MONTH - 1
		@year = YEAR
	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)
	end
 
	def time(value, type)
		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 = :day
			value *= DAYS[@month]
		when :year
			set = :day
			sum = 0
			for i in 0..DAYS.size - 1 
				sum += DAYS[i]
			end
			value *= sum
		end
		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
	end
 
	def update
		return if !SceneManager.scene.is_a?(Scene_Map) || (SceneManager.scene.is_a?(Scene_Menu) && PAUSE_IN_MENU)
		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 unless Graphics.frame_count % $TIME_SPEED == 0
		add_sec(1)
	end
 
	def real_time
		@sec = Time.now.sec
		@sec = 0 if @sec >= SECONDS_IN_MINUTE
		@min = Time.now.min
		@hour = Time.now.hour
		@day = Time.now.day
		@dayweek = Time.now.wday
		@month = Time.now.month - 1
		@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 (@min % 10 == 0) && USE_TEMPERATURE
			$Game_Time_Temperature += Functions.add_degrees
		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
		$Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
		@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
		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
		$Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
		@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
		@now_min = $Game_Time.min
		@hour = $Game_Time.hour
		if $STOP_TIME_UPDATE_LIGHT_HOUR != -1
			@hour = $STOP_TIME_UPDATE_LIGHT_HOUR
			@min = 0
		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
			hot_air_balloon = $game_map.light_surface.opacity
		rescue
			return
		end
		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)
	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_windows create_all_windows
	def create_all_windows
		denis_kyznetsov_game_time_scn_map_create_all_windows
		if $SHOW_START_GAME_TIME_WINDOW
			create_time_window
			@time_window_exist = true
		end
		if USE_CALENDAR && $SHOW_START_GAME_CALENDAR_WINDOW && USE_CALENDAR_WINDOW && $imported["DenKyz_Game_Calendar"]
			create_calendar_window
			@calendar_window_exist = true
		end
		if USE_TEMPERATURE_WINDOW && USE_TEMPERATURE && $SHOW_START_GAME_TIME_TEMPERATURE
			create_temp_window
			@temp_window_exist = true
		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
		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
		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_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 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
		if USE_CALENDAR && USE_CALENDAR_WINDOW
			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
		if USE_TEMPERATURE && USE_TEMPERATURE_WINDOW
			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
	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)
		$USE_DEFAULT_WEATHER = false if USE_DEFAULT_WEATHER && @map.note.include?("<No_Weather>")
		$STOP_TIME_UPDATE = (@map.note.include?("<No_Time_Update>") ? true : false)
		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
		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, Calendar_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 % TIME_UPDATE > TIME_UPDATE/2
		return " "
	end
 
	def zp
		return $Game_Time_Temperature <= -100 || $Game_Time_Temperature >= 1000 ? "" : " "
	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 process_character(c, text, pos)
		super
		if c == ","
			return change_color(Functions.temp_color)
		end
	end
 
	def draw_text_ex(x, y, text)
		reset_font_settings
		contents.font.size = 23
		pos = {:x => x + 8, :y => y, :new_x => x, :height => calc_line_height(text)}
		process_character(text.slice!(0, 1), text, pos) until text.empty?
	end
 
	def update
		if @now_hour != $Game_Time.hour
			if ($Game_Time.hour < DAY_LIGHT[0] || $Game_Time.hour > DAY_LIGHT[1]) && USE_KHAS_LIGHT && USE_SWITCH
				$game_switches[GAME_NIGHT_SWITCH] = true 
			else
				$game_switches[GAME_NIGHT_SWITCH] = false
			end
		end
		if (@now_min != $Game_Time.min && !SHOW_SECONDS) || (@now_sec != $Game_Time.sec && SHOW_SECONDS) || USE_BLINK || @now_day != $Game_Time.day || @now_month != $Game_Time.month || @now_year != $Game_Time.year || @now_hour != $Game_Time.hour
			@now_sec = $Game_Time.sec if SHOW_SECONDS
			@now_min = $Game_Time.min if !SHOW_SECONDS
			@now_hour = $Game_Time.hour
			@now_day = $Game_Time.day
			@now_month = $Game_Time.month
			@now_year = $Game_Time.year
			contents.clear
			show_date = date
			show_time = time
			y = 0
			draw_text(-8, y, @width - 16, 24, show_date, 1)
			return if show_time == ""
			y += 24 if show_date != ""
			draw_text(0, y, @width - 16, 24, show_time, 1)
		end
	end
 
end # class Time_Window < Window_Base
 
class Temperature_Window < Window_Base
	include Time_Settings
	def initialize(x, y, dw, dh)
		super(x, y, dw, dh)
		self.opacity = 0
		@now_temp = -1
	end
 
	def update
		return if $Game_Time_Temperature == @now_temp
		@now_temp = $Game_Time_Temperature
		contents.clear
		change_color(Functions.temp_color)
		contents.font.size = TEMPERATURE_TEXT_SIZE
		x = $Game_Time_Temperature.to_i.to_s.size
		draw_text(26-x*7, -8, 120 - 16, 42, $Game_Time_Temperature.to_i.to_s + "°", 2)
	end
end # class Temperature_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
		@command_window.set_handler(:calendar, method(:calendar)) if USE_CALENDAR
	end
 
	def calendar
		SceneManager.call(CalendarScene) 
	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 if $imported["DenKyz_CalTime"]
		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(contents)
			Now_Time.new if $imported["DenKyz_CalTime"]
			$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 | 
		
| 
				 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата+New Dynamic Weather System v. 5.0a 10 года 11 мес. назад #75579
					
  | 
			
				
 
		Тут все умерло? Погоды не будет?	 
 | 
		
| 
				
 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
Время/Дата+New Dynamic Weather System v. 5.0alpha 10 года 9 мес. назад #77350
					
  | 
			
				
 
		Доброго времени суток. Хочу сообщить, что временно замораживаю этот скрипт. НО. Я его доделаю. Обещаю. Проблема связана с недостаточными знаниями для завершения идеи.  
 | 
		
| 
				 
		
		Последнее редактирование: 10 года 9 мес. назад от  DK.			
		 
			Администратор запретил публиковать записи гостям.																								 
 | 
		
	Время создания страницы: 1.997 секунд

		









		
		

















