131 lines
No EOL
5.3 KiB
Ruby
131 lines
No EOL
5.3 KiB
Ruby
#==============================================================================
|
||
# ■ RGSS3 行動者・対象者ID・使用スキル/アイテムID変数格納 Ver1.01 by 星潟
|
||
#------------------------------------------------------------------------------
|
||
# 行動直前に、行動者と対象者のIDを変数に格納します。
|
||
# アクターの場合はアクターIDを格納します。(1~?)
|
||
# 敵の場合は、敵グループ内のIDを-1で掛けた物を格納します。(0~-7)
|
||
# 複数の相手を対象とするスキルの場合、最後の対象が変数に格納されます。
|
||
# 変数の格納を、特定のアイテム・スキルでのみ行うようにする設定も可能です。
|
||
#
|
||
# 素材導入位置は、素材欄のなるべく下にするようにして下さい。
|
||
#==============================================================================
|
||
# Ver1.01 「対象者を選択するが適切な効果対象が存在しないスキル」を使用した場合
|
||
# エラー落ちしてしまう致命的な不具合を修正。
|
||
# 例.戦闘不能の味方がいない状態で戦闘不能者を対象としたアイテムを使用。
|
||
#==============================================================================
|
||
module SELF_AND_TARGET
|
||
|
||
#全てのアイテム・スキルで変数格納を行うか(true 行う/false 行わない)
|
||
|
||
ALL = true
|
||
|
||
#ALLがfalseの時、変数格納を行うスキルかどうかを判定する
|
||
#メモ欄に「<変数格納>」と記入した場合、行動者・対象者IDを変数に格納する。(鍵括弧含まず)
|
||
|
||
WORD = "<変数格納>"
|
||
|
||
#使用者のIDを格納する変数を指定します。
|
||
|
||
SV = 190
|
||
|
||
#対象者のIDを格納する変数を指定します。
|
||
|
||
TV = 190
|
||
|
||
#使用を試みたスキルのIDを格納する変数を指定します。
|
||
#使用したのがスキルでなければ、0が格納されます。
|
||
|
||
SI = 299
|
||
|
||
#使用を試みたアイテムのIDを格納する変数を指定します。
|
||
#使用したのがアイテムでなければ、0が格納されます。
|
||
|
||
II = 190
|
||
|
||
end
|
||
class Game_Action
|
||
attr_accessor :targets_data
|
||
#--------------------------------------------------------------------------
|
||
# ターゲットの配列作成
|
||
#--------------------------------------------------------------------------
|
||
# alias make_targets_premake make_targets
|
||
# def make_targets
|
||
|
||
#ターゲットを先に作成します。
|
||
|
||
# @targets_data ||= make_targets_premake
|
||
|
||
# end
|
||
#--------------------------------------------------------------------------
|
||
# クリア
|
||
#--------------------------------------------------------------------------
|
||
alias clear_premake clear
|
||
def clear
|
||
|
||
#本来の処理を実行します。
|
||
|
||
clear_premake
|
||
|
||
#ターゲットデータをnilにします。
|
||
|
||
@targets_data = nil
|
||
|
||
end
|
||
end
|
||
class Scene_Battle < Scene_Base
|
||
#--------------------------------------------------------------------------
|
||
# スキル/アイテムの使用
|
||
#--------------------------------------------------------------------------
|
||
alias use_item_self_and_target use_item
|
||
def use_item
|
||
|
||
#全てのスキル/アイテムで変数を格納する場合か
|
||
#そのスキル/アイテムが変数を格納する設定の場合は更に分岐。
|
||
|
||
if SELF_AND_TARGET::ALL or @subject.current_action.item.variables_get_is?
|
||
|
||
#使用者の変数にデータを格納。
|
||
|
||
$game_variables[SELF_AND_TARGET::SV] = @subject.actor? ? @subject.id : @subject.index * -1
|
||
|
||
#ターゲットを作成。
|
||
|
||
targets = @subject.current_action.make_targets.compact
|
||
|
||
#ターゲットが1体以上存在する場合は最終ターゲットを。
|
||
#存在しない場合は使用者スキルに読み替え、使用者を最終ターゲットとする。
|
||
if targets && targets.size > 0
|
||
t = targets[targets.size - 1]
|
||
$game_variables[SELF_AND_TARGET::TV] = t.actor? ? t.id : -t.index
|
||
else
|
||
$game_variables[SELF_AND_TARGET::TV] = @subject.actor? ? @subject.id : @subject.index
|
||
end
|
||
|
||
#スキルID/アイテムIDを格納。
|
||
#それぞれ、スキルでない場合、アイテムでない場合は0を格納する。
|
||
|
||
if @subject.current_action.item.is_a?(RPG::Skill)
|
||
$game_variables[SELF_AND_TARGET::SI] = @subject.current_action.item.id
|
||
$game_variables[SELF_AND_TARGET::II] = 0
|
||
elsif @subject.current_action.item.is_a?(RPG::Item)
|
||
$game_variables[SELF_AND_TARGET::SI] = 0
|
||
$game_variables[SELF_AND_TARGET::II] = @subject.current_action.item.id
|
||
else
|
||
$game_variables[SELF_AND_TARGET::SI] = 0
|
||
$game_variables[SELF_AND_TARGET::II] = 0
|
||
end
|
||
end
|
||
|
||
#本来の処理を実行。
|
||
|
||
use_item_self_and_target
|
||
end
|
||
end
|
||
class RPG::BaseItem
|
||
#--------------------------------------------------------------------------
|
||
# 変数を格納するアイテム/スキルか?
|
||
#--------------------------------------------------------------------------
|
||
def variables_get_is?
|
||
@variables_get_is ||= @note.include?(SELF_AND_TARGET::WORD)
|
||
end
|
||
end |