#============================================================================== # 「スキル必要武器タイプ拡張」(ACE) ver2.1 by奈々 # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # #------------------------------------------------------------------------------ # # スキルの必要武器タイプを拡張します。 # 使い方は、スキルのメモ欄にタグを記入して下さい。 # # <要求武器タイプ n>:設定した武器タイプを「1つでも」装備していれば使用可能。 # デフォルトの必要武器タイプはこれと同じ扱いになります。 # # <要求防具タイプ n>:設定した防具タイプを「1つでも」装備していれば使用可能。 # 要求武器タイプを含めてどれか1つあればOKの判定です。 # # <必須武器タイプ n>:設定した武器タイプを「全て」装備していれば使用可能。 # # <必須防具タイプ n>:設定した防具タイプを「全て」装備していれば使用可能。 # # # <禁止武器タイプ n>:設定した武器タイプを「装備していなければ」使用可能。 # # <禁止防具タイプ n>:設定した防具タイプを「装備していなければ」使用可能。 # # タグは何個でも追加できます。またどのタイプも併用が可能です。 # 併用する場合は # 禁止タイプの判定→必須タイプの判定→要求タイプの判定 # とタイプ毎にそれぞれ独立したチェックをして # 全て満たしていた場合のみ使用可能になります。 # #============================================================================== #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ # アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) # の内部で使用され、Game_Party クラス($game_party)からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● スキルの必要武器を装備しているか(再定義) #-------------------------------------------------------------------------- def skill_wtype_ok?(skill) #要求武器タイプはデータベースの設定も反映 any_wtype_id = [] any_wtype_id.push skill.required_wtype_id1 any_wtype_id.push skill.required_wtype_id2 #無設定が0で入っているので、それを除外 any_wtype_id -= [0] any_wtype_id += skill.required_any_wtype_id #他も参照しやすいように取り出す any_atype_id = skill.required_any_atype_id all_wtype_id = skill.required_all_wtype_id all_atype_id = skill.required_all_atype_id notany_wtype_id = skill.required_notany_wtype_id notany_atype_id = skill.required_notany_atype_id # 武器タイプと防具タイプの複合判定 #要求タイプの判定 any_etype_ok = false any_etype_ok = true if any_wtype_id == [] && any_atype_id == [] any_etype_ok = true if any_wtype_equipped?(any_wtype_id) || any_atype_equipped?(any_atype_id) #any判定を武器か防具のどちらかで満たせばtrue #もしくは両方指定なしの場合もtrue #それ以外がfalse #必須タイプの判定 all_etype_ok = true all_etype_ok = false if !(all_wtype_equipped?(all_wtype_id) || all_wtype_id == []) all_etype_ok = false if !(all_wtype_equipped?(all_wtype_id) || all_wtype_id == []) #all判定か指定なしか、これを武器と防具の両方で満たすならtrue #これを逆にしたfalseを洗い出すことで判定を簡単にしている #禁止タイプの判定 notany_etype_ok = true notany_etype_ok = false if any_wtype_equipped?(notany_wtype_id) || any_atype_equipped?(notany_atype_id) #any判定を武器か防具のどちらかで満たせばfalse #そうでなければtrue return false if !any_etype_ok return false if !all_etype_ok return false if !notany_etype_ok return true end #-------------------------------------------------------------------------- # ● 特定のタイプの武器をどれか1つでも装備しているか(新規メソッド) #-------------------------------------------------------------------------- def any_wtype_equipped?(any_wtype_id) any_wtype_id.each {|wtype| return true if weapons.any? {|weapon| weapon.wtype_id == wtype } } return false end #-------------------------------------------------------------------------- # ● 特定のタイプの防具をどれか1つでも装備しているか(新規メソッド) #-------------------------------------------------------------------------- def any_atype_equipped?(any_atype_id) any_atype_id.each {|atype| return true if armors.any? {|armor| armor.atype_id == atype } } return false end #-------------------------------------------------------------------------- # ● 特定のタイプの武器を全て装備しているか(新規メソッド) #-------------------------------------------------------------------------- def all_wtype_equipped?(all_wtype_id) all_wtype_id.each {|wtype| return false if not weapons.any? {|weapon| weapon.wtype_id == wtype } } return true end #-------------------------------------------------------------------------- # ● 特定のタイプの防具を全て装備しているか(新規メソッド) #-------------------------------------------------------------------------- def all_atype_equipped?(all_atype_id) all_atype_id.each {|atype| return false if not armors.any? {|armor| armor.atype_id == atype } } return true end end class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # ● 要求武器タイプの定義(追加定義) #-------------------------------------------------------------------------- def required_any_wtype_id list = [] @note.scan(/<要求武器タイプ\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end #-------------------------------------------------------------------------- # ● 要求防具タイプの定義(追加定義) #-------------------------------------------------------------------------- def required_any_atype_id list = [] @note.scan(/<要求防具タイプ\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end #-------------------------------------------------------------------------- # ● 必須武器タイプの定義(追加定義) #-------------------------------------------------------------------------- def required_all_wtype_id list = [] @note.scan(/<必須武器タイプ\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end #-------------------------------------------------------------------------- # ● 必須防具タイプの定義(追加定義) #-------------------------------------------------------------------------- def required_all_atype_id list = [] @note.scan(/<必須防具タイプ\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end #-------------------------------------------------------------------------- # ● 禁止武器タイプの定義(追加定義) #-------------------------------------------------------------------------- def required_notany_wtype_id list = [] @note.scan(/<禁止武器タイプ\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end #-------------------------------------------------------------------------- # ● 禁止防具タイプの定義(追加定義) #-------------------------------------------------------------------------- def required_notany_atype_id list = [] @note.scan(/<禁止防具タイプ\s?(\d*)>/) {|s| list.push($1.to_i) if $1} return list end end