#=========================================================================== # ◆ A1 Scripts ◆ # ウィンドウスキン個別設定(RGSS3) # # バージョン : 1.20 (2012/01/02) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・ウィンドウスキン・ウィンドウカラーをクラス毎に設定します # ・イベントコマンドからウィンドウスキン・ウィンドウカラーを設定します #--------------------------------------------------------------------------- # 更新履歴   :2012/01/01 Ver1.00 リリース #    :2012/01/02 Ver1.10 A1共通スクリプトVer3.30対応 #    :2012/01/02 Ver1.20 セーブできなくなる不具合を修正 #--------------------------------------------------------------------------- # 設置場所 #  A1共通スクリプトより下 # 一部再定義メソッドがあるため、なるべく上の方 # # 必要スクリプト # A1共通スクリプトVer3.30以上 #--------------------------------------------------------------------------- # 使い方 # ■ 設定項目 を設定します # # PRESET_SKIN で設定したウィンドウクラスは #  設定した情報がデフォルトとなります # # イベントコマンド「注釈」に記述 # # 個別スキン No[,SkinName[,R,G,B]] # No :設定項目で設定したウィンドウクラスのNo # SkinName:ウィンドウスキンのファイル名 (省略するとデフォルト) # R G B :設定するウィンドウカラー (省略するとデフォルト) # # 例:個別スキン 0,Windowセピア,0,0,0 # No.0 (WindowMessage) のスキンが「Windowセピア」になり # カラーが R0,G0,B0 になる # # 例:個別スキン 0 # No.0 (WindowMessage) のスキンとカラーがデフォルトに戻る # # 個別カラー No[,R,G,B] # No :設定項目で設定したウィンドウクラスのNo # R G B :設定するウィンドウカラー (省略するとデフォルト) # # 例:個別カラー 0,0,0,0 # No.0 (WindowMessage) のカラーが R0,G0,B0 になる # # 例:個別カラー 0 # No.0 (WindowMessage) のカラーがデフォルトに戻る #============================================================================== $imported ||= {} $imported["A1_CustomWindowSkin"] = true if $imported["A1_Common_Script"] old_common_script("ウィンドウスキン個別設定", "3.30") if common_version < 3.30 #============================================================================== # ■ 設定項目 #============================================================================== module A1_System::ChangeSkinConfig #-------------------------------------------------------------------------- # ウィンドウクラスの定義 # ※注釈から呼ぶ際のウィンドウ番号になります #-------------------------------------------------------------------------- WINDOW_CLASS = { 0 => Window_Message, 1 => Window_FaceName, } #-------------------------------------------------------------------------- # ウィンドウスキン・ウィンドウカラーの設定 # ※WINDOW_CLASS で設定した番号のウィンドウが設定されます # # ※Skinに nil を設定するとデフォルトスキンを使用します # ※Toneに nil を設定するとデフォルトカラーを使用します #-------------------------------------------------------------------------- PRESET_SKIN = { #No => [Skin, [ToneR, ToneG, ToneB]] 0 => ["セピアWindow", [0,0,0]] } end #============================================================================== # ■ SceneManager #------------------------------------------------------------------------------ #  シーン遷移を管理するモジュールです。たとえばメインメニューからアイテム画面 # を呼び出し、また戻るというような階層構造を扱うことができます。 #============================================================================== module SceneManager #-------------------------------------------------------------------------- # ○ 個別ウィンドウスキンの設定 #-------------------------------------------------------------------------- def self.set_window_skin(window_class, skin) @scene.set_window_skin(window_class, skin) end end #============================================================================== # ■ Game_System #------------------------------------------------------------------------------ #  システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存 # します。このクラスのインスタンスは $game_system で参照されます。 #============================================================================== class Game_System #-------------------------------------------------------------------------- # ☆ オブジェクト初期化 #-------------------------------------------------------------------------- alias a1_change_skin_gs_initialize initialize def initialize a1_change_skin_gs_initialize @default_window_skin = nil set_preset_skin @window_skin = {} @window_custom_tone = {} end #-------------------------------------------------------------------------- # ☆ ウィンドウカラーの取得 #-------------------------------------------------------------------------- alias a1_change_skin_gs_window_tone window_tone def window_tone(window_class = nil) return a1_change_skin_gs_window_tone unless window_class @window_custom_tone ||= {} set_preset_skin unless @preset_tone class_name = $a1_common.class_name(window_class) @window_custom_tone[class_name] || @preset_tone[class_name] || a1_change_skin_gs_window_tone end #-------------------------------------------------------------------------- # ○ ウィンドウスキンの取得 #-------------------------------------------------------------------------- def window_skin(window_class) @window_skin ||= {} set_preset_skin unless @preset_skin class_name = $a1_common.class_name(window_class) @window_skin[class_name] || @preset_skin[class_name] || default_window_skin end #-------------------------------------------------------------------------- # ○ 個別ウィンドウスキンの設定 #-------------------------------------------------------------------------- def set_window_skin(window_class, skin) @window_skin ||= {} @window_skin[$a1_common.class_name(window_class)] = skin ? skin : nil end #-------------------------------------------------------------------------- # ○ 設定済みのスキンを設定 #-------------------------------------------------------------------------- def set_preset_skin @preset_skin ||= {} @preset_tone ||= {} preset_skin = A1_System::ChangeSkinConfig::PRESET_SKIN preset_skin.keys.each {|key| window_class = $a1_common.class_name(A1_System::ChangeSkinConfig::WINDOW_CLASS[key]) info = preset_skin[key] tone = info[1] @preset_skin[window_class] = info[0] ? info[0] : nil @preset_tone[window_class] = Tone.new(tone[0], tone[1], tone[2]) if tone } end #-------------------------------------------------------------------------- # ○ 個別ウィンドウカラ−の設定 #-------------------------------------------------------------------------- def set_window_tone(window_class, tone) @window_custom_tone ||= {} @window_custom_tone[$a1_common.class_name(window_class)] = tone end #-------------------------------------------------------------------------- # ○ デフォルトウィンドウスキンの取得 #-------------------------------------------------------------------------- def default_window_skin @default_window_skin ||= "Window" return @default_window_skin end end #============================================================================== # ■ Scene_Base #------------------------------------------------------------------------------ #  ゲーム中の全てのシーンのスーパークラスです。 #============================================================================== class Scene_Base #-------------------------------------------------------------------------- # ○ ウィンドウスキンの変更 #-------------------------------------------------------------------------- def set_window_skin(window_class, skin) instance_variables.each {|varname| ivar = instance_variable_get(varname) ivar.set_window_skin(skin) if ivar.is_a?(window_class) } end end #============================================================================== # ■ Window_Base #------------------------------------------------------------------------------ #  ゲーム中の全てのウィンドウのスーパークラスです。 #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ☆ オブジェクト初期化 #-------------------------------------------------------------------------- alias a1_change_window_skin_initialize initialize def initialize(x, y, width, height) a1_change_window_skin_initialize(x, y, width, height) refresh_window_skin end #-------------------------------------------------------------------------- # ○ ウィンドウスキンのリフレッシュ #-------------------------------------------------------------------------- def refresh_window_skin self.windowskin = Cache.system($game_system.window_skin(self)) end #-------------------------------------------------------------------------- # ★ 色調の更新 #-------------------------------------------------------------------------- def update_tone self.tone.set($game_system.window_tone(self)) end #-------------------------------------------------------------------------- # ○ ウィンドウスキンの設定 #-------------------------------------------------------------------------- def set_window_skin(skin) $game_system.set_window_skin(self, skin) refresh_window_skin end end #============================================================================== # ■ A1_System::CommonModule #============================================================================== class A1_System::CommonModule #-------------------------------------------------------------------------- # ☆ 注釈コマンド定義 #-------------------------------------------------------------------------- alias a1_change_skin_define_command define_command def define_command a1_change_skin_define_command @cmd_108["個別スキン"] = :set_skin @cmd_108["個別カラー"] = :set_color end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ 個別スキン #-------------------------------------------------------------------------- def set_skin(params) window_class = A1_System::ChangeSkinConfig::WINDOW_CLASS[params[0].to_i] tone = Tone.new(params[2].to_i, params[3].to_i, params[4].to_i) if params[2] && params[3] && params[4] SceneManager.set_window_skin(window_class, params[1]) $game_system.set_window_tone($a1_common.class_name(window_class), tone) end #-------------------------------------------------------------------------- # ○ 個別カラー #-------------------------------------------------------------------------- def set_color(params) window_class = A1_System::ChangeSkinConfig::WINDOW_CLASS[params[0].to_i] tone = Tone.new(params[1].to_i, params[2].to_i, params[3].to_i) if params[1] && params[2] && params[3] $game_system.set_window_tone($a1_common.class_name(window_class), tone) end end end