#============================================================================== # ■ RGSS3 属性別命中・回避強化特徴 Ver2.01 by 星潟 #------------------------------------------------------------------------------ # 属性別に命中率・回避率を強化する特徴が作成可能になります。 # それぞれ、特徴を有する項目のメモ欄に記入して下さい。 #============================================================================== # ★設定例 #------------------------------------------------------------------------------ # <属性命中強化:3,50> # # 属性ID3を含む行動を行う際、命中率に+50の補正をかける。 #------------------------------------------------------------------------------ # <属性命中強化:4,$game_variables[1]> # # 属性ID3を含む行動を行う際、命中率に変数1分の補正をかける。 #------------------------------------------------------------------------------ # <属性回避強化:5,25> # # 属性ID4を含む行動を受ける際、回避率に+25の補正をかける。 #------------------------------------------------------------------------------ # <属性回避強化:6,-100> # # 属性ID4を含む行動を受ける際、回避率に-100の補正をかける。 #============================================================================== # Ver2.00 # 注釈を大幅加筆しました。 # キャッシュ化による軽量化を施しました。 # 命中率・回避率の数値設定部分でスクリプトによる計算を # 行えるように変更しました。 #============================================================================== module ELEMENT_HE_PLUS #属性命中率を強化する為の設定用ワードを設定します。 WORD1 = "属性命中強化" #属性回避率を強化する為の設定用ワードを設定します。 WORD2 = "属性回避強化" end class RPG::BaseItem #-------------------------------------------------------------------------- # 属性命中強化 #-------------------------------------------------------------------------- def element_hit_plus #キャッシュが存在する場合はキャッシュを返す。 return @element_hit_plus if @element_hit_plus #ハッシュを作成。 @element_hit_plus = {} #メモ欄の各行からデータ取得 self.note.each_line { |line| #データがnilでなく、2つの数字が格納されている場合は分岐。 if /<#{ELEMENT_HE_PLUS::WORD1}[::](\d+),(\S+)>/ =~ line #ハッシュの指定位置の値が存在しない場合は"0"とする。 k = $1.to_i @element_hit_plus[k] ||= "0" #文字列に加える。 @element_hit_plus[k] = @element_hit_plus[k] + "+" + $2.to_s end } #ハッシュを返す。 @element_hit_plus end #-------------------------------------------------------------------------- # 属性回避強化 #-------------------------------------------------------------------------- def element_eva_plus #キャッシュが存在する場合はキャッシュを返す。 return @element_eva_plus if @element_eva_plus #ハッシュを作成。 @element_eva_plus = {} #メモ欄の各行からデータ取得 self.note.each_line { |line| #データがnilでなく、2つの数字が格納されている場合は分岐。 if /<#{ELEMENT_HE_PLUS::WORD2}[::](\d+),(\S+)>/ =~ line k = $1.to_i #ハッシュの指定位置の値が存在しない場合は"0"とする。 @element_eva_plus[k] ||= "0" #文字列に加える。 @element_eva_plus[k] = @element_eva_plus[k] + "+" + $2.to_s end } #ハッシュを返す。 @element_eva_plus end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの命中率計算 #-------------------------------------------------------------------------- alias item_hit_ehp item_hit def item_hit(user, item) #基本情報を呼び出す。 rate = item_hit_ehp(user, item) #追加命中率を加算した値を返す。 rate + user.ex_el_hit(item) end #-------------------------------------------------------------------------- # スキル/アイテムの回避率計算 #-------------------------------------------------------------------------- alias item_eva_eep item_eva def item_eva(user, item) #基本情報を呼び出す。 rate = item_eva_eep(user, item) #追加回避率を加算した値を返す。 rate + ex_el_eva(user, item) end #-------------------------------------------------------------------------- # スキル/アイテムに対応した追加命中率計算 #-------------------------------------------------------------------------- def ex_el_hit(item) data = 0 #武器属性もしくはアイテム・スキルの属性を呼び出す elements = item.damage.element_id < 0 ? atk_elements : [item.damage.element_id] #特徴別にデータを取得する feature_objects.each {|feature| elements.each {|number| next unless feature.element_hit_plus[number] eld = eval(feature.element_hit_plus[number]) data += eld ? eld : 0}} #0.01をかけたデータを返す data * 0.01 end #-------------------------------------------------------------------------- # スキル/アイテムに対応した追加回避率計算 #-------------------------------------------------------------------------- def ex_el_eva(user, item) data = 0 #武器属性もしくはアイテム・スキルの属性を呼び出す elements = item.damage.element_id < 0 ? user.atk_elements : [item.damage.element_id] #特徴別にデータを取得する feature_objects.each {|feature| elements.each {|number| next unless feature.element_eva_plus[number] eld = eval(feature.element_eva_plus[number]) data += eld ? eld : 0}} #0.01をかけたデータを返す data * 0.01 end end