#-------------------------------------------------------------------------- # 武器とスキルのステート付加率を調整するスクリプトです。 # 状態変化つき武器の弱体化や、 # ステート付加スキルの全体効果スキルと単体効果スキルの差別化などに使えます。 # # 本来のステート付加率に乗算することで、ステート付加率を調整します。 # 例えば、現時点では武器攻撃一般のステート付加率調整値は 20 %になっているので、 # 耐性C(本来の付加率 60 %)の敵に対して、 # 60% × 20% = 12% の確率でステートを付加するようになります。 # # # この値は武器やスキルのIDにより、個別に指定する事が可能です。 # # # ●競合状況 # 他のapply_state_changesを再定義しているスクリプトと競合します。 # if rand(100) < state_probability(i) の記述を # if rand(100) < state_probability(i,obj) に変更する事で競合を回避できるはずです。 # # 名前の衝突による競合を避けるために、新しく定義したメソッドには # 接頭語として er_ をつけています。 # # 由来は私のスクリプトはよくエラーが出るからだったりします……。 # どうかエラーがでませんようにっ! #-------------------------------------------------------------------------- module RPG #-------------------------------------------------------------------------- # スキル、通常攻撃のステート付加調整率を取得。 # # ●ここの記述をいろいろ変更する事で、効果を発揮します。 # 現時点だと、 # 武器の基本的なステート付加調整率%は本来の 20% の値 # スキルの基本的なステート付加調整率%は本来の値と同値になっています。 #-------------------------------------------------------------------------- class Weapon def er_state_probability_rate #武器のIDによる個別ステート付加調整率の指定。 case @id when 1 return 20 end return 20 #通常攻撃の基本的なステート付加調整率%(付加率が本来の10%の値になる。) end end class Skill def er_state_probability_rate #スキルのIDによる個別ステート付加調整率の指定。 case @id when 1 return 100 end return 100 #スキルの基本的なステート付加調整率%(付加率は本来の値と同値) end end end #-------------------------------------------------------------------------- class Game_Battler #-------------------------------------------------------------------------- # ● ステート変化の適用 ※再定義 # obj : スキル、アイテム、または攻撃者 #-------------------------------------------------------------------------- def apply_state_changes(obj) plus = obj.plus_state_set # ステート変化(+) を取得 minus = obj.minus_state_set # ステート変化(-) を取得 for i in plus # ステート変化 (+) next if state_resist?(i) # 無効化されている? next if dead? # 戦闘不能? next if i == 1 and @immortal # 不死身? if state?(i) # すでに付加されている? @remained_states.push(i) # 変化しなかったステートを記録 next end #==========================▼ここを変更▼================================ #if rand(100) < state_probability(i) # 確率判定(デフォルト) if rand(100) < state_probability(i,obj) # 確率判定(変更後) #==========================▲ここを変更▲================================ add_state(i) # ステートを付加 @added_states.push(i) # 付加したステートを記録 end end for i in minus # ステート変化 (-) next unless state?(i) # 付加されていない? remove_state(i) # ステートを解除 @removed_states.push(i) # 解除したステートを記録する end for i in @added_states & @removed_states @added_states.delete(i) # 付加と解除の両方に記録されている @removed_states.delete(i) # ステートがあれば両方削除する end end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● ステートの付加成功率の取得 # state_id : ステート ID # obj : スキル、アイテム、または攻撃者 #-------------------------------------------------------------------------- alias sp state_probability def state_probability(state_id,obj) rate = 100 if obj.is_a?(Game_Actor) rate = obj.er_gain_weapon_state_probability_rate elsif obj.is_a?(RPG::Skill) rate = obj.er_state_probability_rate end return sp(state_id) * rate / 100 end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 武器によるステート付加調整率の取得 #-------------------------------------------------------------------------- def er_gain_weapon_state_probability_rate result = 0 for weapon in weapons.compact result += weapon == nil ? 0 : weapon.er_state_probability_rate end return result end #-------------------------------------------------------------------------- # ● ステートの付加成功率の取得 # 一見、Game_Enemyと同じ処理をしているように見えますが、 # 元となるstate_probabilityがそもそもGame_EnemyとGame_Actorで # 処理が違うため、ここでも別々に記述する必要があります。 #-------------------------------------------------------------------------- alias sp state_probability def state_probability(state_id,obj) rate = 100 if obj.is_a?(Game_Actor) rate = obj.er_gain_weapon_state_probability_rate elsif obj.is_a?(RPG::Skill) rate = obj.er_state_probability_rate end return sp(state_id) * rate / 100 end end