288 lines
No EOL
12 KiB
Ruby
288 lines
No EOL
12 KiB
Ruby
#==============================================================================
|
||
# ■ RGSS3 パーティ能力詳細設定 Ver2.00 by 星潟
|
||
#------------------------------------------------------------------------------
|
||
# 「半減する」・「二倍にする」・「無効にする」等と
|
||
# 大雑把なパーティ能力の効果を詳細に設定できるようなシステムを追加します。
|
||
#==============================================================================
|
||
# 特徴を有する項目(アクター・職業・装備品・ステート等)のメモ欄に設定。
|
||
#------------------------------------------------------------------------------
|
||
# <エンカウント率増減:-25>
|
||
#
|
||
# エンカウント率を25%減少させます。
|
||
#------------------------------------------------------------------------------
|
||
# <不意打ち率増減:10>
|
||
#
|
||
# 不意打ち率を10%増加させます。
|
||
# (不意討ちではなく不意打ちと記述する必要があるので変換注意!)
|
||
#------------------------------------------------------------------------------
|
||
# <先制攻撃率増減:10>
|
||
#
|
||
# 先制攻撃率を10%増加させます。
|
||
#------------------------------------------------------------------------------
|
||
# <獲得金額率増減:50>
|
||
#
|
||
# 獲得金額率を50%増加させます。
|
||
#------------------------------------------------------------------------------
|
||
# <ドロップ率増減:70>
|
||
#
|
||
# アイテムドロップ率を70%増加させます。
|
||
#==============================================================================
|
||
# Ver1.01 キャッシュ化による軽量化。
|
||
# 効果を加算にするか乗算にするかを選択できるように変更。
|
||
#------------------------------------------------------------------------------
|
||
# Ver1.02 戦闘に参加していないパーティメンバーのパーティ能力を
|
||
# 得られるようにする機能を追加。
|
||
# Ver1.01の加算/乗算の計算が異常だった不具合を修正。
|
||
#------------------------------------------------------------------------------
|
||
# Ver2.00 減少処理が正常に動作していない不具合を修正。
|
||
# 不意打ちに関する処理を実装。
|
||
# 更に乗算と加算の処理分けを複数個所で実装。
|
||
# 処理内容を統合・効率化。
|
||
#==============================================================================
|
||
module DETAIL_PTA
|
||
|
||
#空の配列を4種類用意。(変更不要)
|
||
|
||
WORDS = []
|
||
TYPE1 = []
|
||
TYPE2 = []
|
||
TYPE3 = []
|
||
|
||
#------------------------------------------------------------------------------
|
||
|
||
#戦闘に参加していないメンバーのパーティ能力も
|
||
#得られるようにするかどうかを設定します。
|
||
#trueで有効、falseで無効にします。
|
||
|
||
UNBM = true
|
||
|
||
#------------------------------------------------------------------------------
|
||
|
||
#エンカウント率増減設定用のキーワードを設定します。
|
||
|
||
WORDS[0] = "エンカウント率増減"
|
||
|
||
#エンカウント率増減設定の特徴データ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE1[0] = false
|
||
|
||
#エンカウント率増減設定のアクターデータ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE2[0] = false
|
||
|
||
#エンカウント率増減設定によって本来のエンカウント率に対し
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE3[0] = false
|
||
|
||
#------------------------------------------------------------------------------
|
||
|
||
#不意打ち率増減設定用のキーワードを設定します。
|
||
|
||
WORDS[1] = "不意打ち率増減"
|
||
|
||
#不意打ち率増減設定の特徴データ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE1[1] = false
|
||
|
||
#不意打ち率増減設定のアクターデータ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE2[1] = false
|
||
|
||
#不意打ち率増減設定によって本来の不意打ち率に対し
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE3[1] = false
|
||
|
||
#------------------------------------------------------------------------------
|
||
|
||
#先制攻撃率増減設定用のキーワードを設定します。
|
||
|
||
WORDS[2] = "先制攻撃率増減"
|
||
|
||
#先制攻撃率増減設定の特徴データ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE1[2] = false
|
||
|
||
#先制攻撃率増減設定のアクターデータ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE2[2] = false
|
||
|
||
#先制攻撃率増減設定によって本来の先制攻撃率に対し
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE3[2] = false
|
||
|
||
#------------------------------------------------------------------------------
|
||
|
||
#獲得金額率増減設定用のキーワードを設定します。
|
||
|
||
WORDS[3] = "獲得金額率増減"
|
||
|
||
#獲得金額率増減設定の特徴データ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE1[3] = false
|
||
|
||
#獲得金額率増減設定のアクターデータ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE2[3] = false
|
||
|
||
#獲得金額率増減設定によって本来の獲得金額率に対し
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE3[3] = false
|
||
|
||
#------------------------------------------------------------------------------
|
||
|
||
#ドロップ率増減設定用のキーワードを設定します。
|
||
|
||
WORDS[4] = "ドロップ率増減"
|
||
|
||
#ドロップ率増減設定の特徴データ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE1[4] = false
|
||
|
||
#ドロップ率増減設定のアクターデータ間での値を
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE2[4] = false
|
||
|
||
#ドロップ率増減設定によって本来のドロップ率に対し
|
||
#乗算にするか加算にするかを設定します。
|
||
#trueで乗算、falseで加算とします。
|
||
|
||
TYPE3[4] = false
|
||
|
||
end
|
||
class Game_BattlerBase
|
||
#--------------------------------------------------------------------------
|
||
# パーティ能力詳細データ(個人)
|
||
#--------------------------------------------------------------------------
|
||
def extra_pta(type)
|
||
flag = DETAIL_PTA::TYPE1[type]
|
||
data = feature_objects.inject(flag ? 100 : 0) {|r, f|
|
||
n = f.extra_pta[type]
|
||
r = flag ? r * (100 + n) / 100.0 : r + n}
|
||
data -= 100 if flag
|
||
data
|
||
end
|
||
end
|
||
class Game_Party < Game_Unit
|
||
#--------------------------------------------------------------------------
|
||
# パーティ能力詳細データ(パーティ)
|
||
#--------------------------------------------------------------------------
|
||
def extra_pta(type)
|
||
flag = DETAIL_PTA::TYPE2[type]
|
||
array = DETAIL_PTA::UNBM ? all_members : battle_members
|
||
data = array.inject(flag ? 100 : 0) {|r, actor|
|
||
n = actor.extra_pta(type)
|
||
r = flag ? r * (100 + n) / 100.0 : r + n}
|
||
data -= 100 if flag
|
||
data /= 100.0 if data != 0
|
||
data
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# パーティ能力詳細設定適用
|
||
#--------------------------------------------------------------------------
|
||
def pta_totalize(base,type)
|
||
change = $game_party.extra_pta(type)
|
||
rate = DETAIL_PTA::TYPE3[type] ? base * (1.0 + change) : base + change
|
||
rate < 0 ? 0 : rate
|
||
rate
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# パーティ能力の所持判定
|
||
#--------------------------------------------------------------------------
|
||
alias party_ability_un_battle_members party_ability
|
||
def party_ability(ability_id)
|
||
return party_ability_un_battle_members(ability_id) if !DETAIL_PTA::UNBM
|
||
all_members.any? {|actor| actor.party_ability(ability_id) }
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 不意打ちの確率計算
|
||
#--------------------------------------------------------------------------
|
||
alias rate_surprise_enh_st rate_surprise
|
||
def rate_surprise(troop_agi)
|
||
pta_totalize(rate_surprise_enh_st(troop_agi),1)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 先制攻撃の確率計算
|
||
#--------------------------------------------------------------------------
|
||
alias rate_preemptive_enh_st rate_preemptive
|
||
def rate_preemptive(troop_agi)
|
||
pta_totalize(rate_preemptive_enh_st(troop_agi),2)
|
||
end
|
||
end
|
||
class Game_Player < Game_Character
|
||
#--------------------------------------------------------------------------
|
||
# エンカウント進行値の取得
|
||
#--------------------------------------------------------------------------
|
||
alias encounter_progress_value_enh_st encounter_progress_value
|
||
def encounter_progress_value
|
||
$game_party.pta_totalize(encounter_progress_value_enh_st,0)
|
||
end
|
||
end
|
||
class Game_Troop < Game_Unit
|
||
#--------------------------------------------------------------------------
|
||
# お金の合計計算
|
||
#--------------------------------------------------------------------------
|
||
alias gold_total_enh_st gold_total
|
||
def gold_total
|
||
gold_total_enh_st.to_i
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# お金の倍率を取得
|
||
#--------------------------------------------------------------------------
|
||
alias gold_rate_enh_st gold_rate
|
||
def gold_rate
|
||
$game_party.pta_totalize(gold_rate_enh_st,3)
|
||
end
|
||
end
|
||
class Game_Enemy < Game_Battler
|
||
#--------------------------------------------------------------------------
|
||
# ドロップアイテム取得率の倍率を取得
|
||
#--------------------------------------------------------------------------
|
||
alias drop_item_rate_enh_st drop_item_rate
|
||
def drop_item_rate
|
||
$game_party.pta_totalize(drop_item_rate_enh_st,4)
|
||
end
|
||
end
|
||
class RPG::BaseItem
|
||
#--------------------------------------------------------------------------
|
||
# パーティ能力詳細データ
|
||
#--------------------------------------------------------------------------
|
||
def extra_pta
|
||
@extra_pta ||= create_extra_pta
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# パーティ能力詳細データの作成
|
||
#--------------------------------------------------------------------------
|
||
def create_extra_pta
|
||
a = [0] * 5
|
||
DETAIL_PTA::WORDS.each_with_index {|w,i| a[i] += $1.to_i if /<#{w}[::](\S+)>/ =~ note}
|
||
a
|
||
end
|
||
end |