#=============================================================================== #【 EXクリティカル機構VXA + 弱点表示機構】 # 各スキルのクリティカルの際に、さらに威力が上がる # 追加クリティカル判定を搭載するパーツです # # ※会心:なし のスキルに対しては反応しません # # ≪!!注意事項!!≫ # 再定義するメソッドが多いので、できるだけ追加スクリプトの上部に配置してください #=============================================================================== module KURO #本機構専用モジュール・カスタマイズ項目============================= #=============================================================================== # 各クリティカル倍率 ## 設定値は百分率、本来のダメージ値を100%とする CT_rate = 150 # クリティカル倍率。各CT段階ごとにこの倍率がかかる # クリティカル時表示文字列 ## 通常クリティカル及び多段クリティカルの際の表示文字です ## 上から、各クリティカルの段階ごとに一行ずつ設定(第一・第二・第三…の順) ## 多段クリティカルを使用する場合、必ず設定した多段クリティカル判定回数と ## 同じ数だけ設定してください ## 最初の行と最終の行のカッコは消さないでください ## それぞれカンマで終わらせる。最終行はカンマをつけないでください ## 多段スキルクリティカル機能も使う場合、最大数は段階数が多い方に合わせてください ## ★本スクリプトを導入すると、敵味方の会心表記は下記設定で統一されます CT_NAME = [ "クリティカル!", "ハードクリティカル!", "エクスクリティカル!" ] # アクターのクリティカル確率 ## 各段階の数値にアクターの本来のクリティカル発生率を足したものが ## 発生確率(%)となります ## 左から、各クリティカルの段階ごとに設定(第一・第二・第三…の順) ## 必ず設定した多段クリティカル判定回数と同じ数だけ設定してください ## それぞれカンマで区切り、最後はカンマをつけないでください ## その段階での判定が成功したときのみ、次段階のクリティカルの判定が行われます CT_prob = [0.20, 0.10 ,0.05] # 敵キャラのクリティカル発生基本確率 ## 入力した数値(%)の確率を基礎クリティカル率とします ECT_prob = [0.10 ,0.05] # 上から、クリティカル時に演奏するSE、そのボリューム、そのピッチ # SEはファイル名のみを記述してください # 何も演奏しない場合はファイル名を nil に CT_SE = "Attack2" CT_SEv = 100 CT_SEp = 50 S_CRITICAL_PLUS_WORD = "加算クリティカル率" # スキル個別のクリティカル率増加設定の際、スキルのメモ欄に書く判定文字列です # 他のメモ用語と被りそうな場合等はこちらで設定してください # なお、カッコの書式 <> と、数値の書式 :n は仕様なのでこちらからは変更できません #==弱点表示機構設定============================================================= #=============================================================================== # 弱点をついた時の文字列 WEAKNESS_STR = "弱点をついた!" # 上から、クリティカル時に演奏するSE、そのボリューム、そのピッチ # SEはファイル名のみを記述してください # 何も演奏しない場合はファイル名を nil に WK_SE = "Ice2" WK_SEv = 90 WK_SEp = 80 end #====カスタマイズ項目ここまで=================================================== #=============================================================================== class KURO_CTsound def ctsound Audio.se_play("Audio/SE/" + KURO::CT_SE, KURO::CT_SEv,KURO::CT_SEp) end def wksound Audio.se_play("Audio/SE/" + KURO::WK_SE, KURO::WK_SEv,KURO::WK_SEp) end end #==KUROmoduleここまで=========================================================== #=============================================================================== #============================================================================== # ■ Game_ActionResult #------------------------------------------------------------------------------ #  戦闘行動の結果を扱うクラスです。このクラスは Game_Battler クラスの内部で # 使用されます。 #============================================================================== class Game_ActionResult attr_accessor :critical_lv # 行動結果: クリティカルレベル attr_accessor :weakness # 行動結果: 弱点フラグ #-------------------------------------------------------------------------- # ● 命中系フラグのクリア #-------------------------------------------------------------------------- alias exct_clear_hit_flags :clear_hit_flags def clear_hit_flags exct_clear_hit_flags @critical_lv = 0 @weakness = false end end #============================================================================== # ■ Game_Battler(再定義) #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 新規定義 スキルクリティカル用メモ内容収得 #-------------------------------------------------------------------------- def ctplus_get_skillmemo(obj) ret = 0 memo = obj.note.scan(/<#{KURO::S_CRITICAL_PLUS_WORD}:(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? ret = memo[0].to_f end return ret end #-------------------------------------------------------------------------- # ● スキル/アイテムの会心率計算(再定義) #-------------------------------------------------------------------------- def item_cri(user, item) @result.critical_lv = 0 @result.critical = false ct_line = [] return unless item.damage.critical # クリティカルチェック抜きのスキルは発動しない if user.is_a?(Game_Actor) ct_line = KURO::CT_prob else ct_line = KURO::ECT_prob end ctplus = ctplus_get_skillmemo(item) for i in 0...ct_line.size cthit = ((user.cri + ctplus) / (i+1)) + ct_line[i] cteva = cev if (rand < (cthit * (1 - cteva))) @result.critical_lv += 1 else break end end @result.critical = true if @result.critical_lv > 0 end #-------------------------------------------------------------------------- # ● スキル/アイテムの効果適用(再定義) #-------------------------------------------------------------------------- def item_apply(user, item) @result.clear @result.used = item_test(user, item) @result.missed = (@result.used && rand >= item_hit(user, item)) @result.evaded = (!@result.missed && rand < item_eva(user, item)) if @result.hit? unless item.damage.none? item_cri(user, item) make_damage_value(user, item) execute_damage(user) end item.effects.each {|effect| item_effect_apply(user, item, effect) } item_user_effect(user, item) end end #-------------------------------------------------------------------------- # ● スキル/アイテムの属性修正値を取得 #-------------------------------------------------------------------------- alias kuro_item_element_rate item_element_rate def item_element_rate(user, item) ret = kuro_item_element_rate(user, item) @result.weakness = true if ret > 1.0 return ret end #-------------------------------------------------------------------------- # ● クリティカルの適用(再定義) #-------------------------------------------------------------------------- def apply_critical(damage) for i in 0...@result.critical_lv damage = damage * KURO::CT_rate / 100 end return damage end end #============================================================================== # ■ Window_BattleLog #------------------------------------------------------------------------------ #  戦闘の進行を実況表示するウィンドウです。枠は表示しませんが、便宜上ウィンド # ウとして扱います。 #============================================================================== class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ● クリティカルヒットの表示(再定義) #-------------------------------------------------------------------------- def display_critical(target, item) tcplay = KURO_CTsound.new text = "" if target.result.critical text += KURO::CT_NAME[target.result.critical_lv - 1] tcplay.ctsound end if target.result.weakness text += KURO::WEAKNESS_STR tcplay.wksound end if text != "" add_text(text) wait end end end