#============================================================================== # ■ RGSS3 反撃無効率設定 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 反撃を無効化する確率と反撃を無効にできる属性を設定します。 # なお、反撃無効率は全て加算されます。 #============================================================================== # ★特徴の反撃無視率設定例 #(特徴を有する項目のメモ欄に設定します。 # PS_AVがtrueの場合、スキルのメモ欄に書き込むことで # 行動後反撃率を有するパッシブスキルとして有効となります) # 複数の項目に設定されている場合、全て加算されます。 #------------------------------------------------------------------------------ # <反撃無効パッシブ:50> # # この場合、全ての行動に反撃無効率50%を付与。 #------------------------------------------------------------------------------ # <反撃無効パッシブ:a.tp> # # この場合、TP分の値の反撃無効率を付与。 #------------------------------------------------------------------------------ # <反撃無効パッシブ:a.hp_rate*100> # # この場合、HP割合分の反撃無効率を付与。 #------------------------------------------------------------------------------ # <反撃無効パッシブ:a.agi-b.agi> # # この場合、相手と自分の敏捷性の差分分の反撃無効率を付与。 #============================================================================== # ★アイテム/スキルの反撃無視率設定例 # アイテム・スキルのメモ欄に以下のように記入 # <反撃無効率:100> # この場合、このアイテム・スキルに反撃無効率100%を付与。 #------------------------------------------------------------------------------ # <反撃無効率:a.tp> # # この場合、このアイテム・スキルにTP分の値の反撃無効率を付与。 #------------------------------------------------------------------------------ # <反撃無効率:a.hp_rate*100> # # この場合、このアイテム・スキルにHP割合分の反撃無効率を付与。 #------------------------------------------------------------------------------ # <反撃無効率:a.agi-b.agi> # # この場合、このアイテム・スキルに相手と自分の敏捷性の差分分の反撃無効率を付与。 #============================================================================== # Ver1.01 キャッシュ化による軽量化を施しました。 # また、無効率判定に計算式を使えるようになりました。 #============================================================================== module CNT_BREAK #反撃無視属性(設定しない場合は ELEMENT = nil とする) ELEMENT = [2] #反撃無視確率を付与するパッシブスキルを作成するか(true→作成する/false→作成しない) PS_AV = true #特徴もしくはパッシブスキルのメモ欄に反撃無効率を記入する為のキーワード #(パッシブスキルはアクターのみ有効) WORD1 = "反撃無効パッシブ" #攻撃スキルのメモ欄に反撃無効率を記入する為のキーワード WORD2 = "反撃無効率" end class Game_BattlerBase #-------------------------------------------------------------------------- # ● パッシブスキル特徴判定 #-------------------------------------------------------------------------- def cntb_feature_objects feature_objects end #-------------------------------------------------------------------------- # ● 反撃無視率計算 #-------------------------------------------------------------------------- def cntb_rate(target, item) a = self b = target cntb_feature_objects.inject(0) {|r, f| r += eval(f.cntb_rate1)} end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● スキル/アイテムの反撃率計算 #-------------------------------------------------------------------------- alias item_cnt_cntb item_cnt def item_cnt(user, item) if item.damage.element_id < 0 user.atk_elements.each {|i| return 0 if CNT_BREAK::ELEMENT.include?(i)} if CNT_BREAK::ELEMENT != nil && !CNT_BREAK::ELEMENT.empty? else return 0 if CNT_BREAK::ELEMENT != nil && !CNT_BREAK::ELEMENT.empty? && CNT_BREAK::ELEMENT.include?(item.damage.element_id) end a = user b = self return 0 if rand(100) < eval(item.cntb_rate2) + user.cntb_rate(self, item) item_cnt_cntb(user, item) end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● パッシブスキル特徴判定 #-------------------------------------------------------------------------- def cntb_feature_objects CNT_BREAK::PS_AV ? super + skills : super end end class RPG::BaseItem #-------------------------------------------------------------------------- # ● 反撃無視率計算 #-------------------------------------------------------------------------- def cntb_rate1 return @cntb_rate1 if @cntb_rate1 != nil memo = self.note.scan(/<#{CNT_BREAK::WORD1}[::](\S+)>/).flatten @cntb_rate1 = memo != nil && !memo.empty? ? memo[0] : "0" @cntb_rate1 end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # ● 反撃無視率計算 #-------------------------------------------------------------------------- def cntb_rate2 return @cntb_rate2 if @cntb_rate2 != nil memo = self.note.scan(/<#{CNT_BREAK::WORD2}[::](\S+)>/).flatten @cntb_rate2 = memo != nil && !memo.empty? ? memo[0] : "0" @cntb_rate2 end end