########### 防具やステートに攻撃属性・ステート付加効果を付加する ########### # # # 攻撃属性を変化させる防具やステートを作成できるようになります。 # # 例えば「フレイムリング」を作成し、攻撃属性を炎にする装飾品を作る場合、 # # 「攻撃属性:炎」という名前の属性を作成。 # # 防具の属性防御の所で「攻撃属性:炎」にチェックを入れてください。 # # # # 同様に、攻撃にステート付加、ステート解除の効果を持たせることも可能です。 # # 「付加:戦闘不能」とすれば攻撃に戦闘不能効果を付加させることが、 # # 「解除:ブリンク」とすれば攻撃の際にブリンクを解除させる効果があります。 # # # ############################################################################ module Annex ATTACK_ELEMENT_KEY = "攻撃属性:" # この後に属性名を書いて、攻撃属性付加 PLUS_STATE_KEY = "付加:" # この後にステート名を書いて、ステート付加 MINUS_STATE_KEY = "解除:" # この後にステート名を書いて、ステート解除 end class Game_Battler #-------------------------------------------------------------------------- # ◎ 追加:特定の属性名から始まる属性名を取得し、 # キーワード以降を名前とする属性のIDを取得する。 # element_set : 属性の配列 # key : 取得する属性名 #-------------------------------------------------------------------------- def get_element_id_by_name(element_set, key) array = [] for i in element_set # 属性名を取得 if $data_system.elements[i] =~ /#{key}(.+)/ # 属性IDを取得 id = $data_system.elements.index($1) # 指定した名前の属性が存在しない場合は nil next if id == nil array.push(id) end end return array end #-------------------------------------------------------------------------- # ◎ 追加:特定の属性名から始まる属性名を取得し、 # キーワード以降を名前とするステートのIDを取得する。 # element_set : 属性の配列 # key : 取得する属性名 #-------------------------------------------------------------------------- def get_state_id_by_name(element_set, key) array = [] for i in element_set if $data_system.elements[i] =~ /#{key}(.+)/ # ステート名を取得したあとそのステートIDを取得 id = get_state_id($1) # 指定した名前の属性が存在しない場合は nil next if id == nil array.push(id) end end return array end #-------------------------------------------------------------------------- # ◎ 追加 指定された名前のステートのIDを取得 # state_name : ステート名 #-------------------------------------------------------------------------- def get_state_id(state_name) for i in $data_states next if i == nil if i.name == state_name return i.id end end # ステートが存在しなかった場合は0を返す return 0 end #-------------------------------------------------------------------------- # ◎ 追加:防具やステートに「キー+属性名」の属性が含まれているか取得 # key : 属性名 #-------------------------------------------------------------------------- def get_element_id_from_states(key) # 取得したIDを返す return get_ids_from_state(key, "element") end #-------------------------------------------------------------------------- # ◎ 追加:防具やステートに「キー+ステート名」の属性が含まれているか取得 # key : 属性名 #-------------------------------------------------------------------------- def get_state_id_from_states(key) # 取得したIDを返す return get_ids_from_state(key, "state") end #-------------------------------------------------------------------------- # ◎ 追加:ステートから任意のキーを含む属性から属性・ステートIDを取得 # key : 属性名 # type : 取得した名前が属性名かステート名かのフラグ #-------------------------------------------------------------------------- def get_ids_from_state(key, type) elset = [] # ステートから属性を取得していく for i in @states state = $data_states[i] # 取得した名前が属性名の場合 if type == "element" # elset に 取得した属性IDを足す elset |= get_element_id_by_name(state.guard_element_set, key) # ステート名の場合 elsif type == "state" # elset に 取得したステートIDを足す elset |= get_state_id_by_name(state.guard_element_set, key) end end return elset end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 通常攻撃の属性取得 #-------------------------------------------------------------------------- alias make_attack_el_element_set element_set def element_set # 呼び戻し elset = make_attack_el_element_set # 防具やステートに指定した言葉で始まる属性が含まれてるか確認 elset |= get_element_id_from_states(Annex::ATTACK_ELEMENT_KEY) return elset end #-------------------------------------------------------------------------- # ○ 通常攻撃のステート変化 (+) 取得 #-------------------------------------------------------------------------- alias make_attack_el_plus_state_set plus_state_set def plus_state_set # 呼び戻し state_set = make_attack_el_plus_state_set # 防具やステートに指定した言葉で始まる属性が含まれてるか確認 state_set |= get_state_id_from_states(Annex::PLUS_STATE_KEY) return state_set end #-------------------------------------------------------------------------- # ○ 通常攻撃のステート変化 (-) 取得 #-------------------------------------------------------------------------- alias make_attack_el_minus_state_set minus_state_set def minus_state_set # 呼び戻し state_set = make_attack_el_minus_state_set # 防具やステートに指定した言葉で始まる属性が含まれてるか確認 state_set |= get_state_id_from_states(Annex::MINUS_STATE_KEY) return state_set end #-------------------------------------------------------------------------- # ◎ 追加:防具とステートから任意のキーを含む属性から属性・ステートIDを取得 # key : 属性名 # type : 取得した名前が属性名かステート名かのフラグ #-------------------------------------------------------------------------- def get_ids_from_state(key, type) # 親メソッド(Game_Actor#get_ids_from_state)を呼ぶ elset = super # 防具の属性を取得していく for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id] armor = $data_armors[i] if armor != nil # 取得した名前が属性名の場合 if type == "element" # elset に 取得した属性IDを足す elset |= get_element_id_by_name(armor.guard_element_set, key) # ステート名の場合 elsif type == "state" # elset に 取得したステートIDを足す elset |= get_state_id_by_name(armor.guard_element_set, key) end end end return elset end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ○ 通常攻撃の属性取得 #-------------------------------------------------------------------------- alias make_attack_el_element_set element_set def element_set # 呼び戻し elset = make_attack_el_element_set # ステートに指定した言葉で始まる属性が含まれてるか確認 elset |= get_element_id_from_states(Annex::ATTACK_ELEMENT_KEY) return elset end #-------------------------------------------------------------------------- # ○ 通常攻撃のステート変化 (+) 取得 #-------------------------------------------------------------------------- alias make_attack_el_plus_state_set plus_state_set def plus_state_set # 呼び戻し state_set = make_attack_el_plus_state_set # ステートに指定した言葉で始まる属性が含まれてるか確認 state_set |= get_state_id_from_states(Annex::PLUS_STATE_KEY) return state_set end #-------------------------------------------------------------------------- # ○ 通常攻撃のステート変化 (-) 取得 #-------------------------------------------------------------------------- alias make_attack_el_minus_state_set minus_state_set def minus_state_set # 呼び戻し state_set = make_attack_el_minus_state_set # ステートに指定した言葉で始まる属性が含まれてるか確認 state_set |= get_state_id_from_states(Annex::MINUS_STATE_KEY) return state_set end end