#============================================================================== # ■ RGSS2 売却特化ショップ Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 売却に特化したショップを作成します。 # 呼び出す際はイベントコマンドのスクリプトで以下のように記入して下さい。 # # sell_shop(n) # # なお、nの部分には売却レートの数字を入れます。(0以上の数値) # # また、アイテムのメモ欄に「売却不能」(鍵括弧いらず)と記入した場合 # そのアイテムは価格が0でなくとも売却禁止となります。 #============================================================================== #============================================================================== # ■ Window_ShopNumber2 #------------------------------------------------------------------------------ #  ショップ画面で、売却するアイテムの個数を入力するウィンドウです。 #============================================================================== class Window_ShopNumber2 < Window_Base #売却レートにおける売却価格100%の基準はどうするか?(0 購入額 / 1 売却額) VALUE = 1 #売却レートを表示するか?(true 表示 / false 非表示) R_VI = true #売却レートの名称 WORD = "売却レート" attr_reader :value #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 544, 304) @item = nil @max = 1 @price = 0 @number = 1 @value = VALUE end #-------------------------------------------------------------------------- # ● 入力された個数の設定 #-------------------------------------------------------------------------- def number return @number end #-------------------------------------------------------------------------- # ● アイテム、最大個数、価格の設定 #-------------------------------------------------------------------------- def set(item, max, price, sell_rate) @item = item @max = max @price = price @number = 1 @sell_rate = sell_rate refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh y = 96 self.contents.clear draw_item_name(@item, 0, y) self.contents.font.color = normal_color self.contents.draw_text(212, y, 20, WLH, "×") self.contents.draw_text(248, y, 20, WLH, @number, 2) self.cursor_rect.set(244, y, 28, WLH) draw_currency_value(@price * @number, 4, y + WLH * 2, 264) return if !R_VI self.contents.draw_text(250, y + WLH * 2, 200, WLH, "(" + WORD + @sell_rate.to_s + "%" + ")", 2) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if self.active last_number = @number if Input.repeat?(Input::RIGHT) and @number < @max @number += 1 end if Input.repeat?(Input::LEFT) and @number > 1 @number -= 1 end if Input.repeat?(Input::UP) and @number < @max @number = [@number + 10, @max].min end if Input.repeat?(Input::DOWN) and @number > 1 @number = [@number - 10, 1].max end if @number != last_number Sound.play_cursor refresh end end end end #============================================================================== # ■ Window_ShopSell #------------------------------------------------------------------------------ #  ショップ画面で、売却のために所持アイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_ShopSell < Window_Item #-------------------------------------------------------------------------- # ● アイテムを許可状態で表示するかどうか # item : アイテム #-------------------------------------------------------------------------- alias enable_zero? enable? def enable?(item) return false if item.sell_seal enable_zero?(item) end end class Scene_Sell < Scene_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor_index : アクターインデックス # equip_index : 装備インデックス #-------------------------------------------------------------------------- def initialize(rate) @sell_rate = rate end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background create_command_window @help_window = Window_Help.new @gold_window = Window_Gold.new(384, 56) @dummy_window = Window_Base.new(0, 112, 544, 304) @sell_window = Window_ShopSell.new(0, 112, 544, 304) @sell_window.active = false @sell_window.visible = false @sell_window.help_window = @help_window @number_window = Window_ShopNumber2.new(0, 112) @number_window.active = false @number_window.visible = false end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background dispose_command_window @help_window.dispose @gold_window.dispose @dummy_window.dispose @sell_window.dispose @number_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @help_window.update @command_window.update @gold_window.update @dummy_window.update @sell_window.update @number_window.update if @command_window.active update_command_selection elsif @sell_window.active update_sell_selection elsif @number_window.active update_number_input end end #-------------------------------------------------------------------------- # ● コマンドウィンドウの作成 #-------------------------------------------------------------------------- def create_command_window s1 = Vocab::ShopSell s2 = Vocab::ShopCancel @command_window = Window_Command.new(384, [s1, s2], 2) @command_window.y = 56 end #-------------------------------------------------------------------------- # ● コマンドウィンドウの解放 #-------------------------------------------------------------------------- def dispose_command_window @command_window.dispose end #-------------------------------------------------------------------------- # ● コマンド選択の更新 #-------------------------------------------------------------------------- def update_command_selection if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) case @command_window.index when 0 # 売却する if $game_temp.shop_purchase_only Sound.play_buzzer else Sound.play_decision @command_window.active = false @dummy_window.visible = false @sell_window.active = true @sell_window.visible = true @sell_window.refresh end when 1 # やめる Sound.play_decision $scene = Scene_Map.new end end end #-------------------------------------------------------------------------- # ● 売却アイテム選択の更新 #-------------------------------------------------------------------------- def update_sell_selection if Input.trigger?(Input::B) Sound.play_cancel @command_window.active = true @dummy_window.visible = true @sell_window.active = false @sell_window.visible = false @help_window.set_text("") elsif Input.trigger?(Input::C) @item = @sell_window.item if @item == nil or @item.price == 0 or @item.sell_seal Sound.play_buzzer else Sound.play_decision @item_price = @item.price * @sell_rate / 100 @item_price /= 2 if @number_window.value == 1 max = $game_party.item_number(@item) @sell_window.active = false @sell_window.visible = false @number_window.set(@item, max, @item_price, @sell_rate) @number_window.active = true @number_window.visible = true end end end #-------------------------------------------------------------------------- # ● 個数入力の更新 #-------------------------------------------------------------------------- def update_number_input if Input.trigger?(Input::B) cancel_number_input elsif Input.trigger?(Input::C) decide_number_input end end #-------------------------------------------------------------------------- # ● 個数入力のキャンセル #-------------------------------------------------------------------------- def cancel_number_input Sound.play_cancel @number_window.active = false @number_window.visible = false @sell_window.active = true @sell_window.visible = true end #-------------------------------------------------------------------------- # ● 個数入力の決定 #-------------------------------------------------------------------------- def decide_number_input Sound.play_shop @number_window.active = false @number_window.visible = false $game_party.gain_gold(@number_window.number * @item_price) $game_party.lose_item(@item, @number_window.number) @gold_window.refresh @sell_window.refresh @sell_window.active = true @sell_window.visible = true end end class Game_Interpreter def sell_shop(data1 = 100) $game_temp.next_scene = nil $scene = Scene_Sell.new(data1) @wait_count = 1 end end module RPG class Item < UsableItem def sell_seal @note.include?("売却不可") end end class Weapon < BaseItem def sell_seal @note.include?("売却不可") end end class Armor < BaseItem def sell_seal @note.include?("売却不可") end end end