#============================================================================== # ■ RGSS3 通常攻撃ID変化特徴 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 本来はスキルID1番に指定されている通常攻撃のスキルIDを # 変更する特徴を作成する事が可能になります。 # # これにより、通常攻撃のランダム攻撃化や全体攻撃化の効果を持つ # ステートや装備品を作成する事が可能になります。 # # なお、RPGツクールVXAceプリセットスクリプトの不具合により # 攻撃追加回数が反映されませんが # 配布中の『通常攻撃時の追加攻撃回数強制適用』スクリプトを併用する事で # 攻撃追加回数が反映されるようになります。 #============================================================================== # 特徴を有する項目(アクター・職業・装備・ステート等)のメモ欄に設定 # 行を分けて複数設定可能です。 #------------------------------------------------------------------------------ # <攻撃ID変更:130> # # この場合は、通常攻撃のスキルID変化候補としてスキルID130が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:131,self.hp>=100> # # この場合は、コマンド選択時にHPが100以上の時に限り # 通常攻撃のスキルID変化候補としてスキルID131が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:132,mp==0> # # この場合は、コマンド選択時にMPが0の時に限り # 通常攻撃のスキルID変化候補としてスキルID132が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:133,mp>=skill_mp_cost($data_skills[133])> # # この場合は、コマンド選択時にMPがスキルID133の消費MP以上の時に限り # 通常攻撃のスキルID変化候補としてスキルID133が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:134,tp==100> # # この場合は、コマンド選択時にTPが100の時に限り # 通常攻撃のスキルID変化候補としてスキルID134が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:135,skill_cost_payable?($data_skills[135])> # # この場合は、コマンド選択時にスキルID135の使用コストが全て払える時に限り # 通常攻撃のスキルID変化候補としてスキルID135が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:136,usable?($data_skills[136])> # # この場合は、コマンド選択時にスキルID136が # スキルとして使用可能と判定された場合に限り(コスト以外についても判定されます) # 通常攻撃のスキルID変化候補としてスキルID136が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:137,mp>0&&state?(4)> # # この場合は、コマンド選択時にMPが0より大きくステートID4が付与されている時に限り # 通常攻撃のスキルID変化候補としてスキルID137が追加されます。 #------------------------------------------------------------------------------ # <攻撃ID変更:138,mp>0&&!state?(4)> # # この場合は、コマンド選択時にMPが0より大きくステートID4が付与されていない時に限り # 通常攻撃のスキルID変化候補としてスキルID138が追加されます。 #============================================================================== # スキルのメモ欄に設定 #------------------------------------------------------------------------------ # <攻撃ID優先度変更:1> # # このスキルの攻撃ID優先度変更を1として設定します。 # # 書き込まれた数値が優先度として機能し # 数値が高ければ高いほど攻撃IDとして優先されます。 # (なお、優先度が指定されていない場合、自動的に優先度0となります) # 優先度が同じ攻撃スキルが存在する場合 # スキルIDの値が高いスキルが優先されます。 #============================================================================== module ATTACK_CHANGE #攻撃ID変更用のキーワードを設定します。 WORD1 = "攻撃ID変更" #攻撃ID優先度変更用のキーワードを設定します。 WORD2 = "攻撃ID優先度変更" end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # コマンド[攻撃] #-------------------------------------------------------------------------- alias command_attack_attack_change command_attack def command_attack #通常攻撃時、対象を選択する必要がある場合は通常の処理を行う。 return command_attack_attack_change if $data_skills[BattleManager.actor.attack_skill_id].need_selection? #通常攻撃時、対象を選択する必要が無い場合は #攻撃をセットした後、次のアクターへ移す。 BattleManager.actor.input.set_attack next_command end end class Game_BattlerBase #-------------------------------------------------------------------------- # 通常攻撃のスキル ID を取得 #-------------------------------------------------------------------------- alias attack_skill_id_attack_change attack_skill_id def attack_skill_id #空の配列を用意。 data = [] #特徴に通常攻撃IDが指定されている場合、そのIDを配列に加える。 feature_objects.each do |f| f.new_attack_skill_id.each {|aa| data.push(aa[0]) if aa[0] != 0 && eval(aa[1])} end #配列が空の場合は通常の処理を行う。 return attack_skill_id_attack_change if data.empty? #配列内の同じ物を消去し、並び変える。 data.uniq! data.sort! #スキルの優先度の最高値を取得する。 number = 0 data.each do |d| number = $data_skills[d].attack_skill_priority if number <= $data_skills[d].attack_skill_priority end #配列から、スキル優先度が最高値でない物を削除する。 data.reject! {|d| $data_skills[d].attack_skill_priority != number} #配列の末尾の値を取りだす。 return data.pop end end class RPG::BaseItem #-------------------------------------------------------------------------- # 通常攻撃のスキルID候補を条件と共に取得 #-------------------------------------------------------------------------- def new_attack_skill_id #キャッシュがある場合はキャッシュを返す。 @new_attack_skill_id ||= create_new_attack_skill_id end #-------------------------------------------------------------------------- # 通常攻撃のスキルID候補を条件と共に作成 #-------------------------------------------------------------------------- def create_new_attack_skill_id result = [] note.each_line {|l| next unless /<#{ATTACK_CHANGE::WORD1}[::](\S+)>/ =~ l a = $1.to_s.split(/\s*,\s*/).inject([]) {|r,i| r.push(i)} a[0] = a[0].to_i a.push("true") if a.size == 1 result.push(a)} result end end class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # 攻撃ID優先度を指定 #-------------------------------------------------------------------------- def attack_skill_priority #キャッシュがある場合はキャッシュを返す。 @attack_skill_priority ||= /<#{ATTACK_CHANGE::WORD2}[::](\d+)>/ =~ note ? $1.to_i : 0 end end