rebf-gaiden/Scripts/_ver1.4.rb
2025-04-26 17:06:34 -05:00

151 lines
No EOL
6.6 KiB
Ruby
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=begin
トリス 選択肢不具合修正 ver1
スクリプト「選択肢拡張」の不具合
・1文章の表示→2選択肢→3文章の表示→4選択肢
の順番でイベントが実行された場合、4選択肢が表示されない
原因
選択肢を開始する時の処理で、
 「選択肢ウインドウが完全に閉じていなければ、選択肢開始をキャンセル」としてある
『決定キーを素早く連打する』か『メッセージスキップのキーを押す』ことによって
 文章を早送りすると「2選択肢で出したウインドウが閉じている途中」の時点で
 4選択肢イベントを実行し、まだウインドウが完全に閉じていないためキャンセルされる
対処 どちらか選択
①選択肢を開始する時の「完全に閉じていなければキャンセル」をなくす
 ただしこのキャンセルの意図が分からないため、
 なくすことで別の不具合が起きる可能性がある(多分ないと思う)
②選択肢の決定後に「選択肢ウインドウが完全に閉じるまで、イベント進行を待機」する
 これで「ウインドウが閉じる途中で4選択肢イベントを実行」することはない
 閉じるのを待つ分、少し動きがもたつく
=end
module MessageSkip
# 対処方法
# 1: 「完全に閉じていなければキャンセル」をなくす 不具合の可能性あり
# 2: 選択肢の後で「選択肢ウインドウが完全に閉じるまで、イベント進行を待機」
MODE = 2
end
=begin
補足A
・1文章の表示→2選択肢→3文章の表示→4選択肢
の順番でのみ不具合が起きる理由
・2選択肢→3文章の表示
の順番でイベントが実行された場合、
 「選択肢ウインドウを閉じる」のと「次の文章を表示する」のを並行して行う
・1文章の表示→2選択肢
の順番でイベントが実行された場合、
 「文章ウインドウを出したまま選択肢ウインドウを出す」
イベント全体が
・選択肢→文章の表示→選択肢
なら、「文章ウインドウを開く」間に「選択肢ウインドウを閉じる」が完了するため
 どんなに早送りしても「選択肢が完全に閉じる前に次の選択肢イベントを実行」しない
・1文章の表示→2選択肢→3文章の表示→4選択肢
なら、「2選択肢を選択し、選択肢ウインドウが閉じ始める」段階では
 「1文章ウインドウが開いたまま」なので、同時に「3文章の内容を表示」が始まり
 早送りすることで「選択肢が完全に閉じる前に次の選択肢イベントを実行」が可能
補足B
中央のおっさんも
・1文章の表示→2選択肢→3文章の表示→4選択肢
の順番になっているのに不具合が起きない理由
下の兵士も中央のおっさんも、下から話せば正常で、上から話せば不具合が起きる
スクリプト「吹きだしウィンドウVXAce」が原因 他素材との競合かどうかは不明
『上方向に吹き出しが出ると、文章が連続していてもウインドウを閉じて開きなおす』
下から話しかける(上方向に吹き出しが出る)場合のみ、
 ・文章の表示→文章の表示
の順番でも「文章ウインドウを閉じてから、また開いて次の文章を表示」となる
そして間に選択肢が入って
 ・1文章の表示→2選択肢→3文章の表示
の順番になると、選択中は1文章ウインドウは出ており、決定した後に
  「2選択肢ウインドウを閉じる」と同時に「1文章ウインドウが開いていれば閉じる」
  両方のウインドウが閉じてから、3文章ウインドウを開きなおして3文章の内容を表示
 つまり「選択肢と文章閉じる→文章開く」
となる
このため「3文章を表示開始する時には、すでに2選択肢ウインドウが閉じている」
という点では対処②と同様であり、4選択肢の不具合が起きない
なお対処②とこの仕様が合わさると
・「2選択肢ウインドウを閉じる」で完全に閉じるまで「対処②の機能で待機」
・2選択肢ウインドウが完全に閉じた後、「1文章ウインドウが開いていれば閉じる」
・1文章ウインドウが完全に閉じた後、3文章ウインドウを開いて、3文章の内容を表示
となり、「選択肢閉じる→文章閉じる→文章開く」で動きのもたつきが大きい
=end
if MessageSkip::MODE == 1
#==============================================================================
# ■ Window_ChoiceList
#==============================================================================
class Window_ChoiceList
#--------------------------------------------------------------------------
# ☆ 入力処理の開始
#--------------------------------------------------------------------------
def start
last_choices = @list.collect {|c| c[:name] }
update_placement
refresh
unless WdTk::ChoiceEX::Store && last_choices == $game_message.choices
select(0)
end
open
activate
end
end
end
if MessageSkip::MODE == 2
#==============================================================================
# ■ Window_Message
#==============================================================================
class Window_Message < Window_Base
#--------------------------------------------------------------------------
# ● 選択肢の入力処理
#--------------------------------------------------------------------------
def input_choice
@choice_window.start
Fiber.yield while @choice_window.active or !@choice_window.close?
end
#--------------------------------------------------------------------------
# ● 数値の入力処理
#--------------------------------------------------------------------------
def input_number
@number_window.start
Fiber.yield while @number_window.active or !@number_window.close?
end
#--------------------------------------------------------------------------
# ● アイテムの選択処理
#--------------------------------------------------------------------------
def input_item
@item_window.start
Fiber.yield while @item_window.active or !@item_window.close?
end
end
end