#============================================================================== # ■ RGSS3 行動者・対象者ID・使用スキル/アイテムID変数格納 Ver1.03 by 星潟 #------------------------------------------------------------------------------ # 行動直前に、行動者と対象者のIDを変数に格納します。 # アクターの場合はアクターIDを格納します。(1〜?) # 敵の場合は、敵グループ内のIDを-1で掛けた物を格納します。(0〜-7) # 複数の相手を対象とするスキルの場合、最後の対象が変数に格納されます。 # 変数の格納を、特定のアイテム・スキルでのみ行うようにする設定も可能です。 # # 素材導入位置は、素材欄のなるべく下にするようにして下さい。 #============================================================================== # ALLがfalseの場合のみ、スキル/アイテムのメモ欄に指定。(trueの場合は全てが対象) #------------------------------------------------------------------------------ # <変数格納> # # このスキル/アイテムを使用時、変数にIDを格納する。 #============================================================================== # イベントコマンドのスクリプト(条件分岐でも可)を使用。 #------------------------------------------------------------------------------ # last_target_include?(1) # # ターゲットにアクターID1が含まれていたかどうかを判定。 #------------------------------------------------------------------------------ # last_target_include?(2) # # ターゲットにアクターID2が含まれていたかどうかを判定。 #------------------------------------------------------------------------------ # last_target_include?(0) # # ターゲットに敵グループインデックス0(表示上index 1)が含まれていたかどうかを判定。 #------------------------------------------------------------------------------ # last_target_include?(-1) # # ターゲットに敵グループインデックス1(表示上index 2)が含まれていたかどうかを判定。 #============================================================================== # Ver1.02 Ver1.01が複数バージョン存在し、それぞれで動作が異なった問題を修正。 # 処理を全体的に簡略化。 # イベントコマンドを用いて直前の全てのターゲットを調査可能に。 # # Ver1.03 恐らくVer1.02から敵ターゲット取得の際に # 正の数を取得していた不具合を修正。 #============================================================================== module SELF_AND_TARGET #全てのアイテム・スキルで変数格納を行うかを指定。 #(trueで行う/falseで行わない) ALL = true #キーワードを指定。 WORD = "<変数格納>" #使用者のIDを格納する変数を指定します。 SV = 51 #対象者のIDを格納する変数を指定します。 TV = 52 #使用を試みたスキルのIDを格納する変数を指定します。 #使用したのがスキルでなければ、0が格納されます。 SI = 53 #使用を試みたアイテムのIDを格納する変数を指定します。 #使用したのがアイテムでなければ、0が格納されます。 II = 54 #-------------------------------------------------------------------------- # 簡略化用の配列を用意 #-------------------------------------------------------------------------- def self.array [SV,TV,SI,II] end end class Game_Interpreter #-------------------------------------------------------------------------- # ターゲットに指定IDが含まれているか? #-------------------------------------------------------------------------- def last_target_include?(id) $game_party.last_target_include?(id) end end class Game_Party attr_accessor :last_all_targets_data #-------------------------------------------------------------------------- # ターゲットに指定IDが含まれているか? #-------------------------------------------------------------------------- def last_target_include?(id) return false unless @last_all_targets_data @last_all_targets_data.include?(id) end 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_Base #-------------------------------------------------------------------------- # 変数への格納処理 #-------------------------------------------------------------------------- def method_for_self_and_target(user,item_data,targets) #変数を格納する場合は分岐。 if item_data.variables_get_is? #変数IDの配列を取得。 a = SELF_AND_TARGET.array #使用者の変数にID/インデックスを格納。 $game_variables[a[0]] = user.actor? ? user.id : user.index * -1 #ターゲットを作成。 #ターゲットが1体以上存在する場合は最終ターゲットを。 #存在しない場合は使用者スキルに読み替え、使用者を最終ターゲットとして #対象者の変数にID/インデックスを格納。 ta = targets.compact.inject([]) {|r,i| r.push(i.actor? ? i.id : i.index * -1)} if ta && ta.empty? ta = [user.actor? ? user.id : user.index] end $game_variables[a[1]] = ta[-1] $game_party.last_all_targets_data = ta #スキルID/アイテムIDを格納。 #それぞれ、スキルでない場合、アイテムでない場合は0を格納する。 $game_variables[a[2]] = item_data.is_a?(RPG::Skill) ? item_data.id : 0 $game_variables[a[3]] = item_data.is_a?(RPG::Item) ? item_data.id : 0 end end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # スキル/アイテムの使用 #-------------------------------------------------------------------------- alias use_item_self_and_target use_item def use_item #変数への格納処理を実行。 method_for_self_and_target(@subject,@subject.current_action.item, @subject.current_action.make_targets.compact) #本来の処理を実行。 use_item_self_and_target end end class Scene_Skill < Scene_ItemBase #-------------------------------------------------------------------------- # アイテムの使用 #-------------------------------------------------------------------------- alias use_item_self_and_target use_item def use_item #変数への格納処理を実行。 method_for_self_and_target(user,item,item_target_actors) #本来の処理を実行。 use_item_self_and_target end end class Scene_Item < Scene_ItemBase #-------------------------------------------------------------------------- # アイテムの使用 #-------------------------------------------------------------------------- alias use_item_self_and_target use_item def use_item #変数への格納処理を実行。 method_for_self_and_target(user,item,item_target_actors) #本来の処理を実行。 use_item_self_and_target end end class RPG::BaseItem #-------------------------------------------------------------------------- # 変数を格納するアイテム/スキルか? #-------------------------------------------------------------------------- def variables_get_is? (@variables_get_is ||= ((@note.include?(SELF_AND_TARGET::WORD) or SELF_AND_TARGET::ALL) ? 1 : 0)) == 1 end end