#============================================================================== # ものまね ver1.01 #------------------------------------------------------------------------------ #[特徴] # 直前に行動した味方と同じスキルを使用します。 # #[設定方法] # スキルのメモ帳に <ものまね> と記述すると、そのスキルはものまねスキルになります。 # 『ものまね』は効果範囲を《使用者》にしてください。 # # また <ものまね不可> と記述すると、そのスキルはものまねできなくなります。 #  必殺技等、ものまねさせたくないスキルに設定してください。 # #[仕様] # MP、TPは『ものまね』スキルのものを消費します。 # 通常攻撃、防御もデータベース上ではスキルなので、これらもものまねします。 # # 現状、敵は使用できません。 # # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.01 アイテムを使用した際のエラーを修正 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module Monomane # ものまねに失敗した場合に使用するスキルのID # 「ものまねに失敗した」等、何も行動させたくない場合は、専用のスキルを設定してください。 # ものまねに失敗するのは、戦闘の最初やターンの最初に発動し、ものまねするスキルがない場合。 MISS_SKILL_ID = 129 # ターン毎にものまねするスキルをリセットするかどうか # 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? item = @subject.current_action.item @log_window.display_use_item(@subject, item) @subject.use_item(item) refresh_status monomane = $data_skills[$game_temp.monomane[:skill_id]] targets = @subject.current_action.make_targets_monomane(monomane).compact show_animation(targets, monomane.animation_id) targets.each {|target| monomane.repeats.times { invoke_item(target, monomane) } } else targets = @subject.current_action.make_targets.compact 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] = 0 @monomane[:unit] = true end end #============================================================================== # ■ Game_Action #============================================================================== class Game_Action #-------------------------------------------------------------------------- # ● ターゲットの配列作成(ものまね用) #-------------------------------------------------------------------------- def make_targets_monomane(monomane) p 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