#==============================================================================
# ■ 一撃必殺カスタマイズ β By 貪藻矢射妥←( + 彩夏様、真希様)
#
# ・特定のステートにかかっている状態で通常攻撃を受けると即死
# ・特定のステートにかかっている状態で特定の属性のスキルを受けると即死
# ・特定のステートにかかっている状態で通常攻撃を受け即死した際に即死表示
#
# の機能に加え
#
# ・戦闘不能ステートが付加された武器で攻撃し死亡した際に即死表示
# ・スキルの威力が0で、戦闘不能ステートが付加されたスキルで死亡した際に即死表示
# ・ステートや属性を変数から配列へ変更
# ・即死の判定を別関数化
# ・カスタマイズポイントをモジュールとして定義
# ・アイテムで即死した場合にも即死表示
# ・特定のステートにかかっている状態で特定の属性をもつアイテムを受けると即死
# ・ステートと属性の対応を複数持たせることができるように変更
# (おかげで設定が偉い面倒なことに・・・)
# ・ステートと属性の組み合わせを一括で指定出来るように変更
# (凄く使い勝手が悪くなっている気が・・・)
#
# を追加、変更しております。
#
# ○ 一言 ○
# 凍結状態 + 斬撃スキル → 即死 はいいとして・・・
# 凍結状態 + 炎スキル → 即死 はいいのだろうか?
#
# それはおかしい!ってな意見が多数寄せられた場合、のんびりと対処しようかと
# 思います。
#
# なお、このスクリプトを考案、改良するにあたって以下の方々の助言や、協力、
# がありました。ここで、あらためてお礼申し上げます
# 彩夏様、真希様
#
#==============================================================================
# 更新っぽいもの
#
# 2016:03:01
# ・武器による命中精度対応
#
# 2020:11:01
# ・他スクリプト併用時のアップデート反映
#
# 2023:10:01
# ・即死スキル判定の仕様変更
#
# 2023:12:01
# ・他スクリプト併用時のアップデート反映
# 通常攻撃・防御無視
#
# 2024:04:01
# ・他スクリプト併用時のアップデート反映
#
# 2024:10:01
# ・パラメータ追加対応
$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["Death_Critical"] = true
module DEATH_KILLER
#=============================================================================
# □ カスタマイズポイント
#=============================================================================
# 即死スキル判定に使用するフラグ
DC_ATTACK = 0
DC_SKILL = 1
DC_ITEM = 2
# ◆一撃必殺ステート/属性一括フラグ
# 特定の攻撃/スキル/アイテムを受けると即死において、全て同じ配列を使用する
# 場合は true にしてください
# なお、その場合、使用するのは『PRE_DEATH_DEFAULT_STATES』となります。
PRE_DEATH_STATE_FLG = false
# ステート/属性のID群の設定方法
# [[[ステートのID群A], [属性のID群A]], [[ステートのID群B], [属性のID群B]], ...]
# | <- ステートと属性の対応 A -> | | <- ステートと属性の対応 B -> |
# のように記述します。
# ※属性を必要としない場合は属性のID群を空にしてください。
#
# EX)
# [[[3], []], [[7], [17]]] の場合
# ステート3にかかっている場合は攻撃/スキル/アイテムを受けると即死
# ステート7にかかっている場合は属性17を含む攻撃/スキル/アイテムを受けると即死
# ◆ある属性の通常攻撃を受けると即死するステート/属性のID群
PRE_DEATH_ATTACK_STATES = [[[11, 17], [11, 12, 13, 14, 15]]]
# ◆ある属性のスキルを受けると即死するステート/属性のID群
PRE_DEATH_SKILL_STATES = [[[9, 13], [8]], [[10], [9]]]
# ◆ある属性のアイテムを受けると即死するステート/属性のID群
PRE_DEATH_ITEM_STATES = [[[9, 13], [8]], [[10], [9]]]
# ◆デフォルト即死するステート/属性のID群
# PRE_DEATH_STATE_FLG が true の場合のみ使用
PRE_DEATH_DEFAULT_STATES = PRE_DEATH_ATTACK_STATES
# ◆即死時に表示する文字列
DEATH_WORD = "Death"
end
class Game_Battler
include BM
#--------------------------------------------------------------------------
# ● 即死スキル判定
# flg : 対象判定フラグ
# : 通常攻撃/スキル/アイテム
# action : アクション要素
#--------------------------------------------------------------------------
def dead_end(flg, action)
if flg == DEATH_KILLER::DC_ATTACK
st_el_sets = DEATH_KILLER::PRE_DEATH_ATTACK_STATES
elsif flg == DEATH_KILLER::DC_SKILL
st_el_sets = DEATH_KILLER::PRE_DEATH_SKILL_STATES
else
st_el_sets = DEATH_KILLER::PRE_DEATH_ITEM_STATES
end
# ステート/属性ID群は一括指定?
if DEATH_KILLER::PRE_DEATH_STATE_FLG
st_el_sets = DEATH_KILLER::PRE_DEATH_DEFAULT_STATES
end
for st_els in st_el_sets
if st_els[1].empty?
if dead_end2(st_els[0])
return true
end
else
for ele in st_els[1]
if action.element_set.include?(ele)
if dead_end2(st_els[0])
return true
end
end
end
end
end
return false
end
#--------------------------------------------------------------------------
# ● 即死スキル判定2
# state_set : ステートのID群
#--------------------------------------------------------------------------
def dead_end2(state_set)
for stt in state_set
if self.state?(stt)
self.add_state(1)
return true
end
end
return false
end
#--------------------------------------------------------------------------
# ● 通常攻撃の効果適用
# attacker : 攻撃者 (バトラー)
#--------------------------------------------------------------------------
def attack_effect(attacker)
# クリティカルフラグをクリア
self.critical = false
if $imported["RankConception"]
# 射程外の場合
action = attacker.is_a?(Game_Actor) ? ($imported["EquipExtension"] ?
$data_weapons[attacker.weapon_id(attacker.attack_count)] :
$data_weapons[attacker.weapon_id]) : nil
if KGC::RC_OUT_RANGE_MODE == 0 && !self.within_range?(attacker, action) &&
!self.over_range?(action)
# ダメージに "Miss" を設定
self.damage = Vocab::MISS_WORD
# 偽を返す
return false
end
end # $imported["RankConception"]
# 基本命中率の設定
base_hitrate = 100
if $OuterFlgs["Weapon_HitRate"]
# 命中精度実装時は命中率を再設定する
base_hitrate = get_hitrate_base(attacker)
end # $OuterFlgs["Weapon_HitRate"]
# 第一命中判定
hit_result = (rand(base_hitrate) < attacker.hit)
# 命中の場合 part1
if hit_result == true
# 防御無視フラグ初期化
pdef_ignore_flg = false
if $OuterFlgs["Tkl_2K_2_XP"]
# 防御無視判定
pdef_ignore_flg = attacker.element_set.include?(Tkl2K_2_XP::PDEF_IGNORE)
end # $OuterFlgs["Tkl_2K_2_XP"]
# 基本ダメージを計算
if pdef_ignore_flg
atk = attacker.atk
else
atk = [attacker.atk - self.pdef / 2, 0].max
end
self.damage = atk * (20 + attacker.str) / 20
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# ダメージの符号が正の場合
if self.damage > 0
# クリティカル修正
critical_rate = 100
if $OuterFlgs["VX_2_XP"]
for st_id in VX_TO_XP::CRITICAL_MOST
if attacker.states.include?(st_id)
critical_rate /= VX_TO_XP::CRITICAL_RATE[st_id]
end
end
end # $OuterFlgs["VX_2_XP"]
# 必殺防止フラグ初期化
crt_can_flg = false
if $OuterFlgs["Tkl_2K_2_XP"]
# 必殺防止判定
crt_can_flg = !armor_element_include?(Tkl2K_2_XP::CRITICAL_CANCEL)
end # $OuterFlgs["Tkl_2K_2_XP"]
if !crt_can_flg && rand(critical_rate) < 4 * attacker.dex / self.agi
if $SilfeedArks["Special_Attack"]
# アクターの場合 必殺技スキル発動チェック
if attacker.is_a?(Game_Actor)
if attacker.critical_skill != nil
self.critical_skill_flg = true
return true
end
end
end # $SilfeedArks["Special_Attack"]
if $OuterFlgs["VX_2_XP"]
self.damage *= VX_TO_XP::CRITICAL_BST
else # 元の処理
self.damage *= 2
end # $OuterFlgs["VX_2_XP"]
self.critical = true
end # クリティカル判定
gurard_flg = false
# 防御修正
if self.guarding?
if $OuterFlgs["VX_2_XP"]
for st_id in VX_TO_XP::SUPER_GUARD
if self.states.include?(st_id)
self.damage /= VX_TO_XP::GUARD_RATE[st_id]
gurard_flg = true
end
end
end # $OuterFlgs["VX_2_XP"]
# 二重計上防止
if !gurard_flg
self.damage /= 2
end
end # self.guarding?
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_can_flg = false
if $OuterFlgs["Tkl_2K_2_XP"]
# 回避無視判定
eva_can_flg = !attacker.element_set.include?(Tkl2K_2_XP::EVA_IGNORE)
end # $OuterFlgs["Tkl_2K_2_XP"]
if !eva_can_flg
#eva = 8 * self.agi / attacker.dex + self.eva
eva = 8 * self.agi / attacker.dex + self.eva / 80.0
hit = self.damage < 0 ? 100 : 100 - eva
if $OuterFlgs["Param_Add"]
# Luk補正
hit = [hit - self.luk / 40.0, 5].max if attacker.is_a?(Game_Enemy)
end # $OuterFlgs["Param_Add"]
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(base_hitrate) < hit)
end
end # 命中の場合 part1
if $imported["RankConception"]
# 隊列によるダメージ補正
if KGC::RC_OUT_RANGE_MODE == 1 && !self.over_range?(action)
self.damage *= damage_by_range(attacker, action)
self.damage = Integer(self.damage)
end
end # $imported["RankConception"]
# 命中の場合 part2
if hit_result == true
if $SilfeedArks["Special_Attack"]
# ダメージ吸収の場合、符号反転
if @counter[0] == 1 and @counter[6]
self.damage *= -1
end
# スキルキャンセルの場合ダメージを空白して終了
if @counter[4] and @counter[6]
self.damage = nil
return true
end
end # $SilfeedArks["Special_Attack"]
# 即死フラグ初期化
die_flg = false
if $OuterFlgs["Death_Critical"]
# 即死判定
die_flg = dead_end(DEATH_KILLER::DC_ATTACK, attacker)
end # $OuterFlgs["Death_Critical"]
# ステート衝撃解除
remove_states_shock
# HP からダメージを減算
if $imported["SPDamage"] && attacker.element_set.include?(KGC::SP_DAMAGE)
self.sp -= self.damage
else # 元の処理元の処理
self.hp -= self.damage
end # $imported["SPDamage"]
# ステート変化
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# 特定ステート+物理ダメージで即死か即死付加武器による攻撃で死亡した場合
if (die_flg && $OuterFlgs["Death_Critical"]) ||
(self.states.include?(1) && attacker.plus_state_set.include?(1))
# ダメージに"即死"を設定
self.damage = DEATH_KILLER::DEATH_WORD
end
# ミスの場合
else
# ダメージに "Miss" を設定
self.damage = Vocab::MISS_WORD
# クリティカルフラグをクリア
self.critical = false
end
# メソッド終了
return true
end
#--------------------------------------------------------------------------
# ● スキルの効果適用
# user : スキルの使用者 (バトラー)
# skill : スキル
#--------------------------------------------------------------------------
★★★ Surume_2K_2_XP 参照 ★★★
#--------------------------------------------------------------------------
# ● アイテムの効果適用
# item : アイテム
#--------------------------------------------------------------------------
★★★ '0X to XP:パラメーター上昇アイテムの複数化 参照 ★★★
end
|