連日投稿申し訳ありません…
戦闘終了メッセージの後にメッセージ表示について
自分がやろうとしていることが
敵を倒したときに、敵ごとに能力値が上昇
(敵Aを倒すと攻撃力が+1/敵Bを倒すと魔法防御が+2…など)する仕組みなのですが、
戦闘終了メッセージ後、もしくはそのメッセージに着けて
○○は勝利した
経験値00Exを手に入れた
『攻撃力が+00上がった』
という風に戦闘終了メッセージ後に
敵個別毎に違うメッセージを入れたいです。
(『』内を倒した敵によって変更したいです)
戦闘終了メッセージの前にメッセージ表示や、
マップへ戻った状態でメッセージ表示はできたのですが
戦闘終了メッセージの後に着ける方法が分かりませんでした。
もしお分かりの方いらっしゃいましたら教えていただけますでしょうか。
宜しくお願い致します。
【解決済】戦闘終了メッセージの後にメッセージ表示
【解決済】戦闘終了メッセージの後にメッセージ表示
最後に編集したユーザー inu13 [ 2022年1月11日(火) 08:41 ], 累計 1 回
Re: 戦闘終了メッセージの後にメッセージ表示
wait_for_messageが足りてないとかその辺じゃないですか
BattleManagerのこの部分に処理を加える必要がある、という事までは分かりますよね?
SceneManager.returnまで通った時点でシーンがマップに返ってしまいますが
wait_for_messageを掛ける事で一時停止する事が出来ます。
追加するとしたらこんな感じですかね
余談ですけどmoduleの処理をaliasしたい場合、
という書き方は出来ないですけど以下の記法ならalias可能です。
今回はaliasしてないですけどmoduleを改造する時は基本的にこちらの書き方の方が良いと思いますね。
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
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してないですけど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
Re: 戦闘終了メッセージの後にメッセージ表示
多分こんな感じかな?
敵キャラのメモ欄に「<戦闘終了時能力値上昇:id,value>」と書いて下さい
(idは能力値ID(0~7)、valueは能力値の上昇量)
wait_for_messageが必要なようならコメントアウトを外してください
ちなみに上昇するのは戦闘メンバーだけにしてますが、
控えも含むなら「battle_members」を「all_members」にして下さい
また生存者だけなら「alive_members」で可能です
コード: 全て選択
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は能力値ID(0~7)、valueは能力値の上昇量)
wait_for_messageが必要なようならコメントアウトを外してください
ちなみに上昇するのは戦闘メンバーだけにしてますが、
控えも含むなら「battle_members」を「all_members」にして下さい
また生存者だけなら「alive_members」で可能です
現在サポート終了中
Re: 戦闘終了メッセージの後にメッセージ表示
>名無し蛙様
ご回答ありがとうございます。
記載忘れですみません…当方スクリプトの知識が無く、分かりますよね?の段階で分かりませんでした…
色々丁寧に記載していただいたのに申し訳ないです…今後の参考にさせて頂きます!
>TOMO様
コード書いていただきありがとうございます!
試してみた所 すごく理想通りに表示されました…!
メッセージ表示だけでなく能力値の上昇の箇所まで制作して頂きすみません…ありがとうございます!
ご回答ありがとうございます。
記載忘れですみません…当方スクリプトの知識が無く、分かりますよね?の段階で分かりませんでした…
色々丁寧に記載していただいたのに申し訳ないです…今後の参考にさせて頂きます!
>TOMO様
コード書いていただきありがとうございます!
試してみた所 すごく理想通りに表示されました…!
メッセージ表示だけでなく能力値の上昇の箇所まで制作して頂きすみません…ありがとうございます!