#============================================================================== # ■ RGSS3 アイテム消耗率設定 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 使用時に消耗するアイテムを使用した際に、消滅する確率を設定できます。 # また、アイテム画面/戦闘画面で、アイテムが消滅した旨が表示されます。 #------------------------------------------------------------------------------ # ★設定方法 #------------------------------------------------------------------------------ # ☆消耗率の場合 #------------------------------------------------------------------------------ #  アイテムのメモ欄に<消耗率:50>と書き込む事で # このアイテムが消費アイテムである場合、使用時に50%の確率で消費されます。 #------------------------------------------------------------------------------ # ☆消耗時メッセージの場合 #------------------------------------------------------------------------------ #  アイテム/スキルのメモ欄に<消耗時メッセージ:は砕け散った!>と書き込む事で # このアイテム/スキルが消費された際、そのメッセージが表示されます。 # この設定が行われていない場合、共通メッセージが表示されます。 # # 例.アイテム名が賢者の石の場合「賢者の石は砕け散った!」と表示。 #============================================================================== # Ver1.01 キャッシュの存在を無視していた問題を修正。 #============================================================================== module CONSUME_ITEM_RATE #消耗率設定用のメッセージを指定します。 WORD1 = "消耗率" #アイテム消耗時のメッセージを指定します。 WORD2 = "消耗時メッセージ" #消耗率100%のアイテムが消費された場合もメッセージを表示するか? TYPE = false #アイテム消耗時のメッセージが設定されていないアイテム用の #共通メッセージを指定します。 TEXT = "は無くなってしまった!" #消費メッセージ表示ウィンドウのZ座標を指定します。 POS_Z = 10000 end class Game_Temp attr_accessor :item_consumed #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_item_consumed initialize def initialize #本来の処理を実行。 initialize_item_consumed #アイテム消耗フラグを無効にする。 @item_consumed = false end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # アイテム消耗処理 #-------------------------------------------------------------------------- alias consume_item_rate consume_item def consume_item(item) #消耗するか否かを判定し、消耗する場合はアイテムを消耗させ #必要に応じて消耗メッセージを表示する。 if item.consume_rate > rand(100) consume_item_rate(item) $game_temp.item_consumed = consume_message_ok?(item) end end #-------------------------------------------------------------------------- # 消耗メッセージ表示可否 #-------------------------------------------------------------------------- def consume_message_ok?(item) item.consume_rate == 100 ? CONSUME_ITEM_RATE::TYPE : true end end class RPG::Item < RPG::UsableItem #-------------------------------------------------------------------------- # 消耗率 #-------------------------------------------------------------------------- def consume_rate #キャッシュが存在する場合はキャッシュを返す。 return @consume_rate if @consume_rate != nil if self.consumable #メモ欄からデータを取得。 memo = self.note.scan(/<#{CONSUME_ITEM_RATE::WORD1}[::](\S+)>/).flatten #データが存在しない場合は100とする。 @consume_rate = memo != nil && !memo.empty? ? memo[0].to_i : 100 else #消耗しない場合は0とする。 @consume_rate = 0 end #データを返す。 @consume_rate end #-------------------------------------------------------------------------- # 被ダメージによるTPチャージ率 #-------------------------------------------------------------------------- def consume_message #キャッシュが存在する場合はキャッシュを返す。 return @consume_message if @consume_message != nil #メモ欄からデータを取得。 memo = self.note.scan(/<#{CONSUME_ITEM_RATE::WORD2}[::](\S+)>/).flatten #データが存在しない場合は100とする。 @consume_message = memo != nil && !memo.empty? ? memo[0] : CONSUME_ITEM_RATE::TEXT #データを返す。 @consume_message end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # スキル/アイテムの使用 #-------------------------------------------------------------------------- alias use_item_consume_rate use_item def use_item #スキル/アイテムを取得。 item = @subject.current_action.item #本来の処理を実行。 use_item_consume_rate #必要に応じて消耗メッセージをログウィンドウに表示。 @log_window.display_consume_item(@subject, item) end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # アイテム消耗の表示を行う。 #-------------------------------------------------------------------------- def display_consume_item(target, item) #アイテム消耗フラグが有効でない場合は飛ばす。 return unless $game_temp.item_consumed #アイテム消耗フラグを消去する。 $game_temp.item_consumed = false #アイテム消耗メッセージを表示する。 add_text(item.name + item.consume_message) #ウェイトを入れる。 wait end end class Scene_Item < Scene_ItemBase #-------------------------------------------------------------------------- # アイテムの使用 #-------------------------------------------------------------------------- alias use_item_consume_rate use_item def use_item #本来の処理を実行。 use_item_consume_rate #アイテムが消費されている場合分岐。 if $game_temp.item_consumed #アイテム消費フラグをfalseにしておく。 $game_temp.item_consumed = false #アイテム消費メッセージを表示するウィンドウを作成。 @i_consume_window = Window_Item_Consume.new #決定キーかキャンセルキーが押されるまでループさせる。 #グラフィックと入力情報のみ、更新し続ける。 loop do Graphics.update Input.update break if Input.trigger?(:C) or Input.trigger?(:B) end #ウィンドウを消去する。 @i_consume_window.dispose @i_consume_window = nil end end end class Window_Item_Consume < Window_Base #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- def initialize #ウィンドウを生成する。 x = 16 y = (Graphics.height - fitting_height(1)) / 2 width = Graphics.width - 32 height = fitting_height(1) super(x, y, width, height) #Z座標を再設定する。 self.z = CONSUME_ITEM_RATE::POS_Z #ウィンドウをリフレッシュする。 refresh end #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- def refresh #アイテムオブジェクトを取得する。 item = $game_party.last_item.object #ウィンドウにメッセージを描写する。 draw_text(0,0,contents.width, contents.height, item.name + item.consume_message, 1) end end