Project1

标题: 关于夜晚白天的脚本问题 [打印本页]

作者: whmenhao    时间: 2010-7-9 08:41
标题: 关于夜晚白天的脚本问题
本帖最后由 whmenhao 于 2010-7-10 15:47 编辑

请问在游戏中实现夜晚需要脚本吗?
我想在一张地图中实现夜晚和白天的交替,最好像开关一样,打开就是画面就变暗,关闭就恢复,谁有解决的方法,请告诉我。
作者: 小角色    时间: 2010-7-9 08:45
我记得有变更画面色调的事件。。。你可以试试
作者: wangswz    时间: 2010-7-9 13:23
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 昼夜切り替え - KGC_DayNight ◆ VX ◆
  3. #_/    ◇ Last update : 2009/08/11 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  ゲーム中に昼夜の概念を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize BEGIN ★
  9. #==============================================================================
  10. #敌人小组名[DN ...加上]的话,能设定敌人的出现条件。
  11. #「夜晚」使之出现
  12. #蝙蝠*2[DN 2]
  13. #「白天(中午)・早上」不使之出现的情况
  14. #蝙蝠*2[DN -0,-3]

  15. #不显示时间变化[DN_VOID]
  16. #显示时间变化 但不继续变化时间[DN_STOP]
  17. module KGC
  18. module DayNight
  19.   # ◆ 昼夜切り替え方式
  20.   #   0..時間経過  1..歩数  2..現実時間(微妙)
  21.   METHOD = 1

  22.   # ◆ フェーズを保存する変数の番号
  23.   # ここで指定した変数に、現在のフェーズを格納します。
  24.   PHASE_VARIABLE     = 496
  25.   # ◆ 日数を保存する変数の番号
  26.   #  ここで指定した変数に、経過した日数を格納します。
  27.   PASS_DAYS_VARIABLE = 497

  28.   # ◆ イベント中はフェーズを変更しない
  29.   STOP_ON_EVENT = true
  30.   # ◆ 戦闘時に色調を適用する範囲
  31.   #   0..なし  1..背景のみ  2..背景 + 敵
  32.   #  ※ 通常はマップ自体を背景として使用するため、0 を指定しても背景のみ色調が
  33.   #     適用されているように見えます。
  34.   BG_TONE_IN_BATTLE = 0

  35.   # ◆ 各フェーズの設定
  36.   #  各フェーズを
  37.   #   ["名称", 色調(Tone), 切り替え時間],
  38.   #  という書式で作成。
  39.   #  フェーズを増やすこともできますが、慣れないうちはおすすめしません。
  40.   #
  41.   #  [名称]
  42.   #    フェーズの名前。
  43.   #    名前自体に意味はありません。
  44.   #  [色調]
  45.   #    画面全体の色。
  46.   #    よく分からない場合は変更しないでください。
  47.   #  [切り替え時間]
  48.   #    次のフェーズに移るまでの時間。
  49.   #    切り替え方式が時間経過の場合は秒、歩数の場合は歩数そのまま。
  50.   #    現実時間の場合、次の状態へ切り替える時刻 (24時間方式)。
  51.   PHASE = [
  52.     ["昼",   Tone.new(   0,    0,   0), 400],  # フェーズ 0
  53.     ["夕",   Tone.new( -32,  -96, -96), 200],  # フェーズ 1
  54.     ["夜",   Tone.new(-128, -128, -32), 350],  # フェーズ 2
  55.     ["朝",   Tone.new( -48,  -48, -16), 200],  # フェーズ 3
  56.   ]  # ← これは消さないこと!

  57.   # 現実時間のときは、
  58.   #  ["昼",   Tone.new(  0,   0,   0), 16],  # フェーズ 0 (16時に夕方)
  59.   #  ["夕方", Tone.new(  0, -96, -96), 20],  # フェーズ 1 (20時に夜)
  60.   #  ["夜",   Tone.new(-96, -96, -64),  6],  # フェーズ 2 (6時に朝)
  61.   #  ["朝",   Tone.new(-48, -48, -16), 10],  # フェーズ 3 (10時に昼)
  62.   # このような感じ。

  63.   # ◆ 日付が変わるフェーズ
  64.   #  ここで指定したフェーズになったとき、日数を加算する。
  65.   #  初期状態の場合  0..昼  1..夕方  2..夜  3..朝
  66.   # ※ 現実時間の場合、現実と同じ日数にはならないので注意。
  67.   PASS_DAY_PHASE = 3

  68.   # ◆ 状態切り替え時のフェード時間 (フレーム)
  69.   #  省略時もこの値を使用します。
  70.   PHASE_DURATION = 60

  71.   # ◆ 曜日名
  72.   #  初日は先頭から始まり、最後の曜日まで行くと最初の曜日に戻る。
  73.   #  曜日自体に意味はありません。
  74.   #  曜日名を追加(削除)すれば、曜日を増やす(減らす)こともできます。
  75.   # ※ 現実時間を使用する場合は 7 個にしてください。
  76.   WEEK_NAME = ["日", "月", "火", "水", "木", "金", "土"]
  77. end
  78. end

  79. #==============================================================================
  80. # ☆ カスタマイズ項目終了 - Customize END ☆
  81. #==============================================================================

  82. $imported = {} if $imported == nil
  83. $imported["DayNight"] = true

  84. if $data_mapinfos == nil
  85.   $data_mapinfos = load_data("Data/MapInfos.rvdata")
  86. end

  87. module KGC::DayNight
  88.   BATTLE_TONE_NONE = 0  # 戦闘時の色調 : なし
  89.   BATTLE_TONE_BG   = 1  # 戦闘時の色調 : 背景の身
  90.   BATTLE_TONE_FULL = 2  # 戦闘時の色調 : 背景 + 敵

  91.   METHOD_TIME  = 0  # 時間経過
  92.   METHOD_STEP  = 1  # 歩数
  93.   METHOD_RTIME = 2  # 現実時間

  94.   module Regexp
  95.     module MapInfo
  96.       # 遷移を止める
  97.       DAYNIGHT_STOP = /\[DN_STOP\]/i
  98.       # 昼夜エフェクト無効
  99.       DAYNIGHT_VOID = /\[DN_VOID\]/i
  100.     end

  101.     module Event
  102.       # 発光
  103.       LUMINOUS = /\[(?:LUMINOUS|发光)\]/i
  104.     end

  105.     module Troop
  106.       # 出現フェーズ
  107.       APPEAR_PHASE = /\[DN((?:\s*[\-]?\d+(?:\s*,)?)+)\]/i
  108.     end
  109.   end

  110.   #--------------------------------------------------------------------------
  111.   # ○ 敵グループ出現判定
  112.   #     troop : 判定対象の敵グループ
  113.   #     phase : 判定するフェーズ
  114.   #--------------------------------------------------------------------------
  115.   def self.troop_appear?(troop, phase = $game_system.daynight_phase)
  116.     # 出現判定
  117.     unless troop.appear_daynight_phase.empty?
  118.       return false unless troop.appear_daynight_phase.include?(phase)
  119.     end
  120.     # 非出現判定
  121.     unless troop.nonappear_daynight_phase.empty?
  122.       return false if troop.nonappear_daynight_phase.include?(phase)
  123.     end

  124.     return true
  125.   end
  126. end

  127. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  128. #==============================================================================
  129. # □ KGC::Commands
  130. #==============================================================================

  131. module KGC
  132. module Commands
  133.   module_function
  134.   #--------------------------------------------------------------------------
  135.   # ○ 昼夜切り替えを停止
  136.   #--------------------------------------------------------------------------
  137.   def stop_daynight
  138.     $game_system.daynight_change_enabled = false
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ○ 昼夜切り替えを起動
  142.   #--------------------------------------------------------------------------
  143.   def start_daynight
  144.     $game_system.daynight_change_enabled = true
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ○ 現在のフェーズ名を取得
  148.   #--------------------------------------------------------------------------
  149.   def get_daynight_name
  150.     return KGC::DayNight::PHASE[get_daynight_phase][0]
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ○ 現在の曜日を取得
  154.   #     variable_id : 代入する変数 ID
  155.   #--------------------------------------------------------------------------
  156.   def get_daynight_week(variable_id = 0)
  157.     if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
  158.       week = Time.now.wday
  159.     else
  160.       days = $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE]
  161.       week = (days % KGC::DayNight::WEEK_NAME.size)
  162.     end

  163.     if variable_id > 0
  164.       $game_variables[variable_id] = week
  165.       $game_map.need_refresh = true
  166.     end
  167.     return week
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ○ 現在の曜日名を取得
  171.   #--------------------------------------------------------------------------
  172.   def get_daynight_week_name
  173.     return KGC::DayNight::WEEK_NAME[get_daynight_week]
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ○ フェーズ切り替え
  177.   #     phase     : 切り替え後のフェーズ
  178.   #     duration  : 切り替え時間(フレーム)
  179.   #     pass_days : 経過させる日数  (省略時: 0)
  180.   #--------------------------------------------------------------------------
  181.   def change_daynight_phase(phase,
  182.       duration = KGC::DayNight::PHASE_DURATION,
  183.       pass_days = 0)
  184.     $game_temp.manual_daynight_duration = duration
  185.     $game_system.daynight_counter = 0
  186.     $game_system.daynight_phase = phase
  187.     $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += pass_days
  188.     $game_map.need_refresh = true
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ○ 次のフェーズへ遷移
  192.   #     duration : 切り替え時間(フレーム)
  193.   #--------------------------------------------------------------------------
  194.   def transit_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
  195.     $game_map.screen.transit_daynight_phase(duration)
  196.     $game_map.need_refresh = true
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ○ デフォルトの色調に戻す
  200.   #     duration : 切り替え時間(フレーム)
  201.   #--------------------------------------------------------------------------
  202.   def set_daynight_default(duration = KGC::DayNight::PHASE_DURATION)
  203.     $game_map.screen.set_daynight_default(duration)
  204.     $game_map.need_refresh = true
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ○ 現在のフェーズを復元
  208.   #     duration : 切り替え時間(フレーム)
  209.   #--------------------------------------------------------------------------
  210.   def restore_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
  211.     $game_map.screen.restore_daynight_phase(duration)
  212.     $game_map.need_refresh = true
  213.   end
  214. end
  215. end

  216. class Game_Interpreter
  217.   include KGC::Commands
  218. end

  219. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  220. #==============================================================================
  221. # ■ RPG::MapInfo
  222. #==============================================================================

  223. class RPG::MapInfo
  224.   #--------------------------------------------------------------------------
  225.   # ● マップ名取得
  226.   #--------------------------------------------------------------------------
  227.   def name
  228.     return @name.gsub(/\[.*\]/) { "" }
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ○ オリジナルマップ名取得
  232.   #--------------------------------------------------------------------------
  233.   def original_name
  234.     return @name
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ○ 昼夜切り替え停止
  238.   #--------------------------------------------------------------------------
  239.   def daynight_stop
  240.     return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_STOP
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ○ 昼夜エフェクト無効
  244.   #--------------------------------------------------------------------------
  245.   def daynight_void
  246.     return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_VOID
  247.   end
  248. end

  249. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  250. #==============================================================================
  251. # ■ RPG::Area
  252. #==============================================================================

  253. unless $@
  254. class RPG::Area
  255.   #--------------------------------------------------------------------------
  256.   # ○ エンカウントリストの取得
  257.   #--------------------------------------------------------------------------
  258.   alias encounter_list_KGC_DayNight encounter_list
  259.   def encounter_list
  260.     list = encounter_list_KGC_DayNight.clone

  261.     # 出現条件判定
  262.     list.each_index { |i|
  263.       list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
  264.     }
  265.     return list.compact
  266.   end
  267. end
  268. end

  269. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  270. #==============================================================================
  271. # ■ RPG::Troop
  272. #==============================================================================

  273. class RPG::Troop
  274.   #--------------------------------------------------------------------------
  275.   # ○ 昼夜切り替えのキャッシュ生成
  276.   #--------------------------------------------------------------------------
  277.   def create_daynight_cache
  278.     @__appear_daynight_phase = []
  279.     @__nonappear_daynight_phase = []

  280.     # 出現するフェーズ
  281.     if @name =~ KGC::DayNight::Regexp::Troop::APPEAR_PHASE
  282.       $1.scan(/[\-]?\d+/).each { |num|
  283.         phase = num.to_i
  284.         if phase < 0
  285.           # 出現しない
  286.           @__nonappear_daynight_phase << phase.abs
  287.         else
  288.           # 出現する
  289.           @__appear_daynight_phase << phase
  290.         end
  291.       }
  292.     end
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ○ 出現するフェーズ
  296.   #--------------------------------------------------------------------------
  297.   def appear_daynight_phase
  298.     create_daynight_cache if @__appear_daynight_phase == nil
  299.     return @__appear_daynight_phase
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ○ 出現しないフェーズ
  303.   #--------------------------------------------------------------------------
  304.   def nonappear_daynight_phase
  305.     create_daynight_cache if @__nonappear_daynight_phase == nil
  306.     return @__nonappear_daynight_phase
  307.   end
  308. end

  309. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  310. #==============================================================================
  311. # ■ Game_Temp
  312. #==============================================================================

  313. class Game_Temp
  314.   #--------------------------------------------------------------------------
  315.   # ● 公開インスタンス変数
  316.   #--------------------------------------------------------------------------
  317.   attr_accessor :manual_daynight_duration # 手動フェーズ変更フラグ
  318.   #--------------------------------------------------------------------------
  319.   # ● オブジェクト初期化
  320.   #--------------------------------------------------------------------------
  321.   alias initialize_KGC_DayNight initialize
  322.   def initialize
  323.     initialize_KGC_DayNight

  324.     @manual_daynight_duration = nil
  325.   end
  326. end

  327. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  328. #==============================================================================
  329. # ■ Game_System
  330. #==============================================================================

  331. class Game_System
  332.   #--------------------------------------------------------------------------
  333.   # ● 公開インスタンス変数
  334.   #--------------------------------------------------------------------------
  335.   attr_writer   :daynight_counter         # フェーズ遷移カウンタ
  336.   attr_writer   :daynight_change_enabled  # 昼夜切り替え有効
  337.   #--------------------------------------------------------------------------
  338.   # ● オブジェクト初期化
  339.   #--------------------------------------------------------------------------
  340.   alias initialize_KGC_DayNight initialize
  341.   def initialize
  342.     initialize_KGC_DayNight

  343.     @daynight_counter = 0
  344.     @daynight_change_enabled = true
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ○ フェーズ遷移カウンタを取得
  348.   #--------------------------------------------------------------------------
  349.   def daynight_counter
  350.     @daynight_counter = 0 if @daynight_counter == nil
  351.     return @daynight_counter
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 現在のフェーズを取得
  355.   #--------------------------------------------------------------------------
  356.   def daynight_phase
  357.     return $game_variables[KGC::DayNight::PHASE_VARIABLE]
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ○ 現在のフェーズを変更
  361.   #--------------------------------------------------------------------------
  362.   def daynight_phase=(value)
  363.     $game_variables[KGC::DayNight::PHASE_VARIABLE] = value
  364.     $game_map.need_refresh = true
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ○ 昼夜切り替え有効フラグを取得
  368.   #--------------------------------------------------------------------------
  369.   def daynight_change_enabled
  370.     @daynight_change_enabled = 0 if @daynight_change_enabled == nil
  371.     return @daynight_change_enabled
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ○ フェーズ進行
  375.   #--------------------------------------------------------------------------
  376.   def progress_daynight_phase
  377.     self.daynight_phase += 1
  378.     if self.daynight_phase >= KGC::DayNight::PHASE.size
  379.       self.daynight_phase = 0
  380.     end
  381.     $game_map.need_refresh = true
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ○ 現在のフェーズオブジェクトを取得
  385.   #--------------------------------------------------------------------------
  386.   def daynight_phase_object
  387.     return KGC::DayNight::PHASE[daynight_phase]
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ○ 以前のフェーズオブジェクトを取得
  391.   #--------------------------------------------------------------------------
  392.   def previous_daynight_phase_object
  393.     return KGC::DayNight::PHASE[daynight_phase - 1]
  394.   end
  395. end

  396. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  397. #==============================================================================
  398. # ■ Game_Screen
  399. #==============================================================================

  400. class Game_Screen
  401.   DEFAULT_TONE = Tone.new(0, 0, 0)
  402.   #--------------------------------------------------------------------------
  403.   # ● 公開インスタンス変数
  404.   #--------------------------------------------------------------------------
  405.   attr_reader   :daynight_tone            # 昼夜の色調
  406.   #--------------------------------------------------------------------------
  407.   # ● クリア
  408.   #--------------------------------------------------------------------------
  409.   alias clear_KGC_DayNight clear
  410.   def clear
  411.     clear_KGC_DayNight

  412.     clear_daynight
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ○ 昼夜切り替え用変数をクリア
  416.   #--------------------------------------------------------------------------
  417.   def clear_daynight
  418.     @daynight_tone = DEFAULT_TONE.clone
  419.     @daynight_x = 0
  420.     @daynight_y = 0

  421.     @frame_count = Graphics.frame_count
  422.     @daynight_tone_duration = 0

  423.     apply_daynight
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ○ 昼夜の色調を適用
  427.   #--------------------------------------------------------------------------
  428.   def apply_daynight
  429.     return if $game_map == nil
  430.     if $game_temp.in_battle
  431.       if KGC::DayNight::BG_TONE_IN_BATTLE == KGC::DayNight::BATTLE_TONE_NONE
  432.         return
  433.       end
  434.     end

  435.     # 切り替えを無効化するマップの場合
  436.     if $game_map.daynight_void?
  437.       if @daynight_tone_changed
  438.         # 初期の色調に戻す
  439.         @tone = DEFAULT_TONE.clone
  440.         @daynight_tone_changed = false
  441.       end
  442.       @daynight_tone = @tone.clone
  443.       return
  444.     end

  445.     # フェーズがおかしければ修復
  446.     if $game_system.daynight_phase_object == nil
  447.       $game_system.daynight_phase = 0
  448.     end

  449.     # 現在の色調を適用
  450.     @tone = $game_system.daynight_phase_object[1].clone
  451.     @daynight_tone = @tone.clone

  452.     # 現実時間遷移の場合
  453.     if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
  454.       time = Time.now
  455.       # マッチするフェーズに遷移
  456.       KGC::DayNight::PHASE.each_with_index { |phase, i|
  457.         if phase[2] <= time.hour
  458.           start_tone_change(phase[1], 1)
  459.           $game_system.daynight_phase = i
  460.           break
  461.         end
  462.       }
  463.     end

  464.     @daynight_tone_changed = true
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ○ 色調の取得
  468.   #--------------------------------------------------------------------------
  469.   def tone
  470.     if $game_temp.in_battle
  471.       if KGC::DayNight::BG_TONE_IN_BATTLE <= KGC::DayNight::BATTLE_TONE_BG
  472.         return DEFAULT_TONE
  473.       end
  474.     end
  475.     return @tone
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ● 色調変更の開始
  479.   #     tone     : 色調
  480.   #     duration : 時間
  481.   #--------------------------------------------------------------------------
  482.   alias start_tone_change_KGC_DayNight start_tone_change
  483.   def start_tone_change(tone, duration)
  484.     duration = [duration, 1].max
  485.     start_tone_change_KGC_DayNight(tone, duration)

  486.     @daynight_tone_target   = tone.clone
  487.     @daynight_tone_duration = duration
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● フレーム更新
  491.   #--------------------------------------------------------------------------
  492.   alias update_KGC_DayNight update
  493.   def update
  494.     update_KGC_DayNight

  495.     update_daynight_transit
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 色調の更新
  499.   #--------------------------------------------------------------------------
  500.   alias update_tone_KGC_DayNight update_tone
  501.   def update_tone
  502.     update_tone_KGC_DayNight

  503.     if @daynight_tone_duration >= 1
  504.       d = @daynight_tone_duration
  505.       target = @daynight_tone_target
  506.       @daynight_tone.red   = (@daynight_tone.red   * (d - 1) + target.red)   / d
  507.       @daynight_tone.green = (@daynight_tone.green * (d - 1) + target.green) / d
  508.       @daynight_tone.blue  = (@daynight_tone.blue  * (d - 1) + target.blue)  / d
  509.       @daynight_tone.gray  = (@daynight_tone.gray  * (d - 1) + target.gray)  / d
  510.       @daynight_tone_duration -= 1
  511.     end
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ○ フェーズ遷移の更新
  515.   #--------------------------------------------------------------------------
  516.   def update_daynight_transit
  517.     # 手動切り替えが行われた場合
  518.     if $game_temp.manual_daynight_duration
  519.       start_tone_change($game_system.daynight_phase_object[1],
  520.         $game_temp.manual_daynight_duration)
  521.       $game_temp.manual_daynight_duration = nil
  522.       @daynight_tone_changed = true
  523.     end

  524.     return unless $game_system.daynight_change_enabled  # 切り替えを
  525.     return if $game_map.daynight_stop?                  # 停止中

  526.     if KGC::DayNight::STOP_ON_EVENT
  527.       interpreter = ($game_temp.in_battle ? $game_troop.interpreter :
  528.         $game_map.interpreter)
  529.       return if interpreter.running?                    # イベント実行中
  530.     end

  531.     case KGC::DayNight::METHOD
  532.     when KGC::DayNight::METHOD_TIME   # 時間
  533.       update_daynight_pass_time
  534.     when KGC::DayNight::METHOD_STEP   # 歩数
  535.       update_daynight_step
  536.     when KGC::DayNight::METHOD_RTIME  # 現実時間
  537.       update_daynight_real_time
  538.     end
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ○ 遷移 : 時間経過
  542.   #--------------------------------------------------------------------------
  543.   def update_daynight_pass_time
  544.     # カウント増加量計算
  545.     inc_count = Graphics.frame_count - @frame_count
  546.     # 加算量がおかしい場合は戻る
  547.     if inc_count >= 100
  548.       @frame_count = Graphics.frame_count
  549.       return
  550.     end
  551.     # カウント加算
  552.     $game_system.daynight_counter += inc_count
  553.     @frame_count = Graphics.frame_count

  554.     # 状態遷移判定
  555.     count = $game_system.daynight_counter / Graphics.frame_rate
  556.     if count >= $game_system.daynight_phase_object[2]
  557.       transit_daynight_phase
  558.     end
  559.   end
  560.   #--------------------------------------------------------------------------
  561.   # ○ 遷移 : 歩数
  562.   #--------------------------------------------------------------------------
  563.   def update_daynight_step
  564.     # 移動していなければ戻る
  565.     return if @daynight_x == $game_player.x && @daynight_y == $game_player.y

  566.     @daynight_x = $game_player.x
  567.     @daynight_y = $game_player.y
  568.     # カウント加算
  569.     $game_system.daynight_counter += 1
  570.     # 状態遷移判定
  571.     count = $game_system.daynight_counter
  572.     if count >= $game_system.daynight_phase_object[2]
  573.       transit_daynight_phase
  574.     end
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # ○ 遷移 : 現実時間
  578.   #--------------------------------------------------------------------------
  579.   def update_daynight_real_time
  580.     time = Time.now
  581.     # 状態遷移判定
  582.     time1 = $game_system.daynight_phase_object[2]
  583.     transit = (time1 <= time.hour)
  584.     if $game_system.previous_daynight_phase_object != nil
  585.       time2 = $game_system.previous_daynight_phase_object[2]
  586.       if time1 < time2
  587.         transit &= (time.hour < time2)
  588.       end
  589.     end

  590.     if transit
  591.       transit_daynight_phase
  592.     end
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ○ 次の状態へ遷移
  596.   #     duration : 遷移時間
  597.   #--------------------------------------------------------------------------
  598.   def transit_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
  599.     $game_system.daynight_counter = 0
  600.     $game_system.progress_daynight_phase
  601.     # 日数経過判定
  602.     if $game_system.daynight_phase == KGC::DayNight::PASS_DAY_PHASE
  603.       $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += 1
  604.     end
  605.     # 色調切り替え
  606.     start_tone_change($game_system.daynight_phase_object[1], duration)
  607.     @daynight_tone_changed = true
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ○ デフォルトの状態(0, 0, 0)に戻す
  611.   #     duration : 遷移時間
  612.   #--------------------------------------------------------------------------
  613.   def set_daynight_default(duration)
  614.     start_tone_change(DEFAULT_TONE, duration)
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ○ 現在のフェーズを復元
  618.   #     duration : 遷移時間
  619.   #--------------------------------------------------------------------------
  620.   def restore_daynight_phase(duration)
  621.     start_tone_change($game_system.daynight_phase_object[1], duration)
  622.     @daynight_tone_changed = true
  623.   end
  624. end

  625. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  626. #==============================================================================
  627. # ■ Game_Map
  628. #==============================================================================

  629. class Game_Map
  630.   #--------------------------------------------------------------------------
  631.   # ● セットアップ
  632.   #     map_id : マップ ID
  633.   #--------------------------------------------------------------------------
  634.   alias setup_KGC_DayNight setup
  635.   def setup(map_id)
  636.     setup_KGC_DayNight(map_id)

  637.     @screen.apply_daynight
  638.   end
  639.   #--------------------------------------------------------------------------
  640.   # ○ 昼夜切り替えを停止するか
  641.   #--------------------------------------------------------------------------
  642.   def daynight_stop?
  643.     info = $data_mapinfos[map_id]
  644.     return false if info == nil
  645.     return (info.daynight_stop || info.daynight_void)
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ○ 昼夜切り替えが無効か
  649.   #--------------------------------------------------------------------------
  650.   def daynight_void?
  651.     info = $data_mapinfos[map_id]
  652.     return false if info == nil
  653.     return info.daynight_void
  654.   end
  655.   #--------------------------------------------------------------------------
  656.   # ● エンカウントリストの取得
  657.   #--------------------------------------------------------------------------
  658.   alias encounter_list_KGC_DayNight encounter_list
  659.   def encounter_list
  660.     list = encounter_list_KGC_DayNight.clone

  661.     # 出現条件判定
  662.     list.each_index { |i|
  663.       list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
  664.     }
  665.     return list.compact
  666.   end
  667. end

  668. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  669. #==============================================================================
  670. # ■ Game_Character
  671. #==============================================================================

  672. class Game_Character
  673.   #--------------------------------------------------------------------------
  674.   # ○ 発光するか
  675.   #--------------------------------------------------------------------------
  676.   def luminous?
  677.     return false
  678.   end
  679. end

  680. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  681. #==============================================================================
  682. # ■ Game_Event
  683. #==============================================================================

  684. class Game_Event < Game_Character
  685.   #--------------------------------------------------------------------------
  686.   # ○ 発光するか
  687.   #--------------------------------------------------------------------------
  688.   def luminous?
  689.     return (@event.name =~ KGC::DayNight::Regexp::Event::LUMINOUS)
  690.   end
  691. end

  692. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  693. #==============================================================================
  694. # ■ Spriteset_Map
  695. #==============================================================================

  696. class Spriteset_Map
  697.   #--------------------------------------------------------------------------
  698.   # ● ビューポートの作成
  699.   #--------------------------------------------------------------------------
  700.   alias create_viewports_KGC_DayNight create_viewports
  701.   def create_viewports
  702.     create_viewports_KGC_DayNight

  703.     @viewport1_2 = Viewport.new(0, 0,
  704.       @viewport1.rect.width, @viewport1.rect.height)
  705.   end
  706.   #--------------------------------------------------------------------------
  707.   # ● キャラクタースプライトの作成
  708.   #--------------------------------------------------------------------------
  709.   alias create_characters_KGC_DayNight create_characters
  710.   def create_characters
  711.     create_characters_KGC_DayNight

  712.     # 発光オブジェクトを @viewport1_2 に移動
  713.     @character_sprites.each { |sprite|
  714.       sprite.viewport = @viewport1_2 if sprite.character.luminous?
  715.     }
  716.   end
  717.   #--------------------------------------------------------------------------
  718.   # ● ビューポートの解放
  719.   #--------------------------------------------------------------------------
  720.   alias dispose_viewports_KGC_DayNight dispose_viewports
  721.   def dispose_viewports
  722.     dispose_viewports_KGC_DayNight

  723.     @viewport1_2.dispose
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # ● ビューポートの更新
  727.   #--------------------------------------------------------------------------
  728.   alias update_viewports_KGC_DayNight update_viewports
  729.   def update_viewports
  730.     update_viewports_KGC_DayNight

  731.     @viewport1_2.ox = $game_map.screen.shake
  732.     @viewport1_2.update
  733.   end
  734. end

  735. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  736. #==============================================================================
  737. # ■ Spriteset_Battle
  738. #==============================================================================

  739. if KGC::DayNight::BG_TONE_IN_BATTLE == KGC::DayNight::BATTLE_TONE_BG

  740. class Spriteset_Battle
  741.   #--------------------------------------------------------------------------
  742.   # ● バトルバックスプライトの作成
  743.   #--------------------------------------------------------------------------
  744.   alias create_battleback_KGC_DayNight create_battleback
  745.   def create_battleback
  746.     create_battleback_KGC_DayNight

  747.     if @battleback_sprite.wave_amp == 0
  748.       @battleback_sprite.tone = $game_troop.screen.daynight_tone
  749.     end
  750.   end
  751.   #--------------------------------------------------------------------------
  752.   # ● バトルフロアスプライトの作成
  753.   #--------------------------------------------------------------------------
  754.   alias create_battlefloor_KGC_DayNight create_battlefloor
  755.   def create_battlefloor
  756.     create_battlefloor_KGC_DayNight

  757.     @battlefloor_sprite.tone = $game_troop.screen.daynight_tone
  758.   end
  759. end

  760. end  # <== if KGC::DayNight::BG_TONE_IN_BATTLE == KGC::DayNight::BATTLE_TONE_BG

  761. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  762. #==============================================================================
  763. # ■ Scene_Map
  764. #==============================================================================

  765. class Scene_Map < Scene_Base
  766.   #--------------------------------------------------------------------------
  767.   # ● 開始処理
  768.   #--------------------------------------------------------------------------
  769.   alias start_KGC_DayNight start
  770.   def start
  771.     $game_map.screen.clear_daynight

  772.     start_KGC_DayNight
  773.   end
  774. end
复制代码

作者: whmenhao    时间: 2010-7-9 18:32
那个脚本那长?   怎么用呢?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1