自動戦闘 + 自動戦闘強化AI

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
日向ヒムカイ
記事: 29
登録日時: 2017年5月06日(土) 16:36

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by 日向ヒムカイ » 2017年6月05日(月) 06:07

ありがとうございます。
おかげでようやくオート戦闘出来るようになりました。

ただ恐縮ですが、あと使い方に関して3つばかり分からないところがありまして・・・
まず一番目に、291~296行目辺りのスキルタイプの設定で、
 スキルタイプの3番目以降の設定はどうやればいいのでしょうか。

二番目に、コスト制限とリスク制限の違い、というかリスク制限というのが
 ちょっとよく分からなくて・・・HPが少ない時の行動制限という意味なのでしょうか。。

三番目に、443行目の「自身が行動制約ありとして扱うステートIDの配列(加算設定)」
 の意味もちょっとよく分からなくて・・・
 行動制約ありとして扱うステートIDの配列とあるけど、デフォで設定されてるのは
 2,3,4と、どれも実際は行動制約のないものが選ばれていて (。´・ω・)?
 みたいな状態になってしまっております・・・

SBR

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by SBR » 2017年6月05日(月) 15:07

1:3番目以降の使用は想定していません。想定されていませんが仕様候補には含まれます。

2:コスト制限はHP、MP、TP消費量が一定値以上の高コストスキルを仕様候補から除外するための設定です。リスク制限は命中率や相手の反撃、魔法反射率が高すぎる場合にスキルを仕様候補から除外するための設定です。どちらも1.0に近いほど基準が緩くなりますが効率が悪くなります。2の設定はそのままの設定をおすすめします。

3:毒や命中率低下ステートなどの行動制約のないステートを治療(ステート解除)が必要な行動制約ありのステートとして扱うための設定です。設定されていないステートは治療不要と判断されます。
日向ヒムカイ
記事: 29
登録日時: 2017年5月06日(土) 16:36

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by 日向ヒムカイ » 2017年6月07日(水) 13:21

返答ありがとうございます。
設定はちょっと複雑でしたけど入れてしまえば
他のオート戦闘系よりも精度が高くて使いやすいです。
いろいろと教えて頂いて本当にありがとうございました。
にいちゃん
記事: 4
登録日時: 2017年10月21日(土) 20:53

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by にいちゃん » 2017年10月22日(日) 10:47

はじめまして。にいちゃんと申します。

スクリプトの公開をしていただき、ありがとうございます。
要望になると思いますが、PT編成(戦闘中にメンバーを変更する)に対応されているでしょうか。
私は『誰かへの宣戦布告』ブログにある『レーネさんの素材まとめ』 にある『戦闘中にPT編成 RGSS3 ももまるさんのXPスタイルバトル対応版』というスクリプトを使用します。
戦闘中にメンバーを変更すると、加入したメンバーの作戦の変更ができなくなります。
全体指示では変更できますが、個別に変更ができない状況です。
できれば、加入したメンバーの作戦も個別に変更できるようにしたいです。

お忙しいところ申し訳ありませんが、ご検討をよろしくお願いいたします。
SBR

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by SBR » 2017年11月13日(月) 03:05

お返事が遅れてしまい申し訳ありません。
こちらのスクリプトを試していただけないでしょうか?急ピッチで修正したので別に不具合が生じるかもしれません。

コード: 全て選択

#==============================================================================
# ■ 自動戦闘強化AI:戦闘用
#------------------------------------------------------------------------------
#
#■必要なスクリプト
#  ・自動戦闘強化AI 2.0.2以上
#  ・自動戦闘強化AI:メニュー用
#  ・自動戦闘コマンド
#
#
#■導入位置
#  "▼ 素材"から"▼ メイン"の範囲であればどこでも構いません。
#
#
# *このスクリプトはパーティコマンドに項目を追加する必要がない場合は導入する
#  必要はありません。
#==============================================================================

