ページ 11

【解決済】 VXAce ステートの行動制約について

Posted: 2020年2月10日(月) 23:27
by しろう
お世話になってます。
また質問させて下さい。

行動制約のあるステート、例えば「行動できない」眠りや「味方を攻撃する」混乱などは
戦闘中、自分の行動順番が来る前に掛かると本来の行動がキャンセルされてそのターンは何もしませんよね。

「行動できない」制約ならこれでも良いのですが「味方を攻撃する」や特徴で自動戦闘を付けているステートは掛かったターン中にも制約行動や自動戦闘行動を反映させたいのですが方法はあるでしょうか?

もしあればその方法を教えて頂きたいです。
宜しくお願いします。

Re: VXAce ステートの行動制約について

Posted: 2020年2月12日(水) 03:42
by ぽんぽこねるそん
行動制約で行動がキャンセルされるのを変えるには

コード: 全て選択

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 行動制約が生じたときの処理
  #--------------------------------------------------------------------------
  def on_restrict
    clear_actions unless movable?
    states.each do |state|
      remove_state(state.id) if state.remove_by_restriction
    end
  end
end
こんな感じで戦闘行動のクリアに対して条件を付ければいいかと思います。
上の例だと行動不能ならクリアするようにしています。

自動戦闘は

コード: 全て選択

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 戦闘行動の処理
  #--------------------------------------------------------------------------
  def process_action
    return if scene_changing?
    if !@subject || !@subject.current_action
      @subject = BattleManager.next_subject
      @subject.make_actions if @subject && @subject.actor? && @subject.auto_battle?
    end
    return turn_end unless @subject
    if @subject.current_action
      @subject.current_action.prepare
      if @subject.current_action.valid?
        @status_window.open
        execute_action
      end
      @subject.remove_current_action
    end
    process_action_end unless @subject.current_action
  end
end
こんな感じで行動する時に自動戦闘になっていたら
その時に自動戦闘の行動を作ってやればいいかと思います。

Re: VXAce ステートの行動制約について

Posted: 2020年2月13日(木) 02:30
by しろう
ありがとうございます!
挙動の確認出来ました。