#◆◇◆◇◆ 特殊通常攻撃スクリプト ver 1.01 ◇◆◇◆◇ # 全マスタースクリプト共通スクリプト # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 1.01(2011/08/28) アクター側の演出を変更 ○ ver 1.00(2011/08/03) 公開 ■ 説明 エターナルメモリーでお馴染(?)の、 「通常攻撃」を行う事で、一定の確率で数回連続で攻撃したり、 防御力を数%無視したりする特殊な通常攻撃を作成する事が出来ます。 「特殊通常攻撃スキル」と見なすスキルには指定した属性を設定してください。 特殊通常攻撃スキルは覚えてるだけで効果があり、 通常攻撃時に一定の確率で発動します。 敵にも設定でき、ターンなどの条件も適用されます。 (レーティングは意味がないので無視されます) 特別な攻撃スキルはないが、 特殊な通常攻撃に特化した味方や敵を作成でき、幅が生まれます。 ● 確率の設定 スキルの腕力F、器用さF、素早さF、魔力Fを使用します。 例えば、攻撃者の腕力が250で特殊通常攻撃スキルの腕力Fが10の場合、 25%の確率で発動する特殊通常攻撃となります。 「対象」が「敵単体」の場合は敵の能力も同じように参照し、 確率の減算処理を行います。 敵単体以外の場合は攻撃者の能力のみを参照します。 上限発動率も設定する事ができ、スキルの分散を使用します。 スキルの分散が30なら上限発動率は30%となります。 ● 効果の設定 威力、攻撃力F、回避F、命中、物理防御F、魔法防御F、ステート変化を使用します。 以下のデータに変換されます。 威力 = 増加攻撃回数 攻撃力F = 攻撃力ボーナス%(0〜攻撃力F%のランダム上昇) 回避F = クリティカルボーナス%(通常の判定とは別に行われます) 命中 = 追加ステート付加確率(「無効」でない限り、耐性は無視します) 物理防御F = 防御力無視% 魔法防御F = 魔法防御力無視% ステート変化 = 追加ステート(付加のみ) 例えば、器用さFが10で威力が1で、対象がなしなら、 攻撃者の器用さ÷10の確率で攻撃回数を一回増やす特殊通常攻撃スキルになります。 ● エフェクトの変化 特殊通常攻撃スキルに行動側、対象側アニメが設定されている場合、 その特殊通常攻撃スキル発動時の行動側アニメ、攻撃時の対象側アニメになります。 複数発動した場合、IDが高い特殊通常攻撃スキルのものを使用します。 ● 仕様 攻撃者が混乱(味方を通常攻撃する、敵を通常攻撃する)の場合、 特殊通常攻撃スキルは発動しません。 攻撃回数を増やす特殊通常攻撃スキルは攻撃が「完全に終了」するまで、 「同じスキル」は攻撃中重複しません。 それ以外のスキルは「その攻撃のみ」の効果です。 敵のHPを0にした場合、そこで強制的に特殊通常攻撃スキルは終了します。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 特殊通常攻撃スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["特殊通常攻撃スクリプト"] = true end # 特殊通常攻撃スクリプトが有効な場合に以降の処理を実行する if MINTO::RGSS["特殊通常攻撃スクリプト"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 特殊通常攻撃と見なす属性のID Special_attack_skill = 3 end #============================================================================== # ☆ Game_Battler_Skill #------------------------------------------------------------------------------ # 特殊攻撃スキルの状態を管理するモジュールです。 #============================================================================== module Game_Battler_Skill #-------------------------------------------------------------------------- # ● 攻撃力の取得 #-------------------------------------------------------------------------- def atk # スーパークラスの処理を実行 bool = super # 特殊スキル発動中の場合 unless $scene.special_attack_skill[self].nil? # ボーナス値加算 bool += $scene.special_attack_skill[self].attack_bonus end return bool end #-------------------------------------------------------------------------- # ● 物理防御の取得 #-------------------------------------------------------------------------- def pdef # スーパークラスの処理を実行 bool = super special_battler = $scene.special_battler # 特殊スキル発動中の場合 unless $scene.special_attack_skill[special_battler].nil? # 防御力減算 bool *= (100 - $scene.special_attack_skill[special_battler].pdef_break) bool /= 100 end return bool end #-------------------------------------------------------------------------- # ● 魔法防御の取得 #-------------------------------------------------------------------------- def mdef # スーパークラスの処理を実行 bool = super special_battler = $scene.special_battler # 特殊スキル発動中の場合 unless $scene.special_attack_skill[special_battler].nil? # 防御力減算 bool *= (100 - $scene.special_attack_skill[special_battler].mdef_break) bool /= 100 end return bool end end #============================================================================== # ■ Special_Attack_Skill #------------------------------------------------------------------------------ #  特殊通常攻撃のデータを管理するクラスです。 #============================================================================== class Special_Attack_Skill #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :attack_bonus # 攻撃回数ボーナス attr_accessor :power_bonus # 攻撃力ボーナス attr_accessor :crt_bonus # クリティカルボーナス attr_accessor :pdef_break # 防御力無視割合 attr_accessor :mdef_break # 魔法防御力無視割合 attr_accessor :plus_state_bonus # 付加ステートボーナス attr_accessor :state_hit # 付加ステート付加確率 attr_accessor :attack_battler # 攻撃者 attr_accessor :skill_name # 発動スキル名 attr_accessor :flash_skill_name # 一時用発動スキル名 attr_accessor :anime1 # 行動側アニメ attr_accessor :anime2 # 対象側アニメ #-------------------------------------------------------------------------- # ● オブジェクト初期化 # battler : 攻撃者 #-------------------------------------------------------------------------- def initialize(battler) @attack_bonus = 0 @power_bonus = 0 @crt_bonus = 0 @plus_state_bonus = [] @state_hit = {} @pdef_break = 0 @mdef_break = 0 @battler = battler @skill_name = [] @flash_skill_name = [] @anime1 = 0 @anime2 = 0 end #-------------------------------------------------------------------------- # ● データのクリア #-------------------------------------------------------------------------- def clear @power_bonus = 0 @crt_bonus = 0 @plus_state_bonus = [] @state_hit = {} @pdef_break = 0 @mdef_break = 0 @anime1 = 0 @anime2 = 0 end end #============================================================================== # ■ Sprite_SpecialAttack_Skill #------------------------------------------------------------------------------ #  特殊通常攻撃表示用のスプライトです。 # このクラスのインスタンスは Sprite_Battler の内部で使用されます。 #============================================================================== class Sprite_SpecialAttack_Skill #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :battler # バトラー #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # battler : バトラー (Game_Battler) #-------------------------------------------------------------------------- def initialize(viewport, battler) @viewport = viewport @battler = battler @sprites = [] @timer = [] end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose(index = -1) # 解放済みの場合 if @sprites.empty? # メソッドを返す return end if index == -1 for i in 0...@sprites.size unless @sprites[i].nil? @sprites[i].bitmap.dispose @sprites[i].dispose @sprites[i] = nil end end @sprites.clear @timer.clear else unless @sprites[index].nil? @sprites[index].bitmap.dispose @sprites[index].dispose @sprites[index] = nil @timer[index] = nil end @sprites.compact! @timer.compact! end end #-------------------------------------------------------------------------- # ● フレーム更新 # battler_sprite : 行動者のスプライト #-------------------------------------------------------------------------- def update(battler_sprite) # バトラーが無効な場合 if @battler.nil? # メソッドを返す return end # データが無効な場合 if @battler.auto_skills.nil? # メソッドを返す return end # 特殊攻撃スキルが発動している場合 unless @battler.auto_skills.empty? # ループ処理(発動した特殊攻撃スキル) for i in 0...@battler.auto_skills.size # スプライトを作成 sprite = Sprite.new sprite.bitmap = RPG::Cache.picture("Skill_Back").dup # 最後に発動したスキルは違う色で表示 if i == @battler.auto_skills.size - 1 sprite.bitmap.font.color = Color.new(0, 160, 255) else sprite.bitmap.font.color = Color.new(255, 255, 255) end # スキル名を描写 sprite.bitmap.draw_text(4, 0, 128, 24, @battler.auto_skills[i]) # スプライトをプッシュ @sprites.push(sprite) # タイマー設定 @timer.push(8 + i * 8) end # 特殊攻撃スキル名をクリア @battler.auto_skills.clear end # ループ処理(スプライト) for i in 0...@sprites.size # スプライトが有効な場合 unless @sprites[i].nil? # 各種データを更新 @sprites[i].x = @battler.screen_x @sprites[i].x -= battler_sprite.ox @sprites[i].x += @timer[i] * 2 @sprites[i].y = @battler.screen_y @sprites[i].y -= battler_sprite.oy @sprites[i].y -= battler_sprite.src_rect.height / 4 @sprites[i].y -= 24 * i @sprites[i].z = 9999 if @timer[i] >= 1 @timer[i] -= 1 end if @timer[i].zero? and @sprites[i].opacity >= 1 @sprites[i].opacity -= 3 elsif @sprites[i].opacity.zero? dispose(i) end end end end end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :auto_skills # 発生したオートスキル #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 # attacker : 攻撃者 (バトラー) #-------------------------------------------------------------------------- alias mint_special_attack_skill_attack_effect attack_effect def attack_effect(attacker) # 元の処理を実行 bool = mint_special_attack_skill_attack_effect(attacker) # 命中した場合(RTAB) if Scene_Battle.rtab? if self.damage[attacker].to_i >= 1 and $scene.special_battler == attacker # クリティカルでない場合 unless self.critical[attacker] # 追加クリティカル判定 crt = $scene.special_attack_skill[attacker].crt_bonus self.critical[attacker] = (crt > rand(100)) # クリティカルの場合 if self.critical[attacker] # クリティカルダメージにする self.damage[attacker] *= 2 end end end else if self.damage.to_i >= 1 and $scene.special_battler == attacker # クリティカルでない場合 unless self.critical # 追加クリティカル判定 crt = $scene.special_attack_skill[attacker].crt_bonus self.critical = (crt > rand(100)) # クリティカルの場合 if self.critical # クリティカルダメージにする self.damage *= 2 end end end end # 元の処理を返す return bool end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include Game_Battler_Skill end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  エネミーを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include Game_Battler_Skill #-------------------------------------------------------------------------- # ● スキルの取得 #-------------------------------------------------------------------------- def skills skill = [] # 現在有効なアクションを抽出 for action in self.actions # スキルでない場合 if action.skill_id.zero? next end # ターン 条件確認 n = $game_temp.battle_turn a = action.condition_turn_a b = action.condition_turn_b if (b == 0 and n != a) or (b > 0 and (n < 1 or n < a or n % b != a % b)) next end # HP 条件確認 if self.hp * 100.0 / self.maxhp > action.condition_hp next end # レベル 条件確認 if $game_party.max_level < action.condition_level next end # スイッチ 条件確認 switch_id = action.condition_switch_id if switch_id > 0 and $game_switches[switch_id] == false next end # このアクションを追加 skill.push(action.skill_id) end skill.sort! return skill end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。 # Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # battler : バトラー (Game_Battler) #-------------------------------------------------------------------------- alias mint_special_attack_skill_initialize initialize def initialize(viewport, battler = nil) # 元の処理を実行 mint_special_attack_skill_initialize(viewport, battler) # 特殊攻撃表示用のスプライトを作成 @specialattack_skill = Sprite_SpecialAttack_Skill.new(viewport, battler) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- alias mint_special_attack_skill_dispose dispose def dispose # 元の処理を実行 mint_special_attack_skill_dispose # 特殊攻撃表示用のスプライトを解放 @specialattack_skill.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias mint_special_attack_skill_update update def update # 元の処理を実行 mint_special_attack_skill_update # バトラー更新 @specialattack_skill.battler = @battler # 特殊攻撃表示用のスプライトを更新 @specialattack_skill.update(self) end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :special_attack_skill # 特殊通常攻撃データハッシュ attr_accessor :special_battler # 特殊通常攻撃実行者 #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- alias mint_special_attack_skill_main main def main # 特殊通常攻撃データ初期化 @special_attack_skill = {} # 元の処理を実行 mint_special_attack_skill_main end #-------------------------------------------------------------------------- # ● RTABフラグの取得 #-------------------------------------------------------------------------- def self.rtab? return method_defined?("synthe?") end #-------------------------------------------------------------------------- # ● 特殊通常攻撃スキル発動判定 # battler : 攻撃者 #-------------------------------------------------------------------------- def special_attack_skill_effect(battler) # 攻撃者が混乱状態の場合 if battler.restriction == 2 or battler.restriction == 3 # メソッドを返す return end # 特殊通常攻撃スキルの取得 special_attack_skills = get_special_attack_skill(battler) # スキル名クリア @special_attack_skill[battler].flash_skill_name.clear # 特殊通常攻撃スキルデータをクリア @special_attack_skill[battler].clear # 発動確率定義 effect_percent = 0 # 特殊通常攻撃スキルを所持している場合 unless special_attack_skills.empty? # ループ処理 for skill in special_attack_skills do # 攻撃回数ボーナスがある場合 if skill.power >= 1 # 発動済みの場合 if @special_attack_skill[battler].skill_name.include?(skill.name) # スキップ next end end # 各種発動確率習得 effect_percent += battler.str * skill.str_f / 100 effect_percent += battler.dex * skill.dex_f / 100 effect_percent += battler.agi * skill.agi_f / 100 effect_percent += battler.int * skill.int_f / 100 # スキルの対象が 敵単体 の場合 if skill.scope == 1 # 攻撃対象習得(行動側バトラーがエネミーの場合) if battler.is_a?(Game_Enemy) index = battler.current_action.target_index target = $game_party.smooth_target_actor(index) # 行動側バトラーがアクターの場合 else index = battler.current_action.target_index target = $game_troop.smooth_target_enemy(index) end # 各種発動確率減算 effect_percent -= target.str * skill.str_f / 100 effect_percent -= target.dex * skill.dex_f / 100 effect_percent -= target.agi * skill.agi_f / 100 effect_percent -= target.int * skill.int_f / 100 end # 最大最小スキル発動率補正 if effect_percent > skill.variance effect_percent = skill.variance elsif effect_percent < 1 effect_percent = 1 end # 発動判定 if effect_percent > rand(100) # スキル名をプッシュ @special_attack_skill[battler].skill_name.push(skill.name.dup) @special_attack_skill[battler].flash_skill_name.push(skill.name.dup) # 各種データがより強ければ更新 if skill.atk_f > @special_attack_skill[battler].power_bonus @special_attack_skill[battler].power_bonus = skill.atk_f end if skill.eva_f > @special_attack_skill[battler].crt_bonus @special_attack_skill[battler].crt_bonus = skill.eva_f end if skill.pdef_f > @special_attack_skill[battler].pdef_break @special_attack_skill[battler].pdef_break = skill.pdef_f end if skill.mdef_f > @special_attack_skill[battler].mdef_break @special_attack_skill[battler].mdef_break = skill.mdef_f end if skill.animation1_id >= 1 @special_attack_skill[battler].anime1 = skill.animation1_id end if skill.animation2_id >= 1 @special_attack_skill[battler].anime2 = skill.animation2_id end # その他のデータを加算 @special_attack_skill[battler].attack_bonus += skill.power plus_state_set = skill.plus_state_set @special_attack_skill[battler].plus_state_bonus += plus_state_set for id in plus_state_set if skill.hit > @special_attack_skill[battler].state_hit[id].to_i @special_attack_skill[battler].state_hit[id] = skill.hit end end end end end # 攻撃力ボーナス算定 power_bonus = rand(@special_attack_skill[battler].power_bonus) power_bonus *= battler.atk power_bonus /= 100 @special_attack_skill[battler].power_bonus = power_bonus # 無効なデータを除外 @special_attack_skill[battler].plus_state_bonus.compact! end #-------------------------------------------------------------------------- # ● 特殊通常攻撃スキルの取得 # battler : 攻撃者 #-------------------------------------------------------------------------- def get_special_attack_skill(battler) skills = [] # ループ処理 for i in 0...battler.skills.size do # スキルデータ取得 skill = $data_skills[battler.skills[i]] # 無効なデータの場合 if skill.nil? # 次の候補へ next end # 属性「特殊通常攻撃」が付加されている場合 if skill.element_set.include?(MINTO::Special_attack_skill) # スキルデータを収納 skills.push(skill) end end # メソッドを返す return skills end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始) #-------------------------------------------------------------------------- alias mint_special_attack_skill_step2 update_phase4_step2 def update_phase4_step2(*args) # 攻撃者を取得(RTABを考慮) if Scene_Battle.rtab? battler = args[0] else battler = @active_battler end # 特殊通常攻撃データ未作成の場合 if @special_attack_skill[battler].nil? # 特殊通常攻撃データ作成 @special_attack_skill[battler] = Special_Attack_Skill.new(battler) end # 元の処理を実行(RTABを考慮) if Scene_Battle.rtab? mint_special_attack_skill_step2(battler) else mint_special_attack_skill_step2 end end #-------------------------------------------------------------------------- # ● 基本アクション 結果作成 #-------------------------------------------------------------------------- alias mint_special_attack_skill_make_basic_action make_basic_action_result def make_basic_action_result(*args) # 攻撃者を取得(RTABを考慮) if Scene_Battle.rtab? battler = args[0] else battler = @active_battler end # 攻撃者(外部判定用)収納 @special_battler = battler # 通常攻撃の場合 if battler.current_action.kind.zero? if battler.current_action.basic.zero? # 特殊通常攻撃スキル発動判定 special_attack_skill_effect(battler) end end # 元の処理を実行(RTABを考慮) if Scene_Battle.rtab? mint_special_attack_skill_make_basic_action(battler) else mint_special_attack_skill_make_basic_action end hit = false # 元の処理を実行(RTABを考慮) if Scene_Battle.rtab? # 通常攻撃の場合 if battler.current_action.kind.zero? if battler.current_action.basic.zero? # 対象者習得(RTAB) target = battler.target[0] hit = target.damage[battler] != "Miss" end end else # 通常攻撃の場合 if battler.current_action.kind.zero? if battler.current_action.basic.zero? # 対象者習得 target = @target_battlers[0] hit = target.damage != "Miss" end end end # 命中した場合 if hit # 特殊付加ステートが有効な場合 unless @special_attack_skill[battler].plus_state_bonus.empty? # ループ処理 for id in @special_attack_skill[battler].plus_state_bonus # ステートに耐性がない場合 if target.state_ranks[id] != 6 # ステート付加判定 if @special_attack_skill[battler].state_hit[id] > rand(100) # ステート強制付加 target.add_state(id) end end end # HPが0になった場合 if target.hp.zero? # 攻撃回数をクリア @special_attack_skill[battler].attack_bonus = 0 end end end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション) #-------------------------------------------------------------------------- alias mint_special_attack_skill_step3 update_phase4_step3 def update_phase4_step3(*args) # 攻撃者を取得(RTABを考慮) if Scene_Battle.rtab? battler = args[0] else battler = @active_battler end # 通常攻撃の場合 if battler.current_action.kind.zero? if battler.current_action.basic.zero? # ヘルプウィンドウを隠す @help_window.visible = false end end # 何らかの特殊通常攻撃スキルが発動した場合 if @special_attack_skill[battler].flash_skill_name.size >= 1 # 攻撃者がアクターの場合 if battler.is_a?(Game_Actor) # 特殊攻撃スキル名をクリア battler.auto_skills = [] end # 行動側アニメが設定されている場合 unless @special_attack_skill[battler].anime1.zero? # 行動側アニメ変更(RTABを考慮) if Scene_Battle.rtab? battler.anime1 = @special_attack_skill[battler].anime1 else @animation1_id = @special_attack_skill[battler].anime1 end end # 対象側アニメが設定されている場合 unless @special_attack_skill[battler].anime2.zero? # 対象側アニメ変更(RTABを考慮) if Scene_Battle.rtab? battler.anime2 = @special_attack_skill[battler].anime2 else @animation2_id = @special_attack_skill[battler].anime2 end end text = "" # 発動スキル名表示 for t in @special_attack_skill[battler].flash_skill_name text += "【#{t}】" # 攻撃者がアクターの場合 if battler.is_a?(Game_Actor) # 特殊攻撃スキル名をプッシュ battler.auto_skills.push(t) end end # 攻撃者がエネミーの場合 if battler.is_a?(Game_Enemy) # ヘルプウィンドウに発動した特殊攻撃スキル名を表示 @help_window.set_text(text, 1) end end # 元の処理を実行(RTABを考慮) if Scene_Battle.rtab? mint_special_attack_skill_step3(battler) else mint_special_attack_skill_step3 end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias mint_special_attack_skill_step5 update_phase4_step5 def update_phase4_step5(*args) # 攻撃者を取得(RTABを考慮) if Scene_Battle.rtab? battler = args[0] else battler = @active_battler end # 通常攻撃の場合 if battler.current_action.kind.zero? if battler.current_action.basic.zero? # ヘルプウィンドウを隠す @help_window.visible = false end end # 元の処理を実行(RTABを考慮) if Scene_Battle.rtab? mint_special_attack_skill_step5(battler) else mint_special_attack_skill_step5 end # データ解放済みの場合 if @special_attack_skill[battler].nil? # メソッドを返す return end # 攻撃回数が残っている場合 if @special_attack_skill[battler].attack_bonus >= 1 # 攻撃回数減算 @special_attack_skill[battler].attack_bonus -= 1 # ステータスウィンドウをリフレッシュ @status_window.refresh # ステップ 2 へ移行(RTABを考慮) if Scene_Battle.rtab? battler.phase = 2 else @phase4_step = 2 end # 攻撃が完全に終了した場合 else # 特殊通常攻撃データ解放 @special_attack_skill[battler] = nil end end end end