#==============================================================================
# ■ 自動昼夜変更スクリプト β By 貪藻矢射妥←
#
# 現在時刻を取得して、自動的に昼夜を変更します。
#
# また、$game_system.get_today で現在の時刻を取得することができます。
# (Window_PlayTime などで使用してみるのもいいかも・・・)
#
# ※このスクリプトを使用すると色調変更が無効となります。
# 色調変更を有効にしたい場合は、スクリプトで
# $game_system.day_change_cancel = true
# を実行してください。
# (再び無効にする場合はfalseにする。また、自動的に色調が変更されるので
# 元に戻す操作は不要となります。)
#
#==============================================================================
# 更新っぽいもの
#
# 2010:07:17
# ・昼夜用トーンを増設
# ・昼夜の時間帯をカスタマイズポイントで設定可能に
#
# 2012:08:11
# ・トーンチェンジ用待ち時間を設定可能に
# ・季節によるトーンチェンジを実装
#
# 2012:10:01
# ・第五世代ポケモン風季節表示
#
# 2024:06:01
# ・スクリプト中で使用されてる文字列の定義化追加
module DATE_C
# 昼夜用トーン
# 『昼間用(デフォルト)』は変更しないでください。
DAYNIGHT_TONE = [Tone.new( 0, 0, 0, 0), # 昼間用(デフォルト)
Tone.new( 17, -68, -68, 0), # 夕方用
Tone.new( -68, -119, -34, 0), # 夜間用
Tone.new(-153, -187, -119, -17), # 深夜用
Tone.new( -34, -34, 0, 51), # 明方用
Tone.new( 17, 17, 34, 0)] # 午前用
# 昼夜用時間配列
# 春用は季節を使用しない場合のデフォルトになります
# 春用
EVENING_SPL = [11, 12, 13, 14]
DUSK_SPL = [15, 16, 17]
NIGHT_SPL = [18, 19, 20, 21]
MIDNIGHT_SPL = [22, 23, 0, 1, 2, 3]
DAWN_SPL = [ 4, 5, 6, 7]
MORNING_SPL = [ 8, 9, 10]
DAY_NIGHT_LISTs_SPL = [EVENING_SPL, DUSK_SPL, NIGHT_SPL, MIDNIGHT_SPL,
DAWN_SPL, MORNING_SPL]
# 夏用
EVENING_SMR = [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
DUSK_SMR = [19]
NIGHT_SMR = [20, 21]
MIDNIGHT_SMR = [22, 23, 0, 1]
DAWN_SMR = [ 2, 3]
MORNING_SMR = [ 4, 5, 6]
DAY_NIGHT_LISTs_SMR = [EVENING_SMR, DUSK_SMR, NIGHT_SMR, MIDNIGHT_SMR,
DAWN_SMR, MORNING_SMR]
# 秋用
EVENING_OTM = [11, 12, 13, 14]
DUSK_OTM = [15, 16, 17]
NIGHT_OTM = [18, 19, 20, 21]
MIDNIGHT_OTM = [22, 23, 0, 1, 2, 3]
DAWN_OTM = [ 4, 5, 6, 7]
MORNING_OTM = [ 8, 9, 10]
DAY_NIGHT_LISTs_OTM = [EVENING_OTM, DUSK_OTM, NIGHT_OTM, MIDNIGHT_OTM,
DAWN_OTM, MORNING_OTM]
# 冬用
EVENING_WIN = [12, 13]
DUSK_WIN = [14, 15, 16, 17]
NIGHT_WIN = [18, 19, 20]
MIDNIGHT_WIN = [21, 22, 23, 0, 1, 2, 3]
DAWN_WIN = [ 4, 5, 6, 7]
MORNING_WIN = [ 8, 9, 10, 11]
DAY_NIGHT_LISTs_WIN = [EVENING_WIN, DUSK_WIN, NIGHT_WIN, MIDNIGHT_WIN,
DAWN_WIN, MORNING_WIN]
# 春夏秋冬
DAY_NIGHT_LISTs_SEASON = [DAY_NIGHT_LISTs_SPL, DAY_NIGHT_LISTs_SMR,
DAY_NIGHT_LISTs_OTM, DAY_NIGHT_LISTs_WIN]
# 季節設定
SPL = [ 4, 5, 6]
SMR = [ 7, 8, 9]
OTM = [10, 11, 12]
WIN = [ 1, 2, 3]
SEASON = [SPL, SMR, OTM, WIN]
# 昼夜変更フラグ
# trueの場合、マップIDがCHANGE_MAP_IDの場合のみ、昼夜変更を行います。
# falseの場合はその逆です。
CHANGE_FLG = true
# 昼夜変更を行うマップID/行わないマップID
CHANGE_MAP_ID = [25, 29, 30, 31, 61, 117, 129, 133, 134, 149, 315, 466, 530]
# 曜日
YOBI = ["\\c[2]日\\c[0]", "月", "火", "水", "木", "金", "\\c[1]土\\c[0]"]
# 月の名前を変更するかどうかのフラグ
MN_CHANGE_FLG = true
# 月の名前リスト
MN_LIST = [nil, "睦月", "如月", "弥生", "卯月", "皐月", "水無月",
"文月", "葉月", "長月", "神無月", "霜月", "師走"]
# 年を使用するか否かのフラグ
USE_YEAR_FLG = false
# トーンチェンジ用待ち時間
CHG_TIME = 10
# 季節を使用するかどうかのフラグ
USE_SEASON_FLG = true
# 季節と文字色
SEASON_SETS = [["春", "spring", Color.new(0xff, 0x69, 0xb6, 255)],
["夏", "summer", Color.new(0x1E, 0x90, 0xFF, 255)],
["秋", "autumn", Color.new(0xFF, 0x8C, 0x00, 255)],
["冬", "winter", Color.new(0xF8, 0xF8, 0xFF, 255)]]
# 文字色その2
ENG_CLOR = Color.new(180, 180, 180, 255)
#--------------------------------------------------------------------------
# ● 表示用日付取得
#--------------------------------------------------------------------------
def get_today
t = Time.now
day_list = []
if USE_YEAR_FLG
year_text = t.year.to_s + "年" + Vocab::BLANK_WORD
else
year_text = ""
end
if MN_CHANGE_FLG
month_text = MN_LIST[t.month] + Vocab::BLANK_WORD
else
month_text = t.month.to_s + "月" + Vocab::BLANK_WORD
end
day_list.push(year_text + month_text + t.day.to_s + "夜")
day_list.push(t.hour.to_s + "時" + t.min.to_s + "分" + t.sec.to_s + "秒")
day_list.push(transfer(YOBI[t.wday]))
return day_list
end
#--------------------------------------------------------------------------
# ● 時間ゲット関数 (時間に応じてイベントを起こしたい場合に?)
#--------------------------------------------------------------------------
def get_h
t = Time.now
return t.hour
end
#--------------------------------------------------------------------------
# ● 日付ゲット関数 (日付に応じてイベントを起こしたい場合に?)
#--------------------------------------------------------------------------
def get_day
t = Time.now
return t.day
end
#--------------------------------------------------------------------------
# ● 月付ゲット関数 (月に応じてイベントを起こしたい場合に?)
#--------------------------------------------------------------------------
def get_month
t = Time.now
return t.month
end
end
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :fade_values_dia
end
class Game_System
include DATE_C
include RUBY_SYS
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :day_change_cancel
#--------------------------------------------------------------------------
# ● 昼夜自動変更処理
#--------------------------------------------------------------------------
def change_day
# 一応初期化しておく
if $game_system.day_change_cancel == nil
$game_system.day_change_cancel = false
end
if USE_SEASON_FLG
@M = get_month
for i in 0...SEASON.size
if SEASON[i].include?(@M)
@chg_toons = DAY_NIGHT_LISTs_SEASON[i]
end
end
else
@chg_toons = DAY_NIGHT_LISTs_SEASON[0]
end
@H = get_h
for i in 0...@chg_toons.size
if @chg_toons[i].include?(@H)
index = i
end
end
# 昼夜変更
if $game_system.day_change_cancel != true
if CHANGE_FLG && CHANGE_MAP_ID.include?($game_map.map_id) ||
!CHANGE_FLG && !CHANGE_MAP_ID.include?($game_map.map_id)
$game_screen.start_tone_change(DAYNIGHT_TONE[index], CHG_TIME * 2)
elsif CHANGE_FLG && !CHANGE_MAP_ID.include?($game_map.map_id) ||
!CHANGE_FLG && CHANGE_MAP_ID.include?($game_map.map_id)
$game_screen.start_tone_change(DAYNIGHT_TONE[0], CHG_TIME * 2)
end
end
end
end
class Window_MenuPlayTime < Window_Base
include DATE_C
include DIAMOND
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
alias refresh_Dia_DayC refresh
def refresh
refresh_Dia_DayC
days = $game_system.get_today
d_size = self.contents.font.size
self.contents.font.size = 12
draw_shadow_text([0, 3], days[0] + " [" + days[2] + "]")
#draw_shadow_text([0, 15], days[1])
self.contents.font.size = d_size
end
end
class Window_Siki < Window_Base
include DATE_C
include DIAMOND
include BM
include RUBY_SYS
#--------------------------------------------------------------------------
# ○ 季節ゲット
#--------------------------------------------------------------------------
def get_siki_str
@M = get_month
for i in 0...SEASON.size
if SEASON[i].include?(@M)
return SEASON_SETS[i]
end
end
end
#--------------------------------------------------------------------------
# ○ オブジェクト初期
#--------------------------------------------------------------------------
def initialize
super(320 - 128 / 2, 240 - 128 / 2, 128, 128)
set_text
end
#--------------------------------------------------------------------------
# ○ テキスト設定
# text : ウィンドウに表示する文字列
#--------------------------------------------------------------------------
def set_text
# 設定
text = get_siki_str
# 描写
self.contents = Bitmap.new(width - 32, height - 32)
d_size = self.contents.font.size
self.contents.font.size = 48
draw_shadow_text([0, 0, 128 - 32, 128 - 32], text[0], text[2], 1)
self.contents.font.size = 20
draw_shadow_text([0, 32, 128 - 32, 128 - 32], text[1], ENG_CLOR, 1)
self.contents.font.size = d_size
self.opacity = 0
self.back_opacity = 0
self.visible = false
# 位置の更新
fade_relocation
end
#--------------------------------------------------------------------------
# ○ フェード時間による更新
#--------------------------------------------------------------------------
def fade_relocation
# フェード時間の設定
if $game_temp.fade_values_dia.nil?
$game_temp.fade_values_dia = 120
end
#
# フェードイン
#
d = $game_temp.fade_values_dia - 80
if d > 0
self.visible = true
amount = ((16 - d) * 255.0 / 16).ceil
self.contents_opacity = [amount*5/8, 255].min
$game_temp.fade_values_dia -= 1
#
# 通常表示
#
elsif $game_temp.fade_values_dia > 20
self.visible = true
self.contents_opacity = 255
$game_temp.fade_values_dia -= 1 if $game_temp.fade_values_dia > 0
#
# フェードアウト
#
elsif $game_temp.fade_values_dia > 0
self.visible = true
amount = ($game_temp.fade_values_dia * 255.0 / 24).ceil
self.contents_opacity = amount * 5/8
$game_temp.fade_values_dia -= 1
self.visible = false if $game_temp.fade_values_dia == 0
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 [オーバーライド]
#--------------------------------------------------------------------------
def update
fade_relocation
super
end
end
class Scene_Map
include DATE_C
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias main_Dia_DayC main
def main
if USE_SEASON_FLG
# 四季ウィンドウを作成
@siki_window = Window_Siki.new
@siki_window.set_text
end
# 戻す
main_Dia_DayC
if USE_SEASON_FLG
# 四季ウィンドウを解放
@siki_window.dispose
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_Dia_DayC update
def update
$game_system.change_day
if USE_SEASON_FLG
# 四季ウィンドウの更新
@siki_window.update
end
update_Dia_DayC
end
end
|