#============================================================================== # ○ディフェンダー Ver1.02 改変 *RRR/あんまり覚えてないや # http://blogs.yahoo.co.jp/oniwakachildren # for RGSS2 # 西瓜 / Space not far # http://muspell.raindrop.jp/ # 一定の確率で物理攻撃をガードしてダメージを減らす装備を設定できます。 #▲*西瓜 / Space not far 様の ○ディフェンダー Ver1.02 を改変したスクリプトです。* #▲*RRRが追加、改変した部分には▲マークが付いております。* #▲*一部説明の関係で、元のスクリプトのコメントを消してあります。* #▲*装備ごとに、ディフェンダー発動時のダメージカット率を設定できます。 #============================================================================== # ■更新履歴 # Ver1.02 # ・物理攻撃スキルの判定をデータベースのチェックの有無に変更。 # Ver1.01 # ・メモ欄に他のスクリプトの設定項目があった場合動作しなくなる不具合を修正。 #============================================================================== # 装備(武器防具問わず)のメモ欄に # <ディフェンダー:n%>という形式で書き込んでください。 # その装備をしているとn%の確率で物理攻撃のダメージを減らします。 #▲↑の<ディフェンダー:n%>と一緒に、 #▲<カット率:n%>と装備のメモ欄に記入してください。 =begin ●設定例 <ディフェンダー:15%> ▲<カット率:30%> 敵の攻撃を防いだ際に、本来受けるダメージを30%減らします。 ▲ 数値が大きいほどカット率が大きく、100%以上だと回復します。 ▲ また、このメモの入った装備品を複数装備すると、効果が重複します。 ▲ (例) ▲カット率50%、30%、70%の装備を3つ装備し、1000ダメージを受けるスキルを ▲ディフェンダーで防いだ場合のダメージは、 ▲ひとつ目のカット率50%で、500 ▲ふたつ目のカット率30%で、350 ▲みっつ目のカット率70%で、105 ▲最終的に受けるダメージは105になります。こんな感じです。(分かりにく・・・;) ▲カット率100%が一つでもあれば、ノーダメージになります。 ▲<カット率:n%>だけを記入した装備なら、ディフェンダー発動時のカット率だけを ▲上昇させる装備を作ることが可能。(発動率は変わらず。) ▲盾の装甲をアップさせる装飾品!的な装備が作れるわけです。(分かりにく・・・;) =end module SNF DEFENDER_DAMAGE = "カット率" #▲ メモ欄に記入する文字列 DEFENDER_OVERLAP = 0 # ディフェンダー効果を持つ装備を複数装備した時の発動確率の仕様を決めます。 # 0 => 合計値 1 => 最大値 DEFENDER_SKILL = true # スキルにはディフェンダーを適用するか?(true/false) DEFENDER_DISPLAY = true # 発動時にメッセージウィンドウに文章を表示するか?(true/false) DEFENDER_WORD = "攻撃をガードした!" # 発動時に表示される文章です。 DEFENDER_MEMO = "ディフェンダー" # メモ欄のアレです。 end class Game_Battler attr_reader :defender # 行動結果: ディフェンダーフラグ #-------------------------------------------------------------------------- # ● 行動効果の保持用変数をクリア #-------------------------------------------------------------------------- alias snf_defender_clear_action_results clear_action_results def clear_action_results snf_defender_clear_action_results @defender = false end alias snf_defender_make_attack_damage_value make_attack_damage_value def make_attack_damage_value(attacker) snf_defender_make_attack_damage_value(attacker) if self.is_a?(Game_Actor) # アクターですか? defender_rate = 0 for i in self.equips.compact equipnote = i.note.scan(/<#{SNF::DEFENDER_MEMO}[::](\S+)[%%]>/) equipnote = equipnote.flatten if equipnote != nil and not equipnote.empty? # ディフェンダー率取得 if SNF::DEFENDER_OVERLAP == 0 defender_rate += equipnote[0].to_i elsif SNF::DEFENDER_OVERLAP == 1 defender_rate = equipnote[0].to_i if defender_rate < equipnote[place + 1].to_i end end end for i in self.equips.compact #▲ cutdamage = i.note.scan(/<#{SNF::DEFENDER_DAMAGE}[::](\S+)[%%]>/) #▲ cutdamage = cutdamage.flatten #▲ if cutdamage != nil and not cutdamage.empty? #▲ @defender = (rand(100) < defender_rate) #▲ if @defender #▲ @hp_damage *=-(cutdamage[0].to_i) +(100)#▲ @hp_damage /= 100 #▲ end #▲ end #▲ end end end if SNF::DEFENDER_SKILL alias snf_defender_make_obj_damage_value make_obj_damage_value def make_obj_damage_value(user, obj) snf_defender_make_obj_damage_value(user, obj) if self.is_a?(Game_Actor) and obj.physical_attack # アクターですか? defender_rate = 0 for i in self.equips.compact equipnote = i.note.scan(/<#{SNF::DEFENDER_MEMO}[::](\S+)[%%]>/) equipnote = equipnote.flatten if equipnote != nil and not equipnote.empty? # ディフェンダー率取得 if SNF::DEFENDER_OVERLAP == 0 defender_rate += equipnote[0].to_i elsif SNF::DEFENDER_OVERLAP == 1 defender_rate = equipnote[0].to_i if defender_rate < equipnote[0].to_i end end end for i in self.equips.compact #▲ cutdamage = i.note.scan(/<#{SNF::DEFENDER_DAMAGE}[::](\S+)[%%]>/) #▲ cutdamage = cutdamage.flatten #▲ if cutdamage != nil and not cutdamage.empty? #▲ @defender = (rand(100) < defender_rate) #▲ if @defender #▲ @hp_damage *=-(cutdamage[0].to_i ) +(100)#▲ @hp_damage /= 100 #▲ end #▲ end #▲ end end end # if self.is_a?(Game_Actor) and obj.atk_f > 0 # アクターですか? end end if SNF::DEFENDER_DISPLAY class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● クリティカルヒットの表示 # target : 対象者 # obj : スキルまたはアイテム #-------------------------------------------------------------------------- alias snf_defender_display_critical display_critical def display_critical(target, obj = nil) snf_defender_display_critical(target, obj) # 間借り if target.defender if target.actor? text = SNF::DEFENDER_WORD else text = "" end @message_window.add_instant_text(text) wait(20) end end end end