#===============================================================================
# ● RPGVX データ構造を集めたモジュールです
#===============================================================================
module RPG
#=============================================================================
# ● スキル、アイテム、武器、防具のスーパークラス。
#=============================================================================
class BaseItem
#===========================================================================
# ○ メモ欄の内容を取得
#===========================================================================
def real_note
return @note
end
#===========================================================================
# ○ 组合装备関連の処理が必要か?
#===========================================================================
def need_set_equips_check
# 组合装备とセットボーナスの記述がある場合、true を返す
if self.real_note.include?("组合装备") and self.real_note.include?("セットボーナス")
return true
else
# 组合装备関係の記述がない場合、false を返す
return false
end
end
#===========================================================================
# ○ 组合装备の取得
#===========================================================================
def set_equips
text = self.real_note.clone
# メモ欄から组合装备の記述を検索
result = text.scan(/组合装备(.+)/)
# 1つでもヒットした場合
if result != []
# 判定用文字から组合装备の名前を取得
for data in result
# 余分な文字を消去
data.sub!("组合装备(") {""}
data.sub!(")") {""}
end
end
# 组合装备の内容(名前)を配列で返す
return result
end
#===========================================================================
# ○ セットボーナス(攻撃力)の取得
#===========================================================================
def set_bonus_atk
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナス攻撃力\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス攻撃力+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナス攻撃力\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス攻撃力-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス(防御力)の取得
#===========================================================================
def set_bonus_def
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナス防御力\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス防御力+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナス防御力\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス防御力-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス(精神力)の取得
#===========================================================================
def set_bonus_spi
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナス精神力\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス精神力+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナス精神力\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス精神力-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス(敏捷性)の取得
#===========================================================================
def set_bonus_agi
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナス敏捷性\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス敏捷性+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナス敏捷性\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス敏捷性-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス(命中率)の取得
#===========================================================================
def set_bonus_hit
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナス命中率\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス命中率+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナス命中率\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス命中率-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス(回避率)の取得
#===========================================================================
def set_bonus_eva
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナス回避率\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス回避率+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナス回避率\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス回避率-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス(クリティカル率)の取得
#===========================================================================
def set_bonus_cri
text = self.real_note.clone
result = 0
# メモ欄からボーナス値(+)の記述を検索
bonus = text.scan(/セットボーナスクリティカル率\+\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナスクリティカル率+"){""}
# 文字列を数値に変換し、変数に加算
result += data.to_i
end
end
# メモ欄からボーナス値(-)の記述を検索
bonus = text.scan(/セットボーナスクリティカル率\-\d+/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス値を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナスクリティカル率-"){""}
# 文字列を数値に変換し、変数から減算
result -= data.to_i
end
end
# ボーナス値を返す
return result
end
#===========================================================================
# ○ セットボーナス Odds半減 の有無
#===========================================================================
def set_bonus_odds_half
# 記述の有無を真偽値で返す
return self.real_note.include?("セットボーナス狙われやすさ半減")
end
#===========================================================================
# ○ セットボーナス Odds倍加 の有無
#===========================================================================
def set_bonus_odds_twice
# 記述の有無を真偽値で返す
return self.real_note.include?("セットボーナス狙われやすさ倍加")
end
#===========================================================================
# ○ セットボーナス 属性攻撃(ダメージ)半減 の有無(名前で取得)
#===========================================================================
def set_bonus_element_half
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)属性半減/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")属性半減"){""}
# ボーナス内容(配列)に追加
result.push(data)
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス 属性攻撃(ダメージ)無効 の有無(名前で取得)
#===========================================================================
def set_bonus_element_invalidate
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)属性無効/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")属性無効"){""}
# ボーナス内容(配列)に追加
result.push(data)
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス 状態異常(確率)半減 の有無(名前で取得)
#===========================================================================
def set_bonus_state_half
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)状態半減/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")状態半減"){""}
# ボーナス内容(配列)に追加
result.push(data)
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス 状態異常(確率)無効 の有無(名前で取得)
#===========================================================================
def set_bonus_state_invalidate
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)状態無効/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")状態無効"){""}
# ボーナス内容(配列)に追加
result.push(data)
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス 攻撃属性追加 の有無( IDで取得)
#===========================================================================
def set_bonus_attack_element_plus
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)属性追加/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")属性追加"){""}
# 有効な属性の場合
if $data_system.elements.include?(data)
# ボーナス内容(配列)に追加
result.push($data_system.elements.index(data))
end
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス ステート付加攻撃 の有無( ID で取得)
#===========================================================================
def set_bonus_plus_state_attack
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)付加攻撃/)
# 1つでもヒットした場合
if bonus != []
temp = []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")付加攻撃"){""}
# ステート名を一時変数に追加
temp.push(data)
end
# 全ステートを調べる
for state in $data_states
# 無効なステートは無視
next if state.nil?
# ステート名が一時変数の中にある場合
if temp.include?(state.name)
# ボーナス内容に ID を追加
result.push(state.id)
# 調査が済んだらループを中断
break if temp.size == $data_states.size
end
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス ステート解除攻撃 の有無( ID で取得)
#===========================================================================
def set_bonus_minus_state_attack
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナス(.+)解除攻撃/)
# 1つでもヒットした場合
if bonus != []
temp = []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナス("){""}
data.sub!(")解除攻撃"){""}
# ステート名を一時変数に追加
temp.push(data)
end
# 全ステートを調べる
for state in $data_states
# 無効なステートは無視
next if state.nil?
# ステート名が一時変数の中にある場合
if temp.include?(state.name)
# ボーナス内容に ID を追加
result.push(state.id)
# 調査が済んだらループを中断
break if temp.size == $data_states.size
end
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス クリティカル防止 の有無
#===========================================================================
def set_bonus_prevent_critical
# 記述の有無を真偽値で返す
return self.real_note.include?("セットボーナスクリティカル防止")
end
#===========================================================================
# ○ セットボーナス 取得経験値2倍 の有無
#===========================================================================
def set_bonus_double_exp_gain
# 記述の有無を真偽値で返す(全角)
return true if self.real_note.include?("セットボーナス取得経験値2倍")
# 記述の有無を真偽値で返す(半角)
return self.real_note.include?("セットボーナス取得経験値2倍")
end
#===========================================================================
# ○ セットボーナス 消費MP半分 の有無
#===========================================================================
def set_bonus_half_mp_cost
# 記述の有無を真偽値で返す(全角)
return true if self.real_note.include?("セットボーナス消費MP半分")
# 記述の有無を真偽値で返す(半角)
return self.real_note.include?("セットボーナス消費MP半分")
end
#===========================================================================
# ○ セットボーナス HP自動回復 の有無
#===========================================================================
def set_bonus_auto_hp_recover
# 記述の有無を真偽値で返す(全角)
return true if self.real_note.include?("セットボーナスHP自動回復")
# 記述の有無を真偽値で返す(半角)
return self.real_note.include?("セットボーナスHP自動回復")
end
#===========================================================================
# ○ セットボーナス ターン内先制 の有無
#===========================================================================
def set_bonus_fast_attack
return self.real_note.include?("セットボーナスターン内先制")
end
#===========================================================================
# ○ セットボーナス 連続攻撃 の有無
#===========================================================================
def set_bonus_dual_attack
return self.real_note.include?("セットボーナス連続攻撃")
end
#===========================================================================
# ○ セットボーナス 強力防御 の有無
#===========================================================================
def set_bonus_super_guard
return self.real_note.include?("セットボーナス強力防御")
end
#===========================================================================
# ○ セットボーナス 薬の知識 の有無
#===========================================================================
def set_bonus_pharmacology
return self.real_note.include?("セットボーナス薬の知識")
end
#===========================================================================
# ○ セットボーナス スキル仮習得 の有無(オブジェクトで取得)
#===========================================================================
def set_bonus_skill_temp_learn
text = self.real_note.clone
result = []
# メモ欄からボーナス内容の記述を検索
bonus = text.scan(/セットボーナススキル仮習得\(\d+\)/)
# 1つでもヒットした場合
if bonus != []
# 判定用文字からボーナス内容を取得
for data in bonus
# 余分な文字を消去
data.sub!("セットボーナススキル仮習得("){""}
data.sub!(")"){""}
# 有効なスキル ID の場合
unless $data_skills[data.to_i].nil?
# スキルオブジェクトを追加
result.push($data_skills[data.to_i])
end
end
end
# ボーナス内容を返す
return result
end
#===========================================================================
# ○ セットボーナス スリップダメージ の有無
#===========================================================================
def set_bonus_slip_damage
return self.real_note.include?("セットボーナススリップダメージ")
end
#===========================================================================
# ○ セットボーナス 魔法使用不可 の有無
#===========================================================================
def set_bonus_silent
return self.real_note.include?("セットボーナス魔法使用不可")
end
#===========================================================================
# ○ セットボーナス 暴走 の有無
#===========================================================================
def set_bonus_berserker
return self.real_note.include?("セットボーナス暴走")
end
end
end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
# バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
# スのスーパークラスとして使用されます。
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● インスタンスの複製
#--------------------------------------------------------------------------
alias set_equips_bonus_minus_state_set minus_state_set
alias set_equips_bonus_slip_damage? slip_damage?
alias set_equips_bonus_silent? silent?
alias set_equips_bonus_berserker? berserker?
alias set_equips_bonus_confusion? confusion?
alias set_equips_bonus_inputable? inputable?
#--------------------------------------------------------------------------
# ● 通常攻撃のステート変化 (-) 取得
#--------------------------------------------------------------------------
def minus_state_set
# 通常の処理を実行して結果を取得
result = set_equips_bonus_minus_state_set
# アクターの場合
if self.actor?
# セットボーナス 追加攻撃ステート付加 が存在する場合
if @set_bonus_minus_state_attack != []
# ステート変化の追加
result += @set_bonus_minus_state_attack
# “被り”をなくす
result.uniq!
end
end
# 最終的な結果を返す
return result
end
#--------------------------------------------------------------------------
# ● ステート [スリップダメージ] 判定
#--------------------------------------------------------------------------
def slip_damage?
# 通常の処理を実行して結果を取得
result = set_equips_bonus_slip_damage?
# アクターの場合
if self.actor?
# セットボーナスが存在する場合 result に true を入れる
result = true if @set_bonus_slip_damage == true
end
# 最終的な結果を返す
return result
end
#--------------------------------------------------------------------------
# ● 沈黙状態判定
#--------------------------------------------------------------------------
def silent?
# 通常の処理を実行して結果を取得
result = set_equips_bonus_silent?
# アクターの場合
if self.actor?
# セットボーナスが存在する場合 result に true を入れる
result = true if @set_bonus_silent == true
end
# 最終的な結果を返す
return result
end
#--------------------------------------------------------------------------
# ● 暴走状態判定
#--------------------------------------------------------------------------
def berserker?
# 通常の処理を実行して結果を取得
result = set_equips_bonus_berserker?
# アクターの場合
if self.actor?
# セットボーナスが存在する場合 result に true を入れる
result = true if @set_bonus_berserker == true
end
# 最終的な結果を返す
return result
end
#--------------------------------------------------------------------------
# ● コマンド入力可能判定
#--------------------------------------------------------------------------
def inputable?
# 通常の処理を実行して結果を取得
result = set_equips_bonus_inputable?
# アクターの場合
if self.actor?
# 暴走状態の場合、false にする
result = false if self.berserker?
end
# 最終的な結果を返す
return result
end
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
# の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● インスタンスの複製
#--------------------------------------------------------------------------
alias set_equips_bonus_setup setup
alias set_equips_bonus_change_equip change_equip
alias set_equips_bonus_element_rate element_rate
alias set_equips_bonus_state_probability state_probability
alias set_equips_bonus_state_resist? state_resist?
alias set_equips_bonus_element_set element_set
alias set_equips_bonus_plus_state_set plus_state_set
alias set_equips_bonus_base_atk base_atk
alias set_equips_bonus_base_def base_def
alias set_equips_bonus_base_spi base_spi
alias set_equips_bonus_base_agi base_agi
alias set_equips_bonus_hit hit
alias set_equips_bonus_eva eva
alias set_equips_bonus_cri cri
alias set_equips_bonus_odds odds
alias set_equips_bonus_super_guard super_guard
alias set_equips_bonus_pharmacology pharmacology
alias set_equips_bonus_fast_attack fast_attack
alias set_equips_bonus_dual_attack dual_attack
alias set_equips_bonus_prevent_critical prevent_critical
alias set_equips_bonus_half_mp_cost half_mp_cost
alias set_equips_bonus_double_exp_gain double_exp_gain
alias set_equips_bonus_auto_hp_recover auto_hp_recover
alias set_equips_bonus_skills skills
alias set_equips_bonus_skill_can_use? skill_can_use?
#--------------------------------------------------------------------------
# ● セットアップ
# actor_id : アクター ID
#--------------------------------------------------------------------------
def setup(actor_id)
# 通常の処理を実行
set_equips_bonus_setup(actor_id)
# テスト用セットボーナス変数を初期化
@test_set_bonus = [0, 0, 0, 0, 0, 0, 0, nil]
# 组合装备のチェック
check_set_equips_bonus
end
#--------------------------------------------------------------------------
# ● セットボーナスの初期化
#--------------------------------------------------------------------------
def initialize_set_bonus
# 攻撃力
@set_bonus_atk = 0
# 防御力
@set_bonus_def = 0
# 精神力
@set_bonus_spi = 0
# 敏捷性
@set_bonus_agi = 0
# 攻撃命中率
@set_bonus_hit = 0
# 回避率
@set_bonus_eva = 0
# クリティカル率
@set_bonus_cri = 0
# 狙われやすさ
@set_bonus_odds = 1
# ダメージ半減属性
@set_bonus_element_half = []
# ダメージ無効属性
@set_bonus_element_invalidate = []
# 成功率半減ステート
@set_bonus_state_half = []
# 無効化ステート
@set_bonus_state_invalidate = []
# 追加攻撃属性
@set_bonus_attack_element_plus = []
# 追加攻撃ステート付加
@set_bonus_plus_state_attack = []
# 追加攻撃ステート解除
@set_bonus_minus_state_attack = []
# クリティカル防止
@set_bonus_prevent_critical = false
# 経験値取得2倍
@set_bonus_double_exp_gain = false
# 消費MP半分
@set_bonus_half_mp_cost = false
# HP自動回復
@set_bonus_auto_hp_recover = false
# ターン内先制
@set_bonus_fast_attack = false
# 連続攻撃
@set_bonus_dual_attack = false
# 強力防御
@set_bonus_super_guard = false
# 薬の知識
@set_bonus_pharmacology = false
# スキル仮習得
@set_bonus_skill_temp_learn = []
# スリップダメージ
@set_bonus_slip_damage = false
# 魔法使用不可
@set_bonus_silent = false
# 暴走
@set_bonus_berserker = false
end
#--------------------------------------------------------------------------
# ● 装備の変更 (オブジェクトで指定)
# equip_type : 装備部位 (0..4)
# item : 武器 or 防具 (nil なら装備解除)
# test : テストフラグ (戦闘テスト、または装備画面での一時装備)
#--------------------------------------------------------------------------
def change_equip(equip_type, item, test = false)
# 通常の処理を実行
set_equips_bonus_change_equip(equip_type, item, test)
# テストの場合
if test
# テスト用変数の装備と item が違う場合
if @test_set_bonus[7] != item
# 组合装备のチェック
check_set_equips_bonus
# 各データをテスト用変数に入れる
@test_set_bonus[0] = @set_bonus_atk
@test_set_bonus[1] = @set_bonus_def
@test_set_bonus[2] = @set_bonus_spi
@test_set_bonus[3] = @set_bonus_agi
@test_set_bonus[4] = @set_bonus_hit
@test_set_bonus[5] = @set_bonus_eva
@test_set_bonus[6] = @set_bonus_cri
@test_set_bonus[7] = item
# テスト用変数の装備と item が同じ場合
else
# テスト用変数に入っているデータをボーナス値に適用
@set_bonus_atk = @test_set_bonus[0]
@set_bonus_def = @test_set_bonus[1]
@set_bonus_spi = @test_set_bonus[2]
@set_bonus_agi = @test_set_bonus[3]
@set_bonus_hit = @test_set_bonus[4]
@set_bonus_eva = @test_set_bonus[5]
@set_bonus_cri = @test_set_bonus[6]
end
# 処理を中断
return
end
# 组合装备のチェック
check_set_equips_bonus
end
#--------------------------------------------------------------------------
# ● 组合装备のチェック
#--------------------------------------------------------------------------
def check_set_equips_bonus
# セットボーナスの初期化
initialize_set_bonus
# 現在の装備を取得
now_equips = equips.clone
now_equips.compact!
# 组合装备の設定があるか調べる
for equip in now_equips
# 設定がない場合は無視
next unless equip.need_set_equips_check
# 判定用変数の初期化
match = []
# 组合装备の内容を取得
sets = equip.set_equips.sort
# 组合装备を装着しているか各装備を調べる
for data in now_equips
# 组合装备の場合
if sets.include?(data.name)
# 判定用変数に名前を加える
match << data.name
end
end
# 组合装备が全て揃っている場合
if (match.sort & sets) == sets
#-----------------------------------------------------------------------
# 各ボーナスを反映
#-----------------------------------------------------------------------
# 攻撃力
@set_bonus_atk += equip.set_bonus_atk
# 防御力
@set_bonus_def += equip.set_bonus_def
# 精神力
@set_bonus_spi += equip.set_bonus_spi
# 敏捷性
@set_bonus_agi += equip.set_bonus_agi
# 攻撃命中率
@set_bonus_hit += equip.set_bonus_hit
# 回避率
@set_bonus_eva += equip.set_bonus_eva
# クリティカル率
@set_bonus_cri += equip.set_bonus_cri
# 狙われやすさ
if equip.set_bonus_odds_twice
@set_bonus_odds *= 2
elsif equip.set_bonus_odds_half
@set_bonus_odds *= 0.5
end
# ダメージ半減属性
if equip.set_bonus_element_half != []
@set_bonus_element_half += equip.set_bonus_element_half.clone
end
# ダメージ無効属性
if equip.set_bonus_element_invalidate != []
@set_bonus_element_invalidate += equip.set_bonus_element_invalidate.clone
end
# 成功率半減ステート
if equip.set_bonus_state_half != []
@set_bonus_state_half += equip.set_bonus_state_half.clone
end
# 無効化ステート
if equip.set_bonus_state_invalidate != []
@set_bonus_state_invalidate += equip.set_bonus_state_invalidate.clone
end
# 追加攻撃属性
if equip.set_bonus_attack_element_plus != []
@set_bonus_attack_element_plus += equip.set_bonus_attack_element_plus.clone
end
# 追加攻撃ステート付加
if equip.set_bonus_plus_state_attack != []
@set_bonus_plus_state_attack += equip.set_bonus_plus_state_attack.clone
end
# 追加攻撃ステート解除
if equip.set_bonus_minus_state_attack != []
@set_bonus_minus_state_attack += equip.set_bonus_minus_state_attack.clone
end
# クリティカル防止
unless @set_bonus_prevent_critical
@set_bonus_prevent_critical = equip.set_bonus_prevent_critical
end
# 経験値取得2倍
unless @set_bonus_double_exp_gain
@set_bonus_double_exp_gain = equip.set_bonus_double_exp_gain
end
# 消費MP半分
unless @set_bonus_half_mp_cost
@set_bonus_half_mp_cost = equip.set_bonus_half_mp_cost
end
# HP自動回復
unless @set_bonus_auto_hp_recover
@set_bonus_auto_hp_recover = equip.set_bonus_auto_hp_recover
end
# ターン内先制
unless @set_bonus_fast_attack
@set_bonus_fast_attack = equip.set_bonus_fast_attack
end
# 連続攻撃
unless @set_bonus_dual_attack
@set_bonus_dual_attack = equip.set_bonus_dual_attack
end
# 強力防御
unless @set_bonus_super_guard
@set_bonus_super_guard = equip.set_bonus_super_guard
end
# 薬の知識
unless @set_bonus_pharmacology
@set_bonus_pharmacology = equip.set_bonus_pharmacology
end
# スキル仮習得
if equip.set_bonus_skill_temp_learn != []
@set_bonus_skill_temp_learn += equip.set_bonus_skill_temp_learn - self.skills
# 配列が空ではない場合
if @set_bonus_skill_temp_learn != []
# 配列の内容を整理
@set_bonus_skill_temp_learn.compact!
@set_bonus_skill_temp_learn.uniq!
end
end
# スリップダメージ
unless @set_bonus_slip_damage
@set_bonus_slip_damage = equip.set_bonus_slip_damage
end
# 魔法使用不可
unless @set_bonus_silent
@set_bonus_silent = equip.set_bonus_silent
end
# 暴走
unless @set_bonus_berserker
@set_bonus_berserker = equip.set_bonus_berserker
end
end
end
end
#--------------------------------------------------------------------------
# ● 属性修正値の取得
# element_id : 属性 ID
#--------------------------------------------------------------------------
def element_rate(element_id)
# 通常の処理を実行して値を取得
result = set_equips_bonus_element_rate(element_id)
# ダメージ無効属性の場合
if @set_bonus_element_invalidate.include?($data_system.elements[element_id])
result = 0
# ダメージ半減属性の場合
elsif @set_bonus_element_half.include?($data_system.elements[element_id])
result /= 2
end
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● ステートの付加成功率の取得
# state_id : ステート ID
#--------------------------------------------------------------------------
def state_probability(state_id)
# 通常の処理を実行して値を取得
result = set_equips_bonus_state_probability(state_id)
# [抵抗しない] フラグが立っていない場合
unless $data_states[state_id].nonresistance
# 無効化ステートの場合
if @set_bonus_state_invalidate.include?($data_states[state_id].name)
result = 0
# 成功率半減ステートの場合
elsif @set_bonus_state_half.include?($data_states[state_id].name)
result /= 2
end
end
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● ステート無効化判定
# state_id : ステート ID
#--------------------------------------------------------------------------
def state_resist?(state_id)
# 通常の処理を実行して値を取得
result = set_equips_bonus_state_resist?(state_id)
# この時点で true なら true を返す
return true if result == true
# セットボーナス 無効化ステート に記載があるかを真偽値で返す
return @set_bonus_state_invalidate.include?($data_states[state_id].name)
end
#--------------------------------------------------------------------------
# ● 通常攻撃の属性取得
#--------------------------------------------------------------------------
def element_set
# 通常の処理を実行して内容を取得
result = set_equips_bonus_element_set
# セットボーナス 追加攻撃属性 が存在する場合
if @set_bonus_attack_element_plus != []
# 攻撃属性の追加
if @set_bonus_attack_element_plus != []
result += @set_bonus_attack_element_plus
# “被り”をなくす
result.uniq!
end
end
# 最終的な内容を返す
return result
end
#--------------------------------------------------------------------------
# ● 通常攻撃の追加効果 (ステート変化) 取得
#--------------------------------------------------------------------------
def plus_state_set
# 通常の処理を実行して内容を取得
result = set_equips_bonus_plus_state_set
# セットボーナス 追加攻撃ステート付加 が存在する場合
if @set_bonus_plus_state_attack != []
# ステート変化の追加
result += @set_bonus_plus_state_attack
# “被り”をなくす
result.uniq!
end
# 最終的な内容を返す
return result
end
#--------------------------------------------------------------------------
# ● 基本攻撃力の取得
#--------------------------------------------------------------------------
def base_atk
# 通常の処理を実行して値を取得
result = set_equips_bonus_base_atk
# セットボーナスの値を追加
result += @set_bonus_atk
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● 基本防御力の取得
#--------------------------------------------------------------------------
def base_def
# 通常の処理を実行して値を取得
result = set_equips_bonus_base_def
# セットボーナスの値を追加
result += @set_bonus_def
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● 基本精神力の取得
#--------------------------------------------------------------------------
def base_spi
# 通常の処理を実行して値を取得
result = set_equips_bonus_base_spi
# セットボーナスの値を追加
result += @set_bonus_spi
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● 基本敏捷性の取得
#--------------------------------------------------------------------------
def base_agi
# 通常の処理を実行して値を取得
result = set_equips_bonus_base_agi
# セットボーナスの値を追加
result += @set_bonus_agi
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● 命中率の取得
#--------------------------------------------------------------------------
def hit
# 通常の処理を実行して値を取得
result = set_equips_bonus_hit
# セットボーナスの値を追加
result += @set_bonus_hit
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● 回避率の取得
#--------------------------------------------------------------------------
def eva
# 通常の処理を実行して値を取得
result = set_equips_bonus_eva
# セットボーナスの値を追加
result += @set_bonus_eva
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● クリティカル率の取得
#--------------------------------------------------------------------------
def cri
# 通常の処理を実行して値を取得
result = set_equips_bonus_cri
# セットボーナスの値を追加
result += @set_bonus_cri
# 最終的な値を返す
return result
end
#--------------------------------------------------------------------------
# ● 狙われやすさの取得
#--------------------------------------------------------------------------
def odds
# 通常の処理を実行して値を取得する
result = set_equips_bonus_odds
result *= @set_bonus_odds
result.to_i
# 最終的な値を返す
return [result, 1].max
end
#--------------------------------------------------------------------------
# ● オプション [強力防御] の取得
#--------------------------------------------------------------------------
def super_guard
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_super_guard == true
# セットボーナスの真偽値を返す
return @set_bonus_super_guard
end
#--------------------------------------------------------------------------
# ● オプション [薬の知識] の取得
#--------------------------------------------------------------------------
def pharmacology
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_pharmacology == true
# セットボーナスの真偽値を返す
return @set_bonus_pharmacology
end
#--------------------------------------------------------------------------
# ● 武器オプション [ターン内先制] の取得
#--------------------------------------------------------------------------
def fast_attack
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_fast_attack == true
# セットボーナスの真偽値を返す
return @set_bonus_fast_attack
end
#--------------------------------------------------------------------------
# ● 武器オプション [連続攻撃] の取得
#--------------------------------------------------------------------------
def dual_attack
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_dual_attack == true
# セットボーナスの真偽値を返す
return @set_bonus_dual_attack
end
#--------------------------------------------------------------------------
# ● 防具オプション [クリティカル防止] の取得
#--------------------------------------------------------------------------
def prevent_critical
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_prevent_critical == true
# セットボーナスの真偽値を返す
return @set_bonus_prevent_critical
end
#--------------------------------------------------------------------------
# ● 防具オプション [消費 MP 半分] の取得
#--------------------------------------------------------------------------
def half_mp_cost
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_half_mp_cost == true
# セットボーナスの真偽値を返す
return @set_bonus_half_mp_cost
end
#--------------------------------------------------------------------------
# ● 防具オプション [取得経験値 2 倍] の取得
#--------------------------------------------------------------------------
def double_exp_gain
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_double_exp_gain == true
# セットボーナスの真偽値を返す
return @set_bonus_double_exp_gain
end
#--------------------------------------------------------------------------
# ● 防具オプション [HP 自動回復] の取得
#--------------------------------------------------------------------------
def auto_hp_recover
# 通常の処理を実行し、結果が true なら true を返す
return true if set_equips_bonus_auto_hp_recover == true
# セットボーナスの真偽値を返す
return @set_bonus_auto_hp_recover
end
#--------------------------------------------------------------------------
# ● スキルオブジェクトの配列取得
#--------------------------------------------------------------------------
def skills
# 通常の処理を実行してリストを取得
result = set_equips_bonus_skills
# セットボーナスの初期化が行われていない場合、リストをそのまま返す(競合防止)
return result if @set_bonus_skill_temp_learn.nil?
# セットボーナスが存在する場合
if @set_bonus_skill_temp_learn != []
result += @set_bonus_skill_temp_learn
end
# 最終的なリストを返す
return result
end
#--------------------------------------------------------------------------
# ● スキルの使用可能判定
# skill : スキル
#--------------------------------------------------------------------------
def skill_can_use?(skill)
# 通常の処理を実行して結果を取得
result = set_equips_bonus_skill_can_use?(skill)
# false だった場合
unless result
# セットボーナススキル仮習得の中にスキルが存在する場合
if @set_bonus_skill_temp_learn.include?(skill)
# もう1度判定し直す
result = super
end
end
# 最終的な結果を返す
return result
end
end