#============================================================================== # ■ XP-RGSS-62 まとめ買いショップ [Ver.1.1.0] by Claimh #============================================================================== #============================================================================== # ■ Scene_Shop #============================================================================== class Scene_Shop 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 main start # 開始処理 Graphics.transition # トランジション実行 loop do Graphics.update # ゲーム画面を更新 Input.update # 入力情報を更新 update # フレーム更新 break if $scene != self # 画面が切り替わったらループを中断 end Graphics.update Graphics.freeze # トランジション準備 terminate # 終了処理 end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start @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 @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) $game_system.se_play($data_system.cancel_se) exit_shop elsif Input.trigger?(Input::C) # コマンドウィンドウのカーソル位置で分岐 case @command_window.index when 0,1 # 購入する, 売却する unless @list_window.can_select? $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) @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? $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) @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 # やめる $game_system.se_play($data_system.decision_se) 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) $game_system.se_play($data_system.cancel_se) return_command elsif Input.trigger?(Input::C) if !ShopEx::USE_MENU_EQUIP and @command_window.index == 2 unless @list_window.index_active? $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) # アイテム使用 or 装備変更 へ @equip_window.refresh_equip(@list_window.item) @list_window.active = false return elsif @list_window.total_price == 0 # $game_system.se_play($data_system.buzzer_se) # return @list_window.up(1) # 個数を+1して続ける @need_reset = true end $game_system.se_play($data_system.decision_se) ## 売買処理へ @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 $game_system.se_play($data_system.decision_se) @list_window.active = false unless INFO_FLEX @info_window.visible = !@info_window.visible elsif Input.trigger?(Input::A) $game_system.se_play(@status_window.change_mode ? $data_system.cursor_se : $data_system.buzzer_se) elsif Input.repeat?(Input::LEFT) return if @command_window.index == 2 n = Input.press?(Input::CTRL) ? 10 : 1 $game_system.se_play(@list_window.up(n) ? $data_system.cursor_se : $data_system.buzzer_se) elsif Input.repeat?(Input::RIGHT) return if @command_window.index == 2 n = Input.press?(Input::CTRL) ? 10 : 1 $game_system.se_play(@list_window.dw(n) ? $data_system.cursor_se : $data_system.buzzer_se) end end #-------------------------------------------------------------------------- # ● フレーム更新 (購入ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_sale @sale_cmd_window.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @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 $game_system.se_play($data_system.shop_se) @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 $game_system.se_play($data_system.decision_se) @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) $game_system.se_play($data_system.cancel_se) @list_window.active = true @info_window.visible = false elsif Input.trigger?(Input::C) or Input.trigger?(Input::X) $game_system.se_play($data_system.decision_se) @list_window.active = true @info_window.visible = false elsif Input.trigger?(Input::A) $game_system.se_play(@status_window.change_mode ? $data_system.cursor_se : $data_system.buzzer_se) end end #-------------------------------------------------------------------------- # ● フレーム更新 (アクター選択ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_equip @equip_window.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) 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 $game_system.se_play($data_system.decision_se) $scene = Scene_Equip.new(@equip_window.index, 0, 1) else if !@equip_window.c_enable? $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.equip_se) 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 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # 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 #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_shop_ex update def update update_shop_ex if @back_scene == 1 and $scene != self case $scene when Scene_Menu; $scene = Scene_Shop.new(2, @actor_index) when Scene_Equip; $scene = Scene_Equip.new(@actor_index, @right_window.index, @back_scene) end end end end end # ShopEx::USE_MENU_EQUIP