#==============================================================================
# ■ XP-RGSS-13 スキル連撃 [Ver.3.3.0] by Claimh
#------------------------------------------------------------------------------
# ・スキル攻撃時にタイミング良くキーを入力することで、追加攻撃が発動する。
# ・オート発動、連続追加攻撃回数も設定可能
# ・追加攻撃を発動させるキー入力のタイミング
# 対象側のアニメーションが表示される直前
# ・スキルアップデートと併用することで、スキルレベル制が導入できる。
# その際、連続回数は設定した連続回数+スキルレベルとなる
#==============================================================================
module ExtraSkill
SKILL_CHASE = []
#==============================================================================
# □ カスタマイズSTART
#==============================================================================
# 追加攻撃発動キー
SKILL_CHASE_KEY = Input::C
# スキルレベル制を導入する
USE_SKILL_LEVEL = false # 不要ならfalse
# ダメージ一括表示
SKILL_CHASE_DMG_ALL = true # 不要ならfalse
# 対象側アニメーションの間にウェイトを入れる
SKILL_CHASE_WAIT = 4 # 数値はフレーム数、不要ならnil
# ミスなら追加攻撃しない
SKILL_CHASE_MISS = true # 不要ならfalse
# クリティカル発生時にアニメーションを変化させる
SKILL_CHASE_CRITICAL = true # 不要ならfalse
# 物理攻撃系スキルの属性ID
CHASE_WEAPON = 19
# 魔法攻撃系スキルの属性ID
CHASE_MAGIC = 20
# 成功時に鳴らすSE
SKILL_CHASE_SE = "020-Teleport03" # 不要ならnil
# 設定例
# SKILL_CHASE[スキルID] = [追加攻撃の攻撃力(%), 連鎖アニメID, オート発動フラグ,
# 成功率, 連続回数,クリティカル時アニメ]]
SKILL_CHASE[57] = [100, 31, false, 100, 5, 32]
SKILL_CHASE[61] = [100, 42, false, 100, 4, 43]
#==============================================================================
# □ カスタマイズEND
#==============================================================================
end
class Scene_Battle
include ExtraSkill
attr_accessor :skill_chase_exercise # 追加攻撃実行中
attr_accessor :skill_chase_end # 追加攻撃終了
attr_accessor :skill_chase_first # 追加攻撃 第1攻撃[スキル]
attr_accessor :skill_chase_set # 追加攻撃 設定値
attr_accessor :skill_atk_f # 追加攻撃 威力
attr_accessor :chase_skill_type # 追加攻撃 スキルタイプ
#--------------------------------------------------------------------------
# ● 追尾判定用データ初期化
#--------------------------------------------------------------------------
def init_chase
@skill_chase_flg = false # 追加攻撃開始
self.skill_chase_exercise = false # 追加攻撃実行中
self.skill_chase_end = false # 追加攻撃終了
@skill_chase_check_key = false # 追加攻撃判定実行中
@skill_chase_success = false # 追加攻撃成功
@skill_chase_count = 0 # 追加攻撃数カウント
self.skill_chase_first = true # 初期フラグ
self.skill_chase_set = []
self.skill_atk_f = 0
self.chase_skill_type = 0
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
#--------------------------------------------------------------------------
alias update_phase4_step1_skill_chase update_phase4_step1
def update_phase4_step1
update_phase4_step1_skill_chase
init_chase
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
#--------------------------------------------------------------------------
alias update_phase4_step3_skill_chase update_phase4_step3
def update_phase4_step3
# 追加攻撃実行中ならステップ4に強制移行
if self.skill_chase_exercise
# ステップ 4 に移行
@phase4_step = 4
return
elsif @active_battler.current_action.kind == 1
if @active_battler.is_a?(Game_Actor)
# 追加攻撃チェック
skill_chase_check(@skill)
end
end
update_phase4_step3_skill_chase # 原物
end
#--------------------------------------------------------------------------
# ● 判定・設定
#--------------------------------------------------------------------------
def skill_chase_check(skill)
unless SKILL_CHASE[skill.id].nil?
self.skill_chase_set = SKILL_CHASE[skill.id]
@skill_chase_flg = true
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
#--------------------------------------------------------------------------
alias update_phase4_step4_skill_chase update_phase4_step4
def update_phase4_step4
# 追加攻撃
if @skill_chase_flg
# キーチェックを開始する
@skill_chase_check_key = true
# 追加攻撃実行中ならアニメーション再セット
if self.skill_chase_exercise
@animation2_id = self.skill_chase_set[1]
end
# 対象側アニメーション
for target in @target_battlers
# クリティカルでアニメーション変化
if SKILL_CHASE_CRITICAL and target.critical and self.skill_chase_first
target.animation_id = self.skill_chase_set[5]
else
# 一度でもクリティカルがあった
if target.once_critical and SKILL_CHASE_DMG_ALL
target.critical = true
end
target.animation_id = @animation2_id
end
target.animation_hit = (target.damage != "Miss")
end
# ウェイトを入れる
if SKILL_CHASE_WAIT != nil
@wait_count = SKILL_CHASE_WAIT
end
# ステップ 5 に移行
@phase4_step = 5
return
end
update_phase4_step4_skill_chase # 原物
end
#--------------------------------------------------------------------------
# ● 追加攻撃力設定
#--------------------------------------------------------------------------
def skill_chase_atk
# 物理攻撃系
if @skill.element_set.include?(CHASE_WEAPON)
self.chase_skill_type = 1
self.skill_atk_f = @skill.atk_f/100
# 魔法攻撃系
elsif @skill.element_set.include?(CHASE_MAGIC)
self.chase_skill_type = 2
self.skill_atk_f = @skill.int_f/100
else
p "設定ミス"
end
self.skill_chase_set[0] = @skill.power * self.skill_chase_set[0]/100
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
#--------------------------------------------------------------------------
alias update_phase4_step5_skill_chase update_phase4_step5
def update_phase4_step5
# キーチェック終了
@skill_chase_check_key = false
# 追加攻撃成功
if @skill_chase_success
skill_chase_atk
# 追加攻撃実行中に移行
self.skill_chase_exercise = true
end
# ダメージ一括表示
if SKILL_CHASE_DMG_ALL and self.skill_chase_exercise
# 追加攻撃終了or追加攻撃失敗
if self.skill_chase_end or !@skill_chase_success
self.skill_chase_exercise = false
@skill_chase_flg = false
self.skill_chase_end = false
# ヘルプウィンドウを隠す
@help_window.visible = false
# ステータスウィンドウをリフレッシュ
@status_window.refresh
# 積算ダメージの描写
for target in @target_battlers
if target.skill_chase_all_dmg != nil
target.damage = target.skill_chase_all_dmg
target.damage_pop = true
target.skill_chase_all_dmg = nil
# 途中で死んでたらトドメをさす
if target.skill_chase_dead_end
target.hp = 0
target.skill_chase_dead_end = false
end
# クリティカルが発生している
if target.once_critical
target.critical = true
target.once_critical = false
end
end
end
# ステップ 6 に移行
@phase4_step = 6
return
end
else
update_phase4_step5_skill_chase # 原物
end
# 追加攻撃終了or追加攻撃失敗
if self.skill_chase_end or !@skill_chase_success
self.skill_chase_exercise = false
@skill_chase_flg = false
self.skill_chase_end = false
if SKILL_CHASE_DMG_ALL
for target in @target_battlers
target.skill_chase_all_dmg = nil
if target.skill_chase_dead_end
target.hp = 0
target.skill_chase_dead_end = false
end
end
end
end
if self.skill_chase_exercise
@skill_chase_success = false
# 追加攻撃開始
@phase4_step = 2
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 0
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_skill_chase update
def update
if @skill_chase_check_key and @skill_chase_flg
# 追加攻撃発動チェック
if (Input.trigger?(SKILL_CHASE_KEY) or self.skill_chase_set[2])
# 確率チェック
if rand(100) <= self.skill_chase_set[3]
@skill_chase_success = true
@skill_chase_check_key = false
@skill_chase_count += 1
# 追加攻撃回数チェック
if @skill_chase_count >= self.skill_chase_set[4] or self.skill_chase_end
self.skill_chase_end = true
else
# 追加攻撃成功SEを鳴らしてみる
if SKILL_CHASE_SE != nil and !self.skill_chase_end
Audio.se_play("Audio/SE/" + SKILL_CHASE_SE)
end
end
end
end
end
update_skill_chase # 原物
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
#--------------------------------------------------------------------------
alias update_phase4_step6_add_atk update_phase4_step6
def update_phase4_step6
init_chase
for target in @target_battlers
target.skill_chase_all_dmg = nil
target.skill_chase_dead_end = false
target.once_critical = false
end
update_phase4_step6_add_atk
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
include ExtraSkill
attr_accessor :skill_chase_all_dmg # 積算ダメージ
attr_accessor :skill_chase_dead_end # 死亡フラグ
attr_accessor :once_critical # クリティカルフラグ(一括表示用)
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_skill_chase initialize
def initialize
initialize_skill_chase
@skill_chase_all_dmg = nil
@skill_chase_dead_end = false
@once_critical = false
end
#--------------------------------------------------------------------------
# ● 通常攻撃の効果適用
# attacker : 攻撃者 (バトラー)
#--------------------------------------------------------------------------
alias attack_effect_skill_chase attack_effect
def attack_effect(attacker)
if $scene.skill_chase_exercise
# クリティカルフラグをクリア
self.critical = false
# 基本ダメージを計算
if $scene.chase_skill_type == 1
atk_skill = (attacker.atk * $scene.skill_atk_f + $scene.skill_chase_set[0])/1.2
elsif $scene.chase_skill_type == 2
atk_skill = (attacker.int * $scene.skill_atk_f + $scene.skill_chase_set[0])/1.2
else
p "設定ミス2"
end
atk = [atk_skill.to_int - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# ダメージの符号が正の場合
if self.damage > 0
# クリティカル修正
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
self.once_critical = true
end
# 防御修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 第二命中判定
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 命中の場合
if hit_result == true
# ステート衝撃解除
remove_states_shock
# HP からダメージを減算
self.hp -= self.damage
# ステート変化
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# ミスの場合
else
# ダメージに "Miss" を設定
self.damage = "Miss"
# クリティカルフラグをクリア
self.critical = false
end
else
attack_effect_skill_chase(attacker) # 原物
end
if self.dead?
# こいつはもう死んでいる
@skill_chase_dead_end = true
# ダメージ一括表示
if SKILL_CHASE_DMG_ALL and $scene.skill_chase_exercise
# とりあえず生かしておく
self.hp = 1
else
$scene.skill_chase_end = true
end
end
# ダメージ一括表示ならダメージの蓄積
if SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_exercise
@skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
@skill_chase_all_dmg += self.damage
self.damage = nil
elsif SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_first
@skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
@skill_chase_all_dmg += self.damage
$scene.skill_chase_first = false
else
# ダメージミスなら終了
if SKILL_CHASE_MISS and self.damage == "Miss"
$scene.skill_chase_end = true
if SKILL_CHASE_DMG_ALL and @skill_chase_all_dmg == nil
@skill_chase_all_dmg = "Miss"
end
end
end
# メソッド終了
return true
end
#--------------------------------------------------------------------------
# ● スキルの効果適用
# user : スキルの使用者 (バトラー)
# skill : スキル
#--------------------------------------------------------------------------
alias skill_effect_skill_chase skill_effect
def skill_effect(user, skill)
ret = skill_effect_skill_chase(user, skill)
if self.dead?
# こいつはもう死んでいる
@skill_chase_dead_end = true
# ダメージ一括表示
if SKILL_CHASE_DMG_ALL and ($scene.skill_chase_exercise or $scene.skill_chase_first)
# とりあえず生かしておく
self.hp = 1
else
$scene.skill_chase_end = true
end
end
# ダメージ一括表示ならダメージの蓄積
if SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_exercise
@skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
@skill_chase_all_dmg += self.damage
self.damage = nil
elsif SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_first
@skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
@skill_chase_all_dmg = self.damage
$scene.skill_chase_first = false
else
# ダメージミスなら終了
if SKILL_CHASE_MISS and self.damage == "Miss"
$scene.skill_chase_end = true
if SKILL_CHASE_DMG_ALL and @skill_chase_all_dmg == nil
@skill_chase_all_dmg = "Miss"
end
end
end
return ret
end
end