module Reinforce_Auto_AI
#==============================================================================
#                           ~↓設定ここから↓~
#==============================================================================

  #アクター選択ウィンドウのY座標
  ACTOR_WINDOW_Y                          = 0
 
  #アクター選択ウィンドウの最大表示行数
  ACTOR_WINDOW_LINE_NUMBER                = 6
 
  #アクター名のテキストの幅
  ACTOR_NAME_TEXT_WIDTH                   = 100
 
 
  #"作戦"のテキスト
  ACTOR_OPERATION_TEXT                    = "作戦:"
 
  #"作戦"のテキスト幅
  ACTOR_OPERATION_TEXT_WIDTH              = 50
 
  #"作戦"のテキストの色
  ACTOR_OPERATION_TEXT_COLOR              = Color.new(102,204,64)
 
 
  #作戦名のテキストX座標調整
  ADJUST_OPERATION_TEXT_X                 = -5
 
  #作戦名のテキストの色
  ACTOR_OPERATION_NAME_TEXT_COLOR         = Color.new(255,120,76)
 
 
  #自動戦闘開始を追加する
  ACTOR_OPERATION_BATTLE_START            = true
 
  #自動戦闘開始のテキストの色
  ACTOR_OPERATION_BATTLE_START_TEXT_COLOR = Color.new(255,255,255)
 
 
  #全体指示を追加する
  ACTOR_OPERATION_ALL_SET                 = true
 
  #全体指示のテキスト
  ACTOR_OPERATION_ALL_SET_TEXT            = "- 全体指示 -"
 
  #全体指示のテキストの色
  ACTOR_OPERATION_ALL_SET_TEXT_COLOR      = Color.new(102,204,64)

#==============================================================================
#                           ~↑設定ここまで↑~
#==============================================================================


#==============================================================================
# ■ Operation_Settings
#==============================================================================

module Operation_Settings
  #インクルード用
end


#==============================================================================
# ■ Window_Operation_Select_Actor
#==============================================================================

