【解決済み】【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する

honoka
記事: 20
登録日時: 2017年10月19日(木) 14:42

【解決済み】【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する

投稿記事by honoka » 2022年9月20日(火) 19:23

結果的に質問というよりスクリプトの要求になってしまうと思うのですが、失礼いたします。
表題の通り、全滅したときにDQの馬車システムのように戦闘メンバーと控えメンバーを交代させて戦闘を継続させ、控えメンバーを含めて全員が全滅したときに戦闘を終了させるようにしたいと思っています。
そのため敗北の処理を改変してコモンイベントを起動させるようにしたのですが、どうも敗北の処理が何度も行われているようで上手くいきません。
下記が全然わからないなりに改変してみたスクリプトなのですが、どのようにすれば正しく動いてくれるのでしょうか。
よろしくお願いいたします。

module BattleManager
 def self.process_defeat
  if $game_switches[20] == true ※コモンイベントで全滅を確認したときスイッチを押しています
   wait_for_message
   revive_battle_members
   replay_bgm_and_bgs
   SceneManager.return
   battle_end(2)
   return true
  else
   $game_temp.reserve_common_event(1)
   return true
  end
 end
end
最後に編集したユーザー honoka on 2022年10月18日(火) 08:15 [ 編集 3 回目 ]

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する

投稿記事by 名無し蛙 » 2022年9月20日(火) 22:30

ドラクエの馬車システムの仕様の仔細はよく知らないんですけどこんな感じですか?

コード: 全て選択

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 前線交代
  #--------------------------------------------------------------------------
  def swap_line
    @actors.sort_by!{|actor_id| $game_actors[actor_id].alive? ? 0 : 1}
    $game_player.refresh
  end
end

class << BattleManager
  #--------------------------------------------------------------------------
  # ○ 敗北の処理
  #--------------------------------------------------------------------------
  alias :_old_process_defeat :process_defeat
  def process_defeat
    return _old_process_defeat if $game_party.all_members.all?{|member| member.dead?}
    $game_party.swap_line
    $game_message.add("仲間達が馬車から飛び出した!")
    return false
  end
end
honoka
記事: 20
登録日時: 2017年10月19日(木) 14:42

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する

投稿記事by honoka » 2022年9月20日(火) 23:09

非常に早く対応していただいてありがとうございます。
まさか交代部分まで作っていただけるとは思いませんでした。
運用してみたところ、文句の付け所の無い挙動をしてくれました。
本当にありがとうございました!
honoka
記事: 20
登録日時: 2017年10月19日(木) 14:42

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する[追記]

投稿記事by honoka » 2022年10月17日(月) 21:24

申し訳ありません。以前こちらのトピックにてスクリプトを提供していただいた者です。
今さら問題(というのも自分勝手で、頂いたスクリプトに問題は無いのですが)を確認してしまったのでお願いさせていただきます。

現在私が制作中の作品では、HPは残っているが行動できず、ターン経過でも治らないステートを扱っていました。
DQでいう麻痺、FFでいう石化です。
これは星潟様のスクリプト「特殊死亡・全滅特徴」を使用し、戦闘不能と同等の扱いになるようにしていたのですが、提供していただいたスクリプトでは(当然のことですが)こちらに対応できていなかったことに今頃になってようやく気付きました。

一ヶ月も経ってから、また、以前は文句なしと言っておきながら、非常に申し訳なく誠に勝手なことですが、ご対応いただくことは可能でしょうか。
よろしくお願いいたします。


星潟様のサイト:http://artificialprovidence.web.fc2.com/
左のフレームから RGSS3素材 → 能力拡張 → 特殊死亡・全滅特徴
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する[追記]

投稿記事by 名無し蛙 » 2022年10月18日(火) 00:56

星潟氏のスクリプト内容を拝見しましたが「対応」というのがよく分からないです。
まず最初の確認ですけど<死亡ステート>ではなく<全滅ステート>を利用している、という事ですか?
次に前衛が全員麻痺すると全滅判定に移行するのでそれを回避したい、という事ですか?
この状態を回避する場合は
①全員死亡になるまで戦闘状態を継続する
②麻痺したアクター含めて後衛と交代させる
これもどちらが正しいのでしょうか?
更に、このスクリプトを入れているという事は
後衛含めて全員麻痺になった時点で全滅処理に移行したいという事ですか?
以上、現時点では仕様が不明瞭なのでハッキリした回答は出来ませんね。

※書いてる内に気になる点が出てきたので結構書き直してますが多分これで最後です
honoka
記事: 20
登録日時: 2017年10月19日(木) 14:42

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する[追記]

投稿記事by honoka » 2022年10月18日(火) 07:03

名無し蛙様、また返信していただきありがとうございます。
確かに仕様説明が全然されていませんでしたね……申し訳ありません。

おっしゃる通り、<全滅ステート>を利用しており、<死亡ステート>を使用する予定はありません。
また②の方向で進めたいと思っており、「前衛全員が戦闘不能、または麻痺した場合に後衛と交代」させ、
「後衛含めて全員が戦闘不能、または麻痺になった時点で全滅処理に移行したい」と思います。

言葉足らずですみませんでした。これで説明は足りているでしょうか……
度々申し訳ありませんが、よろしくお願いいたします。
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する[追記]

投稿記事by 名無し蛙 » 2022年10月18日(火) 07:53

それなら評価関数と全滅判定を適当に弄るだけで良い気がしますね。
動作確認はしてないですけどこんな感じですか。

コード: 全て選択

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 前線交代
  #--------------------------------------------------------------------------
  def swap_line
    i = 0
    @actors.sort_by!{|actor_id|
      [
        $game_actors[actor_id].dead? ? 1 : 0,
        $game_actors[actor_id].special_dead2? ? 1 : 0,
        i += 1
      ]
    }
    $game_player.refresh
  end
end

class << BattleManager
  #--------------------------------------------------------------------------
  # ○ 敗北の処理
  #--------------------------------------------------------------------------
  alias :_old_process_defeat :process_defeat
  def process_defeat
    return _old_process_defeat if $game_party.all_members.all?{|member| member.dead? || member.special_dead2?}
    $game_party.swap_line
    $game_message.add("仲間達が馬車から飛び出した!")
    return false
  end
end

ついでに安定ソートに変更しました。
前衛が全滅した時に
「死亡者降順>全滅ステート持ち降順>変更前の並び昇順」の優先順位でソートされる、と思います。
honoka
記事: 20
登録日時: 2017年10月19日(木) 14:42

Re: 【RGSS3】全滅したとき、控えメンバーと交代して戦闘を継続する[追記]

投稿記事by honoka » 2022年10月18日(火) 08:16

またも手早く対応していただきありがとうございます。
テストしてみたところ、問題無く動作しているようでした。
この度はお手数をおかけして申し訳ありませんでした。
本当にありがとうございました!

“VX / Ace:質問” へ戻る