#============================================================================== # ■ RGSS2 属性増幅 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # 指定した属性ダメージ/回復量を増幅するエネミー/ステート/武器/防具を # 作成する事ができるようになります。 #------------------------------------------------------------------------------ # ★設定例 #------------------------------------------------------------------------------ # エネミー/ステート/武器/防具のメモ欄に # <属性攻撃増幅:10,50>と記入すると # 属性ID10によるダメージ/回復量が50%増幅します。 #============================================================================== module EL_BOOST #属性攻撃増幅効果を設定する為のキーワードを設定します。 WORD = "属性攻撃増幅" #-------------------------------------------------------------------------- # 属性増幅データの取得 #-------------------------------------------------------------------------- def elemental_boost_data #キャッシュを返す。 return @elemental_boost_data if @elemental_boost_data != nil #ハッシュを作成。 @elemental_boost_data = {} #メモ欄からデータを取得。 self.note.each_line do |l| data = l.scan(/<#{EL_BOOST::WORD}[::](\S+),(\S+)>/).flatten if data != nil && data.size == 2 #データが存在する場合はそのデータを設定する。 @elemental_boost_data[data[0].to_i] = data[1].to_i end end #データを返す。 @elemental_boost_data end #-------------------------------------------------------------------------- # 属性増幅データの値 #-------------------------------------------------------------------------- def elemental_boost(element_id) #データが存在しない場合は0を返す。 elemental_boost_data[element_id] != nil ? elemental_boost_data[element_id] : 0 end end #エネミー・ステート・武器・防具に属性ブーストの設定を行う。 class RPG::Enemy include EL_BOOST end class RPG::State include EL_BOOST end class RPG::Weapon include EL_BOOST end class RPG::Armor include EL_BOOST end class Game_Battler #-------------------------------------------------------------------------- # 属性増幅データを持つ物を取得 #-------------------------------------------------------------------------- def elemental_boost_features #自分自身とステート。 states end #-------------------------------------------------------------------------- # 属性増幅を実行 #-------------------------------------------------------------------------- def elemental_boost_execute(obj, damage) #属性が空の場合は増幅しない。 return damage if obj.element_set.empty? #初期倍率を設定。 data = 100 #属性別に増幅倍率を取得。 for element_id in obj.element_set for feature in elemental_boost_features next if feature == nil data += feature.elemental_boost(element_id) end end #取得倍率でダメージを変更する。 damage *= data damage /= 100 #ダメージを返す。 damage end #-------------------------------------------------------------------------- # 通常攻撃によるダメージ計算 #-------------------------------------------------------------------------- alias make_attack_damage_value_elemental_boost make_attack_damage_value def make_attack_damage_value(attacker) #本来の処理を実行。 make_attack_damage_value_elemental_boost(attacker) #HPとMPダメージが0でなければ、それぞれ属性ブーストを行う。 @hp_damage = attacker.elemental_boost_execute(attacker, @hp_damage) if @hp_damage != 0 @mp_damage = attacker.elemental_boost_execute(attacker, @mp_damage) if @mp_damage != 0 end #-------------------------------------------------------------------------- # スキルまたはアイテムによるダメージ計算 #-------------------------------------------------------------------------- alias make_obj_damage_value_elemental_boost make_obj_damage_value def make_obj_damage_value(user, obj) #本来の処理を実行。 make_obj_damage_value_elemental_boost(user, obj) #HPとMPダメージが0でなければ、それぞれ属性ブーストを行う。 @hp_damage = user.elemental_boost_execute(obj, @hp_damage) if @hp_damage != 0 @mp_damage = user.elemental_boost_execute(obj, @mp_damage) if @mp_damage != 0 end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 属性増幅データを持つ物を取得 #-------------------------------------------------------------------------- def elemental_boost_features #バトラー共通データ(自分自身とステート)に装備品を加える。 super + equips end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 属性増幅データを持つ物を取得 #-------------------------------------------------------------------------- def elemental_boost_features #バトラー共通データ(自分自身とステート)に装備品を加える。 super + [self.enemy] end end