########## クリティカル率の変動、クリティカル効果のあるスキルの作成 ########## # # # クリティカルの発生確率を変動させることができるようになります。 # # クリティカル率を変動させたい武器の属性に # # 「クリティカル率:」のあと整数を入力してください。 # # そのパーセンテージに変更されます。 # # 例えば「クリティカル率:100」ならば通常通り、 # # 「クリティカル率:200」 ならば通常の二倍の確率でクリティカルが発生。 # # クリティカル率:0 ならば絶対にクリティカルが発生しなくなります。 # # # # また、スキルにも同様の方法でクリティカルを設定可能です。 # # スキルの属性に「クリティカル率:100」と設定すれば # # 通常攻撃と同様の確率でクリティカルが発生するようになります。 # # # # ついでに、クリティカル率の計算式を直接弄れるように別メソッドにしました。 # # 設定項目の中の「def calc_critical_rate(user, critical_rate = 100)」 # # にて計算しているので、計算式を変更したい場合はどうぞ。 # # # ############################################################################## # ココから設定 module Annex # クリティカル率を変動させたい場合に使用。 重複した場合それらの最大値を取得。 CRITICAL_RATE = "クリティカル率:" end # クリティカル率の計算式を変更したい人は下記を書き換えてください。 class Game_Battler #-------------------------------------------------------------------------- # ◎追加:クリティカル計算 # user : スキル(攻撃)の使用者 (バトラー) # critical_rate : クリティカル率変動属性で得られた基底 #-------------------------------------------------------------------------- def calc_critical_rate(user, critical_rate = 100) # とりあえずデフォルトで使われている式をそのまま。 # critical_rate : クリティカル率変動属性で得られた基底 # user.dex 攻撃側の 器用さ # self.agi 防御側の 素早さ rate = (critical_rate * 4 * user.dex) / (self.agi * 100) # 乱数との比較 if rand(100) < rate # クリティカル発生 return true end # クリティカルじゃない return false end end # ココまでが設定 #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ 通常攻撃の効果適用 # attacker : 攻撃者 (バトラー) #-------------------------------------------------------------------------- alias critical_setting_attack_effect attack_effect def attack_effect(attacker) # 現在のHPを取得 last_hp = self.hp # 呼び戻し effective = critical_setting_attack_effect(attacker) # クリティカル率を変動させる属性を取得 rate = get_element_key_id(attacker.element_set, Annex::CRITICAL_RATE) if rate != [] # クリティカル率算出 critical_rate = 100 for i in rate critical_rate = critical_rate * i / 100 end # クリティカルが発生していた場合 if self.critical == true # HPを戻す self.hp = last_hp # クリティカルフラグをクリア self.critical = false # ダメージを半分に戻す self.damage /= 2 end # クリティカル率を変更して計算しなおす if calc_critical_rate(attacker, critical_rate) # クリティカルフラグを設定 self.critical = true # ダメージを二倍(-1〜1の分散つき) self.damage = [self.damage * 2 + rand(2) - rand(2), 1].max end # HPの減算を再実行 self.hp -= self.damage end return effective end #-------------------------------------------------------------------------- # ○ スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- alias critical_setting_skill_effect skill_effect def skill_effect(user, skill) # 現在のHPを取得 last_hp = self.hp # 呼び戻し effective = critical_setting_skill_effect(user, skill) # ダメージが正の場合 if self.damage > 0 # クリティカル率を変動させる属性を取得 rate = get_element_key_id(skill.element_set, Annex::CRITICAL_RATE) # クリティカル率が変動する属性が設定されている場合 if rate != [] # クリティカル率算出 critical_rate = 100 for i in rate critical_rate = critical_rate * i / 100 end # クリティカル計算開始 if calc_critical_rate(user, critical_rate) # クリティカルフラグを設定 self.critical = true # ダメージを二倍(-1〜1の分散つき) self.damage = [self.damage * 2 + rand(2) - rand(2), 1].max # HPを元に戻す self.hp = last_hp # HPの減算を再実行 self.hp -= self.damage end end end return effective end #-------------------------------------------------------------------------- # ◎ 追加:「属性名+数字」の形式の属性が含まれていればその数字部分を取得。 # element_set : 属性の配列 # key : 取得する属性名 #-------------------------------------------------------------------------- def get_element_key_id(element_set, key) id = [] for i in element_set if $data_system.elements[i] =~ /#{key}([0-9]+)/ # ID取得 id.push($1.to_i) end end return id end end