#----------------------------------------------------------------------------
# ステート詳細化 Plus By 貪藻矢射妥←
# ちょっとクセがあります・・・多分。
#----------------------------------------------------------------------------
# 原作: ▼▲▼ XRXS18. ステート防御/有効度詳細化 ver.2 ▼▲▼
# 原作者: 森穂様、XRXS.様
# HP: 小さな本屋
# アドレス: http://xrxs.at-ninja.jp/
#
# 改造内容:
# ・防具にステート%防御を設定していない場合の処理を追加
# ・ステート変化の処理で防具にステート防御が設定されている場合、本処理が
# 走らないバグを修正
#============================================================================
# 更新っぽいもの
# 2011:07:01
# ・ステートバリア実装
#
# 2024:03:01
# ・クラス詳細化と同時併用の場合エラー落ちする不具合を修正
$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["State_Extend"] = true
#==============================================================================
# カスタマイズポイント (最大と最小)
#==============================================================================
module XRXS18
STATE_RATE_MAX = 100
STATE_RATE_MIN = 0
# 有効なステートとして使うステート一覧。
USE_STATE = [1..18]
DEFAULT_RATE = 0.8
# ステートバリア設定
# [[バリア用ステートID, [ガードするステートID]], ... ]
STATE_GUARD_STATE = [[261, [ 2, 3, 6, 7, 8, 18]],
[262, [ 2, 3, 6, 7, 8, 18, 4, 9, 15, 16, 11, 12]],
[263, [ 2, 3, 6, 7, 8, 18, 4, 9, 15, 16, 11, 12,
5, 10, 13, 14, 1, 17]]]
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
# の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● ステート防御判定
# state_id : ステート ID
#--------------------------------------------------------------------------
def state_guard?(state_id)
return state_percent(state_id)
end
end
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
# エネミーを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の
# 内部で使用されます。
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● ステート防御判定
# state_id : ステート ID
#--------------------------------------------------------------------------
def state_guard?(state_id)
return 100
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
include XRXS18
#--------------------------------------------------------------------------
# ○ ステート有効度の取得
#--------------------------------------------------------------------------
def state_percent(state_id)
if $OuterFlgs["Class_Evolve"]
state_rank_table = CLASS_EVOLVE::STATE_RANK_TABLE
else
state_rank_table = [0,100,80,60,40,20,0]
end # $OuterFlgs["Class_Evolve"]
effect_percent = state_rank_table[self.state_ranks[state_id]]
state_name = $data_states[state_id].name
# ステートセットを取得
plus_state_set = []
minus_state_set = []
for k in self.states
plus_state_set += $data_states[k].plus_state_set
minus_state_set += $data_states[k].minus_state_set
end
if self.is_a?(Game_Actor)
weapon_list = [@weapon_id]
if $OuterFlgs["Equip_Extend"]
armor_list = [@armor1_id, @armor2_id, @armor6_id, @armor3_id, @armor4_id,
@armor5_id, @armor7_id, @armor8_id]
else
armor_list = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
end # $OuterFlgs["Equip_Extend"]
if $OuterFlgs["Equip_Extend"]
for i in self.armors_weapon.size-1..0
if self.armors_weapon[i]
tmp_id = armor_list[i]
armor_list.delete_at(i)
weapon_list.push(tmp_id)
end
end
end # $OuterFlgs["Equip_Extend"]
for id in weapon_list
if id >= 1
plus_state_set += $data_weapons[id].plus_state_set
minus_state_set += $data_weapons[id].minus_state_set
end
end
for id in armor_list
if id >= 1
minus_state_set += $data_armors[id].guard_state_set
end
end
# エネミーの場合
else
weapon_list = []
armor_list = []
end
# 計算
# 防具にステート%防御が設定されている場合は確率減少
for id in plus_state_set
if $data_states[id].name =~ /^#{state_name}([0-9]+)(%|%)/
effect_percent += $1.to_i
end
end
for id in minus_state_set
if $data_states[id].name =~ /^#{state_name}([0-9]+)(%|%)/
effect_percent -= $1.to_i
end
end
# 防具にステート%防御が設定されていない場合
if effect_percent == state_rank_table[self.state_ranks[state_id]]
for k in armor_list#self.armor_ids
armor = $data_armors[k]
next if armor == nil
for j in armor.guard_state_set
if $data_states[j] != nil
#if j <= 18
for tmp_value in USE_STATE
if tmp_value.is_a?(Range) && tmp_value === j || tmp_value == j
if $data_states[j].name.clone == state_name.clone
effect_percent *= DEFAULT_RATE
effect_percent = Integer(effect_percent)
end
end
end
end
end
end
end
# ステートバリアの場合
for s_g_s in STATE_GUARD_STATE
st_br_id = s_g_s[0]
guard_id = s_g_s[1]
if self.states.include?(st_br_id)
if guard_id.include?(state_id)
effect_percent = 0
end
end
end
return [[effect_percent, STATE_RATE_MIN].max, STATE_RATE_MAX].min
end
#--------------------------------------------------------------------------
# ● ステート変化 (+) の適用 [再定義]
#--------------------------------------------------------------------------
def states_plus(plus_state_set)
# 有効フラグをクリア
effective = false
# ループ (付加するステート)
for i in plus_state_set
# このステートが防御されていない場合
unless self.state_guard?(i) == 0
# このステートがフルでなければ有効フラグをセット
effective |= self.state_full?(i) == false
# ステートが [抵抗しない] の場合
if $data_states[i].nonresistance
# ステート変化フラグをセット
@state_changed = true
# ステートを付加
add_state(i)
# このステートがフルではない場合
elsif self.state_full?(i) == false
# ステート有効度を確率に変換し、乱数と比較
if rand(100) < self.state_percent(i)
# ステート変化フラグをセット
@state_changed = true
# ステートを付加
add_state(i)
end
end
end
end
# メソッド終了
return effective
end
end
|