262 lines
No EOL
8.6 KiB
Ruby
262 lines
No EOL
8.6 KiB
Ruby
#==============================================================================
|
||
# ■ 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 |