>스크립트 없나요?
사용법 :
도입 후, 커스터마이즈 항목을 기호에 따라 변경해 주세요.
이벤트 커멘드 「스크립트」로
$game_system.daynight_change = (true|false)
그렇다고 하는 스크립트를 입력하면, 밤낮 변환을 제어할 수 있습니다.
(↑ true 또는 false (을)를 지정)
전투중만 밤낮 변환을 제어하는 경우는
$game_system.daynight_change_battle = (true|false)
(을)를 사용합니다.
다만, $game_system.daynight_change 하지만 false 의 경우는 전투중도 무효가 됩니다.
현재 상태는
x = now_daynight
그리고 취득할 수 있습니다. 이벤트의 조건 분기등에 사용하는 경우는
$game_variables[id] = now_daynight
(을)를 사용합니다.( id (은)는 변수 ID)
phase 내용
0 주
1 저녁
2 야
3 조
(개조했을 경우는 변동)
x = now_daynight_name
그리고 현재 상태명(낮이나 밤등)을 취득할 수 있습니다.
여인숙의 처리등 때문에, 낮이나 밤에 수동으로 바꾸는 경우는
change_daynight(phase[, duration, pass_days])
(을)를 사용합니다.
phase (은)는 변경 후 상태(↑를 참조), duration (은)는 변경에 걸치는 시간(프레임)입니다.
(생략 하면 duration = 40 하지만 적용됩니다)
pass_days (은)는 상태 변화 후에 경과시키는 날짜를 입력합니다.
(생략 하면 날짜는 가산되지 않습니다)
이벤트등으로 날짜를 경과시키고 싶은 경우에도 사용할 수 있습니다.
<례> change_daynight(0, 0, 1) # 0 프레임으로 낮으로 이행해, 1일 경과시킨다
현재의 경과일수는
x = $game_system.daynight_pass_days
그리고 취득할 수 있습니다.(직접 고쳐 쓰는 일도 가능)
건조물의 내부에 들어갔을 때 등 , 일시적으로 통상시에 되돌리고 싶은 경우도 있습니다.
그 경우는
$game_system.daynight_change = false
$game_screen.daynight_default(0)
(을)를 실행하는 것으로, 통상의 색조에 되돌릴 수 있습니다.
반대로, 해당 장소에서 나올 때
$game_system.daynight_change = true
$game_screen.daynight_apply(0)
(을)를 실행하는 것으로, 이전 상태를 재현할 수 있습니다.
(0) 에는, 변환 시간을 프레임 단위로 지정합니다.
무리명에 [DN ...] (을)를 더하면, 적의 출현 조건을 설정할 수 있습니다.
... 에는, 그 무리를 출현시키는 상태( phase )(을)를 콤마 단락으로 입력합니다.
지정시, 수치의 전에 - (을)를 넣으면, 지정했다 phase (을)를 출현 조건으로부터 제외합니다.
「밤」마셔 출현시키는 경우:[DN 2]
「주·조」는 출현시키지 않는 경우:[DN -0,-3]
([DN-0,-3](이)나[DN -0, -3](와)과 같이, 공백을 들어갈 수 있어도 넣지 않아도 상관하지 않습니다)
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆밤낮 변환 - KGC_DayNight◆
#_/----------------------------------------------------------------------------
#_/ 게임중에 밤낮의 개념을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ 커스터마이즈 항목 ★
#==============================================================================
module KGC
# ◆밤낮 변환 방식
# 0:시 사이 경과 1:보수 2:현실 시간(미묘)
DAYNIGHT_METHOD = 1
# ◆이벤트중은 시간을 멈춘다
# 「시간 경과」사용시만 유효
DAYNIGHT_EVENT_STOP = true
# ◆일자가 바뀌는 상태
# 여기서 지정한 상태가 되었을 때, 날짜를 가산한다。
# 초기 상태의 경우 0:낮 1:저녁 2:야 3:조
# ※현실 시간의 경우, 현실과 같은 날짜는 되지 않기 때문에 주의.
DAYNIGHT_PASS_PHASE = 3
# ◆상태 변환시의 페이드 시간【단위:프레임】
# 생략시도 이 값을 사용합니다.
DAYNIGHT_DURATION = 40
# ★☆이하의 3항목은 모두 같은 개수로 해 주세요☆★
# 처리의 형편상, 최초를 낮으로 하면 베타
# ◆밤낮의 명칭(별로 의미는 없다)
DAYNIGHT_NAME = ["낮", "저녁", "야", "조"]
# ◆밤낮의 색조(잘 모르는 경우는 이대로)
DAYNIGHT_TONE = [Tone.new(0, 0, 0),
Tone.new(-32, -96, -96),
Tone.new(-128, -128, -32),
Tone.new(-48, -48, -16)]
# ◆밤낮 변환 시간(다음 상태에 옮길 때까지의 기간)
# 변환 방식이 시간의 경우는 초수, 보수의 경우는 보수 그대로.
# 전투중은 변환 시간이 10배(1/10의 속도)
# 현실 시간의 경우, 다음 상태에 바꾸는 시각(24시간 방식)
DAYNIGHT_TIME = [30, 10, 25, 10]
# DAYNIGHT_TIME = [16, 20, 6, 10]
# ↑현실 시간용의 샘플. 시험하는 경우는 코멘트를 해제
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported["DayNight"] = true
#--------------------------------------------------------------------------
# ● 現在の状態
#--------------------------------------------------------------------------
def now_daynight
# 現在の状態を返す
return $game_system.daynight_phase
end
#--------------------------------------------------------------------------
# ● 状態名取得
#--------------------------------------------------------------------------
def now_daynight_name
# 現在の状態名を返す
return KGC::DAYNIGHT_NAME[now_daynight]
end
#--------------------------------------------------------------------------
# ● 昼夜手動切り替え
# phase : 切り替え後の状態INDEX
# duration : 切り替え時間(フレーム) (省略時:DAYNIGHT_DURATION)
# pass_days : 経過させる日数 (省略時:0)
#--------------------------------------------------------------------------
def change_daynight(phase, duration = KGC::DAYNIGHT_DURATION, pass_days = 0)
# カウント初期化
$game_system.daynight_count = 0
# フェーズ更新
$game_system.daynight_phase = phase
# 手動切り替え有効
$game_temp.manual_daynight_change = duration
# 日数経過
$game_system.daynight_pass_days += pass_days
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
attr_accessor :manual_daynight_change
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
# 元の処理を実行
initialize_KGC_DayNight
@manual_daynight_change = false
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
attr_accessor :daynight_change, :daynight_change_battle
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
# 元の処理を実行
initialize_KGC_DayNight
@daynight_count, @daynight_phase, @daynight_pass_days = 0, 0, 0
@daynight_change, @daynight_change_battle = true, true
end
#--------------------------------------------------------------------------
# ● 昼夜判定用カウント取得
#--------------------------------------------------------------------------
def daynight_count
@daynight_count = 0 if @daynight_count == nil
return @daynight_count
end
#--------------------------------------------------------------------------
# ● 昼夜判定用カウント設定
#--------------------------------------------------------------------------
def daynight_count=(n)
@daynight_count = 0 if @daynight_count == nil
@daynight_count = n
end
#--------------------------------------------------------------------------
# ● 現在の状態取得
#--------------------------------------------------------------------------
def daynight_phase
@daynight_phase = 0 if @daynight_phase == nil
return @daynight_phase
end
#--------------------------------------------------------------------------
# ● 現在の状態設定
#--------------------------------------------------------------------------
def daynight_phase=(n)
@daynight_phase = 0 if @daynight_phase == nil
@daynight_phase = n
end
#--------------------------------------------------------------------------
# ● 経過日数取得
#--------------------------------------------------------------------------
def daynight_pass_days
@daynight_pass_days = 0 if @daynight_pass_days == nil
return @daynight_pass_days
end
#--------------------------------------------------------------------------
# ● 経過日数設定
#--------------------------------------------------------------------------
def daynight_pass_days=(n)
@daynight_pass_days = 0 if @daynight_pass_days == nil
@daynight_pass_days = n
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Screen
#==============================================================================
class Game_Screen
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
# 元の処理を実行
initialize_KGC_DayNight
# とりあえず現在の状態に設定
@tone = KGC::DAYNIGHT_TONE[$game_system.daynight_phase].clone
# 移動判定用座標
@x, @y = 0, 0
# フレーム更新用カウント初期化
@frame_count = Graphics.frame_count
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_KGC_DayNight update
def update
# 元の処理を実行
update_KGC_DayNight
# 昼夜切り替え判定
if (!$game_temp.in_battle && $game_system.daynight_change) ||
($game_temp.in_battle && $game_system.daynight_change &&
$game_system.daynight_change_battle)
case KGC::DAYNIGHT_METHOD
when 0 # 時間判定
# カウント増加量計算
inc_count = Graphics.frame_count - @frame_count
# 加算量がおかしい場合は戻る
if inc_count >= 100
@frame_count = Graphics.frame_count
return
end
# イベント中は戻る
if KGC::DAYNIGHT_EVENT_STOP && $game_system.map_interpreter.running?
@frame_count = Graphics.frame_count
return
end
# カウント加算
if $game_temp.in_battle
inc_count /= 10.0
$game_system.daynight_count += inc_count
else
$game_system.daynight_count += inc_count
end
# カウントを戻す
@frame_count = Graphics.frame_count
# 状態移行判定
count = $game_system.daynight_count / Graphics.frame_rate
if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
# 次の状態へ移行
$game_system.daynight_count = 0
$game_system.daynight_phase += 1
# 最後の状態に達した場合
if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
# 最初の状態に戻す
$game_system.daynight_phase = 0
end
# 日数経過判定
if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
$game_system.daynight_pass_days += 1
end
# 色調切り替え
start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
KGC::DAYNIGHT_DURATION)
end
when 1 # 歩数判定
# 移動判定
if @x != $game_player.x || @y != $game_player.y
# 座標更新
@x = $game_player.x
@y = $game_player.y
# カウント加算
$game_system.daynight_count += 1
# 状態移行判定
count = $game_system.daynight_count
if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
# 次の状態へ移行
$game_system.daynight_count = 0
$game_system.daynight_phase += 1
# 最後の状態に達した場合
if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
# 最初の状態に戻す
$game_system.daynight_phase = 0
end
# 日数経過判定
if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
$game_system.daynight_pass_days += 1
end
# 色調切り替え
start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
KGC::DAYNIGHT_DURATION)
end
end
when 2 # 現実時間
# 現在の時間を取得
time = Time.now
# 状態移行判定
time1 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
time2 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase - 1]
if time2 != nil && time2 > time1
change = time.hour < time2 && time.hour >= time1
else
change = time.hour >= time1
end
if change
# 次の状態へ移行
$game_system.daynight_count = 0
$game_system.daynight_phase += 1
# 最後の状態に達した場合
if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
# 最初の状態に戻す
$game_system.daynight_phase = 0
end
# 日数経過判定
if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
$game_system.daynight_pass_days += 1
end
# 色調切り替え
start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
KGC::DAYNIGHT_DURATION)
end
end
end
# 手動切り替えが行われた場合
if $game_temp.manual_daynight_change != nil
# 色調切り替え
start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
KGC::DAYNIGHT_DURATION)
# 手動切り替え解除
$game_temp.manual_daynight_change = nil
end
end
#--------------------------------------------------------------------------
# ● デフォルトの状態(0, 0, 0)に戻す
# duration : 切り替え時間(フレーム) (省略時:40)
#--------------------------------------------------------------------------
def daynight_default(duration = KGC::DAYNIGHT_DURATION)
start_tone_change(Tone.new(0, 0, 0), duration)
end
#--------------------------------------------------------------------------
# ● 現在の状態を適用
# duration : 切り替え時間(フレーム) (省略時:40)
#--------------------------------------------------------------------------
def daynight_apply(duration = KGC::DAYNIGHT_DURATION)
start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase], duration)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● エンカウントリストの取得
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
# 元の処理を実行
list = encounter_list_KGC_DayNight.dup
# 出現条件判定
list.each_index do |i|
appear = false
troop = $data_troops[list[i]]
# 出現条件が無い場合は次へ
next unless troop.name =~ /[DN((?:[ ]*[-]?d+(?:,[ ]*)?)+)]/i
# 出現条件を適用
for dn in $1.split(/,/)
dn.gsub!(/[ ]/) {""}
appear |= dn[0, 1] == "-" ? $game_system.daynight_phase != dn.to_i.abs :
$game_system.daynight_phase == dn.to_i
end
list[i] = nil unless appear
end
return list.compact
end
end