#=========================================================================== # ◆ A1 Scripts ◆ # 複数攻撃属性(RGSS3) # # バージョン : 1.00 (2011/12/15) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・スキル・アイテムの属性を複数設定します # ・VX機能「属性有効度 F」再現 #--------------------------------------------------------------------------- # 更新履歴   :2011/12/15 Ver1.00 リリース #--------------------------------------------------------------------------- # 設置場所 #  RGSS3用A1共通スクリプトより下 # 一部再定義メソッドがあるため、なるべく上の方 # # 必要スクリプト # RGSS3用A1共通スクリプト #--------------------------------------------------------------------------- # 使い方 # データベースのメモ欄に記述します # [職業][敵キャラ] # <回復属性 a> : 受けたダメージが回復する属性を設定します #   回復率は特徴「属性有効度」で設定 #   a = 属性IDをカンマ(,)区切りで指定 # # [スキル][アイテム] # <属性 a>   : スキル・アイテムの属性を設定します #    a = 属性IDをカンマ(,)区切りで指定 #============================================================================== $imported ||= {} $imported["A1_MultiSkillElements"] = true if $imported["A1_Common_Script"] #============================================================================== # ■ A1_System::Multi_Elements #============================================================================== module A1_System::Multi_Elements #-------------------------------------------------------------------------- # 複数属性の最大値を採用する(デフォルト仕様) # ※ false にすると複数属性の乗算値を計算 #-------------------------------------------------------------------------- USE_MAX_RATE = true end #============================================================================== # ■ RPG::UsableItem::Damage #============================================================================== class RPG::UsableItem::Damage #-------------------------------------------------------------------------- # ○ 複数属性の設定 #-------------------------------------------------------------------------- def set_multi_elements(note) @ex_elements = $a1_common.note_data_array(note, "属性", 0, [@element_id]) @ex_elements.push(self.element_id) unless @ex_elements.include?(self.element_id) end #-------------------------------------------------------------------------- # ○ 複数属性 #-------------------------------------------------------------------------- def ex_elements return @ex_elements end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem #-------------------------------------------------------------------------- # ○ ダメージ #-------------------------------------------------------------------------- def damage @damage.set_multi_elements(self.note) if @damage.ex_elements == nil return @damage end end #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ○ 回復属性の設定 #-------------------------------------------------------------------------- def set_recovery_elements @recovery_elements = $a1_common.note_data_array(self.note, "回復属性", 0) end #-------------------------------------------------------------------------- # ○ 回復属性か判定 #-------------------------------------------------------------------------- def recovery_elements?(element) @recovery_elements ||= set_recovery_elements return @recovery_elements.any? {|ele| ele == element } end end #============================================================================== # ■ Game_BattlerBase #------------------------------------------------------------------------------ #  バトラーを扱う基本のクラスです。主に能力値計算のメソッドを含んでいます。こ # のクラスは Game_Battler クラスのスーパークラスとして使用されます。 #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ☆ 属性有効度の取得 #-------------------------------------------------------------------------- alias a1_vx_gbb_element_rate element_rate def element_rate(element_id) rete = a1_vx_gbb_element_rate(element_id) return rete end end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス # は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ★ スキル/アイテムの属性修正値を取得 #-------------------------------------------------------------------------- def item_element_rate(user, item) if item.damage.element_id < 0 return 1.0 if user.atk_elements.empty? return calc_elements(user.atk_elements) else return calc_elements(item.damage.ex_elements) end end #-------------------------------------------------------------------------- # ○ 属性計算 #-------------------------------------------------------------------------- def calc_elements(elements) return elements_max_rate(elements) if A1_System::Multi_Elements::USE_MAX_RATE damage_rate = 1 recovery_rate = 0 ignore_rate = 0 elements.each {|element_id| rate = element_rate(element_id) if rate == 0 ignore_rate += 1 elsif recovery_elements?(element_id) recovery_rate = 1 if recovery_rate == 0 recovery_rate *= rate else damage_rate *= rate end } damage_rate = [damage_rate - ignore_rate, 0].max return damage_rate - (recovery_rate + [damage_rate, 1].min) if recovery_rate > 0 return damage_rate end end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  敵キャラを扱うクラスです。このクラスは Game_Troop クラス($game_troop)の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ○ 回復属性か判断 #-------------------------------------------------------------------------- def recovery_elements?(element_id) return enemy.recovery_elements?(element_id) end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) # の内部で使用され、Game_Party クラス($game_party)からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 回復属性か判断 #-------------------------------------------------------------------------- def recovery_elements?(element_id) return self.class.recovery_elements?(element_id) end end end