#============================================================================== # ■ RGSS3 アイテム消耗率設定 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 使用時に消耗するアイテムを使用した際に、消滅する確率を設定できます。 # また、アイテム画面/戦闘画面で、アイテムが消滅した旨が表示されます。 #------------------------------------------------------------------------------ # ★設定方法 #------------------------------------------------------------------------------ # ☆消耗率の場合 #------------------------------------------------------------------------------ #  アイテムのメモ欄に<消耗率:50>と書き込む事で # このアイテムが消費アイテムである場合、使用時に50%の確率で消費されます。 #------------------------------------------------------------------------------ # ☆消耗時メッセージの場合 #------------------------------------------------------------------------------ #  アイテム/スキルのメモ欄に<消耗時メッセージ:は砕け散った!>と書き込む事で # このアイテム/スキルが消費された際、そのメッセージが表示されます。 # この設定が行われていない場合、共通メッセージが表示されます。 # # 例.アイテム名が賢者の石の場合「賢者の石は砕け散った!」と表示。 #============================================================================== # Ver1.01 キャッシュの存在を無視していた問題を修正。 #============================================================================== module CONSUME_ITEM_RATE #消耗率設定用のメッセージを指定します。 WORD1 = "消耗率" #アイテム消耗時のメッセージを指定します。 WORD2 = "消耗時メッセージ" #消耗率100%のアイテムが消費された場合もメッセージを表示するか? TYPE = false #アイテム消耗時のメッセージが設定されていないアイテム用の #共通メッセージを指定します。 TEXT = "は無くなってしまった!" #アイテム消耗時のメッセージを表示するウィンドウの横幅を指定します。 WIDTH = 512 #消費メッセージ表示ウィンドウのZ座標を指定します。 POS_Z = 10000 end class Game_Party < Game_Unit attr_accessor :item_consumed #-------------------------------------------------------------------------- # アイテム消耗処理 #-------------------------------------------------------------------------- alias consume_item_rate consume_item def consume_item(item) #消耗するか否かを判定し、消耗する場合はアイテムを消耗させ #必要に応じて消耗メッセージを表示する。 if item.consume_rate > rand(100) consume_item_rate(item) @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 #キャッシュが存在する場合はキャッシュを返す。 @consume_rate ||= consumable ? (/<#{CONSUME_ITEM_RATE::WORD1}[::](\d+)>/ =~ note ? $1.to_i : 100) : 0 end #-------------------------------------------------------------------------- # 消費時メッセージ #-------------------------------------------------------------------------- def consume_message #キャッシュが存在する場合はキャッシュを返す。 @consume_message ||= /<#{CONSUME_ITEM_RATE::WORD2}[::](\S+)>/ =~ note ? $1.to_s : CONSUME_ITEM_RATE::TEXT 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_party.item_consumed #アイテム消耗フラグを消去する。 $game_party.item_consumed = false #アイテム消耗メッセージを表示する。 add_text(item.name + item.consume_message) #ウェイトを入れる。 wait end end class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # アイテムをアクターに対して使用 #-------------------------------------------------------------------------- alias use_item_to_actors_item_consume_rate use_item_to_actors def use_item_to_actors use_item_to_actors_item_consume_rate #アイテムが消費されている場合分岐。 if $game_party.item_consumed && SceneManager.scene.is_a?(Scene_Item) f = @actor_window.active @actor_window.deactivate #アイテム消費フラグをfalseにしておく。 $game_party.item_consumed = false #アイテム消費メッセージを表示するウィンドウをリフレッシュ。 @i_consume_window.refresh #決定キーかキャンセルキーが押されるまでループさせる。 #グラフィックと入力情報のみ、更新し続ける。 @i_consume_window.open while !@i_consume_window.open? update end loop do update if Input.trigger?(:C) Sound.play_ok break elsif Input.trigger?(:B) Sound.play_cancel break end end @i_consume_window.close while !@i_consume_window.close? update end @actor_window.activate if f end end end class Scene_Item < Scene_ItemBase #-------------------------------------------------------------------------- # 開始処理 #-------------------------------------------------------------------------- alias start_item_consume_rate start def start super start_item_consume_rate create_item_consume_window end #-------------------------------------------------------------------------- # 消費ウィンドウの作成 #-------------------------------------------------------------------------- def create_item_consume_window @i_consume_window = Window_Item_Consume.new end end class Window_Item_Consume < Window_Base #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- def initialize #ウィンドウを生成する。 width = CONSUME_ITEM_RATE::WIDTH x = (Graphics.width - width) / 2 height = fitting_height(1) y = (Graphics.height - height) / 2 super(x, y, width, height) #Z座標を再設定する。 self.z = CONSUME_ITEM_RATE::POS_Z #ウィンドウを閉じる。 self.openness = 0 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