#============================================================================== # # 預かり所ver1.1 # # RPGによくあるアイテムの預かり機能です。 # 本スクリプトはレクトールのスクリプト内にある # MQ0_PartyReserveを参考に作成してあります。 # # 使用方法 # イベント内の「スクリプト」にreserve_systemと記述すると起動します。 # # 預かり禁止アイテム # ・預けてしまうとストーリーやイベントに支障がでるアイテムは # アイテムのメモ欄に だいじなもの と記入しておけば # 預ける事が出来なくなります。 # # また、TYPE74RX-T様の「特定アイテムの所持数を制限」スクリプトが # 機能するように作成してありますので # 導入されている方は、RX_T_ITEMをtrueにしてください # #============================================================================== module BBL_RESERVE_SYSTEM #============================================================================== # カスタマイズ開始 #============================================================================== # 保管アイテムをカテゴリーごとに分けない場合はfalseにしてください ITEM_DISCRETION = true # ITEM_DISCRETIONがtrueの場合はカテゴリー名を設定してください # 左からアイテム、武器、防具、ゴールドになります(順序は変更できません) # ※ゴールドの保管機能を使いたくない場合はカテゴリーから削除してください # 例) ["アイテム", "武器", "防具"] DISCRETION_NAME = ["アイテム", "武器", "防具", "ゴールド"] # 操作説明文です # 必要なければ、"" としてください COMMAND_EXPLANATION = "C:ひとつずつ入れる A:まとめて入れる" # 預かり所操作時のキーです RESERVE_KEY = Input::C # ひとつずつ入れる RESERVE_ALL_KEY = Input::A # まとめて入れる # ゴールドコマンドウィンドウの用語です # 左から保管、引出しになります GOLD_COMMAND_NAME = ["預ける", "引き出す"] # 所持金の用語です GOLD_NAME = "所持金" # 保管金の用語です RESERVE_GOLD_NAME = "保管金" # TYPE74RX-T様の「特定アイテムの所持数を制限」を # 導入している方はtrueにしてください RX_T_ITEM = false #============================================================================== # カスタマイズ終了 #============================================================================== end $imported = {} if $imported == nil class Game_Party alias bbl_initialize initialize #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 (追加定義) #-------------------------------------------------------------------------- attr_reader :keep_gold # 保管ゴールド #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize bbl_initialize @keep_items = {} # 保管品ハッシュ (アイテム ID) @keep_weapons = {} # 保管品ハッシュ (武器 ID) @keep_armors = {} # 保管品ハッシュ (防具 ID) @keep_gold = 0 # 保管ゴールド end #-------------------------------------------------------------------------- # ○ 保管アイテムの配列取得 #-------------------------------------------------------------------------- def keeping_items result = [] for i in @keep_items.keys.sort result.push($data_items[i]) if @keep_items[i] > 0 end for i in @keep_weapons.keys.sort result.push($data_weapons[i]) if @keep_weapons[i] > 0 end for i in @keep_armors.keys.sort result.push($data_armors[i]) if @keep_armors[i] > 0 end return result end #-------------------------------------------------------------------------- # ○ 保管アイテムの所持数取得 #-------------------------------------------------------------------------- def keeping_item_number(item) case item when RPG::Item number = @keep_items[item.id] when RPG::Weapon number = @keep_weapons[item.id] when RPG::Armor number = @keep_armors[item.id] end return number == nil ? 0 : number end #-------------------------------------------------------------------------- # ○ 保管アイテムの増加 (減少) # item : アイテム # n : 個数 #-------------------------------------------------------------------------- def gain_keeping_item(item, n) number = keeping_item_number(item) case item when RPG::Item @keep_items[item.id] = [[number + n, 0].max, 99].min when RPG::Weapon @keep_weapons[item.id] = [[number + n, 0].max, 99].min when RPG::Armor @keep_armors[item.id] = [[number + n, 0].max, 99].min end end #-------------------------------------------------------------------------- # ○ 保管アイテムの減少 # item : アイテム # n : 個数 #-------------------------------------------------------------------------- def lose_keeping_item(item, n) gain_keeping_item(item, -n) end #-------------------------------------------------------------------------- # ● 保管ゴールドの増加 (減少) # n : 金額 #-------------------------------------------------------------------------- def gain_keeping_gold(n) @keep_gold = [[@keep_gold + n, 0].max, 9999999].min end #-------------------------------------------------------------------------- # ● 保管ゴールドの減少 # n : 金額 #-------------------------------------------------------------------------- def lose_keeping_gold(n) gain_keeping_gold(-n) end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 預かり所を呼び出す #-------------------------------------------------------------------------- def reserve_system $scene = Scene_Reserve.new return true end end class Scene_Reserve < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @not_gold = true if BBL_RESERVE_SYSTEM::DISCRETION_NAME.size < 4 if BBL_RESERVE_SYSTEM::ITEM_DISCRETION @item_window = Window_Reserve_main.new(0, 112, 272, 248) @reserve_window = Window_Reserve.new(272, 112, 272, 248) else @item_window = Window_Reserve_main.new(0, 56, 272, 304) @reserve_window = Window_Reserve.new(272, 56, 272, 304) end @help_window = Window_Help.new @item_window.help_window = @help_window @reserve_window.help_window = @help_window @command_window = Window_ReserveCommand.new(544, BBL_RESERVE_SYSTEM::DISCRETION_NAME, BBL_RESERVE_SYSTEM::DISCRETION_NAME.size, 1, 4) @command_window.y = 56 @command_window.active = true @gold_command_window = Window_ReserveCommand.new(192, BBL_RESERVE_SYSTEM::GOLD_COMMAND_NAME, 1, 0) @gold_command_window.opacity = 0 @gold_command_window.x = 32 @gold_command_window.y = @item_window.y + 64 @gold_command_window.visible = false @item_window.active = false @reserve_window.active = false @item_window.index = -1 @reserve_window.index = -1 @item_cursor = 0 @reserve_cursor = 0 @item_window.mode = 1 @reserve_window.mode = 1 @number_window = Window_GoldInput.new @number_window.visible = false @number_window.y = @gold_command_window.y + @gold_command_window.height @gold_window = Window_HandGold.new(0, 416 - 56) @gold_reserve_window = Window_ReserveGold.new(272, 416 - 56) unless BBL_RESERVE_SYSTEM::ITEM_DISCRETION @command_window.active = false @command_window.visible = false @item_window.index = 0 @item_window.active end if $imported["HelpExtension"] adjust_window_size else adjust_gold_window_size end end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @item_window.dispose @reserve_window.dispose @command_window.dispose @help_window.dispose @gold_command_window.dispose @gold_window.dispose @gold_reserve_window.dispose @number_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @command_window.update if BBL_RESERVE_SYSTEM::ITEM_DISCRETION if @item_window.index >= 0 @item_window.active = true @reserve_window.active = false elsif @reserve_window.index >= 0 @item_window.active = false @reserve_window.active = true end if @command_window.active == true command_selection elsif @item_window.active == true select_item elsif @reserve_window.active == true select_keeping_item elsif @gold_command_window.active == true select_gold_command elsif @number_window.active == true select_number end item_mode = @command_window.index + 1 if item_mode != @item_window.mode @item_window.mode = item_mode end if item_mode != @reserve_window.mode @reserve_window.mode = item_mode end end #-------------------------------------------------------------------------- # ● コマンドウィンドウ選択の更新 #-------------------------------------------------------------------------- def command_selection @help_window.set_text(BBL_RESERVE_SYSTEM::COMMAND_EXPLANATION) if Input.trigger?(Input::C) if @command_window.index == 3 Sound.play_decision @command_window.active = false @gold_command_window.visible = true @gold_command_window.active = true @gold_command_window.index = 0 else Sound.play_decision @command_window.active = false @item_window.active = true @item_window.index = 0 end elsif Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new end end #-------------------------------------------------------------------------- # ● 所持アイテム選択の更新 #-------------------------------------------------------------------------- def select_item @item_window.update @reserve_window.update if Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_KEY) @item_window.gain_item @item_window.refresh @reserve_window.refresh if @item_window.item == nil @item_window.index -= 1 if @item_window.index > 0 end elsif Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_ALL_KEY) @item_window.gain_item_all @item_window.refresh @reserve_window.refresh if @item_window.item == nil @item_window.index -= 1 if @item_window.index > 0 end elsif Input.trigger?(Input::B) if BBL_RESERVE_SYSTEM::ITEM_DISCRETION Sound.play_cancel @item_window.active = false @item_window.index = -1 @command_window.active = true else Sound.play_cancel $scene = Scene_Map.new end elsif Input.trigger?(Input::RIGHT) or Input.trigger?(Input::LEFT) Sound.play_cursor @item_cursor = @item_window.index @item_window.active = false @reserve_window.active @item_window.index = -1 @reserve_window.index = @reserve_cursor end end #-------------------------------------------------------------------------- # ● 保管アイテム選択の更新 #-------------------------------------------------------------------------- def select_keeping_item @item_window.update @reserve_window.update if Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_KEY) @reserve_window.reserve_item @item_window.refresh @reserve_window.refresh if @reserve_window.item == nil @reserve_window.index -= 1 if @reserve_window.index > 0 end elsif Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_ALL_KEY) @reserve_window.reserve_item_all @item_window.refresh @reserve_window.refresh if @reserve_window.item == nil @reserve_window.index -= 1 if @reserve_window.index > 0 end elsif Input.trigger?(Input::B) if BBL_RESERVE_SYSTEM::ITEM_DISCRETION Sound.play_cancel @reserve_window.active = false @reserve_window.index = -1 @command_window.active = true else Sound.play_cancel $scene = Scene_Map.new end elsif Input.trigger?(Input::RIGHT) or Input.trigger?(Input::LEFT) Sound.play_cursor @reserve_cursor = @reserve_window.index @reserve_window.active = false @item_window.active @reserve_window.index = -1 @item_window.index = @item_cursor end end #-------------------------------------------------------------------------- # ● ゴールドコマンドウィンドウ選択の更新 #-------------------------------------------------------------------------- def select_gold_command @gold_command_window.update if Input.trigger?(Input::C) Sound.play_decision @gold_command_window.active = false @gold_command_window.visible = false @number_window.visible = true @number_window.active = true if @gold_command_window.index == 0 @number_window.mode = 0 # 預ける @number_window.x = 32 else @number_window.mode = 1 # 引き出す @number_window.x = 304 end elsif Input.trigger?(Input::B) Sound.play_cancel @gold_command_window.active = false @gold_command_window.visible = false @command_window.active = true end end #-------------------------------------------------------------------------- # ● ゴールド入力の更新 #-------------------------------------------------------------------------- def select_number @number_window.update if Input.trigger?(Input::C) if @number_window.mode == 0 if @number_window.number > $game_party.gold Sound.play_buzzer @number_window.number = $game_party.gold else Sound.play_decision gold = @number_window.number $game_party.lose_gold(gold) $game_party.gain_keeping_gold(gold) @number_window.number = 0 @gold_window.refresh @gold_reserve_window.refresh end elsif @number_window.mode == 1 if @number_window.number > $game_party.keep_gold Sound.play_buzzer @number_window.number = $game_party.keep_gold else Sound.play_decision gold = @number_window.number $game_party.gain_gold(gold) $game_party.lose_keeping_gold(gold) @number_window.number = 0 @gold_window.refresh @gold_reserve_window.refresh end end elsif Input.trigger?(Input::B) Sound.play_cancel @number_window.visible = false @number_window.active = false @number_window.number = 0 @number_window.index = 6 @gold_command_window.visible = true @gold_command_window.active = true end end if $imported["HelpExtension"] #-------------------------------------------------------------------------- # ● ウィンドウサイズ調整 KGCヘルプウィンドウ拡張用 #-------------------------------------------------------------------------- def adjust_window_size @help_window.row_max = KGC::HelpExtension::ROW_MAX @command_window.y = @help_window.height @item_window.y = @command_window.height + @help_window.height @reserve_window.y = @command_window.height + @help_window.height sy = @help_window.height + @command_window.height + @gold_window.height sy = @help_window.height + @command_window.height if @not_gold @item_window.height = 416 - sy @reserve_window.height = 416 - sy @gold_command_window.y = @item_window.y if @not_gold @gold_window.visible = false @gold_reserve_window.visible = false end end end #-------------------------------------------------------------------------- # ● ウィンドウサイズ調整 #-------------------------------------------------------------------------- def adjust_gold_window_size sy = @help_window.height + @command_window.height + @gold_window.height sy = @help_window.height + @command_window.height if @not_gold @item_window.height = 416 - sy @reserve_window.height = 416 - sy if @not_gold @gold_window.visible = false @gold_reserve_window.visible = false end end end #============================================================================== # ■ Window_Reserve #------------------------------------------------------------------------------ #  預けてるアイテムの一覧表示 #============================================================================== class Window_Reserve < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :mode # モード #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 # width : ウィンドウの幅 # height : ウィンドウの高さ #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) @column_max = 1 self.index = -1 @mode = 0 @total = 0 @value = 0 refresh end #-------------------------------------------------------------------------- # ● アイテムの取得 #-------------------------------------------------------------------------- def item return @data[self.index] end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] for item in $game_party.keeping_items next unless include?(item) @data.push(item) if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id self.index = @data.size - 1 end end @data.push(nil) if include?(nil) @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) item = @data[index] if item != nil number = $game_party.keeping_item_number(item) enabled = enable?(item) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enabled) self.contents.draw_text(rect, sprintf("%2d", number), 2) self.contents.font.size = 14 rect.width -= 20 self.contents.draw_text(rect, "×", 2) self.contents.font.size = 20 end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(item == nil ? "" : item.description) end #-------------------------------------------------------------------------- # ● モードの設定 # mode : 新しいモード #-------------------------------------------------------------------------- def mode=(mode) if @mode != mode @mode = mode refresh end end #-------------------------------------------------------------------------- # ● アイテムを許可状態で表示するかどうか #-------------------------------------------------------------------------- def enable?(item) if BBL_RESERVE_SYSTEM::RX_T_ITEM rx_limit = RX_T.get_numeric_of_system_word_in_sys_str(item, "所持可能数") if rx_limit > 0 if $game_party.item_number(item) == rx_limit return false end end end if $game_party.item_number(item) == 99 return false else return true end end #-------------------------------------------------------------------------- # ● アイテムをリストに含めるかどうか # item : アイテム #-------------------------------------------------------------------------- def include?(item) if BBL_RESERVE_SYSTEM::ITEM_DISCRETION case @mode when 1 # アイテム return false unless item.is_a?(RPG::Item) when 2 # 武器 return false unless item.is_a?(RPG::Weapon) when 3 # 防具 return false unless item.is_a?(RPG::Armor) when 4 # お金 return false end return true else return false if item == nil if $game_temp.in_battle return false unless item.is_a?(RPG::Item) end return true end end #-------------------------------------------------------------------------- # ● 保管品アイテムの取り出し #-------------------------------------------------------------------------- def reserve_item return if item == nil if BBL_RESERVE_SYSTEM::RX_T_ITEM rx_limit = RX_T.get_numeric_of_system_word_in_sys_str(item, "所持可能数") end return Sound.play_buzzer if $game_party.item_number(item) == 99 if rx_limit == 0 rx_limit = nil end if $game_party.item_number(item) == rx_limit Sound.play_buzzer else Sound.play_use_item $game_party.lose_keeping_item(item, 1) $game_party.gain_item(item, 1) end end #-------------------------------------------------------------------------- # ● 保管品アイテムをまとめて取り出す #-------------------------------------------------------------------------- def reserve_item_all return if item == nil if BBL_RESERVE_SYSTEM::RX_T_ITEM rx_limit = RX_T.get_numeric_of_system_word_in_sys_str(item, "所持可能数") end return Sound.play_buzzer if $game_party.item_number(item) == 99 if rx_limit == 0 rx_limit = nil end if $game_party.item_number(item) == rx_limit Sound.play_buzzer else Sound.play_use_item @total = $game_party.keeping_item_number(item) + $game_party.item_number(item) if rx_limit != nil if rx_limit > 0 if @total > rx_limit @value = @total - rx_limit end end else if @total > 99 @value = @total - 99 end end $game_party.gain_item(item, $game_party.keeping_item_number(item)) $game_party.lose_keeping_item(item, $game_party.keeping_item_number(item)) $game_party.gain_keeping_item(item, @value) @total = 0 @value = 0 end end end #============================================================================== # ■ Window_Reserve #------------------------------------------------------------------------------ #  預かり所で所持アイテムの一覧表示 #============================================================================== class Window_Reserve_main < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :mode # モード #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 # width : ウィンドウの幅 # height : ウィンドウの高さ #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) @column_max = 1 self.index = -1 @mode = 0 @total = 0 @value = 0 refresh end #-------------------------------------------------------------------------- # ● アイテムの取得 #-------------------------------------------------------------------------- def item return @data[self.index] end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] for item in $game_party.items next unless include?(item) @data.push(item) if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id self.index = @data.size - 1 end end @data.push(nil) if include?(nil) @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) item = @data[index] if item != nil number = $game_party.item_number(item) enabled = enable?(item) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enabled) self.contents.draw_text(rect, sprintf("%2d", number), 2) self.contents.font.size = 14 rect.width -= 20 self.contents.draw_text(rect, "×", 2) self.contents.font.size = 20 end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(item == nil ? "" : item.description) end #-------------------------------------------------------------------------- # ● モードの設定 # mode : 新しいモード #-------------------------------------------------------------------------- def mode=(mode) if @mode != mode @mode = mode refresh end end #-------------------------------------------------------------------------- # ● アイテムを許可状態で表示するかどうか #-------------------------------------------------------------------------- def enable?(item) if $game_party.keeping_item_number(item) == 99 return false else return true end end #-------------------------------------------------------------------------- # ○ アイテムをリストに含めるかどうか # item : アイテム #-------------------------------------------------------------------------- def include?(item) if BBL_RESERVE_SYSTEM::ITEM_DISCRETION case @mode when 1 # アイテム return false unless item.is_a?(RPG::Item) return false if item.note.include?("だいじなもの") when 2 # 武器 return false unless item.is_a?(RPG::Weapon) return false if item.note.include?("だいじなもの") when 3 # 防具 return false unless item.is_a?(RPG::Armor) return false if item.note.include?("だいじなもの") when 4 # お金 return false end return true else return false if item == nil if $game_temp.in_battle return false unless item.is_a?(RPG::Item) end return false if item.note.include?("だいじなもの") return true end end #-------------------------------------------------------------------------- # ● 所持品アイテムの保管 #-------------------------------------------------------------------------- def gain_item return if item == nil if $game_party.keeping_item_number(item) == 99 Sound.play_buzzer else Sound.play_use_item $game_party.gain_keeping_item(item, 1) $game_party.lose_item(item, 1) end end #-------------------------------------------------------------------------- # ● 所持品アイテムをまとめて保管 #-------------------------------------------------------------------------- def gain_item_all return if item == nil if $game_party.keeping_item_number(item) == 99 Sound.play_buzzer else Sound.play_use_item @total = $game_party.keeping_item_number(item) + $game_party.item_number(item) if @total > 99 @value = @total - 99 end $game_party.gain_keeping_item(item, $game_party.item_number(item)) $game_party.lose_item(item, $game_party.item_number(item)) $game_party.gain_item(item, @value) @total = 0 @value = 0 end end end #============================================================================== # ■ Window_GoldInput #------------------------------------------------------------------------------ # 所持ゴールド入力用のウィンドウです。 #============================================================================== class Window_GoldInput < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :mode # モード attr_accessor :index # インデックス #-------------------------------------------------------------------------- # ● オブジェクト初期化 # digits_max : 桁数 #-------------------------------------------------------------------------- def initialize super(32, 208, 544, 64) @number = 0 @digits_max = 7 @index = @digits_max - 1 @mode = 0 self.opacity = 0 self.active = false self.z += 9999 refresh update_cursor end #-------------------------------------------------------------------------- # ● 数値の取得 #-------------------------------------------------------------------------- def number return @number end #-------------------------------------------------------------------------- # ● モードの取得 # 0:預ける 1:引き出す #-------------------------------------------------------------------------- def mode=(mode) @mode = mode return @mode end #-------------------------------------------------------------------------- # ● 数値の設定 # number : 新しい数値 #-------------------------------------------------------------------------- def number=(number) @number = [[number, 0].max, 10 ** @digits_max - 1].min refresh end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def digits_max return @digits_max end #-------------------------------------------------------------------------- # ● 桁数の設定 # digits_max : 新しい桁数 #-------------------------------------------------------------------------- def digits_max=(digits_max) @digits_max = digits_max refresh end #-------------------------------------------------------------------------- # ● カーソルを右に移動 # wrap : ラップアラウンド許可 #-------------------------------------------------------------------------- def cursor_right(wrap) if @index < @digits_max - 1 or wrap @index = (@index + 1) % @digits_max end end #-------------------------------------------------------------------------- # ● カーソルを左に移動 # wrap : ラップアラウンド許可 #-------------------------------------------------------------------------- def cursor_left(wrap) if @index > 0 or wrap @index = (@index + @digits_max - 1) % @digits_max end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if self.active if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) Sound.play_cursor place = 10 ** (@digits_max - 1 - @index) n = @number / place % 10 @number -= n * place n = (n + 1) % 10 if Input.repeat?(Input::UP) n = (n + 9) % 10 if Input.repeat?(Input::DOWN) @number += n * place refresh end last_index = @index if Input.repeat?(Input::RIGHT) if @index == @digits_max - 1 Sound.play_cursor if @mode == 0 if @number == $game_party.gold @number = 0 else @number = $game_party.gold end elsif @mode == 1 if @number == $game_party.keep_gold @number = 0 else @number = $game_party.keep_gold end end refresh else cursor_right(Input.trigger?(Input::RIGHT)) end end if Input.repeat?(Input::LEFT) if @index == 0 Sound.play_cursor if @mode == 0 if @number == $game_party.gold @number = 0 else @number = $game_party.gold end elsif @mode == 1 if @number == $game_party.keep_gold @number = 0 else @number = $game_party.keep_gold end end refresh else cursor_left(Input.trigger?(Input::LEFT)) end end if @index != last_index Sound.play_cursor end update_cursor end end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color s = sprintf("%0*d", @digits_max, @number) for i in 0...@digits_max self.contents.draw_text(24 + i * 16, 0, 16, WLH, s[i,1], 1) end self.contents.font.color = system_color self.contents.draw_text(24 + (i + 1) * 16, 0, 16, WLH, Vocab::gold) end #-------------------------------------------------------------------------- # ● カーソルの更新 #-------------------------------------------------------------------------- def update_cursor self.cursor_rect.set(24 + @index * 16, 0, 16, WLH) end end #============================================================================== # ■ Window_ReserveGold #------------------------------------------------------------------------------ #  保管ゴールドを表示するウィンドウです。 #============================================================================== class Window_ReserveGold < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 272, WLH + 32) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear draw_currency_value($game_party.keep_gold, 104, 0, 120) self.contents.font.color = system_color self.contents.draw_text(16, 0, 120, WLH, BBL_RESERVE_SYSTEM::RESERVE_GOLD_NAME) end end #============================================================================== # ■ Window_HandGold #------------------------------------------------------------------------------ #  所持ゴールドを表示するウィンドウです。 #============================================================================== class Window_HandGold < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 272, WLH + 32) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear draw_currency_value($game_party.gold, 104, 0, 120) self.contents.font.color = system_color self.contents.draw_text(16, 0, 120, WLH, BBL_RESERVE_SYSTEM::GOLD_NAME) end end #============================================================================== # ■ Window_ReserveCommand #------------------------------------------------------------------------------ #  預かり所のコマンド選択を行うウィンドウです。 #============================================================================== class Window_ReserveCommand < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :commands # コマンド #-------------------------------------------------------------------------- # ● オブジェクト初期化 # width : ウィンドウの幅 # commands : コマンド文字列の配列 # column_max : 桁数 (2 以上なら横選択) # row_max : 列数 (0:コマンド数に合わせる) # spacing : 横に項目が並ぶときの空白の幅 #-------------------------------------------------------------------------- def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32) if row_max == 0 row_max = (commands.size + column_max - 1) / column_max end super(0, 0, width, row_max * WLH + 32, spacing) @commands = commands @item_max = commands.size @column_max = column_max refresh self.index = 0 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 # enabled : 有効フラグ。false のとき半透明で描画 #-------------------------------------------------------------------------- def draw_item(index, enabled = true) rect = item_rect(index) rect.x += 4 rect.width -= 8 self.contents.clear_rect(rect) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(rect, @commands[index], 1) end end