#============================================================================== # ■ RGSS3 敵味方無差別ものまねスキル Ver3.00 by 星潟 #------------------------------------------------------------------------------ # スキル発動後、続けて敵・味方の区別なく # 直前のバトラーの使用したアイテム・スキルを使用する # 無差別ものまねアイテム・スキルを作成する事が出来ます。 # # 無差別ものまねアイテム・スキルにターゲット指定がされている場合 # 無差別ものまねターゲット維持が設定されておらず # なおかつ対象が適切な場合はそのターゲット指定でものまねを行います。 # # 無差別ものまねアイテム・スキルに # ターゲット指定がない(エネミーの行動もしくは強制行動のランダムターゲット)か # ターゲットなしなどの場合、ランダムターゲットでものまねを行います。 #============================================================================== # アイテム・スキルのメモ欄に指定 #------------------------------------------------------------------------------ # <無差別ものまね> # # そのアイテム・スキルはものまね発動スキルとなります。 # また、無差別ものまねスキルを無差別ものまねスキルでものまねすることはできない。 # (そのものまねの前のスキルをものまねする) #------------------------------------------------------------------------------ # <無差別ものまねターゲット維持> # # このスキルに無差別ものまねが設定されている場合 # ものまね時にターゲットインデックスを維持する。 # 基本的にアクターから敵への単体対象スキル、 # あるいはアクターからアクターへの単体対象スキルを # アクターがものまねするのでなければ意味がない。 # (敵からのものまねは常にランダムターゲットの為) #------------------------------------------------------------------------------ # <無差別ものまね禁止> # # これをメモ欄に記述したスキルはものまねする事はできなくなり # もしものまねしようとした場合、ものまね失敗扱いとなる。 # 動作が複雑なアイテム・スキルはものまね禁止にしておく方が安定すると思われます。 #============================================================================== module IMT_SKILL #無差別ものまねの設定用キーワードを指定 WORD1 = "無差別ものまね" #無差別ものまね禁止の設定用キーワードを指定 WORD2 = "無差別ものまね禁止" #無差別ものまねターゲット維持の設定用キーワードを指定 WORD3 = "無差別ものまねターゲット維持" #スキルのものまね時使用条件・コスト消費判定フラグ #true 判定あり・消費あり false 判定なし・消費なし CON_COST = true #アクターのアイテムものまね時使用条件判定フラグ #true 条件判定あり・消耗あり false 条件判定なし・消耗なし AICOST = true #敵のアイテムものまね可否設定 #true 可能(ただし条件判定は行う) false 不可 EICOST1 = false #敵のものまね時にアイテム減少系効果があった場合、実行するか #(コモンイベントや一部アイテムコスト作成系スクリプト用) #true 実行 false なし EICOST2 = false #敵のものまね時にアイテム増加系効果があった場合、実行するか #(コモンイベントや一部アイテムコスト作成系スクリプト用) #true 実行 false なし EICOST3 = false #ものまね失敗時に発動するスキル FAILURE = 7 #ものまね失敗時に発動失敗スキルで次のものまね用データを上書きするか? #true 上書き false 変更なし FSCHANGE = false end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # 開始処理 #-------------------------------------------------------------------------- alias start_imitate_skill start def start start_imitate_skill @imitate_action_data = [0,0,-1] end #-------------------------------------------------------------------------- # 戦闘行動の実行 #-------------------------------------------------------------------------- alias execute_action_imitate_skill execute_action def execute_action @imitate_action_data = [ (@subject.current_action.item.is_a?(RPG::Item) ? 1 : 0), @subject.current_action.item.id, @subject.current_action.target_index] if !@subject.current_action.item.imt_item execute_action_imitate_skill end #-------------------------------------------------------------------------- # ものまね実行 #-------------------------------------------------------------------------- alias use_item_imitate_skill use_item def use_item $game_party.delete_imitate_skill_variables li = @subject.current_action.item use_item_imitate_skill if @subject && @subject.current_action && li.imt_item user = @subject user.imitate_skill_data = true a = @imitate_action_data if li.imt_target user.current_action.target_index = a[2] else user.current_action.target_index = -1 if li.scope == 0 end iid = a[1] flag1 = a[0] == 0 i = flag1 ? $data_skills[iid] : $data_items[iid] if (i ? !i.imt_seal_item : false) flag3 = false if flag1 flag3 ||= IMT_SKILL::CON_COST && !user.skill_conditions_met?(i) else if user.enemy? $game_party.enemy_item = true $game_party.consume_delete = IMT_SKILL::EICOST2 ? false : true if IMT_SKILL::EICOST1 flag3 ||= !user.item_conditions_met?(i) else flag3 = false end else if IMT_SKILL::AICOST flag3 ||= !user.item_conditions_met?(i) else $game_party.consume_delete = true end end end else flag3 = true end if flag3 fsid = IMT_SKILL::FAILURE user.current_action.set_skill(fsid) @imitate_action_data = [0,fsid,user.current_action.target_index] if IMT_SKILL::FSCHANGE else if flag1 user.current_action.set_skill(iid) else user.current_action.set_item(iid) end end use_item_imitate_skill user.imitate_skill_data = nil end end #-------------------------------------------------------------------------- # アイテムコスト系スクリプトのものまねで敵が使用した際の無効化解除処理 #-------------------------------------------------------------------------- alias process_event_imitate_skill process_event def process_event process_event_imitate_skill $game_party.delete_imitate_skill_variables end #-------------------------------------------------------------------------- # スキル/アイテムの発動 #-------------------------------------------------------------------------- alias invoke_item_imitate_skill invoke_item def invoke_item(target, item) return if item.imt_item invoke_item_imitate_skill(target,item) end end class Game_Party < Game_Unit attr_accessor :consume_delete attr_accessor :enemy_item #-------------------------------------------------------------------------- # アイテムの消耗 #-------------------------------------------------------------------------- alias consume_item_imitate_skill consume_item def consume_item(item) consume_item_imitate_skill(item) unless @consume_delete remove_instance_variable(:@consume_delete) if @consume_delete end #-------------------------------------------------------------------------- # アイテムの所持判定 #-------------------------------------------------------------------------- alias has_item_imitate_skill? has_item? def has_item?(item, include_equip = false) return true if @consume_delete has_item_imitate_skill?(item, include_equip) end #-------------------------------------------------------------------------- # アイテムの増加(減少) #-------------------------------------------------------------------------- alias gain_item_imitate_skill gain_item def gain_item(item, amount, include_equip = false) return if !IMT_SKILL::EICOST3 && @enemy_item && amount > 0 return if !IMT_SKILL::EICOST2 && @enemy_item && amount < 0 gain_item_imitate_skill(item, amount, include_equip) end #-------------------------------------------------------------------------- # 関連インスタンス変数の削除 #-------------------------------------------------------------------------- def delete_imitate_skill_variables remove_instance_variable(:@consume_delete) if @consume_delete remove_instance_variable(:@enemy_item) if @enemy_item end end class Game_Battler attr_accessor :imitate_skill_data end class Game_BattlerBase #-------------------------------------------------------------------------- # スキル使用コストの支払い #-------------------------------------------------------------------------- alias pay_skill_cost_imitate pay_skill_cost def pay_skill_cost(skill) return if @imitate_skill_data && !IMT_SKILL::CON_COST pay_skill_cost_imitate(skill) end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # ものまねスキル #-------------------------------------------------------------------------- def imt_item (@imt_item ||= /<#{IMT_SKILL::WORD1}>/ =~ note ? 1 : 0) == 1 end #-------------------------------------------------------------------------- # ものまね禁止スキル #-------------------------------------------------------------------------- def imt_seal_item (@imt_seal_item ||= /<#{IMT_SKILL::WORD2}>/ =~ note ? 1 : 0) == 1 end #-------------------------------------------------------------------------- # ものまねターゲット維持 #-------------------------------------------------------------------------- def imt_target (@imt_target ||= /<#{IMT_SKILL::WORD3}>/ =~ note ? 1 : 0) == 1 end end