#============================================================================== # ■ VXAce-RGSS3-29 ショップ-購入分類化 [Ver.1.0.0] by Claimh #------------------------------------------------------------------------------ # 購入リストを分類化します。 #============================================================================== #============================================================================== # ■ Window_ShopBuy #============================================================================== class Window_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_buyct initialize def initialize(*args) initialize_buyct(*args) @category = :none end #-------------------------------------------------------------------------- # ● カテゴリの設定 #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category refresh self.oy = 0 end #-------------------------------------------------------------------------- # ● アイテムリストの作成 <再定義> #-------------------------------------------------------------------------- def make_item_list @data = [] @price = {} @shop_goods.each do |goods| case goods[0] when 0; item = $data_items[goods[1]] when 1; item = $data_weapons[goods[1]] when 2; item = $data_armors[goods[1]] end if item next unless include?(item) @data.push(item) @price[item] = goods[2] == 0 ? item.price : goods[3] end end end #-------------------------------------------------------------------------- # ● アイテムをリストに含めるかどうか #-------------------------------------------------------------------------- def include?(item) case @category when :item item.is_a?(RPG::Item) when :weapon item.is_a?(RPG::Weapon) when :armor item.is_a?(RPG::Armor) else false end end end #============================================================================== # ■ Window_ShopBuyCategory #============================================================================== class Window_ShopBuyCategory < Window_ItemCategory #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(w) @winw = w super() end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width @winw end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max item_max end #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_command(Vocab::item, :item) add_command(Vocab::weapon, :weapon) add_command(Vocab::armor, :armor) end end #============================================================================== # ■ Scene_Shop #============================================================================== class Scene_Shop < Scene_MenuBase #-------------------------------------------------------------------------- # ● 購入ウィンドウの作成 <再定義> #-------------------------------------------------------------------------- def create_buy_window create_buycategory_window wy = @dummy_window.y + @buycategory_window.height wh = @dummy_window.height - @buycategory_window.height @buy_window = Window_ShopBuy.new(0, wy, wh, @goods) @buy_window.viewport = @viewport @buy_window.help_window = @help_window @buy_window.status_window = @status_window @buy_window.hide @buy_window.set_handler(:ok, method(:on_buy_ok)) @buy_window.set_handler(:cancel, method(:on_buy_cancel)) @buycategory_window.item_window = @buy_window end #-------------------------------------------------------------------------- # ● カテゴリウィンドウの作成 #-------------------------------------------------------------------------- def create_buycategory_window @buycategory_window = Window_ShopBuyCategory.new(Graphics.width - @status_window.width) @buycategory_window.viewport = @viewport @buycategory_window.help_window = @help_window @buycategory_window.y = @dummy_window.y @buycategory_window.hide.deactivate @buycategory_window.set_handler(:ok, method(:on_buycategory_ok)) @buycategory_window.set_handler(:cancel, method(:on_buycategory_cancel)) end #-------------------------------------------------------------------------- # ● コマンド[購入する] <再定義> #-------------------------------------------------------------------------- def command_buy @dummy_window.hide @buycategory_window.show.activate @buy_window.show @buy_window.unselect @buy_window.refresh @status_window.show end #-------------------------------------------------------------------------- # ● 購入ウィンドウのアクティブ化 #-------------------------------------------------------------------------- def activate_buy_window @buy_window.money = money @buy_window.show.activate @buycategory_window.show end #-------------------------------------------------------------------------- # ● 購入カテゴリ[決定] #-------------------------------------------------------------------------- def on_buycategory_ok activate_buy_window @buy_window.select(0) end #-------------------------------------------------------------------------- # ● 購入カテゴリ[キャンセル] #-------------------------------------------------------------------------- def on_buycategory_cancel @command_window.activate @dummy_window.show @buycategory_window.hide @buy_window.hide @status_window.hide end #-------------------------------------------------------------------------- # ● 購入[決定] <再定義> #-------------------------------------------------------------------------- def on_buy_ok @item = @buy_window.item @buycategory_window.hide @buy_window.hide @number_window.set(@item, max_buy, buying_price, currency_unit) @number_window.show.activate end #-------------------------------------------------------------------------- # ● 購入[キャンセル] <再定義> #-------------------------------------------------------------------------- def on_buy_cancel @buy_window.unselect @buycategory_window.activate @status_window.item = nil @help_window.clear end end