class Window_Operation_Select_Actor < ::Window_Command
  include Operation_Settings
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super
   
    self.y        = ACTOR_WINDOW_Y
    self.openness = 0
   
    actor_select_cancel()
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    return Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  def window_height
    return fitting_height(visible_line_number)
  end
  #--------------------------------------------------------------------------
  # ● 表示行数の取得
  #--------------------------------------------------------------------------
  def visible_line_number
    return [item_max(),ACTOR_WINDOW_LINE_NUMBER].min
  end
  #--------------------------------------------------------------------------
  # ● 設定:デフォルトの作戦
  #--------------------------------------------------------------------------
  def operation_code_0
    return {operation_name: DEAFAULT_EVALUATE_ACTOR_SETTINGS[:operation_name]}
  end
  #--------------------------------------------------------------------------
  # ●~*
  #--------------------------------------------------------------------------
  def call
    actor_select_ok()
  end
  #--------------------------------------------------------------------------
  # ● コマンドリストの作成
  #--------------------------------------------------------------------------
  def make_command_list
    battle_members = $game_party.battle_members
    battle_members.delete_if{|actor|actor.auto_battle?}
   
    @ok_handler_list = []
   
    #自動戦闘開始
    if ACTOR_OPERATION_BATTLE_START
      add_command(AUTO_COMMAND_NAME,:auto_battle_start,true)
    end
   
    #全体指示
    if ACTOR_OPERATION_ALL_SET
      method_name = :all_operation_set
      add_command(ACTOR_OPERATION_ALL_SET_TEXT,method_name,true,battle_members)
     
      @ok_handler_list << method_name
    end
   
    #個別
    battle_members.each do |actor|
      operation_code = actor.auto_operation
     
      unless operation_code
        actor.auto_operation = DEAFAULT_ACTOR_OPERATION
      end
     
      method_name = operation_code_method_name(actor.auto_operation)
     
      @ok_handler_list << actor
     
      unless respond_to?(method_name)
        actor.auto_operation = DEAFAULT_ACTOR_OPERATION
        method_name = operation_code_method_name(actor.auto_operation)
      end
     
      command_name = [actor,__send__(method_name)[:operation_name]]
      add_command(command_name,actor,true,actor)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    command_text = command_name(index)
    text_rect    = item_rect_for_text(index)
    max_width    = text_rect.width - text_rect.x
   
    if command_text.is_a?(Array)
      #アクター名
      text_rect.width = ACTOR_NAME_TEXT_WIDTH
      change_color(normal_color,true)
      draw_text(text_rect,command_text[0].name,0)
     
      #"作戦"
      text_rect.x    += text_rect.width + 20
      text_rect.width = ACTOR_OPERATION_TEXT_WIDTH
      change_color(ACTOR_OPERATION_TEXT_COLOR,true)
      draw_text(text_rect,ACTOR_OPERATION_TEXT,0)
     
      #作戦名
      text_rect.x += text_rect.width + ADJUST_OPERATION_TEXT_X
      text_rect.width = max_width - text_rect.x
      change_color(ACTOR_OPERATION_NAME_TEXT_COLOR,true)
      draw_text(text_rect,command_text[1],0)
    elsif command_text.equal?(AUTO_COMMAND_NAME)
      #自動戦闘開始
      change_color(ACTOR_OPERATION_BATTLE_START_TEXT_COLOR,true)
      draw_text(text_rect,command_text,1)
    elsif command_text.equal?(ACTOR_OPERATION_ALL_SET_TEXT)
      #全体指示
      change_color(ACTOR_OPERATION_ALL_SET_TEXT_COLOR,true)
      draw_text(text_rect,command_text,1)
    end
  end
  #--------------------------------------------------------------------------
  # ● コマンドの設定
  #--------------------------------------------------------------------------
  def setup_actor_command
    refresh()
    select_ok_handler(&@select_ok)
   
    self.height = window_height()
   
    activate()
    select(0)
    open()
  end
  #--------------------------------------------------------------------------
  # ● コマンドの選択時のハンドラを設定
  #--------------------------------------------------------------------------
  def select_ok_handler(&block)
    @ok_handler_list.each{|method_name|set_handler(method_name,self)}
    @select_ok = block
  end
  #--------------------------------------------------------------------------
  # ● 共通ハンドラを設定
  #--------------------------------------------------------------------------
  def common_handler(block)
    return ->{actor_select_cancel() ; block.()}
  end
  #--------------------------------------------------------------------------
  # ● 自動戦闘開始時のハンドラを設定
  #--------------------------------------------------------------------------
  def auto_battle_start_handler(&block)
    set_handler(:auto_battle_start,common_handler(block))
  end
  #--------------------------------------------------------------------------
  # ● コマンド選択キャンセル時のハンドラを設定
  #--------------------------------------------------------------------------
  def select_cancel_handler(&block)
    set_handler(:cancel,common_handler(block))
  end
  #--------------------------------------------------------------------------
  # ● コマンド選択
  #--------------------------------------------------------------------------
  def actor_select_ok
    @select_ok.() if @select_ok
  end
  #--------------------------------------------------------------------------
  # ● コマンド選択キャンセル
  #--------------------------------------------------------------------------
  def actor_select_cancel
    unselect()
    deactivate()
    close()
  end
end

end


#==============================================================================
# ■ Window_PartyCommand
#------------------------------------------------------------------------------
#  バトル画面で、戦うか逃げるかを選択するウィンドウです。
#==============================================================================

class Window_PartyCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● コマンドリストの作成
  #--------------------------------------------------------------------------
  alias _make_command_list_reinforce_auto_ai make_command_list
  def make_command_list
    _make_command_list_reinforce_auto_ai()
    add_command(Reinforce_Auto_AI::MENU_COMMAND_NAME,:select_operation,true)
  end
