#==============================================================================
# 本脚本来自[url]www.66rpg.com[/url],转载与使用请保留此内容。
#==============================================================================
# ■ 追加攻击 Ver. 3.2.3 by Claimh
#------------------------------------------------------------------------------
# [url]http://www.k3.dion.ne.jp/~claimh/[/url]
#------------------------------------------------------------------------------
# ·普通攻击时,如果时机很好地输按键(默认的回车),追加攻击发动。
# ·自动发动,连续尾随回数也可设定
# ·critical发动时动画不同…………总之看下面的自定义内容就可以了。
#==============================================================================
module Add_attack
#==============================================================================
# □ 自定义内容开始
#==============================================================================
# 启动追加攻击的按键(也就是说,默认情况下,攻击动画发动的时候按下回车键就会
# 发动追加攻击,类似FF8的枪刀)
ADD_ATK_KEY = Input::C
# 伤害概括(?)
ADD_ATK_DMG_ALL = true # 不需要的时候就false
# 等待时间
ADD_ATK_WAIT = 4 # 数值输入
# 通常攻击如果Miss了就无法追加
ADD_ATK_MISS = true # 如果Miss仍然可以追加,就 = true
# Critical发生时动画发生变化
ADD_ATK_CRITICAL = true # 不需要的话就 = false
# 追加攻击成功时播放的声效
ADD_ATK_SE = "020-Teleport03" # 不需要的话就 = nil
# 追加攻击设定举例
# [武器ID, 追加攻击力(%), 追加动画ID,自动发生标志, 追加成功率,
# 连续回数, Criticle时的动画编号]
ADD1 = [1, 80, 30, false, 100, 5, 31]
ADD2 = [5, 150, 33, false, 50, 8, 34]
ADD3 = [25, 80, 42, false, 100, 8, 43]
ADD4 = [29, 150, 48, false, 20, 6, 49]
# 将所有正确定义的内容添加进来
ADD_ATK = [ADD1, ADD2, ADD3, ADD4]
#==============================================================================
# □ 自定义内容结束
#==============================================================================
end
class Scene_Battle
include Add_attack
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias update_phase4_step1_add_atk update_phase4_step1
def update_phase4_step1
update_phase4_step1_add_atk
@add_atk_flg = false # 追加攻击开始
$add_atk_exercise = false # 追加攻击执行中
$add_atk_end = false # 追加攻击终了
@add_atk_check_key = false # 追加判定执行中
@add_atk_success = false # 追加成功
@add_atk_count = 0 # 追加数
$add_atk_first = true # 初期设定
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias update_phase4_step3_add_atk update_phase4_step3
def update_phase4_step3
if $add_atk_exercise
@phase4_step = 4
return
elsif @active_battler.current_action.basic == 0
if @active_battler.is_a?(Game_Actor)
add_atk_check(@active_battler)
end
end
update_phase4_step3_add_atk
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
def add_atk_check(actor)
for i in 0..ADD_ATK.size-1
$add_atk_set = ADD_ATK[i]
if actor.weapon_id == $add_atk_set[0]
@add_atk_flg = true
return
end
end
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias update_phase4_step4_add_atk update_phase4_step4
def update_phase4_step4
# 追加攻击
if @add_atk_flg
@add_atk_check_key = true
if $add_atk_exercise
@animation2_id = $add_atk_set[2]
end
for target in @target_battlers
if ADD_ATK_CRITICAL and target.critical and $add_atk_first
target.animation_id = $add_atk_set[6]
else
if target.one_critical and ADD_ATK_DMG_ALL
target.critical = true
end
target.animation_id = @animation2_id
end
target.animation_hit = (target.damage != "Miss")
end
if ADD_ATK_WAIT != nil
@wait_count = ADD_ATK_WAIT
end
@phase4_step = 5
return
end
update_phase4_step4_add_atk # 原内容
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias update_phase4_step5_add_atk update_phase4_step5
def update_phase4_step5
@add_atk_check_key = false
# 追加成功
if @add_atk_success
$add_atk_exercise = true
end
if ADD_ATK_DMG_ALL and $add_atk_exercise
# 追加终了 or 追加失败
if $add_atk_end or !@add_atk_success
$add_atk_exercise = false
@add_atk_flg = false
$add_atk_end = false
@help_window.visible = false
@status_window.refresh
for target in @target_battlers
if target.add_atk_all_dmg != nil
target.damage = target.add_atk_all_dmg
target.damage_pop = true
target.add_atk_all_dmg = nil
if target.add_atk_dead_end
target.hp = 0
target.add_atk_dead_end = false
end
end
end
@phase4_step = 6
return
end
else
update_phase4_step5_add_atk
end
if $add_atk_end or !@add_atk_success
$add_atk_exercise = false
@add_atk_flg = false
$add_atk_end = false
if ADD_ATK_DMG_ALL
for target in @target_battlers
target.add_atk_all_dmg = nil
if target.add_atk_dead_end
target.hp = 0
end
end
end
end
if $add_atk_exercise
@add_atk_success = false
@phase4_step = 2
end
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias update_add_atk update
def update
if @add_atk_check_key and @add_atk_flg
if (Input.trigger?(ADD_ATK_KEY) or $add_atk_set[3])
if rand(100) <= $add_atk_set[4]
@add_atk_success = true
@add_atk_check_key = false
@add_atk_count += 1
if @add_atk_count >= $add_atk_set[5] or $add_atk_end
$add_atk_end = true
else
if ADD_ATK_SE != nil and !$add_atk_end
Audio.se_play("Audio/SE/" + ADD_ATK_SE)
end
end
end
end
end
update_add_atk
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias update_phase4_step6_add_atk update_phase4_step6
def update_phase4_step6
@add_atk_flg = false
$add_atk_exercise = false
$add_atk_end = false
@add_atk_check_key = false
@add_atk_success = false
@add_atk_count = 0
$add_atk_first = false
update_phase4_step6_add_atk
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
include Add_attack
attr_accessor :add_atk_all_dmg
attr_accessor :add_atk_dead_end
attr_accessor :one_critical
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias initialize_skill_add_atk initialize
def initialize
initialize_skill_add_atk
@add_atk_all_dmg = nil
@add_atk_dead_end = false
@one_critical = false
end
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
alias attack_effect_addition attack_effect
def attack_effect(attacker)
if $add_atk_exercise
self.critical = false
atk = [attacker.atk * $add_atk_set[1]/100 - 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.one_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
self.hp -= self.damage
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
else
self.damage = "Miss"
self.critical = false
end
else
attack_effect_addition(attacker)
end
if self.dead?
@add_atk_dead_end = true
if ADD_ATK_DMG_ALL and ($add_atk_exercise or $add_atk_first)
self.hp = 1
else
$add_atk_end = true
end
end
if ADD_ATK_DMG_ALL and self.damage != "Miss" and $add_atk_exercise
@add_atk_all_dmg = (@add_atk_all_dmg == nil ? 0 : @add_atk_all_dmg)
@add_atk_all_dmg += self.damage
self.damage = nil
elsif ADD_ATK_DMG_ALL and self.damage != "Miss" and $add_atk_first
@add_atk_all_dmg = (@add_atk_all_dmg == nil ? 0 : @add_atk_all_dmg)
@add_atk_all_dmg += self.damage
$add_atk_first = false
else
if ADD_ATK_MISS and self.damage == "Miss"
$add_atk_end = true
if ADD_ATK_DMG_ALL and @add_atk_all_dmg == nil
@add_atk_all_dmg = "Miss"
end
end
end
return true
end
end
2、特技的追加攻击:
#==============================================================================
# 本脚本来自[url]www.66rpg.com[/url],转载与使用请保留此内容。
#==============================================================================
# ■ 技能连击追加 Ver. 3.2.3 by Claimh
#------------------------------------------------------------------------------
# [url]http://www.k3.dion.ne.jp/~claimh/[/url]
#------------------------------------------------------------------------------
module Skill_chase
#==============================================================================
# □ 自定义内容开始
#==============================================================================
# 追加攻击按键
SKILL_CHASE_KEY = Input::C
# 导入技艺水平制(?)
USE_SKILL_LEVEL = false # 不要的话就false
# 损伤表示
SKILL_CHASE_DMG_ALL = true # 不要的话就false
# 等待时间
SKILL_CHASE_WAIT = 4 # 输入一个数值
# 要是Miss就不追加攻击。true/false
SKILL_CHASE_MISS = true
# CRITICAL动画变化。true/false
SKILL_CHASE_CRITICAL = true
# 物理攻击系特技的属性ID
CHASE_WEAPON = 19
# 魔法攻击系特技的属性ID #——这两个要注意。
CHASE_MAGIC = 20
# 成功时发出的SE声音
SKILL_CHASE_SE = "020-Teleport03" # 不需要的话就nil
# 设定举例
# [特技ID,追加攻击的攻击力(%),连锁动画ID,成功率,
# 连续回数,critical时候动画ID]
CHASE1 = [57, 100, 31, false, 100, 5, 32]
CHASE2 = [61, 100, 42, false, 100, 4, 43]
# 将以上内容拿下来
SKILL_CHASE = [CHASE1, CHASE2]
#==============================================================================
# □ 自定义内容结束
#==============================================================================
end
class Scene_Battle
include Skill_chase
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
#--------------------------------------------------------------------------
alias update_phase4_step1_skill_chase update_phase4_step1
def update_phase4_step1
update_phase4_step1_skill_chase
@skill_chase_flg = false # 追加攻撃開始
$skill_chase_exercise = false # 追加攻撃実行中
$skill_chase_end = false # 追加攻撃終了
@skill_chase_check_key = false # 追加攻撃判定実行中
@skill_chase_success = false # 追加攻撃成功
@skill_chase_count = 0 # 追加攻撃数カウント
$skill_chase_first = true # 初期フラグ
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
#--------------------------------------------------------------------------
alias update_phase4_step3_skill_chase update_phase4_step3
def update_phase4_step3
# 追加攻撃実行中ならステップ4に強制移行
if $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)
for i in 0..SKILL_CHASE.size-1
$skill_chase_set = SKILL_CHASE[i]
if skill.id == $skill_chase_set[0]
@skill_chase_flg = true
return
end
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 $skill_chase_exercise
@animation2_id = $skill_chase_set[2]
end
# 対象側アニメーション
for target in @target_battlers
# クリティカルでアニメーション変化
if SKILL_CHASE_CRITICAL and target.critical and $skill_chase_first
target.animation_id = $skill_chase_set[6]
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)
$chase_skill_type = 1
$skill_atk_f = @skill.atk_f/100
# 魔法攻撃系
elsif @skill.element_set.include?(CHASE_MAGIC)
$chase_skill_type = 2
$skill_atk_f = @skill.int_f/100
else
p "設定ミス"
end
$skill_chase_set[1] = @skill.power * $skill_chase_set[1]/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
# 追加攻撃実行中に移行
$skill_chase_exercise = true
end
# ダメージ一括表示
if SKILL_CHASE_DMG_ALL and $skill_chase_exercise
# 追加攻撃終了or追加攻撃失敗
if $skill_chase_end or !@skill_chase_success
$skill_chase_exercise = false
@skill_chase_flg = false
$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
end
end
# ステップ 6 に移行
@phase4_step = 6
return
end
else
update_phase4_step5_skill_chase # 原物
end
# 追加攻撃終了or追加攻撃失敗
if $skill_chase_end or !@skill_chase_success
$skill_chase_exercise = false
@skill_chase_flg = false
$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
end
end
end
end
if $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 $skill_chase_set[3])
# 確率チェック
if rand(100) <= $skill_chase_set[4]
@skill_chase_success = true
@skill_chase_check_key = false
@skill_chase_count += 1
# 追加攻撃回数チェック
if @skill_chase_count >= $skill_chase_set[5] or $skill_chase_end
$skill_chase_end = true
else
# 追加攻撃成功SEを鳴らしてみる
if SKILL_CHASE_SE != nil or !$skill_chase_end
Audio.se_play("Audio/SE/" + SKILL_CHASE_SE)
end
end
end
end
end
update_skill_chase # 原物
end
#--------------------------------------------------------------------------
# ● スキルレベル取得
#--------------------------------------------------------------------------
def get_skill_level
return $game_actors[@activ_battler.eid].skill_level[@skill.id]
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
include Skill_chase
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 $skill_chase_exercise
# クリティカルフラグをクリア
self.critical = false
# 基本ダメージを計算
if $chase_skill_type == 1
atk_skill = (attacker.atk * $skill_atk_f + $skill_chase_set[1])/1.2
elsif $chase_skill_type == 2
atk_skill = (attacker.int * $skill_atk_f + $skill_chase_set[1])/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 $skill_chase_exercise
# とりあえず生かしておく
self.hp = 1
else
$skill_chase_end = true
end
end
# ダメージ一括表示ならダメージの蓄積
if SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $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 $skill_chase_first
@skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
@skill_chase_all_dmg += self.damage
$skill_chase_first = false
else
# ダメージミスなら終了
if SKILL_CHASE_MISS and self.damage == "Miss"
$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 ($skill_chase_exercise or $skill_chase_first)
# とりあえず生かしておく
self.hp = 1
else
$skill_chase_end = true
end
end
# ダメージ一括表示ならダメージの蓄積
if SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $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 $skill_chase_first
@skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
@skill_chase_all_dmg = self.damage
$skill_chase_first = false
else
# ダメージミスなら終了
if SKILL_CHASE_MISS and self.damage == "Miss"
$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