#============================================================================== # ものまね - Sideview対応版 ver1.01 #------------------------------------------------------------------------------ #[説明] # このスクリプトは「ものまね」を # RPG探検隊様の「サイドビューバトルAce版」に対応したものです。 # #[特徴] # 直前に行動した味方と同じスキルを使用します。 # #[設定方法] # スキルのメモ帳に <ものまね> と記述すると、そのスキルはものまねスキルになります。 # 『ものまね』は効果範囲を《使用者》にしてください。 # # また <ものまね不可> と記述すると、そのスキルはものまねできなくなります。 #  必殺技等、ものまねさせたくないスキルに設定してください。 # #[仕様] # MP、TPは『ものまね』スキルのものを消費します。 # 通常攻撃、防御もデータベース上ではスキルなので、これらもものまねします。 # # 現状、敵は使用できません。 # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.01 アイテムを使用した際のエラーを修正 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module Monomane # ものまねに失敗した場合に使用するスキルのID # 「ものまねに失敗した」等、何も行動させたくない場合は、専用のスキルを設定してください。 # ものまねに失敗するのは、戦闘の最初やターンの最初に発動し、ものまねするスキルがない場合。 MISS_SKILL_ID = 140 # ターン毎にものまねするスキルをリセットするかどうか # true : リセットする。ターンの最初に『ものまね』を発動した場合、 # 『ものまね』は失敗する。 # false : リセットしない。ターンの最初に『ものまね』を発動した場合、 # 前のターンの最後のスキルをものまねする。 TURN_CLEAR = false # ターゲットはものまねするスキルと同じにするかどうか # true : ものまねするスキルと同じ。ただし、使用不可能な状態の場合はランダム。 # false : ランダムなターゲット。 TARGET = true end end #============================================================================== # ここまで #============================================================================== $kzr_imported = {} if $kzr_imported == nil $kzr_imported["Monomane"] = true #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias kzr_Monomane_start start def start kzr_Monomane_start $game_temp.Monomane_clear end #-------------------------------------------------------------------------- # ● スキル/アイテムの使用 #-------------------------------------------------------------------------- alias kzr_Monomane_use_item use_item def use_item item = @subject.current_action.item if item.Monomane? display_item(item) @subject.use_item(item) refresh_status Monomane = $data_skills[$game_temp.Monomane[:skill_id]] @targets = @subject.current_action.make_targets_Monomane(Monomane).compact @targets = [@subject] if @targets.size == 0 @subject.current_action.set_skill(Monomane.id) set_substitute(Monomane) for time in Monomane.repeats.times do play_sideview(@targets, Monomane) end end_reaction(Monomane) display_end_item else kzr_Monomane_use_item if @subject.actor? && item.is_a?(RPG::Skill) && !item.dis_Monomane $game_temp.Monomane[:skill_id] = item.id $game_temp.Monomane[:target_index] = @targets[0].index $game_temp.Monomane[:unit] = @targets[0].enemy? end end end #-------------------------------------------------------------------------- # ● ターン終了 #-------------------------------------------------------------------------- alias kzr_Monomane_turn_end turn_end def turn_end $game_temp.Monomane_clear if Kazari::Monomane::TURN_CLEAR kzr_Monomane_turn_end end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :Monomane #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias kzr_Monomane_initialize initialize def initialize kzr_Monomane_initialize @Monomane = {} Monomane_clear end #-------------------------------------------------------------------------- # ● ものまねデータのクリア #-------------------------------------------------------------------------- def Monomane_clear @Monomane[:skill_id] = Kazari::Monomane::MISS_SKILL_ID @Monomane[:target_index] = -1 @Monomane[:unit] = true end end #============================================================================== # ■ Game_Action #============================================================================== class Game_Action #-------------------------------------------------------------------------- # ● ターゲットの配列作成(ものまね用) #-------------------------------------------------------------------------- def make_targets_Monomane(Monomane) if !forcing && subject.confusion? [confusion_target] elsif $game_temp.Monomane[:unit] targets_for_opponents_Monomane(Monomane) else targets_for_friends_Monomane(Monomane) end end #-------------------------------------------------------------------------- # ● 敵に対するターゲット(ものまね用) #-------------------------------------------------------------------------- def targets_for_opponents_Monomane(item) if item.for_random? Array.new(item.number_of_targets) { opponents_unit.random_target } elsif item.for_one? random = !Kazari::Monomane::TARGET target = opponents_unit.members[$game_temp.Monomane[:target_index]] unless random num = 1 + (attack? ? subject.atk_times_add.to_i : 0) if target.dead? || random [opponents_unit.random_target] * num else [target] * num end else opponents_unit.alive_members end end #-------------------------------------------------------------------------- # ● 味方に対するターゲット(ものまね用) #-------------------------------------------------------------------------- def targets_for_friends_Monomane(item) if item.for_user? [subject] elsif item.for_dead_friend? if item.for_one? random = !Kazari::Monomane::TARGET target = friends_unit.members[$game_temp.Monomane[:target_index]] unless random if target.alive? || random [friends_unit.smooth_dead_target(@target_index)] else [target] end else friends_unit.dead_members end elsif item.for_friend? if item.for_one? random = !Kazari::Monomane::TARGET target = friends_unit.members[$game_temp.Monomane[:target_index]] unless random if target.dead? || random [friends_unit.smooth_target(@target_index)] else [target] end else friends_unit.alive_members end end end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem < RPG::BaseItem def Monomane? note.each_line {|line| case line when /<ものまね>/ ; return true end } false end def dis_Monomane note.each_line {|line| case line when /<ものまね不可>/ ; return true end } false end end