赞 | 1 |
VIP | 0 |
好人卡 | 13 |
积分 | 5 |
经验 | 33457 |
最后登录 | 2024-8-8 |
在线时间 | 1409 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 457
- 在线时间
- 1409 小时
- 注册时间
- 2010-9-23
- 帖子
- 557
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
想用时间的变量来做事件的开关,比如老奶奶卖早餐什么的。- #==============================================================================
- # ■ BMSP 暦システム[KOYOMISYSTEM] Ver1.24 2014/08/09
- #------------------------------------------------------------------------------
- # 日付,時間の概念を導入します.
- #==============================================================================
- #------------------------------------------------------------------------------
- # ■内容
- # ゲームに日付,時間の概念を導入します.
- # 自由に暦を設定して任意のタイミングで時間を進めることができます.
- # 時間に合わせて画面の色調を自動で変更することも可能です.
- #
- # 位置:特に指定はありません
- #
- # ■使用方法
- # スクリプトに丸ごと貼り付けていただければ使用できます.
- #
- # ●暦の設定
- # まずは詳細設定にて暦の設定を行って下さい.
- #
- # ○RANKS:ランクの設定を行います.
- # ランクとは秒,分,時,,などのような時間の単位を表します.
- # ランクは上から順にランク0,ランク1と呼び,
- # あるランクの値が上限を超えると一つ上のランクに繰り上げされます.
- # 各ランクは
- # ランク名 => 値の範囲
- # のように設定します.
- # 例
- # RANKS = {
- # :sec => 0...60,
- # :min => 0...60,
- # :hour => 0...24,
- # :day => 1..30,
- # :mon => 1..12,
- # :year => 1..9999
- # }
- # 上記の例ではランクの低い順に秒,分,時,日,月,年を設定しています.
- # また,それぞれ取り得る値の範囲も指定しています.
- # (一月30日で年は便宜上9999年を上限としています)
- # 例えばdayが25のときに7加算され32になると,
- # 結果としてdayは2になり,monは1加算されます.
- # このようにして基本となる暦を作成します.
- # この部分を任意に変えることで自由な暦を設定できます.
- #
- # ○ SPECIAL_EXP:ランク以外の特別な暦情報を設定します
- # 例えば曜日や季節,時間帯などを設定することができます.
- # 設定の仕方は以下のフォーマットにしたがってください.
- # SPECIAL_EXP[:%special%] = ->(cal){
- # 任意の式
- # }
- # %special%に設定する名前を指定し,対応する任意の式を記述します.
- # このときcalにより暦オブジェクトが参照できます.
- # 例・時間帯の設定
- # SPECIAL_EXP[:timezone] = ->(cal){
- # case cal.hour
- # when 4,5
- # 0 # 早朝は0を返す
- # when 6,7,8
- # 1 # 朝は1を返す
- # when 9...16
- # 2 # 昼は2を返す
- # when 16,17
- # 3 # 夕方は3を返す
- # when 18...22
- # 4 # 夜は4を返す
- # when 22...24,0...4
- # 5 # 深夜は5を返す
- # end
- # }
- #
- # ○ TRANSFORM:表示変換の設定を行います.
- # 暦を文字列として表現する際,整数以外の形式で表示したい場合に使用します.
- # また,全く新しい独自の表示形式を指定することも可能
- # 例・月の文字列表記
- # TRANSFORM[:mon] = ->(cal){
- # ["Jan", "Fab", "Mar", "Apr", "May", "Jun",
- # "Jul", "Aug", "Seq", "Oct", "Nov", "Dec"][cal.mon]
- # }
- #
- # ○ INITIAL_CAL:ゲーム開始時の暦を設定します.
- # 設定したいランクと対応する値を指定します.
- # 指定されなかったランクの初期値は値の範囲のうち最小のものになります.
- # 例
- # INITIAL_CAL = {
- # :day => 15,
- # :mon => 12,
- # :year => 2011
- # }
- # この例では2011年12月15日0時0分0秒が初期値となります.
- #
- # ○ MAP_WINDOW:マップで暦ウインドウを表示するかを設定します.
- # この設定はゲーム中以下のスクリプトにて切り替え可能です.
- # $game_map.koyomi_display = true/false
- #
- # ○ MAP_WINDOW_FADE:マップでの暦ウインドウをフェードするか設定します.
- # trueのとき一定時間表示したあとフェードアウトします.
- # falseのとき暦ウインドウを常に表示します.
- #
- # ○ HIDE_MAP_WINDOW:マップで暦ウインドウを常に表示するとき,
- # ウインドウを一時的に消去できるか設定します.
- # この設定はゲーム中以下のスクリプトによって切り替え可能です.
- # $game_koyomi.hide_map_window = true/false
- # ○ HIDE_KEY:マップで暦ウインドウを一時的に消去するボタンです.
- # もう一度押すと再び表示します.
- # また,次のスクリプトをマップ上で実行するとイベント側から暦ウインドウの
- # 一時消去および再表示を行うことができます.
- # $game_map.hide_koyomi_window = true/false
- #
- # ○ MAP_WINDOW_FORMAT:マップでの暦ウインドウの表示内容を設定します.
- # 配列でフォーマットを指定します.一つの要素につき一行となります.
- # フォーマットについては後述のメソッドstrftimeを参照してください.
- #
- # ○ MENU_WINDOW:メニューで暦ウインドウを表示するかを設定します.
- #
- # ○ MENU_WINDOW_FORAMT:メニューでの暦ウインドウの表示内容を設定します.
- # 設定の仕方はMAP_WINDOW_FORMATと同様です.
- #
- # ○ AUTO_TONE:暦による画面の色調の自動変更を設定します.
- # trueの時時間によって画面の色調が自動で変更されます.
- # また,イベントコマンドによる画面の色調変更は機能しなくなります.
- # ただし,後述する色調固定マップでは機能します.
- # この設定はゲーム中以下のスクリプトにて切り替え可能です.
- # $game_koyomi.auto_tone = true/false
- #
- # ○ AUTO_TONE_DURATION:デフォルトの色調変更時間の設定です.
- # 色調変更の条件で色調変更時間が指定されない場合はこの値が適用されます.
- #
- # ○ AUTO_TONE_COND:色調変更の条件を設定します.
- # 色調を変更する条件となる時間とそれに対応する色調(Tone)を指定します.
- # 上にある条件ほど優先的にマッチします.
- # 条件の指定方法は条件に設定したいrankをキーにして対応する値を直接指定するか
- # 値の範囲で指定します.22..4(22...24かつ0..4)のような指定も可能です.
- # 範囲に関しては(0...3)の場合0から2まで,0...3の場合0から3までを表します.
- # また,対応する色調は以下で指定します.
- # Tone.new(赤(-255~255),緑(-255~255),青(-255~255),グレー(0~255))
- # 例・時間帯によって色調を変える
- # AUTO_TONE_COND = {
- # {:hour => 16...18} => Tone.new(68,-34,-34,0),
- # {:hour => 18...22} => Tone.new(-34,-34,0,34),
- # {:hour => 22...4} => Tone.new(-68,-68,0,68),
- # {:hour => 4...6} => Tone.new(-34,-34,-34,34),
- # {:hour => 6...9} => Tone.new(34,34,34,34)
- # }
- #
- # ○ FIX_TONE_ON_BATTLE:バトル画面では画面の色調を変更しない設定にできます.
- # trueの場合マップで色調が自動変更されている場合でも画面の色調はデフォルト(0,0,0,0)になります.
- # また,色調固定マップの場合でもデフォルトの色調になります.
- #
- # ○ AUTO_TIME_PASS:時間が自動経過するかを設定します.
- # この設定はゲーム中以下のスクリプトによって切り替え可能です.
- # $game_koyomi.auto_time_pass = true/false
- #
- # ○ AUTO_TIME_PASS_DURATION:時間の自動経過間隔を設定します.
- # 指定したフレームが経過するごとにTIME_PASSINGで指定した分の時間が経過します.
- #
- # ○ TIME_PASSING:時間の自動経過量を設定します.
- # 加算したいランクと対応する加算量を指定してください.
- # 例・1分30秒ずつ加算する
- # TIME_PASSING = {:min => 1, :sec => 30}
- #
- # ○ STOP_ON_EVENT:イベント中は時間の自動経過を停止するか設定します.
- # この設定はゲーム中以下のスクリプトによって切り替え可能です.
- # $game_koyomi.stop_auto_time_pass_on_event = true/false
- #
- # ○ STOP_ON_BATTLE:バトル中は時間の自動経過を停止するか設定します.
- # この設定はゲーム中以下のスクリプトによって切り替え可能です.
- # $game_koyomi.stop_auto_time_pass_on_battle = true/false
- #
- # ○ MOVE_TIME_PASS:場所移動による時間経過を設定します.
- # 「場所移動」が行われる度に時間を経過させることができます.
- # 加算したいランクと対応する加算量を指定してください.
- # 場所移動により加算したくない場合は空のハッシュを指定してください.
- #
- # ○ BATTLE_START_TIME_PASS:戦闘開始による時間経過を設定します.
- # 戦闘開始時に時間を経過させることができます.
- # 加算したいランクと対応する加算量を指定してください.
- # 加算したくない場合は空のハッシュを指定してください.
- #
- # ○ BATTLE_END_TIME_PASS:戦闘終了による時間経過を設定します.
- # 戦闘終了時に時間を経過させることができます.
- # 加算したいランクと対応する加算量を指定してください.
- # 加算したくない場合は空のハッシュを指定してください.
- #
- # ●暦の操作
- # ゲーム中は基本的にスクリプトコマンドから$game_koyomiにアクセスすることで暦を操作できます.
- # 以下は$game_koyomiからできる主な操作一覧です.
- # ○ $game_koyomi.auto_tone = true/false
- # 時間による画面色調の自動変更をするかどうか設定できます.
- #
- # ○ $game_koyomi.tone_temp_duration = int
- # これを設定した次の画面色調自動変更時のみ指定した時間で色調が変化します.
- # イベント等で時間を進めた際早く色調を切り替えたいときなどに利用します.
- #
- # ○ $game_koyomi.move_temp_time_pass = {:rank => value, ...}
- # これを指定した次の場所移動時のみ指定した分だけ時間が経過します.
- #
- # ○ $game_koyomi.battle_start_temp_time_pass = {:rank => value, ...}
- # これを指定した次の戦闘開始時のみ指定した分だけ時間が経過します.
- #
- # ○ $game_koyomi.battle_end_temp_time_pass = {:rank => value, ...}
- # これを指定した次の戦闘終了時時のみ指定した分だけ時間が経過します.
- #
- # ○ $game_koyomi.auto_time_pass = true/false
- # 自動で時間を経過させるか設定できます.
- #
- # ○ $game_koyomi.stop_auto_time_pass_on_event = true/false
- # 自動で時間が経過するとき,イベント中は時間経過を停止するか設定できます.
- #
- # ○ $game_koyomi.stop_auto_time_pass_on_battlet = true/false
- # 自動で時間が経過するとき,バトル中は時間経過を停止するか設定できます.
- #
- # ○ $game_koyomi.rank
- # 設定した各ランクの値を取得できます.
- # 例・現在の月を取得
- # $game_koyomi.mon
- #
- # ○ $game_koyomi.rank = value
- # 設定した各ランクの値を変更できます.
- # 例・現在の月を3に設定
- # $game_koyomi.mon = 3
- # 例・3時間進める
- # $game_koyomi.hour += 3
- #
- # ○ $game_koyomi.special
- # 設定した各特殊表現の値を取得できます.
- # 例・現在の時間帯を取得
- # $game_koyomi.timezone
- #
- # ○ $game_koyomi.set(init)
- # 暦をセットします.
- # initは各ランクと対応する値のハッシュか,後述する起算時からのランク0からみた経過時間
- # を指定します.
- # 例・ハッシュで暦をセット
- # $game_koyomi.set(year: 2011, mon: 12. day: 15)
- # 例・ある暦から得た起算時からの経過時間で暦をセット
- # $game_koyomi.set(koyomi.to_i)
- #
- # ○ $game_koyomi.time_pass(amount)
- # amountに各ランクと対応する値のハッシュを指定して,その分だけ時間を経過させます.
- # 例・1月と3時間だけ時間をすすめる
- # $game_koyomi.time_pass(mon: 1, hour: 3)
- #
- # ○ $game_koyomi.to_i
- # 起算時からのランク0からみた経過時間を取得します.
- # この結果を変数などに保存することで容易に暦を復元できます.
- # 例・暦を整数にして保存・復元する
- # koyomi = $game_koyomi.to_i
- # $game_koyomi.set(koyomi)
- #
- # ○ $game_koyomi.strftime(format)
- # formatに変換文字列を指定して現在の暦を文字列にします.
- # format中には以下の二つの特別な文字列を記述することで暦の値を置き換えることができます.
- # <<表示桁#rank>>
- # 表示桁は先頭に - または 0 を付けた数字と置き換えます.
- # rankは設定したランクのいずれかと置き換えます.
- # ランクの値が指定した数字の桁分の幅の文字列と置換されます.
- # 先頭に 0 をつけると余った桁0で埋められます.
- # 先頭に - をつけると右寄せとなります.
- # <<label>>
- # labelはTRANSFORMで指定した変換ラベルと置き換えます.
- # TRANSFORMで設定した内容に従って文字列に置換されます.
- # 例・2011年12月15日4時00分00秒の暦のとき
- # $game_koyomi.strftime("<<4#year>>-<<4#mon>>-<<04#day>>")
- # #=> 2011- 12-0015
- # $game_koyomi.strftime("<<mon>>-<<-4#day>>:<<timezone>>")
- # #=> Dec-15 :早朝
- #
- # ●マップの個別設定
- # マップのメモ欄に以下を記述することでマップごとに設定を行うことができます.
- # ==暦非表示==
- # マップで暦ウインドウを表示する場合でもこの記述があるマップは暦ウインドウを表示しません.
- #
- # ==暦停止==
- # 自動で時間が経過する場合でもこの記述があるマップは自動で時間が経過しません.
- #
- # ==色調固定[r,g,b,gray]==
- # 自動で画面色調が変更される場合でもこの記述があるマップは指定した色調になります.
- # 屋内マップなどで利用します.薄暗い洞窟等も表現可能です.
- # r,g,b,grayはそれぞれ色調(トーン)を指定する値です.
- # 例・時間にかかわらず薄暗い洞窟
- # ==色調固定[-34,-34,-34,34]==
- #
- # ■注意
- # このスクリプトでは
- # 「RPG::Map」「Game_Map」「Scene_Menu」「Scene_Map」
- # 「Game_Screen」「Game_Troop」「Scene_Battle」
- # のメソッドを改変しています.
- # ■情報
- # このスクリプトはgentlawkによって作られたものです.
- # 利用規約はhttp://blueredzone.comをご覧ください.
- #------------------------------------------------------------------------------
- module BMSP
- @@includes ||= {}
- @@includes[:KoyomiSystem] = 1.24
- module KoyomiSystem
- #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
- #詳細設定
- # ランクの設定
- RANKS = {
- :sec => 0...60,
- :min => 0...60,
- :hour => 0...24,
- :day => 1..30,
- :mon => 1..12,
- :year => 1..9999
- }
- #------------------------------------------------------------
- # ランク以外の暦情報の設定
- SPECIAL_EXP = {}
- SPECIAL_EXP[:timezone] = ->(cal){
- case cal.hour
- when 4,5
- 0 # 早朝は0を返す
- when 6,7,8
- 1 # 朝は1を返す
- when 9...16
- 2 # 昼は2を返す
- when 16,17
- 3 # 夕方は3を返す
- when 18...22
- 4 # 夜は4を返す
- when 22...24,0...4
- 5 # 深夜は5を返す
- end
- }
- #------------------------------------------------------------
- # 表示変換の設定
- TRANSFORM = {}
- TRANSFORM[:mon] = ->(cal){
- ["Jan", "Fab", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Seq", "Oct", "Nov", "Dec"][cal.mon]
- }
- TRANSFORM[:timezone] = ->(cal){
- case cal.timezone # 上で設定した時間帯で条件分岐
- when 0
- "早朝"
- when 1
- "朝"
- when 2
- "昼"
- when 3
- "夕方"
- when 4
- "夜"
- when 5
- "深夜"
- end
- }
- #------------------------------------------------------------
- # ゲーム開始時の暦
- INITIAL_CAL = {
- :sec => 0,
- :min => 0,
- :hour => 0,
- :day => 15,
- :mon => 12,
- :year => 2011
- }
- #------------------------------------------------------------
- # マップで暦ウインドウを表示するか
- MAP_WINDOW = true
- # マップでの暦ウインドウをフェードするか(falseで常に表示)
- MAP_WINDOW_FADE = false
- # マップでの暦ウインドウの一時消去を許可するか(trueで許可)
- HIDE_MAP_WINDOW = true
- # マップでの暦ウインドウの一時消去ボタン
- # (:DOWN,:UP,:LEFT,:RIGHT,:A,:B,:C,:X,:Y,:Z,:L,:R,:SHIFT,:CTRL,:ALT)
- HIDE_KEY = :L
- # マップでの暦ウインドウの表示内容
- MAP_WINDOW_FORMAT = [
- "<<4#year>>年<<2#mon>>月<<2#day>>日",
- "<<02#hour>>:<<02#min>>:<<02#sec>> [<<timezone>>]"
- ]
- # メニューで暦ウインドウを表示するか
- MENU_WINDOW = true
- # メニューでの暦ウインドウの表示内容
- MENU_WINDOW_FORMAT = [
- "<<4#year>>-<<2#mon>>-<<2#day>>",
- "<<02#hour>>:<<02#min>>:<<02#sec>>"
- ]
- #------------------------------------------------------------
- # 暦による画面の色調の自動変更
- AUTO_TONE = true
- # デフォルト色調変更時間
- AUTO_TONE_DURATION = 120
- # 色調変更の条件
- AUTO_TONE_COND = {
- {:hour => 16...18} => Tone.new(68,-34,-34,0),
- {:hour => 18...22} => Tone.new(-34,-34,0,34),
- {:hour => 22...4} => Tone.new(-68,-68,0,68),
- {:hour => 4...6} => Tone.new(-34,-34,-34,34),
- {:hour => 6...9} => Tone.new(34,34,34,34)
- }
- # バトル画面では色調を変更しない
- FIX_TONE_ON_BATTLE = false
- #------------------------------------------------------------
- # 時間が自動経過するか
- AUTO_TIME_PASS = true
- # 時間の自動経過間隔
- AUTO_TIME_PASS_DURATION = 30
- # 時間の自動経過量
- TIME_PASSING = {:min => 10}
- # イベント中は自動経過を停止するか
- STOP_ON_EVENT = true
- # バトル中は自動経過を停止するか
- STOP_ON_BATTLE = false
- #------------------------------------------------------------
- # 場所移動による時間経過
- MOVE_TIME_PASS = {:min => 5}
- # 戦闘開始による時間経過
- BATTLE_START_TIME_PASS = {}
- # 戦闘終了による時間経過
- BATTLE_END_TIME_PASS = {}
- #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
- end
- #--------------------------------------------------------------------------
- # ● 導入スクリプトのチェック
- #--------------------------------------------------------------------------
- class << self
- if method_defined?(:check_script)
- alias koyomisystem_check_script check_script
- end
- end
- def self.check_script(script, version)
- if methods.include?(:koyomisystem_check_script)
- koyomisystem_check_script(script, version)
- end
- @@includes[script] && @@includes[script] >= version
- end
- end
- #==============================================================================
- # ■ RPG::Map
- #==============================================================================
- class RPG::Map
- #--------------------------------------------------------------------------
- # ● 暦ウインドウ表示のマップか
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_display_koyomi_on_map?
- return @bmsp_koyomi_display if @bmsp_koyomi_display
- @bmsp_koyomi_display = !self.note.include?('==暦非表示==')
- end
- #--------------------------------------------------------------------------
- # ● 色調固定
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_fix_tone
- return @bmsp_fix_tone unless @bmsp_fix_tone.nil?
- if self.note =~ /==色調固定\[([+-]?\d+),([+-]?\d+),([+-]?\d+),([+-]?\d+)\]==/
- r,g,b,gray = $1.to_i,$2.to_i,$3.to_i,$4.to_i
- @bmsp_fix_tone = Tone.new(r,g,b,gray)
- else
- @bmsp_fix_tone = false
- end
- end
- #--------------------------------------------------------------------------
- # ● 暦停止のマップか
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_koyomi_stop?
- return @bmsp_koyomi_stop if @bmsp_koyomi_stop
- @bmsp_koyomi_stop = self.note.include?('==暦停止==')
- end
- end
- #==============================================================================
- # ■ Game_Koyomi
- #==============================================================================
- class Game_Koyomi
- #============================================================================
- # ■ Ranks
- #============================================================================
- module Ranks
- #--------------------------------------------------------------------------
- # ● モジュール変数
- #--------------------------------------------------------------------------
- @@ranks = BMSP::KoyomiSystem::RANKS
- @@transform = BMSP::KoyomiSystem::TRANSFORM
- #--------------------------------------------------------------------------
- # ● ランクの取得
- #--------------------------------------------------------------------------
- def self.ranks
- @@ranks
- end
- #--------------------------------------------------------------------------
- # ● 表示変換
- #--------------------------------------------------------------------------
- def self.transform(label)
- @@transform[label]
- end
- #--------------------------------------------------------------------------
- # ● ランクの取得(順位指定)
- #--------------------------------------------------------------------------
- def self.rank(i)
- r = @@ranks.to_a[i]
- return nil if r.nil?
- r.first
- end
- #--------------------------------------------------------------------------
- # ● ノーマライズ
- #--------------------------------------------------------------------------
- def self.normalize(i, rank)
- i - @@ranks[rank].min
- end
- #--------------------------------------------------------------------------
- # ● 指定した範囲の値か
- #--------------------------------------------------------------------------
- def self.include_range?(rank, range, value)
- rank_min = @@ranks[rank].min
- rank_max = @@ranks[rank].max
- range_min = range.min
- range_max = range.max
- unless range_min.nil? || range_max.nil? # 有効なRange
- min = [[range_min, rank_min].max, rank_max].min
- max = [[range_max, rank_min].max, rank_max].min
- (min..max).include?(value)
- else # 無効なRange
- first = range.first
- last = range.last
- nf = [[first, rank_min].max, rank_max].min
- nl = [[last, rank_min].max, rank_max].min
- range1 = (nf..rank_max)
- range2 = nl <= last && range.exclude_end? ? (rank_min...nl) : (rank_min..nl)
- range1.include?(value) || range2.include?(value)
- end
- end
- #--------------------------------------------------------------------------
- # ● ランクを一つ進める
- #--------------------------------------------------------------------------
- def self.succ(rank)
- find = false
- @@ranks.each do |r,|
- return r if find
- find = true if r == rank
- end
- return nil
- end
- end
- #============================================================================
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :auto_tone # 画面の色調自動変更フラグ
- attr_accessor :tone_temp_duration # 画面の色調時間一時変更フラグ
- attr_accessor :move_temp_time_pass # 場所移動による時間経過一時変更フラグ
- attr_accessor :battle_start_temp_time_pass # 戦闘開始による時間経過一時変更フラグ
- attr_accessor :battle_end_temp_time_pass # 戦闘終了による時間経過一時変更フラグ
- attr_accessor :auto_time_pass # 時間自動経過フラグ
- attr_accessor :stop_auto_time_pass_on_event # イベント中時間自動経過停止フラグ
- attr_accessor :stop_auto_time_pass_on_battle # バトル中時間自動経過停止フラグ
- attr_reader :fix_tone_on_battle # バトル画面色調固定フラグ
- attr_accessor :hide_map_window # 暦ウインドウ一時消去許可フラグ
- #--------------------------------------------------------------------------
- # ● ランクアクセサの定義
- #--------------------------------------------------------------------------
- Ranks.ranks.each_key do |rank|
- reader = rank
- writer = :"#{rank}="
- define_method(reader){ @calendar[rank] }
- define_method(writer){ |value| @calendar[rank] = value; fit; value }
- end
- #--------------------------------------------------------------------------
- # ● 特別表現リーダーの定義
- #--------------------------------------------------------------------------
- BMSP::KoyomiSystem::SPECIAL_EXP.each do |special, exp|
- define_method(special){ exp.call(self) }
- end
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(init= {})
- # 各種設定の初期化
- @auto_tone = BMSP::KoyomiSystem::AUTO_TONE
- @tone_temp_duration = 0
- @default_tone = Tone.new(0,0,0,0)
- @auto_time_pass = BMSP::KoyomiSystem::AUTO_TIME_PASS
- @auto_time_pass_amount = {
- :duration => BMSP::KoyomiSystem::AUTO_TIME_PASS_DURATION,
- :amount => BMSP::KoyomiSystem::TIME_PASSING
- }
- @move_time_pass = BMSP::KoyomiSystem::MOVE_TIME_PASS
- @battle_start_time_pass = BMSP::KoyomiSystem::BATTLE_START_TIME_PASS
- @battle_end_time_pass = BMSP::KoyomiSystem::BATTLE_END_TIME_PASS
- @stop_auto_time_pass_on_event = BMSP::KoyomiSystem::STOP_ON_EVENT
- @stop_auto_time_pass_on_battle = BMSP::KoyomiSystem::STOP_ON_BATTLE
- @fix_tone_on_battle = BMSP::KoyomiSystem::FIX_TONE_ON_BATTLE
- @hide_map_window = BMSP::KoyomiSystem::HIDE_MAP_WINDOW
- # 暦の初期化
- set(init)
- end
- #--------------------------------------------------------------------------
- # ● 範囲外の暦を修正
- #--------------------------------------------------------------------------
- def fit
- carry = 0
- @calendar.each_key do |rank|
- @calendar[rank] += carry
- value = @calendar[rank]
- if Ranks.ranks[rank].include?(value)
- carry = 0
- else
- n_value = Ranks.normalize(value, rank)
- card = Ranks.ranks[rank].count
- carry = n_value / card
- @calendar[rank] = n_value % card + Ranks.ranks[rank].min
- end
- end
- @int = calc_to_i
- end
- #--------------------------------------------------------------------------
- # ● 暦のセット
- #--------------------------------------------------------------------------
- def set(init)
- @calendar = {}
- ini_h = init.is_a?(Hash) ? init : {}
- Ranks.ranks.each_key do |rank|
- @calendar[rank] =
- ini_h[rank] ? ini_h[rank] : Ranks.ranks[rank].min
- end
- @calendar[Ranks.rank(0)] += init if init.is_a?(Integer)
- fit
- end
- #--------------------------------------------------------------------------
- # ● 時間自動経過の設定
- #--------------------------------------------------------------------------
- def set_auto_time_pass(passing)
- @auto_time_pass_amount[:duration] = passing[:duration] if passing[:duration]
- @auto_time_pass_amount[:amount] = passing[:amount] if passing[:amount]
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update(screen)
- update_auto_time_pass
- update_auto_tone(screen)
- end
- #--------------------------------------------------------------------------
- # ● 時間経過
- #--------------------------------------------------------------------------
- def time_pass(amount)
- amount.each do |rank, value|
- next unless @calendar[rank]
- @calendar[rank] += value
- end
- fit
- end
- #--------------------------------------------------------------------------
- # ● イベント中判定
- #--------------------------------------------------------------------------
- def check_event_running?
- if $game_party.in_battle
- $game_troop.interpreter.running?
- elsif !$BTEST
- $game_map.interpreter.running?
- end
- end
- #--------------------------------------------------------------------------
- # ● 時間自動経過
- #--------------------------------------------------------------------------
- def update_auto_time_pass
- return unless @auto_time_pass
- return if @stop_auto_time_pass_on_event && check_event_running?
- return if @stop_auto_time_pass_on_battle && $game_party.in_battle
- return if !$BTEST && $game_map.map.bmsp_koyomisystem_koyomi_stop?
- if @auto_time_pass_amount[:duration] > 0
- return if Graphics.frame_count % @auto_time_pass_amount[:duration] != 0
- time_pass(@auto_time_pass_amount[:amount])
- end
- end
- #--------------------------------------------------------------------------
- # ● 場所移動による時間経過
- #--------------------------------------------------------------------------
- def move_time_pass
- unless @move_temp_time_pass
- time_pass(@move_time_pass)
- else
- time_pass(@move_temp_time_pass)
- @move_temp_time_pass = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 戦闘開始による時間経過
- #--------------------------------------------------------------------------
- def battle_start_time_pass
- unless @battle_start_temp_time_pass
- time_pass(@battle_start_time_pass)
- else
- time_pass(@battler_start_temp_time_pass)
- @battle_start_temp_time_pass = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 戦闘終了による時間経過
- #--------------------------------------------------------------------------
- def battle_end_time_pass
- unless @battle_end_temp_time_pass
- time_pass(@battle_end_time_pass)
- else
- time_pass(@battler_end_temp_time_pass)
- @battle_end_temp_time_pass = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 画面の色調自動変更
- #--------------------------------------------------------------------------
- def update_auto_tone(screen)
- return if !@auto_tone || (!$BTEST && $game_map.map.bmsp_koyomisystem_fix_tone)
- return if $game_party.in_battle && @fix_tone_on_battle
- target_tone,duration = get_match_tone
- return if target_tone.nil? || screen.tone_target == target_tone
- # 変更時間の設定
- duration = BMSP::KoyomiSystem::AUTO_TONE_DURATION if duration.nil?
- duration = @tone_temp_duration ? @tone_temp_duration : duration
- @tone_temp_duration = nil
- # 色調変更
- screen.start_tone_change(target_tone, duration)
- end
- #--------------------------------------------------------------------------
- # ● 条件にマッチする色調の取得
- #--------------------------------------------------------------------------
- def get_match_tone
- BMSP::KoyomiSystem::AUTO_TONE_COND.each do |cond, (tone,duration)|
- next unless cond.each { |rank, range|
- case range
- when Range
- break unless Ranks.include_range?(rank, range, @calendar[rank])
- else # それ以外(整数指定)
- break if @calendar[rank] != range
- end
- }
- return tone,duration
- end
- @default_tone
- end
- #--------------------------------------------------------------------------
- # ● 暦を一つ進める
- #--------------------------------------------------------------------------
- def succ
- rank0 = Ranks.rank(0)
- @calendar[rank0] += 1
- fit
- end
- #--------------------------------------------------------------------------
- # ● 文字列フォーマット
- #--------------------------------------------------------------------------
- def strftime(format)
- format = format.dup
- Ranks.ranks.each_key do |rank|
- pattern = /<<(-?)(0?)(\d)#(#{rank.to_s})>>/
- format.gsub!(pattern){
- left,zero,digit,r = $1,$2,$3,$4
- sprintf("%#{left + zero + digit}d", @calendar[rank])
- }
- end
- format.gsub!(/<<(.+?)>>/){
- trans = Ranks.transform($1.to_sym)
- trans.nil? ? "###" : trans.call(self)
- }
- format
- end
- #--------------------------------------------------------------------------
- # ● オブジェクト複製
- #--------------------------------------------------------------------------
- def dup
- Marshal.load(Marshal.dump self)
- end
- #--------------------------------------------------------------------------
- # ● 起算時からのランク0からみた経過時間の計算
- #--------------------------------------------------------------------------
- def calc_to_i
- @int = @calendar.each.reverse_each.inject(0) { |sum, (rank, value)|
- sum * Ranks.ranks[rank].count + Ranks.normalize(value, rank)
- }
- end
- #--------------------------------------------------------------------------
- # ● 起算時からのランク0からみた経過時間の取得
- #--------------------------------------------------------------------------
- def to_i
- @int
- end
- #--------------------------------------------------------------------------
- # ● 比較演算子
- #--------------------------------------------------------------------------
- def ==(koyomi)
- self.to_i == koyomi.to_i
- end
- def !=(koyomi)
- self.to_i != koyomi.to_i
- end
- def <(koyomi)
- self.to_i < koyomi.to_i
- end
- def <=(koyomi)
- self.to_i <= koyomi.to_i
- end
- def >(koyomi)
- self.to_i > koyomi.to_i
- end
- def >=(koyomi)
- self.to_i >= koyomi.to_i
- end
- def <=>(koyomi)
- self.to_i <=> koyomi.to_i
- end
- end
- #==============================================================================
- # ■ DataManager
- #==============================================================================
- module DataManager
- #--------------------------------------------------------------------------
- # ● 各種ゲームオブジェクトの作成
- #--------------------------------------------------------------------------
- instance_eval{ alias bmsp_koyomisystem_create_game_objects create_game_objects }
- def self.create_game_objects
- bmsp_koyomisystem_create_game_objects
- $game_koyomi = Game_Koyomi.new(BMSP::KoyomiSystem::INITIAL_CAL)
- end
- #--------------------------------------------------------------------------
- # ● セーブ内容の作成
- #--------------------------------------------------------------------------
- instance_eval{ alias bmsp_koyomisystem_make_save_contents make_save_contents }
- def self.make_save_contents
- contents = bmsp_koyomisystem_make_save_contents
- contents[:koyomi] = $game_koyomi
- contents
- end
- #--------------------------------------------------------------------------
- # ● セーブ内容の展開
- #--------------------------------------------------------------------------
- instance_eval{ alias bmsp_koyomisystem_extract_save_contents extract_save_contents }
- def self.extract_save_contents(contents)
- bmsp_koyomisystem_extract_save_contents(contents)
- $game_koyomi = contents[:koyomi]
- end
- end
- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :map # 現在のマップデータ
- attr_accessor :koyomi_display # 暦表示フラグ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias bmsp_koyomisytem_initialize initialize
- def initialize
- bmsp_koyomisytem_initialize
- @koyomi_display = BMSP::KoyomiSystem::MAP_WINDOW
- end
- #--------------------------------------------------------------------------
- # ● セットアップ
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_setup setup
- def setup(map_id)
- bmsp_koyomisystem_setup(map_id)
- # 色調固定処理
- bmsp_koyomisystem_change_fix_tone
- end
- #--------------------------------------------------------------------------
- # ● 色調固定マップの処理
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_change_fix_tone
- tone = self.map.bmsp_koyomisystem_fix_tone
- if tone # 色調固定
- self.screen.start_tone_change(tone, 0)
- else # それ以外
- if $game_koyomi.auto_tone
- tone,duration = $game_koyomi.get_match_tone
- self.screen.start_tone_change(tone, 0)
- else
- self.screen.start_tone_change(Tone.new(0,0,0,0), 0)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 暦ウィンドウの一時消去
- #--------------------------------------------------------------------------
- def hide_koyomi_window=(hidden)
- return unless SceneManager.scene_is?(Scene_Map)
-
- koyomi_window = SceneManager.scene.instance_eval{@bmsp_koyomi_window}
- if $game_map.koyomi_display && !BMSP::KoyomiSystem::MAP_WINDOW_FADE
- if $game_koyomi.hide_map_window
- koyomi_window.hide_window if koyomi_window.hidden != hidden
- end
- end
- end
- end
- #==============================================================================
- # ■ Scene_Menu
- #==============================================================================
- class Scene_Menu < Scene_MenuBase
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_start start
- def start
- bmsp_koyomisystem_start
- bmsp_koyomisystem_create_koyomi_window if BMSP::KoyomiSystem::MENU_WINDOW
- end
- #--------------------------------------------------------------------------
- # ● 暦ウィンドウの作成
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_create_koyomi_window
- @bmsp_koyomi_window = BMSP::KoyomiSystem::Window_MenuKoyomi.new
- @bmsp_koyomi_window.x = 0
- @bmsp_koyomi_window.y = Graphics.height - @gold_window.height - @bmsp_koyomi_window.height
- if BMSP.check_script(:EXPDistribution, 1.00) && BMSP::EXPDistribution::EXP_WINDOW
- @bmsp_koyomi_window.y -= @bmsp_koyomi_window.fitting_height(1)
- end
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # ● 全ウィンドウの作成
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_create_all_windows create_all_windows
- def create_all_windows
- bmsp_koyomisystem_create_all_windows
- bmsp_koyomisystem_create_koyomi_window
- end
- #--------------------------------------------------------------------------
- # ● 暦ウィンドウの作成
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_create_koyomi_window
- @bmsp_koyomi_window = BMSP::KoyomiSystem::Window_MapKoyomi.new
- end
- #--------------------------------------------------------------------------
- # ● 場所移動前の処理
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_pre_transfer pre_transfer
- def pre_transfer
- @bmsp_koyomi_window.close
- bmsp_koyomisystem_pre_transfer
- bmsp_koyomisystem_move_time_pass
- end
- #--------------------------------------------------------------------------
- # ● 場所移動後の処理
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_post_transfer post_transfer
- def post_transfer
- @bmsp_koyomi_window.open unless BMSP::KoyomiSystem::MAP_WINDOW_FADE
- bmsp_koyomisystem_post_transfer
- @bmsp_koyomi_window.open if BMSP::KoyomiSystem::MAP_WINDOW_FADE
- end
- #--------------------------------------------------------------------------
- # ● 場所移動による時間経過
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_move_time_pass
- $game_koyomi.move_time_pass
- end
- end
- #==============================================================================
- # ■ BMSP::KoyomiSystem::Window_MenuKoyomi
- #==============================================================================
- class BMSP::KoyomiSystem::Window_MenuKoyomi < Window_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- line_number = BMSP::KoyomiSystem::MENU_WINDOW_FORMAT.size
- super(0, 0, window_width, fitting_height(line_number))
- @time = $game_koyomi.to_i
- @formats = BMSP::KoyomiSystem::MENU_WINDOW_FORMAT
- refresh
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウ幅の取得
- #--------------------------------------------------------------------------
- def window_width
- return 160
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- refresh if redraw?
- end
- #--------------------------------------------------------------------------
- # ● 再描画するか
- #--------------------------------------------------------------------------
- def redraw?
- if $game_koyomi.to_i != @time
- @time = $game_koyomi.to_i
- return true
- end
- false
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- draw_background(contents.rect)
- rect = contents.rect
- rect.height = line_height
- rect.y = 0
- @formats.each do |format|
- draw_text(rect, $game_koyomi.strftime(format), 1)
- rect.y += line_height
- end
- end
- #--------------------------------------------------------------------------
- # ● 背景の描画
- #--------------------------------------------------------------------------
- def draw_background(rect)
- end
- end
- #==============================================================================
- # ■ BMSP::KoyomiSystem::Window_MapKoyomi
- #==============================================================================
- class BMSP::KoyomiSystem::Window_MapKoyomi < BMSP::KoyomiSystem::Window_MenuKoyomi
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :hidden
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super
- line_number = BMSP::KoyomiSystem::MAP_WINDOW_FORMAT.size
- x= Graphics.width - window_width
- move(x, 0, window_width, fitting_height(line_number))
- self.opacity = 0
- if BMSP::KoyomiSystem::MAP_WINDOW_FADE || !$game_map.koyomi_display
- self.contents_opacity = 0
- end
- @show_count = BMSP::KoyomiSystem::MAP_WINDOW_FADE ? 0 : 1
- @time = $game_koyomi.to_i
- @formats = BMSP::KoyomiSystem::MAP_WINDOW_FORMAT
- @hidden = false
- open
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウ幅の取得
- #--------------------------------------------------------------------------
- def window_width
- return 320
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @show_count > 0 && BMSP::KoyomiSystem::MAP_WINDOW_FADE
- if $game_map.koyomi_display || self.contents_opacity != 0
- update_fadein
- @show_count -= 1
- end
- elsif @show_count == 0
- update_fadeout
- elsif $game_map.koyomi_display && !BMSP::KoyomiSystem::MAP_WINDOW_FADE
- if $game_koyomi.hide_map_window
- hide_window if Input.trigger?(BMSP::KoyomiSystem::HIDE_KEY)
- else # 一時消去中にウインドウの消去が禁止になった場合は表示する
- hide_window if @hidden
- end
- if @show_count > 1
- @hidden ? update_fadeout : update_fadein
- @show_count -= 1
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● フェードインの更新
- #--------------------------------------------------------------------------
- def update_fadein
- self.contents_opacity += 16
- end
- #--------------------------------------------------------------------------
- # ● フェードアウトの更新
- #--------------------------------------------------------------------------
- def update_fadeout
- self.contents_opacity -= 16
- end
- #--------------------------------------------------------------------------
- # ● ウインドウの一時消去切り替え
- #--------------------------------------------------------------------------
- def hide_window
- @hidden = !@hidden
- @show_count = 17
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウを開く
- #--------------------------------------------------------------------------
- def open
- refresh
- if $game_map.map.bmsp_koyomisystem_display_koyomi_on_map?
- if !$game_map.koyomi_display
- @show_count = 0
- self.contents_opacity = 0
- elsif BMSP::KoyomiSystem::MAP_WINDOW_FADE
- @show_count = 150
- self.contents_opacity = 0
- else
- if @hidden # 一時消去中
- @show_count = 1
- self.contents_opacity = 0
- else
- @show_count = 1
- self.contents_opacity = 255
- end
- end
- else
- @show_count = 0
- self.contents_opacity = 0
- end
- self
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウを閉じる
- #--------------------------------------------------------------------------
- def close
- @show_count = 0 if BMSP::KoyomiSystem::MAP_WINDOW_FADE
- self
- end
- #--------------------------------------------------------------------------
- # ● 背景の描画
- #--------------------------------------------------------------------------
- def draw_background(rect)
- temp_rect = rect.clone
- temp_rect.width /= 2
- contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
- temp_rect.x = temp_rect.width
- contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
- end
- #--------------------------------------------------------------------------
- # ● 背景色 1 の取得
- #--------------------------------------------------------------------------
- def back_color1
- Color.new(0, 0, 0, 192)
- end
- #--------------------------------------------------------------------------
- # ● 背景色 2 の取得
- #--------------------------------------------------------------------------
- def back_color2
- Color.new(0, 0, 0, 0)
- end
- end
- #==============================================================================
- # ■ Game_Screen
- #==============================================================================
- class Game_Screen
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :tone_target
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_update update
- def update
- bmsp_koyomisystem_update
- bmsp_koyomisystem_update_koyomi
- end
- #--------------------------------------------------------------------------
- # ● 暦の更新
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_update_koyomi
- $game_koyomi.update(self)
- end
- end
- #==============================================================================
- # ■ Game_Troop
- #==============================================================================
- class Game_Troop < Game_Unit
- #--------------------------------------------------------------------------
- # ● セットアップ
- #--------------------------------------------------------------------------
- def setup(troop_id)
- clear
- @troop_id = troop_id
- @enemies = []
- troop.members.each do |member|
- next unless $data_enemies[member.enemy_id]
- enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
- enemy.hide if member.hidden
- enemy.screen_x = member.x
- enemy.screen_y = member.y
- @enemies.push(enemy)
- end
- init_screen_tone
- make_unique_names
- end
- #--------------------------------------------------------------------------
- # ● 画面の色調を初期化
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_init_screen_tone init_screen_tone
- def init_screen_tone
- bmsp_koyomisystem_init_screen_tone
- bmsp_koyomisystem_battle_start_time_pass
- bmsp_koyomisystem_fix_tone_on_battle
- end
- #--------------------------------------------------------------------------
- # ● 戦闘開始による時間経過
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_battle_start_time_pass
- $game_koyomi.battle_start_time_pass
- return if !@auto_tone || (!$BTEST && $game_map.map.bmsp_koyomisystem_fix_tone)
- tone,duration = $game_koyomi.get_match_tone
- $game_troop.screen.start_tone_change(tone, 0)
- end
- #--------------------------------------------------------------------------
- # ● バトル中の色調固定
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_fix_tone_on_battle
- return unless $game_koyomi.fix_tone_on_battle
- $game_troop.screen.start_tone_change(Tone.new(0,0,0,0), 0)
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 終了処理
- #--------------------------------------------------------------------------
- alias bmsp_koyomisystem_terminate terminate
- def terminate
- bmsp_koyomisystem_terminate
- bmsp_koyomisystem_battle_end_time_pass
- end
- #--------------------------------------------------------------------------
- # ● 戦闘終了による時間経過
- #--------------------------------------------------------------------------
- def bmsp_koyomisystem_battle_end_time_pass
- $game_koyomi.battle_end_time_pass
- return if !$game_koyomi.auto_tone || (!$BTEST && $game_map.map.bmsp_koyomisystem_fix_tone)
- tone,duration = $game_koyomi.get_match_tone
- $game_map.screen.start_tone_change(tone, 0)
- end
- end
-
复制代码 |
|