#============================================================================== # 「スキル採用属性」(ACE) ver1.0 by奈々 # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # #------------------------------------------------------------------------------ # # スキルの属性「通常攻撃」に対して変更を行うスクリプトです。 # デフォルトはアクターの持つ攻撃属性「全て」から一番有効な属性が選ばれます。 # # ・採用属性 # スキルのメモ欄に<採用属性 ID>と書いて設定します。(複数設定可) # このスキルの「通常攻撃」属性はアクターの持つ攻撃属性のうち # 「採用属性になっているもの」から一番有効な属性が選ばれます。 # # ・不採用属性 # スキルのメモ欄に<不採用属性 ID>と書いて設定します。(複数設定可) # このスキルの「通常攻撃」属性はアクターの持つ攻撃属性のうち # 「不採用属性以外」から一番有効な属性が選ばれます。 # # 採用属性が1つでも設定されている場合、不採用属性は無効になります。 # また例えばアクターの攻撃属性に採用属性が1つも無かった場合など # 結果的に属性なしになった場合は0%扱いになります。(通常の属性なしは100%) # #============================================================================== class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # ● 採用属性を取得 #-------------------------------------------------------------------------- def accept_elements list = [] @note.scan(/<採用属性\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end #-------------------------------------------------------------------------- # ● 不採用属性を取得 #-------------------------------------------------------------------------- def non_accept_elements list = [] @note.scan(/<不採用属性\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ○ スキル/アイテムの属性修正値を取得(再定義) #-------------------------------------------------------------------------- def item_element_rate(user, item) if item.damage.element_id < 0 user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements, item) else element_rate(item.damage.element_id) end end #-------------------------------------------------------------------------- # ○ 属性の最大修正値の取得(再定義) # elements : 属性 ID の配列 # 与えられた属性の中で最も有効な修正値を返す #-------------------------------------------------------------------------- def elements_max_rate(elements, item) if item.accept_elements != [] elements &= item.accept_elements elsif item.non_accept_elements != [] elements -= item.non_accept_elements end elements.inject([0.0]) {|r, i| r.push(element_rate(i)) }.max end end