#==============================================================================
# '0X to XP:パラメーター上昇アイテムの複数化 by 貪藻矢射妥←
#------------------------------------------------------------------------------
# パラメーター上昇を'0X方式(複数同時に上昇可能)にします
#
# ・・・ちなみに上昇する数値は全部同じになるのでちょっと使い勝手は悪い
#
# ※また、Lvをあげつつパラメーターを上げるといったことはできません。
#
#==============================================================================
# 変更点
#
# 2009:06:03
# ・Lvをアップさせるアイテムへの対応。
#
# 2016:03:01
# ・武器による命中精度対応
# ・外部フラグによる微修正
#
# 2020:11:01
# ・他スクリプト併用時のアップデート反映
#
# 2023:10:01
# ・一撃必殺カスタマイズの仕様変更対応
#
# 2024:10:01
# ・パラメータ追加対応
module DIAMOND
# パラメータ上昇用属性
# HP UP
HPPLUS = 42
# SP UP
SPPLUS = 43
# STR UP
STRPLUS = 44
# DEX UP
DEXPLUS = 45
# AGI UP
AGIPLUS = 46
# INT UP
INTPLUS = 47
# Lv UP
LVPLUS = 48
if $OuterFlgs["Param_Add"]
# LUKのみ上昇時のステート
LUK_ONLY = 108
end # $OuterFlgs["Param_Add"]
end
class Game_Battler
include MINTO
include DIAMOND
include BM
#--------------------------------------------------------------------------
# ● アイテムの効果適用
# item : アイテム
#--------------------------------------------------------------------------
def item_effect(item)
# クリティカルフラグをクリア
self.critical = false
# アイテムの効果範囲が HP 1 以上の味方で、自分の HP が 0、
# またはアイテムの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
# メソッド終了
return false
end
# 有効フラグをクリア
effective = false
# コモンイベント ID が有効の場合は有効フラグをセット
effective |= item.common_event_id > 0
# 命中判定
if $OuterFlgs["Weapon_HitRate"]
base_hitrate = get_hitrate_base(self, false)
else
base_hitrate = 100
end
hit_result = (rand(base_hitrate) < item.hit)
# 不確実なスキルの場合は有効フラグをセット
effective |= item.hit < 100
# 命中の場合
if hit_result == true
# 即死判定 ★ 一撃必殺カスタマイズ
if $OuterFlgs["Death_Critical"]
dead_end(DEATH_KILLER::DC_ITEM, item)
end # $OuterFlgs["Death_Critical"]
# 回復量を計算
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
# 属性修正
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
if $OuterFlgs["VX_2_XP"]
for st_id in VX_TO_XP::DRUG_KNOWN
if self.states.include?(st_id)
recover_hp *= VX_TO_XP::DRUG_RATE[st_id]
recover_sp *= VX_TO_XP::DRUG_RATE[st_id]
end
end
end # $OuterFlgs["VX_2_XP"]
# 分散
if item.variance > 0 and recover_hp.abs > 0
amp = [recover_hp.abs * item.variance / 100, 1].max
recover_hp += rand(amp+1) + rand(amp+1) - amp
end
if item.variance > 0 and recover_sp.abs > 0
amp = [recover_sp.abs * item.variance / 100, 1].max
recover_sp += rand(amp+1) + rand(amp+1) - amp
end
# 回復量の符号が負の場合
if recover_hp < 0
# 防御修正
if self.guarding?
recover_hp /= 2
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]
end
end
end # $OuterFlgs["VX_2_XP"]
end
end
if recover_sp < 0
# 防御修正
if self.guarding?
recover_sp /= 2
if $OuterFlgs["VX_2_XP"]
for st_id in VX_TO_XP::SUPER_GUARD
if self.states.include?(st_id)
self.damage2 /= VX_TO_XP::GUARD_RATE[st_id]
end
end
end # $OuterFlgs["VX_2_XP"]
end
end
# HP 回復量の符号を反転し、ダメージの値に設定
self.damage = -recover_hp
self.damage2 = -recover_sp
# HP および SP を回復
last_hp = self.hp
last_sp = self.sp
self.hp += recover_hp
self.sp += recover_sp
effective |= self.hp != last_hp
effective |= self.sp != last_sp
# ステート変化
@state_changed = false
if $OuterFlgs["Param_Add"]
if !item.plus_state_set.include?(LUK_ONLY)
effective |= states_plus(item.plus_state_set)
end
if !item.minus_state_set.include?(LUK_ONLY)
effective |= states_minus(item.minus_state_set)
end
end # $OuterFlgs["Param_Add"]
param_up_flg = [false, false, false, false, false, false, false]
lv_up_flg = false
# パラメータ上昇値が有効の場合
if item.parameter_type > 0 and item.parameter_points != 0
if item.element_set.include?(HPPLUS) || item.parameter_type == 1
param_up_flg[0] = true
end
if item.element_set.include?(SPPLUS) || item.parameter_type == 2
param_up_flg[1] = true
end
if item.element_set.include?(STRPLUS) || item.parameter_type == 3
param_up_flg[2] = true
end
if item.element_set.include?(DEXPLUS) || item.parameter_type == 4
param_up_flg[3] = true
end
if item.element_set.include?(AGIPLUS) || item.parameter_type == 5
param_up_flg[4] = true
end
if item.element_set.include?(INTPLUS) || item.parameter_type == 6
param_up_flg[5] = true
end
if $OuterFlgs["Param_Add"]
if item.minus_state_set.include?(LUK_ONLY) &&
item.element_set.include?(PARAM_ADD::ELE_LUK_PLUS)
for i in 0..5
param_up_flg[i] = false
end
param_up_flg[6] = true
end
if item.plus_state_set.include?(LUK_ONLY) ||
item.element_set.include?(PARAM_ADD::ELE_LUK_PLUS)
param_up_flg[6] = true
end
end # $OuterFlgs["Param_Add"]
if item.element_set.include?(LVPLUS)
lv_up_flg = true
end
#p param_up_flg, item.parameter_points
if param_up_flg[0] && !lv_up_flg
@maxhp_plus += item.parameter_points
end
if param_up_flg[1] && !lv_up_flg
@maxsp_plus += item.parameter_points
end
if param_up_flg[2] && !lv_up_flg
@str_plus += item.parameter_points
end
if param_up_flg[3] && !lv_up_flg
@dex_plus += item.parameter_points
end
if param_up_flg[4] && !lv_up_flg
@agi_plus += item.parameter_points
end
if param_up_flg[5] && !lv_up_flg
@int_plus += item.parameter_points
end
if $OuterFlgs["Param_Add"]
if param_up_flg[6] && !lv_up_flg
@luk_plus += item.parameter_points
end
end # $OuterFlgs["Param_Add"]
if lv_up_flg
sys_update_flg = false
if !sys_update_flg
@level += item.parameter_points
@exp = @exp_list[@level]
end
end
# 有効フラグをセット
effective = true
end
# HP 回復率と回復量が 0 の場合
if item.recover_hp_rate == 0 and item.recover_hp == 0
# ★ 一撃必殺カスタマイズ
if self.states.include?(1) && $OuterFlgs["Death_Critical"]
# ダメージに"即死"を設定
self.damage = DEATH_KILLER::DEATH_WORD
else
# ダメージに空文字列を設定
self.damage = ""
end
end
# SP 回復率と回復量が 0 の場合
if item.recover_sp_rate == 0 and item.recover_sp == 0
# ★ 一撃必殺カスタマイズ
if self.states.include?(1) && $OuterFlgs["Death_Critical"]
# ダメージに"即死"を設定
self.damage2 = DEATH_KILLER::DEATH_WORD
else
# ダメージに空文字列を設定
self.damage2 = ""
end
end
# HP/SP 回復が0 パラメータ上昇値が無効の場合
if self.damage == "" && self.damage2 == "" &&
(item.parameter_type == 0 or item.parameter_points == 0)
unless @state_changed
# ★ 一撃必殺カスタマイズ
if self.states.include?(1) && $OuterFlgs["Death_Critical"]
# ダメージに"即死"を設定
self.damage = DEATH_KILLER::DEATH_WORD
self.damage2 = DEATH_KILLER::DEATH_WORD
else
# ダメージに "Miss" を設定
self.damage = MISS_WORD
self.damage2 = MISS_WORD
end
end
end
# ミスの場合
else
# ダメージに "Miss" を設定
self.damage = MISS_WORD
self.damage2 = MISS_WORD
end
# 戦闘中でない場合
unless $game_temp.in_battle
# ダメージに nil を設定
self.damage = nil
self.damage2 = nil
end
# メソッド終了
return effective
end
end
|