#============================================================================== # ■ RGSS2 敵味方無差別ものまねスキル Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 敵・味方の区別なく、直前のキャラクターの行動を # コピーして使うスキルを作成する事が出来ます。 # # スキル欄に<無差別ものまね>と記入する事で # そのスキルがものまね発動スキルとなります。 # # また、特定のスキル欄に<無差別ものまね禁止>と記入する事で # そのスキルをものまねする事はできなくなります。 # # 敵がアイテムを使用する場合を考慮して # 敵個別に薬の知識をつけられるようにしました。 # 敵のメモ欄に<薬の知識>と記入する事で # その敵はアクターの特殊能力「薬の知識」と同じ力を得ます。 #============================================================================== module IMT_SKILL #無差別ものまねスキルの指定 WORD1 = "<無差別ものまね>" #無差別ものまねスキルによってものまねされないスキル・アイテム用設定ワード WORD2 = "<無差別ものまね禁止>" #敵用薬の知識設定ワード WORD3 = "<薬の知識>" #スキルのものまね時MPコスト有無フラグ #true MP消費 false MP消費なし MCOST = true #アクターのアイテムものまね時の消耗フラグ #true 消耗あり false 消耗なし AICOST = true #敵のアイテムものまね可否設定 #true 可能 false 不可 EICOST1 = true #敵のものまね時にアイテム減少系効果があった場合、実行するか #(コモンイベントや一部アイテムコスト作成系スクリプト用) #true 実行 false なし EICOST2 = false #敵のものまね時にアイテム増加系効果があった場合、実行するか #(コモンイベントや一部アイテムコスト作成系スクリプト用) #true 実行 false なし EICOST3 = false #ものまね失敗時に発動するスキル #0 様子を見る 1〜 指定したスキルIDのスキルを使用 FAILURE = 0 #ものまね失敗時に発動失敗スキルで上書きするか? #true 上書き false 変更なし FSCHANGE = false end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias start_imitate_skill start def start start_imitate_skill @imitate_action_data = [0, 3] end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 #-------------------------------------------------------------------------- alias execute_action_imitate_skill execute_action def execute_action if @active_battler.action.kind == 1 && @active_battler.action.skill.note.include?(IMT_SKILL::WORD1) @active_battler.imitate_skill_data = @imitate_action_data execute_imitate_action @active_battler.imitate_skill_data = nil else case @active_battler.action.kind when 0 # 基本 case @active_battler.action.basic when 0 # 攻撃 @imitate_action_data = [0, 0] when 1 # 防御 @imitate_action_data = [0, 1] when 2 # 逃走 @imitate_action_data = [0, 2] when 3 # 待機 @imitate_action_data = [0, 3] end when 1 # スキル @imitate_action_data = [1, @active_battler.action.skill_id] when 2 # アイテム @imitate_action_data = [2, @active_battler.action.item_id] end execute_action_imitate_skill end end #-------------------------------------------------------------------------- # ● ものまね実行 #-------------------------------------------------------------------------- def execute_imitate_action @active_battler.mp -= @active_battler.calc_mp_cost($data_skills[@active_battler.action.skill_id]) case @imitate_action_data[0] when 0 # 基本 @active_battler.action.kind = 0 case @imitate_action_data[1] when 0 # 攻撃 @active_battler.action.basic = 0 @active_battler.action.make_attack_targets execute_action_attack when 1 # 防御 @active_battler.action.basic = 1 execute_action_guard when 2 # 逃走 if @active_battler.actor? if IMT_SKILL::FAILURE == 0 @imitate_action_data = [0, 3] execute_action_wait else @active_battler.action.skill_id = IMT_SKILL::FAILURE if IMT_SKILL::FSCHANGE == true @imitate_action_data = [1, IMT_SKILL::FAILURE] else @imitate_action_data = [1, @imitate_action_data[1]] end @active_battler.action.make_obj_targets(@active_battler.action.skill) execute_action_skill end else @active_battler.action.basic = 2 execute_action_escape end when 3 # 待機 @active_battler.action.basic = 3 execute_action_wait end when 1 # スキル @active_battler.action.kind = 1 @active_battler.action.skill_id = @imitate_action_data[1] if $data_skills[@imitate_action_data[1]].note.include?(IMT_SKILL::WORD2) or (@active_battler.mp - @active_battler.calc_mp_cost($data_skills[@imitate_action_data[1]]) < 0 && IMT_SKILL::MCOST) if IMT_SKILL::FAILURE == 0 @imitate_action_data = [0, 3] execute_action_wait else @active_battler.action.skill_id = IMT_SKILL::FAILURE if IMT_SKILL::FSCHANGE == true @imitate_action_data = [1, IMT_SKILL::FAILURE] else @imitate_action_data = [1, @imitate_action_data[1]] end @active_battler.action.make_obj_targets(@active_battler.action.skill) execute_action_skill end else @imitate_action_data = [1, @active_battler.action.skill_id] @active_battler.action.make_obj_targets(@active_battler.action.skill) execute_action_skill end when 2 # アイテム @active_battler.action.kind = 2 @active_battler.action.item_id = @imitate_action_data[1] if $data_items[@imitate_action_data[1]].note.include?(IMT_SKILL::WORD2) or item_check_imitate(@imitate_action_data[1]) == false if IMT_SKILL::FAILURE == 0 @imitate_action_data = [0, 3] execute_action_wait else @active_battler.action.skill_id = IMT_SKILL::FAILURE if IMT_SKILL::FSCHANGE == true @imitate_action_data = [1, IMT_SKILL::FAILURE] else @imitate_action_data = [2, @imitate_action_data[1]] end @active_battler.action.make_obj_targets(@active_battler.action.skill) execute_action_skill end else @imitate_action_data = [2, @active_battler.action.item_id] @active_battler.action.make_obj_targets(@active_battler.action.item) execute_action_item end end end #-------------------------------------------------------------------------- # ● アイテムコスト系スクリプトのものまねで敵が使用した際の無効化解除処理 #-------------------------------------------------------------------------- alias process_battle_event_imitate_skill process_battle_event def process_battle_event process_battle_event_imitate_skill $game_party.enemy_item = false end #-------------------------------------------------------------------------- # ● アイテム使用時のアイテム消耗のチェック #-------------------------------------------------------------------------- def item_check_imitate(item_data) if @active_battler.actor? $game_party.enemy_item = false if IMT_SKILL::AICOST == true return $game_party.has_item?($data_items[item_data]) else $game_party.consume_delete = false end return true else $game_party.enemy_item = true return false if IMT_SKILL::EICOST1 == false $game_party.consume_delete = false return true end end end class Game_BattleAction alias valid_imitate_skill? valid? def valid? if skill != nil && skill.note.include?(IMT_SKILL::WORD1) return false if nothing? # 何もしない return true if @forcing # 行動強制中 return false unless battler.movable? # 行動不能 return false unless battler.skill_can_use?(skill) return true else valid_imitate_skill? end end end class Game_Battler attr_accessor :imitate_skill_data # ものまねスキル用行動配列 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_skill_data initialize def initialize initialize_skill_data @imitate_skill_data = nil end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● オプション [薬の知識] の取得 #-------------------------------------------------------------------------- def pharmacology return true if enemy.note.include?(IMT_SKILL::WORD3) return false end end class Game_Party < Game_Unit attr_accessor :consume_delete attr_accessor :enemy_item #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_imitate_skill initialize def initialize initialize_imitate_skill @consume_delete = true @enemy_item = false end #-------------------------------------------------------------------------- # ● アイテムの消耗 # item : アイテム # 指定されたオブジェクトが消耗アイテムであれば、所持数を 1 減らす。 #-------------------------------------------------------------------------- alias consume_item_imitate_skill consume_item def consume_item(item) if @consume_delete == nil or @consume_delete == true consume_item_imitate_skill(item) end @consume_delete = true end alias gain_item_imitate_skill gain_item def gain_item(item, n, include_equip = false) return if IMT_SKILL::EICOST3 == false && @enemy_item && n > 0 return if IMT_SKILL::EICOST2 == false && @enemy_item && n < 0 gain_item_imitate_skill(item, n, include_equip = false) end end