-
DK
-
-
Вне сайта
-
Светлый дракон
-
-
DKPlugins
- Сообщений: 946
- Спасибо получено: 1129
-
-
|
Обновление 5.1 от 02.02.15
Что нового:
Исправил ошибки, изменил настройки: переключатель для Khas Light Effect теперь отключается значением -1, добавил возможность вкл/выкл работу диапазона переключения переключателя (можно настроить в шапке скрипта + изменять во время игры вызовом скрипта: Now_Time.setup_khas_day_light(flag), где flag - true/false (вкл/выкл), добавил возможность отключить использование кнопки отображения окна времени в игре (установите переменную = -1 вместо символа кнопки).
Добавил динамическую смену дня и ночи. Работает автоматически. Никаких настроек нет и скорее всего не будет (только вкл и выкл). Если не использовать динамическую смену, то можно обычную, где вы сами можете настроить оттенки экрана для каждого часа. Опишу подробнее: работает для 12 месяцев/24 часа. Оттенки экрана старался сделать максимально реалистичными. Закаты и восходы пытался максимально приблизить к реальным (вкратце: зимой темнеет рано и светлеет поздно, летом светлеет рано и темнеет поздно) + также присутствует частичка рандома, которая делает каждый день непохожим на предыдущий (динамическая смена обновляется в начале каждого дня), переключатель Khas света регулируется автоматически (если вы его используете)
Если что не так с сменой дня и ночи, отписывайтесь сюда.
Скриншоты:
Вложение 379.png не найдено
Вложение 380.png не найдено
Вложение 381.png не найдено
Вложение 382.png не найдено
Скрипт:
=begin
###############################################################################
# #
# Game_Time (Время/Дата) #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 5.1
Релиз от: 02.02.15
############# ИНСТРУКЦИЯ #######################################################
Время/Дата:
Чтобы изменить время, воспользуйтесь скриптом
Now_Time.change(sec, min, hour, day, dayweek, month, year)
sec - секунды
min - минуты
hour - час
day - день
dayweek - день недели
month - месяц
year - год
Пример: Now_Time.change(30, 2, 3, 5, 7, 4, 201)
Чтобы получить текущую дату используйте:
$Game_Time.sec
min, hour, day, dayweek, month, year
Чтобы сохранить время или загрузить его, используйте:
Now_Time.save_time
Now_Time.load_time
Чтобы добавить время, используйте скрипты:
Now_Time.time(+5, :min) - добавит 5 минут
Now_Time.time(-10,:hour) - удалит 10 часов
Возможно: :sec, :min, :hour, :day, :month, :year
Чтобы показать/скрыть все окна принудительно, воспользуйтесь
Now_Time.windows_visible?(flag)
где flag - true/false (показать/скрыть)
Чтобы включить/отлючить переключение света в дневном диапозоне, используйте
Now_Time.setup_khas_day_light(flag)
где flag - true/false (вкл/выкл)
=end
############# НАТРОЙКА #########################################################
module Calendar_Settings
# Название дней недели
DAYS_WEEK = [ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
# Формативный вывод месяцев
CALENDAR_MONTHS = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа",
"Сентября", "Октября", "Ноября", "Декабря" ]
end
module Time_Settings
include Calendar_Settings
# не трогать это :) настройки ниже
begin
include Weather_Settings_Module
rescue
end
# не трогать это :) настройки ниже
#----- Начало настройки дня и ночи ---------------------------------------------
# Использовать смену дня и ночи ? true - да, false - нет
USE_LIGHT_TINT = true
# Исользовать стандартную смену дня и ночи ? true - да, false - нет
# Если используете эту опцию, то установите USE_KHAS_LIGHT = false
USE_DEFAULT_LIGHT = false
# Использовать Khas Light Effect ? true - да, false - нет
USE_KHAS_LIGHT = true
# Номер переключателя
# Если вы используете $USE_KHAS_LIGHT_SWITCH
# Чтобы не использовать установите -1
KHAS_LIGHT_SWITCH = 3
# Использовать диапозон времени для переключения переключателя ?
# Только если вы используете Khas Light Effect
$USE_KHAS_DAY_LIGHT = false
# Диапозон времени, когда свет не горит (день),
# Если вы используете смену дня и ночи
KHAS_DAY_LIGHT = [8, 19] # с 8 утра до 7 вечера свет не горит
# То есть переключатель будет false
# Использовать динамическую смену дня и ночи ?
# Если используется Khas Light Effect
# Переключатель будет контролироваться автоматически
USE_DYNAMIC_LIGHT = true
# Использовать оттенки экрана в битвах ? true - да, false - нет
USE_LIGHT_IN_BATTLE = true
# Настройка оттенков экрана для каждого часа.
# Если используете USE_DYNAMIC_LIGHT, то эта настройка ничего не даст.
# [Color.new(R, G, B, A)]
TINTS = [ Color.new(30, 0, 40, 165), # => 0 час
Color.new(20, 0, 30, 165), # => 1 час
Color.new(20, 0, 30, 155), # => 2 час
Color.new(10, 0, 30, 145), # => 3 час
Color.new(10, 0, 20, 125), # => 4 час
Color.new(0,0,20,125), # => 5 час
Color.new(75,20,20,115), # => 6 час
Color.new(100,30,10,105), # => 7 час
Color.new(75,20,10,85), # => 8 час
Color.new(0,0,0,55), # => 9 час
Color.new(0,0,0,30), # => 10 час
Color.new(0,0,0,10), # => 11 час
Color.new(0,0,0,0), # => 12 час
Color.new(0,0,0,0), # => 13 час
Color.new(0,0,0,0), # => 14 час
Color.new(0,0,0,5), # => 15 час
Color.new(0,0,0,15), # => 16 час
Color.new(0,0,10,45), # => 17 час
Color.new(75,20,20,85), # => 18 час
Color.new(100,40,30,105), # => 19 час
Color.new(75,20,40,125), # => 20 час
Color.new(10,0,45,140), # => 21 час
Color.new(20,0,45,145), # => 22 час
Color.new(20,0,50,160) ] # => 23 час
#----- Конец настройки дня и ночи ----------------------------------------------
#----- Начало настройки времени ------------------------------------------------
# Использовать дату с компьюетера ? true - да, false - нет
USE_REAL_TIME = false
# Остановить время в меню ? true - да, false - нет
PAUSE_IN_MENU = true
# Отображать окно в меню ? true - да, false - нет
TIME_IN_MENU = true
# Секунд в минуте (минимум 2)
# Для лучшего эффекта лучше оставить 60, если SHOW_SECONDS = false, но это
# уже на ваше усмотрение
SECONDS_IN_MINUTE = 2
# Минут в часе (минимум 2)
MINUTES_IN_HOUR = 60
# Часов в дне
HOURS_IN_DAY = 24
# Использовать обновление времени в битве ? true - да, false - нет
USE_TIME_UPDATE_IN_BATTLE = true
# Отображать секунды в часах ? true - да, false - нет
SHOW_SECONDS = false
# Использовать кастомные часы в игре ? true - да, false - нет
USE_CUSTOM_CLOCK_ON_MAP = false
# Ширина окна времени в игре
CLOCK_WIDTH = 180
# Высота окна времени в игре
CLOCK_HEIGHT = 74
# Координата X окна времени в игре
CLOCK_X = Graphics.width - CLOCK_WIDTH
# Координата Y окна времени в игре
CLOCK_Y = Graphics.height - CLOCK_HEIGHT
# Непрозрачность окна в игре. -1 = стандартное
OPACITY_CLOCK = -1
# Использовать кастомные часы в игре ? true - да, false - нет
USE_CUSTOM_CLOCK_IN_MENU = false
# Ширина окна времени в игре
MENU_CLOCK_WIDTH = 200
# Высота окна времени в игре
MENU_CLOCK_HEIGHT = 90
# Координата X окна времени в игре
MENU_CLOCK_X = 0
# Координата Y окна времени в игре
MENU_CLOCK_Y = 0
# Непрозрачность окна в меню. -1 = стандартное
OPACITY_MENU_CLOCK = -1
# Настройка кастомных часов
# Возможно: День, День недели, Месяц(число), Месяц(название), Год
# Также возможны свои команды
CUSTOM_CLOCK_DATE = ["День", "Месяц(название)", "Год"]
# Возможно: Час, blink(":"), Минуты, Секунды
CUSTOM_CLOCK_TIME = ["Час", "blink", "Минуты"]
# Скорость времени
# (Минимум - 1, Максимум - 60!).
# Чем меньше цифра, тем быстрее идет время. 60 - Реальное время
$TIME_SPEED = 1
# Использовать мерцание ":" в часах ? true - да, false - нет. Отключение может повысить FPS на 1-5
USE_BLINK = false
# Частота обновления ":" в отображении времени и частота обновления завершающихся квестов (40 - оптимально)
BLINK_SPEED = 40
# Чтобы на определенной карте приостановить обновление времени, используйте заметки карты и пропишите там: <No_Time_Update>
# Чтобы на определенной карте выставить освещение определенного часа, используйте заметки карты: <Light_Hour = H>
# где H - нужный час
# Настройка начала игры! Если не используете реальное время.
SEC = 0 # Секунды
MIN = 0 # Минуты
HOUR = 0 # Час
DAY = 2 # День
DAY_WEEK = 1 # В диапозоне от 1 до 7 (1 - Понедельник, 7 - Воскресенье)
MONTH = 1 # Месяц
YEAR = 2015 # Год
# Количество дней в каждом месяце
DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Кнопка отображения/скрытия окна времени
# -1, чтобы не использовать
GAME_TIME_BUTTON = :Z
# Показывать окно времени в начале игры ? true - да, false - нет
$SHOW_START_GAME_TIME_WINDOW = true
############# КОНЕЦ НАСТРОЙКИ ##################################################
############# НИЖЕ НЕ ТРОГАТЬ !!! ##############################################
# Обновление времени
$STOP_TIME_UPDATE = false
# Час статического освещения
$STOP_TIME_UPDATE_LIGHT_HOUR = -1
end
$imported = {} if $imported.nil?
$imported["DenKyz_Game_Time"] = true
class Functions
include Time_Settings
def self.new_game # новая игра
$QUESTS = []
$LAST_QUESTS = []
$NOTIFICATION_WINDOW = []
Now_Time.new
end
def self.setup_khas_light_switch(hour) # hour - час, если диапозон вкл; bool, если диапозон выкл.
return if !USE_KHAS_LIGHT || KHAS_LIGHT_SWITCH == -1
return if ($USE_KHAS_DAY_LIGHT && !hour.is_a?(Integer)) || (!$USE_KHAS_DAY_LIGHT && hour.is_a?(Integer))
if $USE_KHAS_DAY_LIGHT
if (hour < KHAS_DAY_LIGHT[0] || hour > KHAS_DAY_LIGHT[1])
$game_switches[KHAS_LIGHT_SWITCH] = true
else
$game_switches[KHAS_LIGHT_SWITCH] = false
end
else
$game_switches[KHAS_LIGHT_SWITCH] = hour
end
end
end # class Functions
class Now_Time
include Time_Settings
def initialize
# 0 и больше 60 не будет обновляться
$TIME_SPEED = 60 if $TIME_SPEED > 60
$TIME_SPEED = 1 if $TIME_SPEED < 1
$Game_Time = Game_Time.new
$UPDATE_DYNAMIC_TINT = true
$Game_Time_Tint = Game_Time_Tint.new if USE_LIGHT_TINT
begin
$CALENDAR_NOTIFY = 1 if $CALENDAR_NOTIFY > MINUTES_IN_HOUR
rescue
end
begin
$USE_DEFAULT_WEATHER = USE_DEFAULT_WEATHER
$Cur_day_temp = TEMPERATURE_MAX if !USE_DYNAMIC_TEMPERATURE
$Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
$Game_Time_Temperature = Functions.new_game_calculation_degrees if USE_TEMPERATURE
rescue
end
end
def self.change(sec, min, hour, day, dayweek, month, year)
$Game_Time.change(sec, min, hour, day, dayweek, month, year)
update # насколько он тут нужен ?
end
def self.update
$Game_Time.update
end
def self.save_time # сохраняем время
$Game_Time_DUP = $Game_Time.dup
end
def self.load_time # загружаем время
$Game_Time = $Game_Time_DUP.dup
end
def self.time(value, type) #изменение времени
$Game_Time.time(value, type)
end
def self.windows_visible?(flag) # пок/скр все окна
SceneManager.scene.all_visible(flag)
end
def self.setup_khas_day_light(setup) #вкл/выкл диапозон переключения света
$USE_KHAS_DAY_LIGHT = setup
end
end # class Now_Time
class Game_Time
include Time_Settings
attr_reader :sec
attr_reader :min
attr_reader :hour
attr_reader :day
attr_reader :dayweek
attr_reader :month
attr_reader :year
def initialize
@sec = SEC
@min = MIN
@hour = HOUR
@day = DAY
# потому что от 0-6, а игрок указывает от 1-7. 0 - Понедельник
# а от 0-6 потому что в массиве дней недели индексы с 0
# та же причина и у MONTH ниже
@dayweek = DAY_WEEK - 1
@month = MONTH - 1
@year = YEAR
$FIRST_DAY = DAY_WEEK # первый день января (для календаря). Там 1-7 значения
end
def update
return if !USE_TIME_UPDATE_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle)
return if $game_message.busy?
return real_time if USE_REAL_TIME
return if !SceneManager.scene.is_a?(Scene_Map) || (SceneManager.scene.is_a?(Scene_Menu) && PAUSE_IN_MENU)
return unless Graphics.frame_count % $TIME_SPEED == 0
add_sec(1)
end
def change(sec, min, hour, day, dayweek, month, year)
sec > @sec ? (sec - @sec).times do add_sec(1) end : (@sec - sec).times do rem_sec(1) end
min > @min ? (min - @min).times do add_min(1) end : (@min - min).times do rem_min(1) end
hour > @hour ? (hour - @hour).times do add_hour(1) end : (@hour - hour).times do rem_hour(1) end
day > @day ? (day - @day).times do add_day(1) end : (@day - day).times do rem_day(1) end
@dayweek = dayweek - 1
month -= 1
month > @month ? (month - @month).times do add_month(1) end : (@month - month).times do rem_month(1) end
year > @year ? add_year(year - @year) : rem_year(@year - year)
all_days = 0 # сумма дней с января до нужного месяца (не включая)
for i in 0..month - 1
all_days += Time_Settings::DAYS[i]
end
$FIRST_DAY = (dayweek + 1 -(day + all_days % DAYS_WEEK.size)) % DAYS_WEEK.size
enable_dynamic_tint_update
end
def time(value, type)
# логика такая: чтобы не пропустить события на карте вместо просто изменения
# времени я прибавляю меньшие значения.
# Пример 1: +2 минуты = + прибавляю 120 секунд
# Пример 2: +1 месяц = + кол-во часов в месяце
# Все сделать через секунды нельзя (слишком большая задержка на экране возникает)
case type
when :sec
set = :sec
when :min
set = :sec
value *= SECONDS_IN_MINUTE
when :hour
set = :min
value *= MINUTES_IN_HOUR
when :day
set = :hour
value *= HOURS_IN_DAY
when :month
set = :hour
for i in 1..(value > 0 ? value : value * -1) # value - сколько было
val = DAYS[@month] * HOURS_IN_DAY # val - считаем для текущего месяца часы
if value > 0
val.times do eval("add_" + set.to_s + "(1)") end
else
val.times do eval("rem_" + set.to_s + "(1)") end
end
end
return
when :year
set = :day
sum = 0
for i in 0..DAYS.size - 1
sum += DAYS[i]
end
value *= sum
end # case type
if value > 0
value.times do eval("add_" + set.to_s + "(1)") end
else
value = -value
value.times do eval("rem_" + set.to_s + "(1)") end
end
enable_dynamic_tint_update
end
def enable_dynamic_tint_update
return if !USE_DYNAMIC_LIGHT
$UPDATE_DYNAMIC_TINT = true
end
def real_time # время с компьютера
@sec = Time.now.sec
@sec = 0 if @sec >= SECONDS_IN_MINUTE
@min = Time.now.min
@hour = Time.now.hour
if @day != Time.now.day
@day = Time.now.day
enable_dynamic_tint_update
end
@dayweek = Time.now.wday
if @month != Time.now.month - 1
@month = Time.now.month - 1 # причина в initialize
enable_dynamic_tint_update
end
@year = Time.now.year
end
def add_sec(n = 1)
@sec += n
return unless @sec == SECONDS_IN_MINUTE
@sec = 0
add_min(1)
end
def add_min(n = 1)
if $imported["DenKyz_Game_Time_Weather"]
begin
if (@min % 10 == 0) && USE_TEMPERATURE
$Game_Time_Temperature += Functions.add_degrees
end
rescue # обработка исключения
end
end
@min += n
return unless @min == MINUTES_IN_HOUR
@min = 0
add_hour(1)
end
def add_hour(n = 1)
@hour += n
return unless @hour == HOURS_IN_DAY
@hour = 0
add_day(1)
end
def add_day(n = 1)
@day += n
@dayweek += n
if $imported["DenKyz_Game_Time_Weather"]
begin
$Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
rescue
end
end
enable_dynamic_tint_update
@dayweek = 0 if @dayweek == DAYS_WEEK.size
return unless @day == DAYS[@month] + 1
@day = 1
add_month(1)
end
def add_month(n = 1)
@month += n
enable_dynamic_tint_update
return unless @month == MONTHS.size
@month = 0
add_year(1)
end
def add_year(n = 1)
@year += n
end
def rem_sec(n = 1)
@sec -= n
return unless @sec == -1
@sec = SECONDS_IN_MINUTE - 1
rem_min(1)
end
def rem_min(n = 1)
@min -= n
return unless @min == -1
@min = MINUTES_IN_HOUR - 1
rem_hour(1)
end
def rem_hour(n = 1)
@hour -= n
return unless @hour == -1
@hour = HOURS_IN_DAY - 1
rem_day(1)
end
def rem_day(n = 1)
@day -= n
@dayweek -= n
if $imported["DenKyz_Game_Time_Weather"]
begin
$Cur_day_temp = TEMPERATURE_MAX + (1 + rand(2) - (1 + rand(2))) if USE_DYNAMIC_TEMPERATURE
rescue
end
end
@dayweek = DAYS_WEEK.size - 1 if @dayweek == -1
return unless @day == 0
@day = DAYS[@month-1]
rem_month(1)
end
def rem_month(n = 1)
@month -= n
return unless @month == -1
@month = MONTHS.size - 1
rem_year(1)
end
def rem_year(n = 1)
@year -= n
end
end # class Game_Time
class Game_Time_Tint < Sprite_Base
include Time_Settings
def initialize(viewport = nil)
super(viewport)
self.z = 1
create_contents
update
end
def create_contents
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.visible = false
end
def update
return if !USE_LIGHT_TINT
return use_default_light if USE_DEFAULT_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
return use_khas_light if USE_KHAS_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
end
def settings
Functions.setup_khas_light_switch($Game_Time.hour) if $STOP_TIME_UPDATE_LIGHT_HOUR == -1
@now_min = $Game_Time.min
@hour = $Game_Time.hour
if $STOP_TIME_UPDATE_LIGHT_HOUR != -1
@hour = $STOP_TIME_UPDATE_LIGHT_HOUR
elsif USE_DYNAMIC_LIGHT
return update_dynamic_light
end
@now_hour = TINTS[@hour]
@next_hour = TINTS[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
@next_hour = TINTS[0] if @hour + 1 == HOURS_IN_DAY
end
def use_default_light
settings
r = (@now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min)/2
g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
b = 0.9 * (@now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min)
a = 1.3 * (@now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min)
self.visible = true
self.bitmap.clear
self.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(r, g, b, a))
end
def use_khas_light
settings
begin
r = @now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min
g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
b = @now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min
a = @now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min
$game_map.effect_surface.change_color(1, r, g, b, a)
rescue
end
end
def red(hour, month) # здесь творится магия программирования :)
tint = [
[0, 0, 0, 0, 0, 10, 20, 60, 100, 70, 20, 10, 0, 0, 20, 40, 100, 80, 50, 20, 10, 0, 0, 0],
[0, 0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 10, 20, 40, 100, 80, 50, 20, 10, 0, 0],
[0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10, 0],
[0, 10, 20, 30, 50, 80, 100, 60, 20, 10, 0, 0, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10],
[10, 20, 30, 50, 80, 100, 60, 20, 10, 5, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 100, 80, 60, 30],
[20, 40, 60, 80, 100, 60, 45, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
[10, 30, 50, 75, 100, 75, 50, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
[10, 20, 45, 60, 80, 100, 60, 35, 15, 10, 0, 0, 0, 0, 0, 10, 15, 30, 50, 75, 100, 75, 50, 20],
[0, 10, 20, 30, 40, 60, 100, 80, 45, 30, 15, 10, 0, 0, 0, 10, 30, 50, 80, 100, 70, 50, 20, 0],
[0, 0, 10, 20, 30, 45, 75, 100, 80, 60, 40, 20, 0, 10, 30, 45, 80, 100, 80, 60, 40, 20, 0, 0],
[0, 0, 10, 20, 30, 50, 70, 100, 80, 60, 30, 20, 10, 20, 40, 75, 100, 80, 60, 40, 20, 10, 0, 0],
[0, 0, 0, 10, 20, 30, 50, 70, 100, 70, 50, 20, 0, 10, 30, 60, 100, 75, 40, 20, 10, 0, 0, 0]]
return tint[month][hour]
end
def green(hour, month)
tint = [
[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 25, 15, 10, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 20, 25, 15, 10, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 5, 10, 25, 10, 5, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 10, 30, 20, 10, 5, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0],
[0, 0, 0, 10, 15, 30, 15, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 15, 10, 0],
[0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 0],
[0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 0],
[0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0],
[0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0],
[0, 0, 0, 0, 0, 10, 15, 30, 10, 0, 0, 0, 0, 0, 0, 5, 15, 25, 15, 10, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0]]
return tint[month][hour]
end
def blue(hour, month)
tint = [
[10, 15, 20, 25, 30, 45, 30, 20, 10, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0, 0],
[10, 15, 20, 25, 30, 40, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0],
[10, 15, 25, 30, 40, 30, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 45, 40, 35, 20],
[15, 20, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 35, 50, 40, 35, 20],
[15, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30],
[15, 30, 50, 35, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 30],
[15, 30, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 25],
[10, 15, 30, 50, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 50, 35, 20],
[10, 15, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 55, 35, 20, 15],
[10, 15, 20, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30, 20, 15, 10],
[10, 10, 15, 20, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 40, 55, 35, 20, 15, 15, 10, 10],
[10, 15, 20, 25, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 45, 60, 40, 30, 20, 15, 15, 10]]
return tint[month][hour]
end
def alpha(hour, month)
tint = [
[175, 170, 160, 160, 150, 150, 145, 140, 120, 90, 55, 20, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 180],
[170, 165, 155, 150, 140, 130, 130, 125, 110, 80, 50, 20, 10, 10, 10, 15, 25, 70, 95, 125, 140, 150, 160, 175],
[165, 160, 150, 135, 130, 110, 115, 110, 90, 70, 45, 20, 10, 10, 10, 10, 20, 60, 80, 105, 120, 135, 150, 160],
[160, 150, 140, 120, 120, 100, 90, 85, 70, 60, 40, 15, 10, 10, 10, 10, 20, 40, 60, 85, 100, 120, 135, 150],
[155, 140, 130, 110, 105, 85, 75, 70, 50, 45, 35, 15, 10, 10, 10, 10, 10, 20, 40, 70, 85, 110, 125, 140],
[150, 130, 120, 100, 90, 70, 55, 50, 40, 30, 35, 10, 10, 10, 10, 10, 10, 15, 25, 55, 65, 100, 105, 130],
[145, 120, 110, 110, 100, 80, 70, 65, 55, 40, 35, 10, 10, 10, 10, 10, 10, 25, 40, 70, 80, 110, 125, 140],
[150, 130, 120, 120, 110, 100, 85, 80, 70, 50, 40, 15, 10, 10, 10, 10, 10, 40, 60, 80, 100, 120, 130, 140],
[155, 140, 130, 130, 120, 110, 100, 95, 85, 60, 45, 15, 10, 10, 10, 10, 10, 50, 70, 90, 115, 130, 140, 150],
[160, 150, 140, 140, 130, 120, 115, 110, 100, 70, 50, 20, 10, 10, 10, 10, 15, 60, 80, 100, 130, 140, 150, 155],
[165, 160, 150, 150, 140, 130, 130, 125, 110, 80, 55, 20, 10, 10, 10, 15, 20, 70, 90, 115, 145, 150, 155, 160],
[170, 170, 160, 160, 150, 150, 145, 140, 120, 90, 60, 25, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 170]]
return tint[month][hour]
end
def update_dynamic_light
return set_dynamic_light if !$UPDATE_DYNAMIC_TINT
@tint = []
minus = 7
no_zero = 6 + minus * 1.5
month = $Game_Time.month
for i in 0..23
@tint[i] = Color.new(red(i, month) - minus + rand(no_zero), green(i, month) - minus + rand(no_zero), blue(i, month) - minus + rand(no_zero), alpha(i, month) - minus + rand(no_zero))
end
$UPDATE_DYNAMIC_TINT = false
return set_dynamic_light
end
def set_dynamic_light
Now_Time.setup_khas_day_light(false) # отключаем обычную смену переключателя
setup = false
setup = true if @tint[@hour].alpha > 100
Functions.setup_khas_light_switch(setup)
@now_hour = @tint[@hour]
@next_hour = @tint[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
@next_hour = @tint[0] if @hour + 1 == HOURS_IN_DAY
end
end # class Game_Time_Tint < Sprite_Base
class Scene_Base
alias denis_kyznetsov_game_time_scn_base_update update
def update
denis_kyznetsov_game_time_scn_base_update
$Game_Time.update if $Game_Time && !$STOP_TIME_UPDATE
$Game_Time_Tint.update if $Game_Time_Tint || ($Game_Time_Tint && USE_LIGHT_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle))
end
end # class Scene_Base
class Scene_Map < Scene_Base
include Time_Settings
alias denis_kyznetsov_game_time_scn_map_create_all_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 $imported["DenKyz_Game_Time_Calendar"]
begin
if USE_CALENDAR && $SHOW_START_GAME_CALENDAR_WINDOW && USE_CALENDAR_WINDOW
create_calendar_window
@calendar_window_exist = true
end
rescue
end
end
if $imported["DenKyz_Game_Time_Weather"]
begin
if USE_TEMPERATURE_WINDOW && USE_TEMPERATURE && $SHOW_START_GAME_TIME_TEMPERATURE
create_temp_window
@temp_window_exist = true
end
rescue
end
end
end
def all_visible(flag)
time_visible(flag)
calendar_visible(flag)
temp_visible(flag)
end
def time_visible(flag)
if !flag
return if !@time_window_exist
$SHOW_START_GAME_TIME_WINDOW = !$SHOW_START_GAME_TIME_WINDOW
@create_time_window.dispose
@create_time_window = 0
@time_window_exist = false
else
return if @time_window_exist
$SHOW_START_GAME_TIME_WINDOW = !$SHOW_START_GAME_TIME_WINDOW
create_time_window
@time_window_exist = true
end
end
def calendar_visible(flag)
return if !USE_CALENDAR || !$imported["DenKyz_Game_Time_Calendar"]
if !flag
return if !@calendar_window_exist
$SHOW_START_GAME_CALENDAR_WINDOW = !$SHOW_START_GAME_CALENDAR_WINDOW
@create_calendar_scene_map.dispose
@create_calendar_scene_map = 0
@calendar_window_exist = false
else
return if @calendar_window_exist
$SHOW_START_GAME_CALENDAR_WINDOW = !$SHOW_START_GAME_CALENDAR_WINDOW
create_calendar_window
@calendar_window_exist = true
end
end
def temp_visible(flag)
return if !USE_TEMPERATURE || !$imported["DenKyz_Game_Time_Weather"]
if !flag
return if !@temp_window_exist
$SHOW_START_GAME_TIME_TEMPERATURE = !$SHOW_START_GAME_TIME_TEMPERATURE
@create_temp_window.dispose
@create_temp_window = 0
@temp_window_exist = false
else
return if @temp_window_exist
$SHOW_START_GAME_TIME_TEMPERATURE = !$SHOW_START_GAME_TIME_TEMPERATURE
create_temp_window
@temp_window_exist = true
end
end
def create_temp_window
dx, dy = TEMPERATURE_X, TEMPERATURE_Y
dw, dh = 120, 50
@create_temp_window = Temperature_Window.new(dx, dy, dw, dh)
end
def create_time_window
x, y, w, h = CLOCK_X, CLOCK_Y, CLOCK_WIDTH, CLOCK_HEIGHT
w, h = 180, 76 if !USE_CUSTOM_CLOCK_ON_MAP
@create_time_window = Time_Window.new(x, y, w, h, OPACITY_CLOCK)
end
def create_calendar_window
dx, dy = CALENDAR_X, CALENDAR_Y
dw, dh = 214, 100
@create_calendar_scene_map = Calendar_Scene_Map_Window.new(dx, dy, dw, dh)
end
alias denis_kyznetsov_game_time_scn_map_update update
def update
denis_kyznetsov_game_time_scn_map_update
if $Game_Time.sec % 2 == 0 && $imported["DenKyz_Game_Time_Calendar"]
Functions.transfer?
Functions.complete?
end
if $Game_Time_Notification && USE_CALENDAR_WINDOW_NOTIFICATION
$Game_Time_Notification.update if !$Game_Time_Notification.disposing
end
if !GAME_TIME_BUTTON.is_a?(Integer)
if Input.trigger?(GAME_TIME_BUTTON) && @time_window_exist && $SHOW_START_GAME_TIME_WINDOW
time_visible(false)
elsif Input.trigger?(GAME_TIME_BUTTON) && !@time_window_exist && !$SHOW_START_GAME_TIME_WINDOW
time_visible(true)
end
end
if $imported["DenKyz_Game_Time_Calendar"]
begin
if USE_CALENDAR && USE_CALENDAR_WINDOW && !CALENDAR_TIME_BUTTON.is_a?(Integer)
if Input.trigger?(CALENDAR_TIME_BUTTON) && @calendar_window_exist && $SHOW_START_GAME_CALENDAR_WINDOW
calendar_visible(false)
elsif Input.trigger?(CALENDAR_TIME_BUTTON) && !@calendar_window_exist && !$SHOW_START_GAME_CALENDAR_WINDOW
calendar_visible(true)
end
end
rescue
end
end
if $imported["DenKyz_Game_Time_Weather"]
begin
if USE_TEMPERATURE && USE_TEMPERATURE_WINDOW && !TEMPERATURE_BUTTON.is_a?(Integer)
if Input.trigger?(TEMPERATURE_BUTTON) && @temp_window_exist && $SHOW_START_GAME_TIME_TEMPERATURE
temp_visible(false)
elsif Input.trigger?(TEMPERATURE_BUTTON) && !@temp_window_exist && !$SHOW_START_GAME_TIME_TEMPERATURE
temp_visible(true)
end
end
rescue
end
end
end
end # Scene_Map < Scene_Base
class Game_Map
include Time_Settings
alias denis_kyznetsov_game_time_game_map_setup setup
def setup(map_id)
denis_kyznetsov_game_time_game_map_setup(map_id)
if $imported["DenKyz_Game_Time_Weather"]
begin
# отключить погоду на карте с тегом внутри
$USE_DEFAULT_WEATHER = false if USE_DEFAULT_WEATHER && @map.note.include?("<No_Weather>")
# получаем грацицы температуры для карты, если они есть
if @map.note =~ /<Temp\s*=\s*((-?[\d]+)\s*,\S?\s*(-?[\d]+))>/i
$Custom_Temperature[0] = $2.to_i
$Custom_Temperature[1] = $3.to_i
else
$Custom_Temperature = []
end
rescue
end
end
$STOP_TIME_UPDATE = (@map.note.include?("<No_Time_Update>") ? true : false)
if @map.note =~ /<Light_Hour\s*=\s*([\d+])>/i
$STOP_TIME_UPDATE_LIGHT_HOUR = $1.to_i
else
$STOP_TIME_UPDATE_LIGHT_HOUR = -1
end
end
end # class Game_Map
class Time_Window < Window_Base
include Time_Settings
def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height, opacity)
super(x, y, w, h)
if opacity != -1 # прозрачность, указанная пользователем, если есть
self.opacity = opacity
self.back_opacity = opacity
self.contents_opacity = opacity
end
@width = w
@height = h
update
end
def blink # мигающее двоеточие
return ":" if Graphics.frame_count % BLINK_SPEED > BLINK_SPEED/2
return " "
end
def date # дата
return ($Game_Time.day.to_s + " " + CALENDAR_MONTHS[$Game_Time.month] + " " + $Game_Time.year.to_s) if !USE_CUSTOM_CLOCK_ON_MAP
date = ""
return date if CUSTOM_CLOCK_DATE == []
for i in 0..CUSTOM_CLOCK_DATE.size - 1
case CUSTOM_CLOCK_DATE[i]
when "День"
date += " " + $Game_Time.day.to_s
when "День недели"
date += " " + DAYS_WEEK[$Game_Time.month]
when "Месяц(число)"
date += " " + $Game_Time.month.to_s
when "Месяц(название)"
date += " " + CALENDAR_MONTHS[$Game_Time.month]
when "Год"
date += " " + $Game_Time.year.to_s
else
date += " " + CUSTOM_CLOCK_DATE[i].to_s
end
end
return date
end
def plus_minutes
return $Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s
end
def plus_seconds
return $Game_Time.sec < 10 ? "0" + $Game_Time.sec.to_s : $Game_Time.sec.to_s
end
def time # время
return ($Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s) +
(USE_BLINK ? blink : ":") + plus_minutes +
(SHOW_SECONDS ? ((USE_BLINK ? blink : ":") + plus_seconds) : "") if !USE_CUSTOM_CLOCK_ON_MAP
time = ""
return time if CUSTOM_CLOCK_TIME == []
for i in 0..CUSTOM_CLOCK_TIME.size - 1
case CUSTOM_CLOCK_TIME[i]
when "Час"
time += $Game_Time.hour.to_s
when "blink"
time += USE_BLINK ? blink : ":"
when "Минуты"
time += plus_minutes
when "Секунды"
time += SHOW_SECONDS ? plus_seconds : ""
else
time += CUSTOM_CLOCK_TIME[i].to_s
end
end
return time
end
def update
if (@now_sec != $Game_Time.sec && SHOW_SECONDS) || (@now_min != $Game_Time.min && !SHOW_SECONDS) || USE_BLINK || @now_hour != $Game_Time.hour || @now_day != $Game_Time.day || @now_month != $Game_Time.month || @now_year != $Game_Time.year
setup_variables
contents.clear
show_date = date
show_time = time
y = 0
draw_text(0, y, @width - 24, 32, show_date, 1)
return if show_time == ""
y += 24 if show_date != ""
draw_text(0, y, @width - 24, 32, show_time, 1)
end
end
def setup_variables
@now_sec = $Game_Time.sec
@now_min = $Game_Time.min
@now_hour = $Game_Time.hour
@now_day = $Game_Time.day
@now_month = $Game_Time.month
@now_year = $Game_Time.year
end
end # class Time_Window < Window_Base
class Scene_Menu < Scene_MenuBase
include Time_Settings
alias denis_kyznetsov_game_time_scn_menu_start start
def start
denis_kyznetsov_game_time_scn_menu_start
create_time_window if TIME_IN_MENU
end
def create_time_window
x, y, w, h = MENU_CLOCK_X, MENU_CLOCK_Y, MENU_CLOCK_WIDTH, MENU_CLOCK_HEIGHT
x, y, w, h = @gold_window.x, @gold_window.y - 74, 160, 74 if !USE_CUSTOM_CLOCK_IN_MENU
@create_time_window = Time_Window.new(x, y, w, h, OPACITY_MENU_CLOCK)
end
alias denis_kyznetsov_game_time_scn_menu_create_command_window create_command_window
def create_command_window
denis_kyznetsov_game_time_scn_menu_create_command_window
begin
@command_window.set_handler(:calendar, method(:calendar)) if USE_CALENDAR
rescue
end
end
end # Scene_Menu < Scene_MenuBase
module DataManager
class << self
alias denis_kyznetsov_dt_mngr_setup_new_game setup_new_game
def setup_new_game
denis_kyznetsov_dt_mngr_setup_new_game
Functions.new_game
end
alias denis_kyznetsov_dt_mngr_make_save_contents make_save_contents
def make_save_contents
contents = denis_kyznetsov_dt_mngr_make_save_contents
contents[:Game_Time] = $Game_Time
contents[:Game_Time_Quests] = $QUESTS
contents[:Game_Time_Last_Quests] = $LAST_QUESTS
contents[:Game_Time_First_Day] = $FIRST_DAY
contents[:Game_Time_DUP] = $Game_Time_DUP
contents
end
alias denis_kyznetsov_dt_mngr_extract_save_contents extract_save_contents
def extract_save_contents(contents)
denis_kyznetsov_dt_mngr_extract_save_contents(contents)
Functions.new_game
$Game_Time = contents[:Game_Time]
$QUESTS = contents[:Game_Time_Quests]
$LAST_QUESTS = contents[:Game_Time_Last_Quests]
$FIRST_DAY = contents[:Game_Time_First_Day]
$Game_Time_DUP = contents[:Game_Time_DUP]
end
end
end # module DataManager
|