#============================================================================== # ■ VX-RGSS2-14 まとめ買いショップ [Ver.1.1.0] by Claimh #============================================================================== #============================================================================== # ■ Scene_Shop #============================================================================== class Scene_Shop < Scene_Base INFO_LOCK = true # infoウィンドウ表示中はアイテムをロックする INFO_FLEX = true # infoウィンドウ表示中にもアイテム選択可能とする # ※LOCKとFLEXがfalseならばinfoは表示しない。 #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def initialize(index=0, actor_index=0) @index = index @actor_index = actor_index end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start create_menu_background @help_window = Window_Help.new @command_window = Window_ShopCommand.new @gold_window = Window_ShopGold.new @status_window = Window_ShopStatus.new @list_window = Window_ShopList.new @sale_window = Window_ShopSale.new @info_window = Window_ShopItemInfo.new @sale_cmd_window = Window_ShopSaleCommand.new @total_window = Window_ShopItemsGold.new @equip_window = Window_ShopEquipParty.new(@actor_index) # @list_window.help_window = @help_window @list_window.total_window = @total_window @command_window.help_window = @list_window # return unless ShopEx::USE_MENU_EQUIP @command_window.index = @index if @index == 2 @command_window.active = false @equip_window.show(true) end @need_reset = false end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate dispose_menu_background @help_window.dispose @command_window.dispose @gold_window.dispose @total_window.dispose @list_window.dispose @status_window.dispose @sale_window.dispose @sale_cmd_window.dispose @info_window.dispose @equip_window.dispose end #-------------------------------------------------------------------------- # ● ショップ終わり #-------------------------------------------------------------------------- def exit_shop $scene = Scene_Map.new end def return_command @command_window.active = true @list_window.active = false @help_window.set_text("") @status_window.item = nil @info_window.item = nil @info_window.visible = false end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update if @command_window.active update_command elsif @info_window.visible and INFO_LOCK update_info elsif @equip_window.active update_equip elsif @list_window.active update_list elsif @sale_cmd_window.active update_sale end end #-------------------------------------------------------------------------- # ● フレーム更新 (コマンドウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_command @command_window.update if Input.trigger?(Input::B) Sound.play_cancel exit_shop elsif Input.trigger?(Input::C) # コマンドウィンドウのカーソル位置で分岐 case @command_window.index when 0,1 # 購入する, 売却する if !@list_window.can_select? or !@command_window.enable?(@command_window.index) Sound.play_buzzer return end Sound.play_decision @command_window.active = false @list_window.init_index @list_window.active = true @list_window.update_help when 2 # 装備変更 if !ShopEx::USE_MENU_EQUIP and !@list_window.can_select? Sound.play_buzzer return end Sound.play_decision @command_window.active = false if ShopEx::USE_MENU_EQUIP @equip_window.show(true) else @list_window.init_index @list_window.active = true @list_window.update_help end when 3 # やめる Sound.play_decision exit_shop end end end #-------------------------------------------------------------------------- # ● フレーム更新 (リストウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_list @list_window.update @status_window.item = @list_window.item @info_window.item = @list_window.item if Input.trigger?(Input::B) Sound.play_cancel return_command elsif Input.trigger?(Input::C) if !ShopEx::USE_MENU_EQUIP and @command_window.index == 2 unless @list_window.index_active? Sound.play_buzzer return end Sound.play_decision # アイテム使用 or 装備変更 へ @equip_window.refresh_equip(@list_window.item) @list_window.active = false return elsif @list_window.total_price == 0 # Sound.play_buzzer # return @list_window.up(1) # 個数を+1して続ける @need_reset = true end Sound.play_decision ## 売買処理へ @list_window.active = false @sale_window.refresh(@list_window.item_list) @sale_window.visible = true @sale_cmd_window.show(true) elsif Input.trigger?(Input::X) return if !INFO_LOCK and !INFO_FLEX Sound.play_decision @list_window.active = false unless INFO_FLEX @info_window.visible = !@info_window.visible elsif Input.trigger?(Input::Y) @status_window.change_mode ? Sound.play_cursor : Sound.play_buzzer elsif Input.repeat?(Input::LEFT) return if @command_window.index == 2 n = Input.press?(Input::CTRL) ? 10 : 1 @list_window.up(n) ? Sound.play_cursor : Sound.play_buzzer elsif Input.repeat?(Input::RIGHT) return if @command_window.index == 2 n = Input.press?(Input::CTRL) ? 10 : 1 @list_window.dw(n) ? Sound.play_cursor : Sound.play_buzzer end end #-------------------------------------------------------------------------- # ● フレーム更新 (購入ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_sale @sale_cmd_window.update if Input.trigger?(Input::B) Sound.play_cancel @list_window.active = true @sale_window.visible = false @sale_cmd_window.show(false) if @need_reset # total0状態に戻す @list_window.dw(1) @need_reset = false end elsif Input.trigger?(Input::C) case @sale_cmd_window.index when 0 Sound.play_shop @list_window.active = true @list_window.sale @sale_window.visible = false @sale_cmd_window.show(false) @gold_window.refresh return_command unless @list_window.can_select? # アイテムが無くなった when 1 Sound.play_decision @list_window.active = true @sale_window.visible = false @sale_cmd_window.show(false) end end end #-------------------------------------------------------------------------- # ● フレーム更新 (情報ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_info @list_window.update if INFO_FLEX @status_window.item = @list_window.item @info_window.item = @list_window.item if Input.trigger?(Input::B) Sound.play_cancel @list_window.active = true @info_window.visible = false elsif Input.trigger?(Input::C) or Input.trigger?(Input::X) Sound.play_decision @list_window.active = true @info_window.visible = false elsif Input.trigger?(Input::Y) @status_window.change_mode ? Sound.play_cursor : Sound.play_buzzer end end #-------------------------------------------------------------------------- # ● フレーム更新 (アクター選択ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_equip @equip_window.update if Input.trigger?(Input::B) Sound.play_cancel if ShopEx::USE_MENU_EQUIP @command_window.active = true else @list_window.active = true end @equip_window.show(false) elsif Input.trigger?(Input::C) if ShopEx::USE_MENU_EQUIP Sound.play_decision $scene = Scene_Equip.new(@equip_window.index, 0, 1) else if !@equip_window.c_enable? Sound.play_buzzer return end Sound.play_equip if @list_window.equip_item(@equip_window.index) @list_window.active = true @equip_window.show(false) end unless @list_window.can_select? # アイテムが無くなった return_command else @status_window.item = @list_window.item end end end end end #============================================================================== # ■ Scene_Equip #------------------------------------------------------------------------------ #  装備画面の処理を行うクラスです。 #============================================================================== if ShopEx::USE_MENU_EQUIP class Scene_Equip < Scene_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor_index : アクターインデックス # equip_index : 装備インデックス #-------------------------------------------------------------------------- def initialize(actor_index = 0, equip_index = 0, back=0) @actor_index = actor_index @equip_index = equip_index @back_scene = back end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene if @back_scene == 1 $scene = Scene_Shop.new(2, @actor_index) else $scene = Scene_Menu.new(2) end end #-------------------------------------------------------------------------- # ● 次のアクターの画面に切り替え #-------------------------------------------------------------------------- def next_actor @actor_index += 1 @actor_index %= $game_party.members.size $scene = Scene_Equip.new(@actor_index, @equip_window.index, @back_scene) end #-------------------------------------------------------------------------- # ● 前のアクターの画面に切り替え #-------------------------------------------------------------------------- def prev_actor @actor_index += $game_party.members.size - 1 @actor_index %= $game_party.members.size $scene = Scene_Equip.new(@actor_index, @equip_window.index, @back_scene) end end end # ShopEx::USE_MENU_EQUIP