/-   特定のアイテムの所持数を制限   (C)2006 TYPE74RX-T -/ module RX_T_LIM # 初期設定 @rx_t_limit_weapon_num = [] @rx_t_limit_armor_num = [] @rx_t_limit_item_num = [] /-設定例: ここではアイテムID:1・ポーションの最大所持数を24個に     アイテムID:3・フルポーションの最大所持数を48個に     それぞれ設定しています。     お好みにより色々設定して下さい。-/ # -------------★設定ここから★------------- @rx_t_limit_item_num[1] = 24 @rx_t_limit_item_num[3] = 48 # -------------★設定ここまで★------------- def RX_T_LIM.weapon(id, num) if @rx_t_limit_weapon_num[id] != nil if num > @rx_t_limit_weapon_num[id] num = @rx_t_limit_weapon_num[id] end end end def RX_T_LIM.armor(id, num) if @rx_t_limit_armor_num[id] != nil if num > @rx_t_limit_armor_num[id] num = @rx_t_limit_armor_num[id] end end end def RX_T_LIM.item(id, num) if @rx_t_limit_item_num[id] != nil if num > @rx_t_limit_item_num[id] num = @rx_t_limit_item_num[id] end end end def RX_T_LIM.d_weapon(id) if @rx_t_limit_weapon_num[id] != nil num = @rx_t_limit_weapon_num[id] end end def RX_T_LIM.d_armor(id) if @rx_t_limit_armor_num[id] != nil num = @rx_t_limit_armor_num[id] end end def RX_T_LIM.d_item(id) if @rx_t_limit_item_num[id] != nil num = @rx_t_limit_item_num[id] end end end #============================================================================== # ■ Game_Party #------------------------------------------------------------------------------ #  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク # ラスのインスタンスは $game_party で参照されます。 #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ● アイテムの所持数取得 # item_id : アイテム ID #-------------------------------------------------------------------------- def item_number(item_id) # ★ ハッシュに個数データがあれば所持数制限があるかチェック if @items.include?(item_id) rx_num = RX_T_LIM.item(item_id, @items[item_id]) # 所持制限数を超えていたら制限数まで減らす if rx_num != nil @items[item_id] = rx_num end end # ハッシュに個数データがあればその数値を、なければ 0 を返す return @items.include?(item_id) ? @items[item_id] : 0 end #-------------------------------------------------------------------------- # ● 武器の所持数取得 # weapon_id : 武器 ID #-------------------------------------------------------------------------- def weapon_number(weapon_id) # ★ ハッシュに個数データがあれば所持数制限があるかチェック if @weapons.include?(weapon_id) rx_num = RX_T_LIM.weapon(weapon_id, @weapons[weapon_id]) # 所持制限数を超えていたら制限数まで減らす if rx_num != nil @weapons[weapon_id] = rx_num end end # ハッシュに個数データがあればその数値を、なければ 0 を返す return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0 end #-------------------------------------------------------------------------- # ● 防具の所持数取得 # armor_id : 防具 ID #-------------------------------------------------------------------------- def armor_number(armor_id) # ★ ハッシュに個数データがあれば所持数制限があるかチェック if @armors.include?(armor_id) rx_num = RX_T_LIM.armor(armor_id, @armors[armor_id]) # 所持制限数を超えていたら制限数まで減らす if rx_num != nil @armors[armor_id] = rx_num end end # ハッシュに個数データがあればその数値を、なければ 0 を返す return @armors.include?(armor_id) ? @armors[armor_id] : 0 end end #============================================================================== # ■ Window_ShopBuy #------------------------------------------------------------------------------ #  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。 #============================================================================== class Window_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] # アイテムの所持数を取得 case item # -------------★改造ここから★------------- when RPG::Item # ★ 個数制限があるかチェック rx_num = RX_T_LIM.d_item(item.id) number = $game_party.item_number(item.id) when RPG::Weapon # ★ 個数制限があるかチェック rx_num = RX_T_LIM.d_weapon(item.id) number = $game_party.weapon_number(item.id) when RPG::Armor # ★ 個数制限があるかチェック rx_num = RX_T_LIM.d_armor(item.id) number = $game_party.armor_number(item.id) end # ★ 個数制限最終判定 if rx_num == nil rx_num = 99 end # ★ 価格が所持金以下、かつ所持数が 99(若しくは制限個数)でなければ通常文字色に、 # そうでなければ無効文字色に設定 if item.price <= $game_party.gold and number < rx_num self.contents.font.color = normal_color else self.contents.font.color = disabled_color end # -------------★改造ここまで★------------- x = 4 y = index * 32 rect = Rect.new(x, y, self.width - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2) end end #============================================================================== # ■ Scene_Shop #------------------------------------------------------------------------------ #  ショップ画面の処理を行うクラスです。 #============================================================================== class Scene_Shop #-------------------------------------------------------------------------- # ● フレーム更新 (購入ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_buy # ステータスウィンドウのアイテムを設定 @status_window.item = @buy_window.item # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # ウィンドウの状態を初期モードへ @command_window.active = true @dummy_window.visible = true @buy_window.active = false @buy_window.visible = false @status_window.visible = false @status_window.item = nil # ヘルプテキストを消去 @help_window.set_text("") return end # C ボタンが押された場合 if Input.trigger?(Input::C) # アイテムを取得 @item = @buy_window.item # アイテムが無効の場合、または価格が所持金より上の場合 if @item == nil or @item.price > $game_party.gold # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # アイテムの所持数を取得 case @item # -------------★改造ここから★------------- when RPG::Item # ★ 購入数制限があるかチェック rx_num = RX_T_LIM.d_item(@item.id) number = $game_party.item_number(@item.id) when RPG::Weapon # ★ 購入数制限があるかチェック rx_num = RX_T_LIM.d_weapon(@item.id) number = $game_party.weapon_number(@item.id) when RPG::Armor # ★ 購入数制限があるかチェック rx_num = RX_T_LIM.d_armor(@item.id) number = $game_party.armor_number(@item.id) end # ★ 特に購入数制限がなければ購入数を99に。 if rx_num == nil rx_num = 99 end # ★ すでに 99 個(もしくは制限個数分)所持している場合 if number == rx_num # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # -------------★改造ここまで★------------- # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 最大購入可能個数を計算 max = @item.price == 0 ? 99 : $game_party.gold / @item.price max = [max, rx_num - number].min # ウィンドウの状態を個数入力モードへ @buy_window.active = false @buy_window.visible = false @number_window.set(@item, max, @item.price) @number_window.active = true @number_window.visible = true end end end