#----------------------------------------------------------------------------
# 属性詳細化 Plus By 貪藻矢射妥←
# ちょっとクセがあります・・・多分。
#----------------------------------------------------------------------------
# 原作: ▼▲▼ XRXS14. 属性防御/弱点詳細化 ▼▲▼
# 原作者: 森穂様、XRXS.様
# HP: 小さな本屋
# アドレス: http://xrxs.at-ninja.jp/
#
# 改造内容:
# ・XPの仕様(有効度が-100の場合で、属性が防御されている場合、半減されて
# 有効度が-50にになってしまう点)の改良
# ・オマケで沈黙の拡張
#
# 更新っぽいもの
# 2007:02:13
# ・プログラム総数を減少
#
# 2007:02:15
# ・カスタマイズポイントの作成+微修正
#
# 2009:05:07
# ・こっちに● スキルの使用可能判定 は別に不要な気がするので削除
# (と、いうかなんでこっちにも入れたんだっけ?)←アンタ以外にわかるか!
#
# 2010:10:17
# ・エネミー側の処理を追加(今まで忘れていました・・・)
#
# 2011:06:04
# ・無駄処理を削除
#
# 2011:07:01
# ・属性防御のみを設定した場合の処理を追加
# ・属性防御用ステートでマイナスのみを設定した場合、軽減ではなく、増加するように
# 変更
# ・ステートに属性防御が付加されている場合、半減ではなく、軽減に変更
# ・物理属性配列/魔法属性配列が逆になっていたバグを修正
$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["Element_Plus"] = true
module ELE_MM
MAX = 200
MIN = -200
# weakest 物理/魔法
WEEK_P = 0
WEEK_M = -100
# 物理属性配列/魔法属性配列
P_LIST = [11..15]
M_LIST = [1..9, 16]
# 属性防御のみを設定した場合の軽減値
DEFAULT_GUARD = 15
# 属性防御判定用
GRD_ELE_PLUS = 0 # 属性ダメージ増加
GRD_ELE_MINUS = 1 # 属性ダメージ反転
GRD_ELE_NONE = -1 # デフォルト
def state_guard_ele(result, element_id)
# ガード用因子設定
gurd_factor = (100.0 / (100 - DEFAULT_GUARD))
if result > 0
# ステートでこの属性が防御されている場合は軽減(属性有効度が正の場合)
for i in @states
if $data_states[i].guard_element_set.include?(element_id)
result /= gurd_factor
end
end
else
# ステートでこの属性が防御されている場合は軽減(属性有効度が負の場合)
for i in @states
if $data_states[i].guard_element_set.include?(element_id)
result *= gurd_factor
end
end
end
return Integer(result)
end
end
class Game_Actor < Game_Battler
include ELE_MM
#--------------------------------------------------------------------------
# ● 属性補正値の取得
# element_id : 属性 ID
#--------------------------------------------------------------------------
def element_rate(element_id)
#if element_id < 16
# 属性有効度に対応する数値を取得
table = [0,200,150,100,50,0,-100]
result = table[$data_classes[@class_id].element_ranks[element_id]]
element_name = $data_system.elements[element_id]
rate = [0, 0, 0, 0]
r_flg = [GRD_ELE_NONE, GRD_ELE_NONE, GRD_ELE_NONE, GRD_ELE_NONE]
t_rate = 0
list = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
# 防具でこの属性が防御されている場合の計算
for h in 0...list.size
armor = $data_armors[list[h]]
if armor != nil and armor.guard_element_set.include?(element_id)
# 属性ダメージ増(減)n%が設定されている場合
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate[h] += $1.to_i
r_flg[h] = GRD_ELE_PLUS
end
end
# 属性ダメージ反転が設定されている場合
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
# 属性ダメージ反転のみが設定されている場合
if r_flg[h] == GRD_ELE_NONE
rate[h] += DEFAULT_GUARD
# 属性ダメージ増加で反転の場合(属性ダメージ軽減)
elsif r_flg[h] == GRD_ELE_PLUS
rate[h] *= -1
end
r_flg[h] = GRD_ELE_MINUS
end
end
# 属性ダメージ軽減用ステートが何も設定されていない場合
if r_flg[h] == GRD_ELE_NONE
rate[h] -= DEFAULT_GUARD
end
end
end
for one_rate in rate
t_rate += one_rate
end
if result > 0
result += result * t_rate / 100
else
result -= result * t_rate / 100
end
result = state_guard_ele(result, element_id)
# メソッド終了
result = [[result, ELE_MM_MIN].max, ELE_MM_MAX].min
return result
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 属性補正値の取得
# element_id : 属性 ID
#--------------------------------------------------------------------------
def element_rate(element_id)
# 属性有効度に対応する数値を取得
table = [0,200,150,100,50,0,-100]
result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
result = state_guard_ele(result, element_id)
# メソッド終了
return result
end
end
class Game_Battler
include ELE_MM
#--------------------------------------------------------------------------
# ● 属性修正の計算
# element_set : 属性
#--------------------------------------------------------------------------
def elements_correct(element_set)
# 無属性の場合
if element_set == []
# 100 を返す
return 100
end
# 与えられた属性の中で最も弱いものを返す
# ※メソッド element_rate は、このクラスから継承される Game_Actor
# および Game_Enemy クラスで定義される
weakest = -100
for i in element_set
# 魔法属性の場合
for tmp_value in M_LIST
if tmp_value.is_a?(Range) && tmp_value === i || tmp_value == i
weakest = [WEEK_M, self.element_rate(i)].max
#p $data_system.elements[i], weakest
end
end
# 物理属性の場合
for tmp_value in P_LIST
if tmp_value.is_a?(Range) && tmp_value === i || tmp_value == i
weakest = [WEEK_P, self.element_rate(i)].max
#p $data_system.elements[i], weakest
end
end
end
return weakest
end
end
|