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

しろう
記事: 34
登録日時: 2020年1月25日(土) 17:40

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

投稿記事by しろう » 2020年2月10日(月) 23:27

お世話になってます。
また質問させて下さい。

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

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

もしあればその方法を教えて頂きたいです。
宜しくお願いします。
最後に編集したユーザー しろう on 2020年2月13日(木) 02:31 [ 編集 1 回目 ]

ぽんぽこねるそん
記事: 53
登録日時: 2018年10月26日(金) 12:24

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

投稿記事by ぽんぽこねるそん » 2020年2月12日(水) 03:42

行動制約で行動がキャンセルされるのを変えるには

コード: 全て選択

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

こんな感じで行動する時に自動戦闘になっていたら
その時に自動戦闘の行動を作ってやればいいかと思います。
しろう
記事: 34
登録日時: 2020年1月25日(土) 17:40

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

投稿記事by しろう » 2020年2月13日(木) 02:30

ありがとうございます!
挙動の確認出来ました。

“VX / Ace:質問” へ戻る