########### 特定の属性を持つスキルを使用不可能になるステートの作成 ########### # # # 特定属性を含むスキルを使えなくなるステートの作成をします。 # # # # こちらはハッシュを用いたステート名前の設定をしています。 # # STATE_UNUSABLE_HASHにハッシュとして設定してください。 # # 「"ステート名"=>"使用不可属性"」の形でハッシュを追加してください。 # # # ############################################################################## # ココから設定 module Annex STATE_UNUSABLE_HASH = {"ドンアク"=>"属性:物理", "沈黙"=>"属性:魔法", "オイル"=>"炎"} # 特定属性を含むスキルが使えなくなるステートの設定。 # 「ステート名前=>属性名」の形で設定します。 end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ スキルの使用可能判定 # skill_id : スキル ID #-------------------------------------------------------------------------- alias state_restriction_skill_can_use? skill_can_use? def skill_can_use?(skill_id) # ステートによる制約を受けている場合はfalseを返す if skill_checked_by_state?(skill_id) return false end return state_restriction_skill_can_use?(skill_id) end #-------------------------------------------------------------------------- # ◎ 追加:ステートによる制約を受けているかの確認 # 制約を受けていればtrue、 受けていなければfalseを返す # skill_id : スキル ID #-------------------------------------------------------------------------- def skill_checked_by_state?(skill_id) unusable_elements = [] # 一部スキル使用不可ステートに掛かっているかの確認 for name in Annex::STATE_UNUSABLE_HASH.keys if state_name?(name) # 使用不可能なスキルの属性を取得 unusable_elements.push(Annex::STATE_UNUSABLE_HASH[name]) end end # unusable_elementsが空ならfalseを返す return false if unusable_elements == [] # element_setの取得 element_set = $data_skills[skill_id].element_set for i in unusable_elements # element_setに使用不可能なスキルの属性が含まれていればtrueを返す if include_element?(element_set, i) return true end end # false を返す return false end #-------------------------------------------------------------------------- # ◎ 追加:任意の属性配列にその属性が含まれるか否か #-------------------------------------------------------------------------- def include_element?(element_set, name) return element_set.include?($data_system.elements.index(name)) 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 return 0 end #-------------------------------------------------------------------------- # ◎ 追加 指定された名前のステートになっているかの確認 # state_name : ステート名 #-------------------------------------------------------------------------- def state_name?(state_name) id = get_state_id(state_name) return state?(id) end end