Project1
标题:
如何使用这个昼夜交替脚本
[打印本页]
作者:
fuyanbin
时间:
2008-9-22 03:10
标题:
如何使用这个昼夜交替脚本
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 昼夜切り替え - KGC_DayNight ◆ VX ◆
#_/ ◇ Last update : 2008/03/08 ◇
#_/----------------------------------------------------------------------------
#_/ ゲーム中に昼夜の概念を作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================
module KGC
module DayNight
# ◆ 昼夜切り替え方式
# 0..時間経過 1..歩数 2..現実時間(微妙)
METHOD = 1
# ◆ フェーズを保存する変数の番号
# ここで指定した変数に、現在のフェーズを格納します。
PHASE_VARIABLE = 11
# ◆ 日数を保存する変数の番号
# ここで指定した変数に、経過した日数を格納します。
PASS_DAYS_VARIABLE = 12
# ◆ イベント中はフェーズを変更しない
STOP_ON_EVENT = true
# ◆ 戦闘時は、背景のみ色調を適用する
# false にすると、夜がとんでもないことになります。
TONE_BACK_ONLY_IN_BATTLE = true
# ◆ 各フェーズの設定
# 各フェーズを
# ["名称", 色調(Tone), 切り替え時間],
# という書式で作成。
# フェーズを増やすこともできますが、慣れないうちはおすすめしません。
#
# [名称]
# フェーズの名前。
# 名前自体に意味はありません。
# [色調]
# 画面全体の色。
# よく分からない場合は変更しないでください。
# [切り替え時間]
# 次のフェーズに移るまでの時間。
# 切り替え方式が時間経過の場合は秒、歩数の場合は歩数そのまま。
# 現実時間の場合、次の状態へ切り替える時刻 (24時間方式)。
PHASE = [
["昼", Tone.new( 0, 0, 0), 300], # フェーズ 0
["夕方", Tone.new( -32, -96, -96), 100], # フェーズ 1
["夜", Tone.new(-128, -128, -32), 250], # フェーズ 2
["朝", Tone.new( -48, -48, -16), 100], # フェーズ 3
] # ← これは消さないこと!
# 現実時間のときは、
# ["昼", Tone.new( 0, 0, 0), 16], # フェーズ 0 (16時に夕方)
# ["夕方", Tone.new( 0, -96, -96), 20], # フェーズ 1 (20時に夜)
# ["夜", Tone.new(-96, -96, -64), 6], # フェーズ 2 (6時に朝)
# ["朝", Tone.new(-48, -48, -16), 10], # フェーズ 3 (10時に昼)
# このような感じ。
# ◆ 日付が変わるフェーズ
# ここで指定したフェーズになったとき、日数を加算する。
# 初期状態の場合 0..昼 1..夕方 2..夜 3..朝
# ※ 現実時間の場合、現実と同じ日数にはならないので注意。
PASS_DAY_PHASE = 3
# ◆ 状態切り替え時のフェード時間 (フレーム)
# 省略時もこの値を使用します。
PHASE_DURATION = 60
# ◆ 曜日名
# 初日は先頭から始まり、最後の曜日まで行くと最初の曜日に戻る。
# 曜日自体に意味はありません。
# ※ 現実時間を使用する場合は 7 個にしてください。
WEEK_NAME = ["日", "月", "火", "水", "木", "金", "土"]
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["DayNight"] = true
if $data_mapinfos == nil
$data_mapinfos = load_data("Data/MapInfos.rvdata")
end
module KGC::DayNight
METHOD_TIME = 0 # 時間経過
METHOD_STEP = 1 # 歩数
METHOD_RTIME = 2 # 現実時間
# 正規表現
module Regexp
# マップ情報
module MapInfo
# 遷移を止める
DAYNIGHT_STOP = /\[DN_STOP\]/i
# 昼夜エフェクト無効
DAYNIGHT_VOID = /\[DN_VOID\]/i
end
# 敵グループ
module Troop
# 出現フェーズ
APPEAR_PHASE = /\[DN((?:[ ]*[\-]?\d+(?:[ ]*,)?)+)\]/i
end
end
#--------------------------------------------------------------------------
# ○ 敵グループ出現判定
# troop : 判定対象の敵グループ
# phase : 判定するフェーズ
#--------------------------------------------------------------------------
def self.troop_appear?(troop, phase = $game_system.daynight_phase)
# 出現判定
unless troop.appear_daynight_phase.empty?
return false unless troop.appear_daynight_phase.include?(phase)
end
# 非出現判定
unless troop.nonappear_daynight_phase.empty?
return false if troop.nonappear_daynight_phase.include?(phase)
end
return true
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ KGC::Commands
#==============================================================================
module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ 昼夜切り替えを停止
#--------------------------------------------------------------------------
def stop_daynight
$game_system.daynight_change_enabled = false
end
#--------------------------------------------------------------------------
# ○ 昼夜切り替えを起動
#--------------------------------------------------------------------------
def start_daynight
$game_system.daynight_change_enabled = true
end
#--------------------------------------------------------------------------
# ○ 現在のフェーズ名を取得
#--------------------------------------------------------------------------
def get_daynight_name
return KGC::DayNight::PHASE[get_daynight_phase][0]
end
#--------------------------------------------------------------------------
# ○ 現在の曜日を取得
# variable_id : 代入する変数 ID
#--------------------------------------------------------------------------
def get_daynight_week(variable_id = 0)
if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
week = Time.now.wday
else
days = $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE]
week = (days % KGC::DayNight::WEEK_NAME.size)
end
if variable_id > 0
$game_variables[variable_id] = week
end
return week
end
#--------------------------------------------------------------------------
# ○ 現在の曜日名を取得
#--------------------------------------------------------------------------
def get_daynight_week_name
return KGC::DayNight::WEEK_NAME[get_daynight_week]
end
#--------------------------------------------------------------------------
# ○ フェーズ切り替え
# phase : 切り替え後のフェーズ
# duration : 切り替え時間(フレーム)
# pass_days : 経過させる日数 (省略時: 0)
#--------------------------------------------------------------------------
def change_daynight_phase(phase,
duration = KGC::DayNight::PHASE_DURATION,
pass_days = 0)
$game_temp.manual_daynight_duration = duration
$game_system.daynight_counter = 0
$game_system.daynight_phase = phase
$game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += pass_days
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 次のフェーズへ遷移
# duration : 切り替え時間(フレーム)
#--------------------------------------------------------------------------
def transit_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.transit_daynight_phase(duration)
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ デフォルトの色調に戻す
# duration : 切り替え時間(フレーム)
#--------------------------------------------------------------------------
def set_daynight_default(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.set_daynight_default(duration)
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 現在のフェーズを復元
# duration : 切り替え時間(フレーム)
#--------------------------------------------------------------------------
def restore_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.restore_daynight_phase(duration)
$game_map.need_refresh = true
end
end
end
class Game_Interpreter
include KGC::Commands
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::MapInfo
#==============================================================================
class RPG::MapInfo
#--------------------------------------------------------------------------
# ● マップ名取得
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) { "" }
end
#--------------------------------------------------------------------------
# ○ オリジナルマップ名取得
#--------------------------------------------------------------------------
def original_name
return @name
end
#--------------------------------------------------------------------------
# ○ 昼夜切り替え停止
#--------------------------------------------------------------------------
def daynight_stop
return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_STOP
end
#--------------------------------------------------------------------------
# ○ 昼夜エフェクト無効
#--------------------------------------------------------------------------
def daynight_void
return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_VOID
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Area
#==============================================================================
unless $@
class RPG::Area
#--------------------------------------------------------------------------
# ○ エンカウントリストの取得
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
list = encounter_list_KGC_DayNight.clone
# 出現条件判定
list.each_index { |i|
list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
}
return list.compact
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Troop
#==============================================================================
class RPG::Troop
#--------------------------------------------------------------------------
# ○ 昼夜切り替えのキャッシュ生成
#--------------------------------------------------------------------------
def create_daynight_cache
@__appear_daynight_phase = []
@__nonappear_daynight_phase = []
# 出現するフェーズ
if @name =~ KGC::DayNight::Regexp::Troop::APPEAR_PHASE
$1.scan(/[\-]?\d+/).each { |num|
phase = num.to_i
if phase < 0
# 出現しない
@__nonappear_daynight_phase << phase.abs
else
# 出現する
@__appear_daynight_phase << phase
end
}
end
end
#--------------------------------------------------------------------------
# ○ 出現するフェーズ
#--------------------------------------------------------------------------
def appear_daynight_phase
create_daynight_cache if @__appear_daynight_phase == nil
return @__appear_daynight_phase
end
#--------------------------------------------------------------------------
# ○ 出現しないフェーズ
#--------------------------------------------------------------------------
def nonappear_daynight_phase
create_daynight_cache if @__nonappear_daynight_phase == nil
return @__nonappear_daynight_phase
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :manual_daynight_duration # 手動フェーズ変更フラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
initialize_KGC_DayNight
@manual_daynight_duration = nil
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer :daynight_counter # フェーズ遷移カウンタ
attr_writer :daynight_change_enabled # 昼夜切り替え有効
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
initialize_KGC_DayNight
@daynight_counter = 0
@daynight_change_enabled = true
end
#--------------------------------------------------------------------------
# ○ フェーズ遷移カウンタを取得
#--------------------------------------------------------------------------
def daynight_counter
@daynight_counter = 0 if @daynight_counter == nil
return @daynight_counter
end
#--------------------------------------------------------------------------
# ○ 現在のフェーズを取得
#--------------------------------------------------------------------------
def daynight_phase
return $game_variables[KGC::DayNight::PHASE_VARIABLE]
end
#--------------------------------------------------------------------------
# ○ 現在のフェーズを変更
#--------------------------------------------------------------------------
def daynight_phase=(value)
$game_variables[KGC::DayNight::PHASE_VARIABLE] = value
end
#--------------------------------------------------------------------------
# ○ 昼夜切り替え有効フラグを取得
#--------------------------------------------------------------------------
def daynight_change_enabled
@daynight_change_enabled = 0 if @daynight_change_enabled == nil
return @daynight_change_enabled
end
#--------------------------------------------------------------------------
# ○ フェーズ進行
#--------------------------------------------------------------------------
def progress_daynight_phase
self.daynight_phase += 1
if self.daynight_phase >= KGC::DayNight::PHASE.size
self.daynight_phase = 0
end
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 現在のフェーズオブジェクトを取得
#--------------------------------------------------------------------------
def daynight_phase_object
return KGC::DayNight::PHASE[daynight_phase]
end
#--------------------------------------------------------------------------
# ○ 以前のフェーズオブジェクトを取得
#--------------------------------------------------------------------------
def previous_daynight_phase_object
return KGC::DayNight::PHASE[daynight_phase - 1]
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Screen
#==============================================================================
class Game_Screen
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :daynight_tone # 昼夜の色調
#--------------------------------------------------------------------------
# ● クリア
#--------------------------------------------------------------------------
alias clear_KGC_DayNight clear
def clear
clear_KGC_DayNight
clear_daynight
end
#--------------------------------------------------------------------------
# ○ 昼夜切り替え用変数をクリア
#--------------------------------------------------------------------------
def clear_daynight
@default_tone = Tone.new(0, 0, 0)
# 移動判定用座標初期化
@daynight_x = 0
@daynight_y = 0
# フレーム更新用カウント初期化
@frame_count = Graphics.frame_count
@daynight_tone_duration = 0
apply_daynight
end
#--------------------------------------------------------------------------
# ○ 昼夜の色調を適用
#--------------------------------------------------------------------------
def apply_daynight
return if $game_map == nil
# 切り替えを無効化するマップの場合
if $game_map.daynight_void?
if @daynight_tone_changed
# 初期の色調に戻す
@tone = @default_tone.clone
@daynight_tone_changed = false
end
@daynight_tone = @tone.clone
return
end
# フェーズがおかしければ修復
if $game_system.daynight_phase_object == nil
$game_system.daynight_phase = 0
end
# 現在の色調を適用
@tone = $game_system.daynight_phase_object[1].clone
@daynight_tone = @tone.clone
# 現実時間遷移の場合
if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
time = Time.now
# マッチするフェーズに遷移
KGC::DayNight::PHASE.each_with_index { |phase, i|
if phase[2] <= time.hour
start_tone_change(phase[1], 1)
$game_system.daynight_phase = i
break
end
}
end
@daynight_tone_changed = true
end
#--------------------------------------------------------------------------
# ○ 色調の取得
#--------------------------------------------------------------------------
def tone
if $game_temp.in_battle && KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
return @default_tone
else
return @tone
end
end
#--------------------------------------------------------------------------
# ● 色調変更の開始
# tone : 色調
# duration : 時間
#--------------------------------------------------------------------------
alias start_tone_change_KGC_DayNight start_tone_change
def start_tone_change(tone, duration)
duration = [duration, 1].max
start_tone_change_KGC_DayNight(tone, duration)
@daynight_tone_target = tone.clone
@daynight_tone_duration = duration
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_KGC_DayNight update
def update
update_KGC_DayNight
update_daynight_transit
end
#--------------------------------------------------------------------------
# ● 色調の更新
#--------------------------------------------------------------------------
alias update_tone_KGC_DayNight update_tone
def update_tone
update_tone_KGC_DayNight
if @daynight_tone_duration >= 1
d = @daynight_tone_duration
target = @daynight_tone_target
@daynight_tone.red = (@daynight_tone.red * (d - 1) + target.red) / d
@daynight_tone.green = (@daynight_tone.green * (d - 1) + target.green) / d
@daynight_tone.blue = (@daynight_tone.blue * (d - 1) + target.blue) / d
@daynight_tone.gray = (@daynight_tone.gray * (d - 1) + target.gray) / d
@daynight_tone_duration -= 1
end
end
#--------------------------------------------------------------------------
# ○ フェーズ遷移の更新
#--------------------------------------------------------------------------
def update_daynight_transit
# 手動切り替えが行われた場合
if $game_temp.manual_daynight_duration
start_tone_change($game_system.daynight_phase_object[1],
$game_temp.manual_daynight_duration)
$game_temp.manual_daynight_duration = nil
@daynight_tone_changed = true
end
return unless $game_system.daynight_change_enabled # 切り替えを
return if $game_map.daynight_stop? # 停止中
if KGC::DayNight::STOP_ON_EVENT
interpreter = ($game_temp.in_battle ? $game_troop.interpreter :
$game_map.interpreter)
return if interpreter.running? # イベント実行中
end
case KGC::DayNight::METHOD
when KGC::DayNight::METHOD_TIME # 時間
update_daynight_pass_time
when KGC::DayNight::METHOD_STEP # 歩数
update_daynight_step
when KGC::DayNight::METHOD_RTIME # 現実時間
update_daynight_real_time
end
end
#--------------------------------------------------------------------------
# ○ 遷移 : 時間経過
#--------------------------------------------------------------------------
def update_daynight_pass_time
# カウント増加量計算
inc_count = Graphics.frame_count - @frame_count
# 加算量がおかしい場合は戻る
if inc_count >= 100
@frame_count = Graphics.frame_count
return
end
# カウント加算
$game_system.daynight_counter += inc_count
@frame_count = Graphics.frame_count
# 状態遷移判定
count = $game_system.daynight_counter / Graphics.frame_rate
if count >= $game_system.daynight_phase_object[2]
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ○ 遷移 : 歩数
#--------------------------------------------------------------------------
def update_daynight_step
# 移動していなければ戻る
return if @daynight_x == $game_player.x && @daynight_y == $game_player.y
@daynight_x = $game_player.x
@daynight_y = $game_player.y
# カウント加算
$game_system.daynight_counter += 1
# 状態遷移判定
count = $game_system.daynight_counter
if count >= $game_system.daynight_phase_object[2]
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ○ 遷移 : 現実時間
#--------------------------------------------------------------------------
def update_daynight_real_time
time = Time.now
# 状態遷移判定
time1 = $game_system.daynight_phase_object[2]
transit = (time1 <= time.hour)
if $game_system.previous_daynight_phase_object != nil
time2 = $game_system.previous_daynight_phase_object[2]
if time1 < time2
transit &= (time.hour < time2)
end
end
if transit
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ○ 次の状態へ遷移
# duration : 遷移時間
#--------------------------------------------------------------------------
def transit_daynight_next(duration = KGC::DayNight::PHASE_DURATION)
$game_system.daynight_counter = 0
$game_system.progress_daynight_phase
# 日数経過判定
if $game_system.daynight_phase == KGC::DayNight::PASS_DAY_PHASE
$game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += 1
end
# 色調切り替え
start_tone_change($game_system.daynight_phase_object[1], duration)
@daynight_tone_changed = true
end
#--------------------------------------------------------------------------
# ○ デフォルトの状態(0, 0, 0)に戻す
# duration : 遷移時間
#--------------------------------------------------------------------------
def set_daynight_default(duration)
start_tone_change(@default_tone, duration)
end
#--------------------------------------------------------------------------
# ○ 現在のフェーズを復元
# duration : 遷移時間
#--------------------------------------------------------------------------
def restore_daynight_phase(duration)
start_tone_change($game_system.daynight_phase_object[1], duration)
@daynight_tone_changed = true
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● セットアップ
# map_id : マップ ID
#--------------------------------------------------------------------------
alias setup_KGC_DayNight setup
def setup(map_id)
setup_KGC_DayNight(map_id)
@screen.apply_daynight
end
#--------------------------------------------------------------------------
# ○ 昼夜切り替えを停止するか
#--------------------------------------------------------------------------
def daynight_stop?
info = $data_mapinfos[map_id]
return false if info == nil
return (info.daynight_stop || info.daynight_void)
end
#--------------------------------------------------------------------------
# ○ 昼夜切り替えが無効か
#--------------------------------------------------------------------------
def daynight_void?
info = $data_mapinfos[map_id]
return false if info == nil
return info.daynight_void
end
#--------------------------------------------------------------------------
# ● エンカウントリストの取得
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
list = encounter_list_KGC_DayNight.clone
# 出現条件判定
list.each_index { |i|
list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
}
return list.compact
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
if KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● バトルバックスプライトの作成
#--------------------------------------------------------------------------
alias create_battleback_KGC_DayNight create_battleback
def create_battleback
create_battleback_KGC_DayNight
if @battleback_sprite.wave_amp == 0
@battleback_sprite.tone = $game_troop.screen.daynight_tone
end
end
#--------------------------------------------------------------------------
# ● バトルフロアスプライトの作成
#--------------------------------------------------------------------------
alias create_battlefloor_KGC_DayNight create_battlefloor
def create_battlefloor
create_battlefloor_KGC_DayNight
@battlefloor_sprite.tone = $game_troop.screen.daynight_tone
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias start_KGC_DayNight start
def start
$game_map.screen.clear_daynight
start_KGC_DayNight
end
end
复制代码
这个代码是VX的昼夜交替脚本,网站上也有,翻译了开头部分,但没有给出如何使用,我还处于脚本使用的最初级阶段,所以不太会用……就是想请教下,该如何使用这个脚本?设置一个事件,然后调用RGSS代码?还是有其他方法?最好有哪位大大能给我做个范例工程,方便我和像我一样的菜鸟学习,谢谢了!
附带原日本的网站,里面貌似有使用方法,我用GOOGLE翻译了一下,还是弄不明白……
http://f44.aaa.livedoor.jp/~ytom ... m&tech=daynight
[LINE]1,#dddddd[/LINE]
版务信息:本贴由楼主自主结贴~
作者:
塑望
时间:
2008-9-23 01:15
请使用这个
版权为:Kylock
#==============================================================================
# ■ Kylock的时间系统 VX 1.5
# 6.3.2008
#------------------------------------------------------------------------------
# 脚本 by: Kylock
#==============================================================================
# 从XP版本改写,优化代码(更加兼容)
# 这是完全时间和昼夜系统.
# 这脚本增加了一个新窗口到游戏菜单,如果使用CMS
# 这个脚本在它之上,以便它不会使CMS错误.
# 如果使用战斗背景的变动的脚本,在它下面如此放置KTS
# 那您没得到延迟口气作用在您争斗.除那之外
# 不应该有任何其他剧本兼容性问题.
# 我设法使这个脚本尽可能和customizable的原脚本一样
# 虽然时间可以输出到游戏
# 变量可以随意改变,强烈建议这样使用,以便更加容易操作
# 事件在时间在游戏根据的修造.
===============================================================================
# ● 更新日志
#------------------------------------------------------------------------------
# 1.0 - 开始发布.
# 1.1 - 修正问题在战斗开始,放置这个脚本
# 在所有战斗之下背景写Game脚本,如果使用“跳动设色”
# 1.2 - 修正了$kts.stop和$kts.go的准确性
# 1.3 - $kts.stop现在真实的停止一切,并且增加游戏开关为
# 更加容易eventing。
# 1.4 - 固定的战斗测试兼容性(模仿正常白天为战斗
# 测试而不是黑暗一片).
# 现在交换,并且可变量只将更新,当地图装载,以便
# 事件不突然消失,当时间到。
# 增加的$kts_anti_tone -回归允许相反颜色
# 通常出现在一个被设色的屏幕。
# 1.5 - 改写了发现的RegeXp [KTS]在映射的名字,
# 解决错误地图是被设色的问题.
#==============================================================================
# ● 自动指示
#------------------------------------------------------------------------------
# 地图被选定作为野外是此的将影响的唯一的地图
# 对自动定义的脚本用途.要符号化地图是“野外”,您必须
# 以地图的名义包括[KTS].例如,您世界地图可能是
# 名为“世界地图[KTS]”或“[KTS]世界地图”.供应被做以后在
# 去除的脚本[KTS]从映射名字,当它另外读取
# 脚本时.这意味着“[KTS]”在映射名字的时候不会出现弹出式
# 窗口.
#==============================================================================
# ● 脚本函数调用
#------------------------------------------------------------------------------
# 下列是可以通过使用执行脚本命令
# “脚本…” 命令在事件。
# ● $kts.stop - 停止时间(能为cutscenes使用)
# ● $kts.go - 简历计时(不要忘记使用此!)
# ● $kts.sec(n) - 增加时间向前(n)秒
# ● $kts.min(n) - 增加时间向前(n)分
# ● $kts.hours(n) - 增加时间向前(n)时
# ● $kts.days(n) - 增加时间向前(n)天
# ● $kts.jump_to_hour(n) - 以后进步时间到指定的小时。
# 特别有用在情况
# 要某一事件发生在有些时光,
# 这个命令也许导致游戏
# 看上去冷却在几秒钟或更慢计算机。
#==============================================================================
# ● 数据库设定
#------------------------------------------------------------------------------
# 这个脚本,由defult,使用以下游戏可变量和开关:
# 数据库变量:
# [1]当前时间 [4]当前小时
# [2]其次潮流 [5]当前天
# [3]当前分钟 [6]当前天的名称
# 数据库开关:
# [1]在夜小时 (2200-0400) (10pm-4am)
# [2]在黎明小时(0500-0800) (5am-8am)
# [3]在白天小时(0900-1800) (9am-6pm)
# [4]在日落小时(1900-2100) (7pm-9pm)
#==============================================================================
#==============================================================================
# 商店变量和用户定义的设置为时间系统。
#==============================================================================
module KTS
#-----------------------------------------------------------------------
# 用户下定义的时钟设置
#-----------------------------------------------------------------------
# 设置时钟的速度乘算器。 1是真正的时间。 更高
# 价值将给您一个更加快速的时钟。 缺省是100。
SPEED = 100
#AMPM (True: 12-小时制, False: 24-小时制)
AMPM = false
# 在游戏的开始设置时间.
START_HOUR = 1
START_DAY = 1
#-----------------------------------------------------------------------
# 如果您想要习惯天名字,编辑!
#-----------------------------------------------------------------------
DAY_NAMES = ["星期天","星期一","星期二","星期三","星期四","星期五","星期六"]
#-----------------------------------------------------------------------
# 设置时期
#-----------------------------------------------------------------------
T1 = [ 0,5 ] # 夜 #集合时期为设色作用
T2 = [ 6,8 ] # 黎明 #[开头小时,结尾小时]为时期
T3 = [ 9,18] # 天 #用途24小时价值时期
T4 = [19,21] # 傍晚
T5 = [22,24] # 夜 #<-前:夜在23:00和24:00之间
#-----------------------------------------------------------------------
# 设置到游戏变量选择.
#-----------------------------------------------------------------------
# 设置输出当前时间到游戏变量。
DATABASE_OUTPUT = true
# 在时间将使用的游戏变量输出。
TIME = 1 # (时间以串格式。 Ex: "2:48 AM" or "02:48")
SECONDS = 2
MINUTES = 3
HOURS = 4
DAYS = 5
DAYNAME = 6
# 游戏交换用于在时间输出。
NIGHT = 1 #这个开关是在夜小时 (2200-0400) (10pm-4am)
DAWN = 2 #这个开关是在黎明小时 (0500-0800) (5am-8am)
DAY = 3 #这个开关是在白天小时(0900-1800) (9am-6pm)
SUNSET = 4 #这个开关是在日落小时(1900-2100) (7pm-9pm)
#-----------------------------------------------------------------------
# 设置为时间控制屏幕定色调
#-----------------------------------------------------------------------
# 真实的意志使能屏幕色调由脚本使用。
USE_TONE = true
# 设置口气的期间改变(在框架)
FADE_LENGTH = 120
# 定义了用于对应的时期被定义以上。
# 红色,绿色,蓝色,灰色
C1 = Tone.new(-187, -119, -17, 68)
C2 = Tone.new( 17, -51, -102, 0)
C3 = Tone.new( 0, 0, 0, 0)
C4 = Tone.new( -68, -136, -34, 0)
C5 = Tone.new(-187, -119, -17, 68)
# 定义反
A1 = Tone.new( 187, 119, 17, -68)
A2 = Tone.new( -17, 51, 102, 0)
A3 = Tone.new( 0, 0, 0, 0)
A4 = Tone.new( 68, 136, 34, 0)
A5 = Tone.new( 187, 119, 17, -68)
end
#==============================================================================
# 时间系统核心引擎
#==============================================================================
class Kylock_Time_System
# 设置实例变量
def initialize
$kts_map_data = load_data("Data/MapInfos.rvdata")
@event_offset = (KTS::START_HOUR * 3600) + (KTS::START_DAY * 86400)
@kts_stop = false
$kts_event_tone = false
$kts_battle_tone = true
$kts_anti_tone = Tone.new(0,0,0,0)
end
# 估计当前时间和更新变量(如果使用)
def update
if !@kts_stop
@total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
@seconds = (@total_seconds) % 60
@minutes = (@total_seconds / 60) % 60
@hours = (@total_seconds / 3600) % 24
@days = (@total_seconds / 86400)
update_tint
if KTS::DATABASE_OUTPUT
$game_variables[KTS::TIME] = getTime
end
end
end
def update_variables
$game_variables[KTS::SECONDS] = @seconds
$game_variables[KTS::MINUTES] = @minutes
$game_variables[KTS::HOURS] = @hours
$game_variables[KTS::DAYS] = @days
$game_variables[KTS::DAYNAME] = getDayName
end
def update_switches
if @period == 1 || @period == 5
$game_switches[KTS::NIGHT] = true
else
$game_switches[KTS::NIGHT] = false
end
if @period == 2
$game_switches[KTS::DAWN] = true
else
$game_switches[KTS::DAWN] = false
end
if @period == 3
$game_switches[KTS::DAY] = true
else
$game_switches[KTS::DAY] = false
end
if @period == 4
$game_switches[KTS::SUNSET] = true
else
$game_switches[KTS::SUNSET] = false
end
end
def getTime
if KTS::AMPM
# 格式化 12-小时制
if @hours > 12
hours1 = @hours - 12
if hours1 > 9
time = sprintf("%02d:%02d" + " PM", hours1, @minutes)
else
time = sprintf("%01d:%02d" + " PM", hours1, @minutes)
end
else
if @hours > 9
time = sprintf("%02d:%02d" + " AM", @hours, @minutes)
else
time = sprintf("%01d:%02d" + " AM", @hours, @minutes)
end
end
return time
else
# 格式化 24-小时制
time = sprintf("%02d:%02d", @hours, @minutes)
return time
end
end
#-----------------------------------------------------------------------
# 脚本命令函数
#-----------------------------------------------------------------------
def stop
@time_stopped = @total_seconds
@kts_stop = true
end
def go
total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
@event_offset -= (total_seconds - @time_stopped)
@kts_stop = false
end
def sec(sec = 0)
@event_offset += sec
end
def min(min = 0)
@event_offset += min * 60
end
def hours(hours = 0)
@event_offset += hours * 3600
end
def days(days = 0)
@event_offset += days * 86400
end
def jump_to_hour(jhour = 0)
while @hours != jhour
@event_offset += 1
$kts.update
end
end
#-----------------------------------------------------------------------
# 脚本支持/混杂作用
#-----------------------------------------------------------------------
def getDayName
weekday = (@days % KTS::DAY_NAMES.length)
return KTS::DAY_NAMES[weekday]
end
#-----------------------------------------------------------------------
# 屏幕作用
#-----------------------------------------------------------------------
def update_tint(duration = KTS::FADE_LENGTH)
return if $BTEST
if KTS::USE_TONE && !$kts_event_tone && $kts_map_data[$game_map.map_id].outside_tint?
if @hours >= KTS::T1[0] and @hours <= KTS::T1[1]
@period = 1
screen.start_tone_change(KTS::C1,duration)
$kts_anti_tone = KTS::A1
elsif @hours >= KTS::T2[0] and @hours <= KTS::T2[1]
@period = 2
screen.start_tone_change(KTS::C2,duration)
$kts_anti_tone = KTS::A2
elsif @hours >= KTS::T3[0] and @hours <= KTS::T3[1]
@period = 3
screen.start_tone_change(KTS::C3,duration)
$kts_anti_tone = KTS::A3
elsif @hours >= KTS::T4[0] and @hours <= KTS::T4[1]
@period = 4
screen.start_tone_change(KTS::C4,duration)
$kts_anti_tone = KTS::A4
elsif @hours >= KTS::T5[0] and @hours <= KTS::T5[1]
@period = 5
screen.start_tone_change(KTS::C5,duration)
$kts_anti_tone = KTS::A5
end
else
# 没有??如果内景
if !$kts_map_data[$game_map.map_id].outside_tint?
screen.start_tone_change(Tone.new(0,0,0,0),duration)
end
end
end
def screen
if $game_temp.in_battle
return $game_troop.screen
else
return $game_map.screen
end
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# * 对象初始化
#--------------------------------------------------------------------------
alias kts_initialize initialize
def initialize
$kts.update_switches if !@kts_stop && KTS::DATABASE_OUTPUT
$kts.update_variables if !@kts_stop && KTS::DATABASE_OUTPUT
kts_initialize
end
end
#==============================================================================
# 当一张新的地图被装载时,立即更新屏幕。
#==============================================================================
class Game_Map
alias kts_setup setup
def setup(map_id)
kts_setup(map_id)
$kts_event_tone = false
$kts.update
$kts.update_tint(0)
end
end
#==============================================================================
# 当战斗开始时,立即更新屏幕。
#==============================================================================
class Spriteset_Battle
alias kts_create_battleback create_battleback
def create_battleback
$kts.update_tint(0)
kts_create_battleback
end
end
#==============================================================================
# 如果事件设色屏幕,临时地使自动色调失去能力。
#==============================================================================
class Game_Interpreter
alias kts_Interpreter_command_223 command_223
def command_223
$kts_event_tone = true
kts_Interpreter_command_223
end
end
#==============================================================================
# 集成时间系统游戏系统。
#==============================================================================
class Game_System
# inits KTS 对象
alias kts_initialize initialize
def initialize
$kts=Kylock_Time_System.new
kts_initialize
end
# 更新KTS每个游戏框架
alias kts_update update
def update
$kts.update
kts_update
end
end
#==============================================================================
# 扫瞄映射名字对于色调
#==============================================================================
class RPG::MapInfo
def name # 定义防止地点脚本任何内
return @name.gsub(/\[.*\]/) {""} # 托架,包括托架
end
def original_name
return @name
end
def outside_tint?
return @name.scan(/\[KTS\]/).size > 0
# RegeXp : 回归@name.scan (/[\ KTS]/) .size > 0
end
end
#==============================================================================
# 设定时间窗口为菜单。
#==============================================================================
class Window_KTS < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 32)
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
end
def update
super
$kts.update
self.contents.clear
self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
end
end
#==============================================================================
# 增加时间窗口到菜单。
#==============================================================================
class Scene_Menu < Scene_Base
alias kts_start start
def start
kts_start
@kts_window = Window_KTS.new(0,305)
end
alias kts_terminate terminate
def terminate
kts_terminate
@kts_window.dispose
end
alias kts_update update
def update
kts_update
@kts_window.update
end
end
#==============================================================================
# 节省并且装载游戏时间到/从保存游戏文件。
#==============================================================================
class Scene_File
alias kts_write_save_data write_save_data
def write_save_data(file)
kts_write_save_data(file)
Marshal.dump($kts, file)
end
alias kts_read_save_data read_save_data
def read_save_data(file)
kts_read_save_data(file)
$kts = Marshal.load(file)
end
end
复制代码
[LINE]1,#dddddd[/LINE]
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者:
約束
时间:
2008-9-23 01:24
提示:
作者被禁止或删除 内容自动屏蔽
作者:
塑望
时间:
2008-9-23 01:26
以下引用
約束于2008-9-22 17:24:22
的发言:
居然有人回答。。。
因为那个签名 我想回答来着结果放弃了。。。
我也是...不是没人回答..是想回答的人都在看他签名...我看爽了就顺便帮楼主爽一下{/hx}
作者:
fuyanbin
时间:
2008-9-23 07:41
谢谢了,终于有人回答了,我试试看。
关于签名……不行啥时候我换了吧……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1