end


#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 全ウィンドウの作成
  #--------------------------------------------------------------------------
  alias _create_all_windows_reinforce_auto_ai create_all_windows
  def create_all_windows
    _create_all_windows_reinforce_auto_ai()
    create_operation_select_actor_window()
    create_command_operation()
  end
  #--------------------------------------------------------------------------
  # ● パーティコマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias _create_party_command_window_reinforce_auto_ai create_party_command_window
  def create_party_command_window
    _create_party_command_window_reinforce_auto_ai()
   
    @party_command_window.set_handler(:select_operation,->{
      @actor_select_operation_window.setup_actor_command
    })
  end
  #--------------------------------------------------------------------------
  # ● 作戦選択用アクターウィンドウの作成
  #--------------------------------------------------------------------------
  def create_operation_select_actor_window
    @actor_select_operation_window =
      Reinforce_Auto_AI::Window_Operation_Select_Actor.new(0,0)
   
    @actor_select_operation_window.select_ok_handler do
      select_actor = @actor_select_operation_window.current_ext
      select_actor = select_actor.index unless select_actor.is_a?(Array)
     
      @operation_window.setup_operation_command(select_actor)
    end
   
    if Reinforce_Auto_AI::ACTOR_OPERATION_BATTLE_START
      @actor_select_operation_window.auto_battle_start_handler do
        auto_battle_start_handler()
      end
    end
   
    @actor_select_operation_window.select_cancel_handler do
      @party_command_window.activate
    end
  end
  #--------------------------------------------------------------------------
  # ● 作戦ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_command_operation
    @operation_window = Reinforce_Auto_AI::Window_AI_Operation.new(0,0)
   
    if Reinforce_Auto_AI::MENU_COORDINATE_CENTER
      @operation_window.x = (Graphics.width - @operation_window.width) / 2
      @operation_window.y = (Graphics.height - @operation_window.height) / 2
    end
   
    @operation_window.select_ok_handler do
      @actor_select_operation_window.refresh
      @actor_select_operation_window.activate
    end
   
    @operation_window.select_cancel_handler do
      @actor_select_operation_window.activate
    end
  end
end
にいちゃん
記事: 4
登録日時: 2017年10月21日(土) 20:53

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by にいちゃん » 2017年11月18日(土) 06:09

SBR殿

お返事が遅れてしまい、申し訳ありません。
確認をさせていただいたところ、無事に動作確認を致しました。
加入したアクターも個別に作戦変更ができました。
お忙しいところ、ご対応をしていただき、ありがとうございました。
今後もよろしくお願いいたします。
SBR

自動戦闘強化AI 2.0.4α

投稿記事by SBR » 2017年11月27日(月) 03:47

2.0.4試作版(α)です。前バージョンのバグ修正、処理速度の向上を図りました。
動作チェックを行う暇がないので試作版として公開します。

11/28 テスト用のイベントの不具合の修正。(スクリプトの問題ではありません)

auto24a.zip
(1.39 MiB) ダウンロード数: 123 回
rarusu
記事: 1
登録日時: 2019年12月06日(金) 06:45

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by rarusu » 2019年12月06日(金) 06:47

サイドビューと併用するとめちゃめちゃ面白いけれど
重いです
なんとかならないでしょうか。。。
アイラ
記事: 1
登録日時: 2022年1月22日(土) 14:40

Re: 自動戦闘 + 自動戦闘強化AI

投稿記事by アイラ » 2022年1月22日(土) 14:46

はじめまして。
こちらのスクリプトを導入させていただいたのですが、

#攻撃可能対象が1体だけの時は全体攻撃と対象がランダムな攻撃を禁止する
limitation_whole_attack: false,

このようにやっても、敵が一体だと全体攻撃をしてくれません。

あと、通常攻撃も自動だとしてくれないのですが、どうしたらいいですか?

“Ace:スクリプト素材(RGSS3)” へ戻る