【解決済】戦闘終了メッセージの後にメッセージ表示

wan1313
記事: 15
登録日時: 2021年11月19日(金) 17:38

【解決済】戦闘終了メッセージの後にメッセージ表示

投稿記事by wan1313 » 2022年1月09日(日) 20:45

連日投稿申し訳ありません…
戦闘終了メッセージの後にメッセージ表示について

自分がやろうとしていることが
敵を倒したときに、敵ごとに能力値が上昇
(敵Aを倒すと攻撃力が+1/敵Bを倒すと魔法防御が+2…など)する仕組みなのですが、

戦闘終了メッセージ後、もしくはそのメッセージに着けて

○○は勝利した
経験値00Exを手に入れた
『攻撃力が+00上がった』

という風に戦闘終了メッセージ後に
敵個別毎に違うメッセージを入れたいです。
(『』内を倒した敵によって変更したいです)

戦闘終了メッセージの前にメッセージ表示や、
マップへ戻った状態でメッセージ表示はできたのですが

戦闘終了メッセージの後に着ける方法が分かりませんでした。

もしお分かりの方いらっしゃいましたら教えていただけますでしょうか。
宜しくお願い致します。
最後に編集したユーザー wan1313 on 2022年1月11日(火) 08:41 [ 編集 1 回目 ]

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

Re: 戦闘終了メッセージの後にメッセージ表示

投稿記事by 名無し蛙 » 2022年1月10日(月) 01:20

wait_for_messageが足りてないとかその辺じゃないですか
BattleManagerのこの部分に処理を加える必要がある、という事までは分かりますよね?

コード: 全て選択

  #--------------------------------------------------------------------------
  # ● 勝利の処理
  #--------------------------------------------------------------------------
  def self.process_victory
    play_battle_end_me
    replay_bgm_and_bgs
    $game_message.add(sprintf(Vocab::Victory, $game_party.name))
    display_exp
    gain_gold
    gain_drop_items
    gain_exp
    SceneManager.return
    battle_end(0)
    return true
  end

SceneManager.returnまで通った時点でシーンがマップに返ってしまいますが
wait_for_messageを掛ける事で一時停止する事が出来ます。

コード: 全て選択

class << BattleManager
  #--------------------------------------------------------------------------
  # ○ 勝利の処理
  #--------------------------------------------------------------------------
  def process_victory
    play_battle_end_me
    replay_bgm_and_bgs
    $game_message.add(sprintf(Vocab::Victory, $game_party.name))
    display_exp
    gain_gold
    gain_drop_items
    gain_exp
    gain_params # 処理の追加
    SceneManager.return
    battle_end(0)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 追加能力値の獲得と表示
  #--------------------------------------------------------------------------
  def gain_params
    $game_message.add("能力値の上昇")
    wait_for_message
  end
end

追加するとしたらこんな感じですかね
余談ですけどmoduleの処理をaliasしたい場合、

コード: 全て選択

# alias不可の例
module BattleManager
  alias _old_process_victory self.process_victory
  def self.process_victory
    _old_process_victory
  end
end

という書き方は出来ないですけど以下の記法ならalias可能です。
今回はaliasしてないですけどmoduleを改造する時は基本的にこちらの書き方の方が良いと思いますね。

コード: 全て選択

# alias可能な例
class << BattleManager
  alias _old_process_victory process_victory
  def process_victory
    _old_process_victory
  end
end

module BattleManager
  class << self
    alias _old_process_victory process_victory
    def process_victory
      _old_process_victory
    end
  end
end
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 戦闘終了メッセージの後にメッセージ表示

投稿記事by TOMO » 2022年1月10日(月) 15:13

多分こんな感じかな?

コード: 全て選択

class << BattleManager
  #--------------------------------------------------------------------------
  # ● 獲得した経験値の表示
  #--------------------------------------------------------------------------
  alias ex_battle_end_param_up_display_exp display_exp
  def display_exp
    ex_battle_end_param_up_display_exp
    params = [0] * 8
    $game_troop.dead_members.each do |member|
      if member.enemy.note.match(/<戦闘終了時能力値上昇:(\d+),(\S+)>/i)
        params[$1.to_i] += $2.to_i
      end
    end
    params.each_with_index do |value, id|
      next if value == 0
      $game_party.battle_members.each do |member|
        member.add_param(id, value)
      end
      text = sprintf("%sが%d上がった!", Vocab::param(id), value)
      $game_message.add(text)
    end
#~     wait_for_message
  end
end
敵キャラのメモ欄に「<戦闘終了時能力値上昇:id,value>」と書いて下さい
(idは能力値ID(0~7)、valueは能力値の上昇量)

wait_for_messageが必要なようならコメントアウトを外してください

ちなみに上昇するのは戦闘メンバーだけにしてますが、
控えも含むなら「battle_members」を「all_members」にして下さい
また生存者だけなら「alive_members」で可能です
wan1313
記事: 15
登録日時: 2021年11月19日(金) 17:38

Re: 戦闘終了メッセージの後にメッセージ表示

投稿記事by wan1313 » 2022年1月11日(火) 08:41

>名無し蛙様
ご回答ありがとうございます。
記載忘れですみません…当方スクリプトの知識が無く、分かりますよね?の段階で分かりませんでした…
色々丁寧に記載していただいたのに申し訳ないです…今後の参考にさせて頂きます!

>TOMO様
コード書いていただきありがとうございます!
試してみた所 すごく理想通りに表示されました…!
メッセージ表示だけでなく能力値の上昇の箇所まで制作して頂きすみません…ありがとうございます!

“VX / Ace:質問” へ戻る