#============================================================================== # ■ RGSS2 - 物品上限修改 by Calendar99 #------------------------------------------------------------------------------ # 使用方法: 物品/武器/护甲备注中写<持有上限 n>,则持有上限为n # 例 <持有上限 10> <持有上限 = 10> # # 兼容性说明:脚本中覆盖定义较多,请尽量置于其他脚本上方 #============================================================================== module CLD99 module Item ALLOW_GAIN_BY_EVENT = true # 是否允许通过事件强制获得超过上限的道具 # true 允许 false 禁止 DEFAULT_MAX_LIMIT = 999 # 默认持有上限 REG_MAX_LIMIT = /<持有上限[ :=]*(\d+)>/ # 自定义持有上限的正则表达式(没有脚本基础的不要动这个) #-------------------------------------------------------------------------- # ● 获取持有上限 #-------------------------------------------------------------------------- def self.max_limit(note) if note =~ CLD99::Item::REG_MAX_LIMIT then $1.to_i else CLD99::Item::DEFAULT_MAX_LIMIT end end end end class RPG::Item def max_limit;CLD99::Item.max_limit(self.note);end end class RPG::Weapon def max_limit;CLD99::Item.max_limit(self.note);end end class RPG::Armor def max_limit;CLD99::Item.max_limit(self.note);end end class Scene_Shop #-------------------------------------------------------------------------- # ● [覆盖]更新买入选择 #-------------------------------------------------------------------------- def update_buy_selection @status_window.item = @buy_window.item if Input.trigger?(Input::B) Sound.play_cancel @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 if Input.trigger?(Input::C) @item = @buy_window.item number = $game_party.item_number(@item) if @item == nil or @item.price > $game_party.gold or number >= @item.max_limit ##购买条件修正 Sound.play_buzzer else Sound.play_decision max = @item.price == 0 ? @item.max_limit : $game_party.gold / @item.price ## 可购入数量修正 max = [max, @item.max_limit - 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 end class Scene_Battle #-------------------------------------------------------------------------- # ● [覆盖]显示所获得的掉落物品 #-------------------------------------------------------------------------- def display_drop_items drop_items = $game_troop.make_drop_items for item in drop_items next if $game_party.item_number(item) >= item.max_limit ## 战斗掉落修正 $game_party.gain_item(item, 1) text = sprintf(Vocab::ObtainItem, item.name) $game_message.texts.push(text) end wait_for_message end end class Window_ShopBuy #-------------------------------------------------------------------------- # ● [覆盖]绘制商品 # index : 商品索引 #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] number = $game_party.item_number(item) enabled = (item.price <= $game_party.gold and number < item.max_limit) ## 绘制修正 rect = item_rect(index) self.contents.clear_rect(rect) draw_item_name(item, rect.x, rect.y, enabled) rect.width -= 4 self.contents.draw_text(rect, item.price, 2) end end class Game_Party #-------------------------------------------------------------------------- # ● [覆盖]获得/损失物品 #-------------------------------------------------------------------------- def gain_item(item, n, include_equip = false) number = item_number(item) case item when RPG::Item @items[item.id] = [[number + n, 0].max, item.max_limit].min ## 持有上限修正 when RPG::Weapon @weapons[item.id] = [[number + n, 0].max, item.max_limit].min ## 持有上限修正 when RPG::Armor @armors[item.id] = [[number + n, 0].max, item.max_limit].min ## 持有上限修正 end n += number if include_equip and n < 0 for actor in members while n < 0 and actor.equips.include?(item) actor.discard_equip(item) n += 1 end end end end #-------------------------------------------------------------------------- # ● [别名修改]战斗测试队伍设置 #-------------------------------------------------------------------------- alias setup_battle_test_members_for_max_limit setup_battle_test_members def setup_battle_test_members setup_battle_test_members_for_max_limit for i in 1...$data_items.size if $data_items[i].battle_ok? @items[i] = $data_items[i].max_limit unless $data_items[i].name.empty? ## 持有数修正 end end end unless CLD99::Item::ALLOW_GAIN_BY_EVENT # 不是必定运行 #-------------------------------------------------------------------------- # ● [别名修改]获得/损失物品 #-------------------------------------------------------------------------- alias :gain_item_for_limit :gain_item def gain_item(item, n, include_equip = false) return if n > 0 && item_number(item) >= item.max_limit ## 获取修正 gain_item_for_limit(item, n, include_equip) end end end