=begin RGSS3 破壊率設定アイテム Ver.1.11 2012/03/26 mo-to TKOOL COOL http://mototkool.blog.fc2.com/ ★使用法★ スクリプトの▼ 素材 以下 ▼ メイン 以上にこれをコピーして張り付ける。 アイテムのメモ欄に <確率破壊 n%> n=1〜99と記述する。 例)アイテム『ポーション』のメモ欄に <確率破壊 30%> と記述すると   使用したとき30%の確率で『ポーション』が消費される。 ★概要★ 確率で消費されるアイテムを製作できる。 ★更新履歴★ Ver.1.00 シンプル版公開 Ver.1.10 壊れたときメッセージが出るようにした  Ver.1.11 アイテム名も表示できるようにした =end #↓カスタマイズ module MOTO #メニュー画面に表示される壊れたときのメッセージ(制御文字可能) MESSEGE = "\\C[2]壊れてしまった!" #戦闘中に表示される壊れたときのメッセージ BATTLE_MESSEGE = "%sは壊れてしまった!" end #ここまで class RPG::Item < RPG::UsableItem #-------------------------------------------------------------------------- # ☆ メモ欄の取得 #-------------------------------------------------------------------------- def item_break_rate_set @item_break_rate = nil self.note.each_line { |line| case line when /<確率破壊\s*(\d+)([%%])?>/ @item_break_rate = $1.to_i end } end #-------------------------------------------------------------------------- # ☆ 破壊確率取得 #-------------------------------------------------------------------------- def item_break_rate item_break_rate_set if @item_break_rate == nil return @item_break_rate end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ☆ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :lose_item_window # アイテム破壊ウインドウ表示フラグ #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- alias ori_moto_initialize initialize def initialize ori_moto_initialize @lose_item_window = false end #-------------------------------------------------------------------------- # ○ アイテムの消耗 # 指定されたオブジェクトが消耗アイテムであれば、所持数を 1 減らす。 #-------------------------------------------------------------------------- alias ori_moto_consume_item consume_item def consume_item(item) break_rate = rand(100) + 1 if item.item_break_rate != nil && item.item_break_rate < break_rate && item.is_a?(RPG::Item) && item.consumable lose_item(item, 0) elsif item.item_break_rate != nil && item.item_break_rate > break_rate && item.is_a?(RPG::Item) && item.consumable lose_item(item, 1) @lose_item_window= true else ori_moto_consume_item(item) end end end class Window_Mini_Messege < Window_Selectable #-------------------------------------------------------------------------- # ☆ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, window_width, window_height) @item = nil self.visible = false end #-------------------------------------------------------------------------- # ☆ アイテム、最大個数の設定 #-------------------------------------------------------------------------- def set(item) @item = item refresh end #-------------------------------------------------------------------------- # ☆ ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width Graphics.width / 2 end #-------------------------------------------------------------------------- # ☆ ウィンドウ高さの取得 #-------------------------------------------------------------------------- def window_height return 72 end #-------------------------------------------------------------------------- # ☆ リフレッシュ #-------------------------------------------------------------------------- def refresh self.x = (Graphics.width - width) / 2 self.y = (Graphics.height - height) / 2 self.z = 255 draw_item_name(@item, 0, 0) draw_text_ex(0, 26, MOTO::MESSEGE) end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ● 行動結果の表示 #-------------------------------------------------------------------------- def display_action_results(target, item) if target.result.used last_line_number = line_number display_critical(target, item) display_damage(target, item) display_affected_status(target, item) display_failure(target, item) display_lose_item(item) wait if line_number > last_line_number back_to(last_line_number) end end #-------------------------------------------------------------------------- # ☆ アイテムが壊れたときの表示 #-------------------------------------------------------------------------- def display_lose_item(item) if $game_party.lose_item_window add_text(sprintf(MOTO::BATTLE_MESSEGE, item.name)) $game_party.lose_item_window = false wait end end end class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # ○ 開始処理 #-------------------------------------------------------------------------- alias ori_moto_start start def start ori_moto_start create_mini_messege_window end #-------------------------------------------------------------------------- # ☆ ミニウィンドウの作成 #-------------------------------------------------------------------------- def create_mini_messege_window @mini_messege_window = Window_Mini_Messege.new @mini_messege_window.set_handler(:ok, method(:on_winclose_ok)) @mini_messege_window.set_handler(:cancel, method(:on_winclose_cancel)) end #-------------------------------------------------------------------------- # ☆ ミニウィンドウ[おk] #-------------------------------------------------------------------------- def on_winclose_ok @mini_messege_window.hide @actor_window.activate @actor_window.refresh end #-------------------------------------------------------------------------- # ☆ ミニウィンドウ[キャンセル] #-------------------------------------------------------------------------- def on_winclose_cancel @mini_messege_window.hide @actor_window.activate @actor_window.refresh end #-------------------------------------------------------------------------- # ○ アイテムの使用 #-------------------------------------------------------------------------- alias ori_moto_use_item use_item def use_item ori_moto_use_item if $game_party.lose_item_window @actor_window.deactivate @mini_messege_window.set(item) @mini_messege_window.show @mini_messege_window.activate $game_party.lose_item_window = false Input.update end end end