# ▼▲▼ No18. 詳細設定、ステート防御/有効度 ▼▲▼ # # update 2006/ 5/24 # #============================================================================== # カスタマイズポイント (最大と最小) #============================================================================== module XRXS18 MAX = 100 MIN = 0 end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ ステート有効度の取得 #-------------------------------------------------------------------------- def state_percent(state_id) effect_percent = [0,100,80,60,40,20,0][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) for id in self.weapon_ids 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 self.armor_ids if id >= 1 minus_state_set += $data_armors[id].guard_state_set end end 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 return [[effect_percent, XRXS18::MIN].max, XRXS18::MAX].min end #-------------------------------------------------------------------------- # ● ステート変化 (+) の適用 [再定義] #-------------------------------------------------------------------------- def states_plus(plus_state_set) # 有効フラグをクリア effective = false # ループ (付加するステート) for i in plus_state_set # このステートが防御されていない場合 unless self.state_guard?(i) # このステートがフルでなければ有効フラグをセット 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