king-exit/Scripts/_.60.rb
2024-08-31 14:17:23 -05:00

262 lines
No EOL
8.6 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ 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