#============================================================================== # カテゴリ別所持数制限 ver1.00 #------------------------------------------------------------------------------ #[特徴] # アイテムに独自のカテゴリを設定し、そのカテゴリ毎に所持数を制限します。 # #[設定方法] # アイテムのメモ欄に <カテゴリ:名称> と書く。 # 例) <カテゴリ:薬品> # カテゴリは複数設定可能です。 # 複数設定した場合は、いずれかのカテゴリで所持限界を越える場合、取得できません。 # #[特殊設定] # アイテムに関しては、【アイテム】が自動でカテゴリ設定されます。 # 武器に関しても、【武器】【武器タイプの名称】が自動でカテゴリ設定されます。 # 防具に関しても、【防具】【防具タイプの名称】が自動でカテゴリ設定されます。 # 例)ハンドアクスはメモ欄に記述しなくても、【武器】と【斧】がカテゴリ設定される。 # # 設定項目で、【武器】や【斧】を設定しなければ、所持制限に触れません。 # #[操作方法] # イベントコマンドで以下の記述をすることで、制限数の操作が可能です。 # ・所持制限数の変更 # change_carry_limit("薬品", 30) # ・所持制限数の増加 # plus_carry_limit("薬品", 10) # ・所持数の獲得 # get_category_number("薬品") # 変数の操作で、スクリプトにこの記述をすることで、 # その変数に所持数を代入することができます。 # 武器や防具は装備している数も含めます。 # # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module CategoryCarryLimit CARRY_LIMIT = { "薬品" => 20, "武器" => 50, "防具" => 50, } end end #============================================================================== # ここまで #============================================================================== $kzr_imported = {} if $kzr_imported == nil $kzr_imported["CategoryCarryLimit"] = true #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 装備の変更 #-------------------------------------------------------------------------- alias kzr_category_carry_limit_change_equip change_equip def change_equip(slot_id, item) change_item = equips[slot_id] get_again = change_item ? $game_party.item_max?(change_item) : false kzr_category_carry_limit_change_equip(slot_id, item) $game_party.gain_item(change_item, 1) if get_again end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :category_carry_limit #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias kzr_category_carry_limit_initialize initialize def initialize kzr_category_carry_limit_initialize @category_carry_limit = Kazari::CategoryCarryLimit::CARRY_LIMIT end #-------------------------------------------------------------------------- # ● アイテムを最大まで所持しているか判定 #-------------------------------------------------------------------------- alias kzr_category_carry_limit_item_max? item_max? def item_max?(item) item.category_name.each {|c| next unless @category_carry_limit.include?(c) return true if get_carry_number(c) >= @category_carry_limit[c] } kzr_category_carry_limit_item_max?(item) end #-------------------------------------------------------------------------- # ● アイテムの増加(減少) #-------------------------------------------------------------------------- alias kzr_category_carry_limit_gain_item gain_item def gain_item(item, amount, include_equip = false) container = item_container(item.class) return unless container if amount > 0 item.category_name.each {|c| next unless @category_carry_limit.include?(c) num = @category_carry_limit[c] - get_carry_number(c) amount = [amount, num].min } end kzr_category_carry_limit_gain_item(item, amount, include_equip) end #-------------------------------------------------------------------------- # ● 所持限界数の変更 #-------------------------------------------------------------------------- def change_carry_limit(category, number) @category_carry_limit[category] = number end #-------------------------------------------------------------------------- # ● 所持限界数の増加 #-------------------------------------------------------------------------- def plus_carry_limit(category, number) @category_carry_limit[category] += number end #-------------------------------------------------------------------------- # ● 所持数の取得(装備品含む) #-------------------------------------------------------------------------- def get_carry_number(category) number = all_items.inject(0) {|r, i| r += i.category?(category) ? item_number(i) : 0 } members.inject(number) {|r, m| r += m.equips.compact.count {|item| item.category?(category) } } end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 所持限界数の変更 #-------------------------------------------------------------------------- def change_carry_limit(category, number) $game_party.change_carry_limit(category, number) end #-------------------------------------------------------------------------- # ● 所持限界数の増加 #-------------------------------------------------------------------------- def plus_carry_limit(category, number) $game_party.plus_carry_limit(category, number) end #-------------------------------------------------------------------------- # ● 所持数の取得 #-------------------------------------------------------------------------- def get_carry_number(category) $game_party.get_carry_number(category) end end #============================================================================== # ■ Scene_Shop #============================================================================== class Scene_Shop < Scene_MenuBase #-------------------------------------------------------------------------- # ● 最大購入可能個数の取得 #-------------------------------------------------------------------------- alias kzr_category_carry_limit_max_buy max_buy def max_buy max = kzr_category_carry_limit_max_buy @item.category_name.each {|c| next unless $game_party.category_carry_limit.include?(c) num = $game_party.category_carry_limit[c] - $game_party.get_carry_number(c) max = [max, num].min } max end end #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem def category_name category = [] note.each_line { |line| case line when /<カテゴリ:(\S+)>/ ; category << $1.to_s end } category end def category?(cname) category_name.include?(cname) end end #============================================================================== # ■ RPG::Item #============================================================================== class RPG::Item < RPG::UsableItem def category_name category = super category << "アイテム" category end end #============================================================================== # ■ RPG::Weapon #============================================================================== class RPG::Weapon < RPG::EquipItem def category_name category = super category << "武器" category << $data_system.weapon_types[@wtype_id] category end end #============================================================================== # ■ RPG::Armor #============================================================================== class RPG::Armor < RPG::EquipItem def category_name category = super category << "防具" category << $data_system.armor_types[@atype_id] category end end