#============================================================================== # ■ RGSS3 スキル・アイテムへの追加属性 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 一定確率で指定したスキル・アイテム使用時のダメージ属性が # 本来エディタ上で指定された物から更に追加されるようにします。 # 使い方によっては特定スキル・アイテムに # 一定確率で他の属性を追加する特徴が作成できるようにもなります。 # # 例.スキルのメモ欄に # <追加属性:3> # 100%の確率でそのスキル・アイテムに # 属性ID3の属性が追加される。 # # <追加属性:4,50> # 50%の確率でそのスキル・アイテムに # 属性ID4の属性が追加される。 # # <追加属性:5,user.element_rate(17)*100-100> # 使用者の属性ID17の属性有効度から100を引いた確率で # そのスキル・アイテムに属性ID5の属性が追加される。 #------------------------------------------------------------------------------ # ももまるLabs様のXPスタイルバトルと併用される場合 # XPスタイルバトルより上に配置して下さい。 # そうする事で、弱点/耐性ダメージ表示が正常に稼働します。 # # 数値指定の2番目は確率処理ですが、evalを用いているので # 上のuser.element_rate(17)*100-100等のように、計算式を用いる事が可能です。 # 装備品等で追加属性を設定する際は、これをうまく利用して下さい。 #============================================================================== module EX_ELEM #追加属性で弱点や耐性が発生した時の属性計算方法の指定 #0……各属性で最も高い有効度を属性有効度として扱う。 #1……全属性の有効度の乗算を属性有効度として扱う。 #2……基本有効度を0とし、全属性の有効度から100を引いた値を # 基本有効度に加算した値を属性有効度として扱う。 #3……全属性の有効度の平均値を属性有効度として扱う。 TYPE = 3 #追加属性として同じ属性が多重付与された場合の処理 #true……全て有効にする。 #false……一回分のみ有効とする。 #なお、TYPEが0の場合は、強制的にfalseになります。 DUAL1 = false #スキル・アイテムと同じ属性が多重付与された場合の処理 #true……有効にする。 #false……無効とする。 #なお、TYPEが0の場合は、強制的にfalseになります。 DUAL2 = false #属性有効度下限 #(負の値も指定可能。 # ただし、TYPEを2にしない限り、通常環境下では0以下にはならない。 # 設定しない場合、nilを指定) BTM = 0 #属性有効度上限 #(設定しない場合、nilを指定) TOP = 10000 #設定用キーワード(変更不要) WORD = "追加属性" end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの属性修正値を取得 #-------------------------------------------------------------------------- alias item_element_rate_extra_element item_element_rate def item_element_rate(user, item) @exelem = [] data = item_element_rate_extra_element(user, item) #追加属性がない時は処理を飛ばす if !item.extra_element.empty? #追加属性を確率で判定 item.extra_element.each {|v| @exelem.push(v[0]) if eval(v[1]) > rand(100)} #多重付与された追加属性を削除(設定による @exelem.uniq! if !EX_ELEM::DUAL1 or EX_ELEM::TYPE == 0 #追加属性内から、元々スキル・アイテム内にある属性を削除(設定による) if !EX_ELEM::DUAL2 or EX_ELEM::TYPE == 0 ideid = item.damage.element_id if ideid < 0 && !user.atk_elements.empty? user.atk_elements.each {|i| @exelem.delete(i) if @exelem.include?(i)} else @exelem.delete(ideid) if @exelem.include?(ideid) end end #追加属性がある場合、タイプ別に属性有効度計算処理 if !@exelem.empty? @exelem.each {|i| data2 = element_rate(i) case EX_ELEM::TYPE when 0;data = data2 if data < data2 when 1;data *= data2 when 2;data += data2 - 1.0 when 3;data += data2 end} data /= (@exelem.size + 1) if EX_ELEM::TYPE == 3 end end #属性有効度最大値チェック if EX_ELEM::TOP value = EX_ELEM::TOP / 100.0 data = value if value < data end #属性有効度最低値チェック if EX_ELEM::BTM value = EX_ELEM::BTM / 100.0 data = value if value > data end data end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 追加属性 #-------------------------------------------------------------------------- def extra_element #キャッシュがある場合は読み込み処理を飛ばす @extra_element ||= create_extra_element end #-------------------------------------------------------------------------- # 追加属性データ作成 #-------------------------------------------------------------------------- def create_extra_element a1 = [] word = EX_ELEM::WORD #メモ欄から読み込み note.each_line {|l| if /<#{word}[::](\S+)>/ =~ l a2 = $1.to_s.split(/\s*,\s*/) #2番目の値がない場合は100%追加 a2[0] = a2[0].to_i a2[1] = "100" if !a2[1] a1.push(a2) end} a1 end end