#============================================================================== # ■ RGSS2 攻撃属性追加効果・属性参照スキル Ver2.00 by 星潟 #------------------------------------------------------------------------------ # このスクリプトを導入することで装備・ステート・敵のメモ欄を利用して # 武器への属性付与を行う事が出来ます。 # なお、既に武器にその属性が付与されている場合は効果がありません。 # また、スキルに対し、武器属性を参照する設定と # 特定の武器属性でなければ使用できない前提機能の設定を追加できます。 # # 例1(装備・ステート・敵用) # <武器属性付与:9> # 通常攻撃に属性ID9の属性を付与。 # # <武器属性付与:9,10,11> # 通常攻撃に属性ID9・10・11の属性を付与。 # # 例2(アイテム・スキル用) # <武器属性参照> # このスキルは通常攻撃時の攻撃属性を属性に含める。 # (重複している属性は無視する) # # 例3(スキル用) # <武器属性前提:11> # 通常攻撃の属性に属性ID11の属性が含まれていなければこのスキルを使用できない。 # # <武器属性前提:11,12,13> # 通常攻撃の属性に属性ID11・12・13の属性が含まれていなければ # このスキルを使用できない。 #------------------------------------------------------------------------------ # Ver2.00 1行で複数の属性付与と属性前提が設定できるように変更しました。 # 複数行に分けて設定する形式ではなくなっているのでご注意ください。 # また、キャッシュ化による処理の高速化を行いました。 #============================================================================== module ENCHANT_ELEMENT1 #通常攻撃に属性を付与する為の設定用キーワードを指定します。 WORD1 = "武器属性付与" #スキルに通常攻撃の属性を付与する為の設定用キーワードを指定します。 WORD2 = "武器属性参照" #スキル使用時の前提属性の設定用キーワードを指定します。 WORD3 = "武器属性前提" #武器属性参照時に参照されない例外属性IDを設定します。 #(デフォルトでは設定していません。「,」で区切って設定して下さい) ELEM = [] end module ENCHANT_ELEMENT2 #-------------------------------------------------------------------------- # 属性付与情報 #-------------------------------------------------------------------------- def enchant_element #キャッシュがあればキャッシュを返す。 return @enchant_element if @enchant_element != nil #空の配列を作成。 @enchant_element = [] #メモ欄からデータを取得。 memo = self.note.scan(/<#{ENCHANT_ELEMENT1::WORD1}[::](\S+)>/).flatten #データを取得できた場合は分割して配列に加える。 if memo != nil && !memo.empty? data = memo[0].split(/\s*,\s*/) for e in data;@enchant_element.push(e.to_i);end end #データを返す。 @enchant_element end end #エネミー・ステート・装備品に属性付与情報を含める。 class RPG::Enemy include ENCHANT_ELEMENT2 end class RPG::State include ENCHANT_ELEMENT2 end class RPG::Weapon include ENCHANT_ELEMENT2 end class RPG::Armor include ENCHANT_ELEMENT2 end class RPG::UsableItem #-------------------------------------------------------------------------- # 通常攻撃属性参照 #-------------------------------------------------------------------------- def enchantable_is #キャッシュがあればキャッシュを返す。 return @enchantable_is if @enchantable_is != nil #メモ欄からデータを取得。 @enchantable_is = self.note.include?("<" + ENCHANT_ELEMENT1::WORD2 + ">") #データを返す。 @enchantable_is end #-------------------------------------------------------------------------- # 前提通常攻撃属性 #-------------------------------------------------------------------------- def premise_element #キャッシュがあればキャッシュを返す。 return @premise_element if @premise_element != nil #空の配列を作成。 @premise_element = [] #メモ欄からデータを取得。 memo = self.note.scan(/<#{ENCHANT_ELEMENT1::WORD3}[::](\S+)>/).flatten #データが存在する場合は処理を行う。 if memo != nil && !memo.empty? memo = memo[0].split(/\s*,\s*/) for e in memo;@premise_element.push(e.to_i);end end #データを返す。 @premise_element end end class Game_Temp attr_accessor :enc_skill_data # 背景ビットマップ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_enchant_element initialize def initialize initialize_enchant_element @enc_skill_data = [] end end class Game_Battler #-------------------------------------------------------------------------- # 通常攻撃付与属性 #-------------------------------------------------------------------------- def enchant_element #ステートと、アクターか否かに応じて装備品もしくは敵自身を加える。 features = self.states + (self.actor? ? self.equips : [self.enemy]) #空の配列を作成。 data = [] #特徴別に付与属性を足す。 for f in features next if f == nil data = data + f.enchant_element end #データを返す。 data end #-------------------------------------------------------------------------- # スキルまたはアイテムによるダメージ計算 #-------------------------------------------------------------------------- alias make_obj_damage_value_enchant make_obj_damage_value unless $! def make_obj_damage_value(user, obj) #武器属性参照スキルの場合は処理を分岐。 if obj.enchantable_is #一時データとして使用者の武器属性を複製。 $game_temp.enc_skill_data = user.element_set.clone #一時データから例外属性を排除する。 for i in ENCHANT_ELEMENT1::ELEM;$game_temp.enc_skill_data.delete(i);end end #本来の処理を実行。 make_obj_damage_value_enchant(user, obj) #一時データを空にする。 $game_temp.enc_skill_data = [] end #-------------------------------------------------------------------------- # 属性の最大修正値の取得 #-------------------------------------------------------------------------- alias elements_max_rate_enchant elements_max_rate unless $! def elements_max_rate(element_set) #本来の属性に一時データの属性を足した物で本来の処理を実行。 elements_max_rate_enchant(element_set + $game_temp.enc_skill_data) end #-------------------------------------------------------------------------- # スキルの使用可能判定 #-------------------------------------------------------------------------- alias skill_can_use_enchant? skill_can_use? unless $! def skill_can_use?(skill) #元々使用できない場合はfalseを返す。 return false unless skill_can_use_enchant?(skill) #前提属性を満たしているか否かを返す。 premise_element_ok?(skill) end #-------------------------------------------------------------------------- # スキルの使用可能判定 #-------------------------------------------------------------------------- def premise_element_ok?(skill) #スキルの前提属性が空の場合はtrueを返す。 return true if skill.premise_element.empty? #攻撃属性を取得しておく。 data = element_set #スキルの前提属性を全て満たしているかを判定する。 for i in skill.premise_element;return false unless data.include?(i);end #trueを返す。 true end end class Game_Actor #-------------------------------------------------------------------------- # 通常攻撃属性 #-------------------------------------------------------------------------- alias element_set_enchant element_set unless $! def element_set #本来の処理に付与属性を加え、更に同一属性を消去する。 (element_set_enchant + enchant_element).uniq end end class Game_Enemy #-------------------------------------------------------------------------- # 通常攻撃属性 #-------------------------------------------------------------------------- alias element_set_enchant element_set unless $! def element_set #本来の処理に付与属性を加え、更に同一属性を消去する。 (element_set_enchant + enchant_element).uniq end end