#============================================================================== # ■ RGSS3 アイテム売却による商品追加ショップ ver 1.00 #------------------------------------------------------------------------------ #  配布元: # 白の魔 http://izumiwhite.web.fc2.com/ # #  利用規約: # RPGツクールVX Aceの正規の登録者のみご利用になれます。 # 利用報告・著作権表示とかは必要ありません。 # 改造もご自由にどうぞ。 # 何か問題が発生しても責任は持ちません。 #============================================================================== #-------------------------------------------------------------------------- # ★ 初期設定。 # 販売条件の設定 #-------------------------------------------------------------------------- module WD_addshop_ini I_mat = [] #この行は削除しないこと W_mat = [] #この行は削除しないこと A_mat = [] #この行は削除しないこと #以下、販売条件リスト。 #例: I_mat[3] = [ ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]] #と記載した場合、ID3のアイテムの販売条件は、 #ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個 #の売却となる。 #アイテムの販売条件 I_mat[2] = [["I",1,2]] I_mat[3] = [["I",1,1], ["I",2,1]] I_mat[4] = [["I",1,3]] #武器の販売条件 W_mat[3] = [["W",1,1], ["W",2,1]] W_mat[6] = [["W",3,1], ["I",16,1]] #防具の販売条件 A_mat[2] = [["A",1,2]] A_mat[5] = [["A",2,1], ["W",2,2], ["I",16,1]] end #============================================================================== # ■ WD_addshop #------------------------------------------------------------------------------ #  アイテム売却による商品追加ショップの共通メソッドです。 #============================================================================== module WD_addshop def i_add_switch_on(id) $game_system.i_add_sw = [] if $game_system.i_add_sw == nil $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil $game_system.i_add_sw[id] = true end def i_add_switch_off(id) $game_system.i_add_sw = [] if $game_system.i_add_sw == nil $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil $game_system.i_add_sw[id] = false end def i_add_switch_on?(id) $game_system.i_add_sw = [] if $game_system.i_add_sw == nil $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil return $game_system.i_add_sw[id] end def w_add_switch_on(id) $game_system.w_add_sw = [] if $game_system.w_add_sw == nil $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil $game_system.w_add_sw[id] = true end def w_add_switch_off(id) $game_system.w_add_sw = [] if $game_system.w_add_sw == nil $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil $game_system.w_add_sw[id] = false end def w_add_switch_on?(id) $game_system.w_add_sw = [] if $game_system.w_add_sw == nil $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil return $game_system.w_add_sw[id] end def a_add_switch_on(id) $game_system.a_add_sw = [] if $game_system.a_add_sw == nil $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil $game_system.a_add_sw[id] = true end def a_add_switch_off(id) $game_system.a_add_sw = [] if $game_system.a_add_sw == nil $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil $game_system.a_add_sw[id] = false end def a_add_switch_on?(id) $game_system.a_add_sw = [] if $game_system.a_add_sw == nil $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil return $game_system.a_add_sw[id] end def item_add_switch_on(item) if item.is_a?(RPG::Item) i_add_switch_on(item.id) end if item.is_a?(RPG::Weapon) w_add_switch_on(item.id) end if item.is_a?(RPG::Armor) a_add_switch_on(item.id) end end def item_add_switch_on?(item) if item.is_a?(RPG::Item) return i_add_switch_on?(item.id) end if item.is_a?(RPG::Weapon) return w_add_switch_on?(item.id) end if item.is_a?(RPG::Armor) return a_add_switch_on?(item.id) end end def i_sell_num(id) $game_system.i_sell_num = [] if $game_system.i_sell_num == nil $game_system.i_sell_num[id] = 0 if $game_system.i_sell_num[id] == nil return $game_system.i_sell_num[id] end def i_sell_num_puls(id, n) $game_system.i_sell_num = [] if $game_system.i_sell_num == nil $game_system.i_sell_num[id] = 0 if $game_system.i_sell_num[id] == nil $game_system.i_sell_num[id] += n end def w_sell_num(id) $game_system.w_sell_num = [] if $game_system.w_sell_num == nil $game_system.w_sell_num[id] = 0 if $game_system.w_sell_num[id] == nil return $game_system.w_sell_num[id] end def w_sell_num_puls(id, n) $game_system.w_sell_num = [] if $game_system.w_sell_num == nil $game_system.w_sell_num[id] = 0 if $game_system.w_sell_num[id] == nil $game_system.w_sell_num[id] += n end def a_sell_num(id) $game_system.a_sell_num = [] if $game_system.a_sell_num == nil $game_system.a_sell_num[id] = 0 if $game_system.a_sell_num[id] == nil return $game_system.a_sell_num[id] end def a_sell_num_puls(id, n) $game_system.a_sell_num = [] if $game_system.a_sell_num == nil $game_system.a_sell_num[id] = 0 if $game_system.a_sell_num[id] == nil $game_system.a_sell_num[id] += n end def item_sell_num(item) if item.is_a?(RPG::Item) return i_sell_num(item.id) end if item.is_a?(RPG::Weapon) return w_sell_num(item.id) end if item.is_a?(RPG::Armor) return a_sell_num(item.id) end end def item_sell_num_puls(item, n) if item.is_a?(RPG::Item) i_sell_num_puls(item.id, n) end if item.is_a?(RPG::Weapon) w_sell_num_puls(item.id, n) end if item.is_a?(RPG::Armor) a_sell_num_puls(item.id, n) end end end class Game_Interpreter include WD_addshop end class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :i_add_sw attr_accessor :w_add_sw attr_accessor :a_add_sw attr_accessor :i_sell_num attr_accessor :w_sell_num attr_accessor :a_sell_num #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias wd_orig_initialize005 initialize def initialize wd_orig_initialize005 @i_add_sw = [] @w_add_sw = [] @a_add_sw = [] @i_sell_num = [] @w_sell_num = [] @a_sell_num = [] end end #============================================================================== # ■ Scene_AddShop #------------------------------------------------------------------------------ #  アイテム売却による商品追加ショップの画面の処理を行うクラスです。 #============================================================================== class Scene_AddShop < Scene_Shop include WD_addshop #-------------------------------------------------------------------------- # ● 準備 #-------------------------------------------------------------------------- def initialize get_goods @purchase_only = false @add_list = [] end #-------------------------------------------------------------------------- # ● 商品の取得 #-------------------------------------------------------------------------- def get_goods @goods = [] for i in 1...$data_items.size if i_add_switch_on?(i) @goods.push([0,i,0,0]) end end for i in 1...$data_weapons.size if w_add_switch_on?(i) @goods.push([1,i,0,0]) end end for i in 1...$data_armors.size if a_add_switch_on?(i) @goods.push([2,i,0,0]) end end end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_add_window end #-------------------------------------------------------------------------- # ● 商品追加ウィンドウの作成 #-------------------------------------------------------------------------- def create_add_window @add_window = Window_ShopAdd.new @add_window.viewport = @viewport @add_window.set_handler(:ok, method(:on_add_ok)) @add_window.hide.deactivate end #-------------------------------------------------------------------------- # ● 売却ウィンドウのアクティブ化 #-------------------------------------------------------------------------- def activate_add_window @add_window.item = @add_list.shift @add_window.show.active end #-------------------------------------------------------------------------- # ● 個数入力の終了 #-------------------------------------------------------------------------- def end_number_input case @command_window.current_symbol when :buy @number_window.hide activate_buy_window when :sell if @add_list.size > 0 activate_add_window else @number_window.hide activate_sell_window end end end #-------------------------------------------------------------------------- # ● 売却の実行 #-------------------------------------------------------------------------- def do_sell(number) super(number) item_sell_num_puls(@item, number) get_add_item_list end #-------------------------------------------------------------------------- # ● 商品追加ウィンドウ入力時の処理 #-------------------------------------------------------------------------- def on_add_ok @add_window.hide.deactivate if @add_list.size > 0 activate_add_window else @number_window.hide activate_sell_window end end #-------------------------------------------------------------------------- # ● 追加商品のリストの取得 #-------------------------------------------------------------------------- def get_add_item_list @add_list = [] for i in 1..WD_addshop_ini::I_mat.size mats = WD_addshop_ini::I_mat[i] if mats if i_add_switch_on?(i) == false add_flag = get_add_flag(mats) if add_flag @add_list.push($data_items[i]) i_add_switch_on(i) end end end end for i in 1..WD_addshop_ini::W_mat.size mats = WD_addshop_ini::W_mat[i] if mats if w_add_switch_on?(i) == false add_flag = get_add_flag(mats) if add_flag @add_list.push($data_weapons[i]) w_add_switch_on(i) end end end end for i in 1..WD_addshop_ini::A_mat.size mats = WD_addshop_ini::A_mat[i] if mats if a_add_switch_on?(i) == false add_flag = get_add_flag(mats) if add_flag @add_list.push($data_armors[i]) a_add_switch_on(i) end end end end get_goods @buy_window.set_add_goods(@goods) @buy_window.refresh end #-------------------------------------------------------------------------- # ● 商品追加フラグの取得 #-------------------------------------------------------------------------- def get_add_flag(mats) add_flag = true for j in 0...mats.size kind = mats[j][0] id = mats[j][1] num = mats[j][2] if kind == "I" item = $data_items[id] elsif kind == "W" item = $data_weapons[id] elsif kind == "A" item = $data_armors[id] end if item_sell_num(item) < num add_flag = false end end return add_flag end end class Window_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- # ● 商品の設定 #-------------------------------------------------------------------------- def set_add_goods(goods) @shop_goods = goods end end #============================================================================== # ■ Window_ShopAdd #------------------------------------------------------------------------------ #  追加商品を表示するウィンドウです。 #============================================================================== class Window_ShopAdd < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(170, 200, 204, 72) @item = nil refresh activate end #-------------------------------------------------------------------------- # ● アイテムの設定 #-------------------------------------------------------------------------- def item=(item) return if @item == item @item = item refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear change_color(system_color) draw_text(0, 0, 180, line_height, "商品の追加") if @item draw_item_name(@item, 0, line_height, true) end end #-------------------------------------------------------------------------- # ● 決定やキャンセルなどのハンドリング処理 #-------------------------------------------------------------------------- def process_handling return unless open? && visible return process_ok if ok_enabled? && Input.trigger?(:C) end #-------------------------------------------------------------------------- # ● 決定ボタンが押されたときの処理 #-------------------------------------------------------------------------- def process_ok Sound.play_cursor Input.update deactivate call_ok_handler end end