最近、選択した対象に即座に呪文を唱え、その後 caster にターンを返すスクリプトを作成しました。コードは機能しますが、発動直後に「攻撃」または「スキル」コマンドを選択すると、以下の視覚的なバグが発生します。
コマンドウィンドウがずれた状態のままになり、次のターンの開始まで、または「X」を押して戦闘/逃走メニューのオプションが表示されるまで戻りません。この原因を突き止めるために数日間試行錯誤しましたが、ほとんど進展がありませんでしたので、ご助力いただければ大変感謝いたします。自動攻撃を発動するスクリプトは以下の通りです(問題に関連しない部分は省略しています):
class Scene_Battle < Scene_Base
def autoSend
item = BattleManager.actor.input.item
return unless item.is_a?(RPG::Skill) && item.canAutoSend
@ subjectsubject = BattleManager.actor
execute_action
process_action_end
process_event # 発生しうる戦闘イベントをすべて起動する。
@ status_window.unselect
@ status_window.open
@ subject.input.clear
subject = nil
prior_command # ターンを返す
end
Baz
2026 年 10 月 26 日午後 6:48
2
戦闘/逃走ウィンドウは閉じているにもかかわらず、まだアクティブな状態になっているのでしょうか?
デフォルトの Scene_Battle では、update_info_viewport はパーティーコマンドウィンドウがアクティブのときは画面下部全体をある方向にスライドさせ、アクターコマンドウィンドウがアクティブのときは逆方向にスライドさせます。両方が同時にアクティブの場合、2つの移動がフレームごとに相殺され、位置はそのまま固定されます。
これが、攻撃やスキルを選択した時点でしか表示されない理由かもしれません。コマンドを選択するとアクターコマンドウィンドウが非アクティブになるため、残ったのはパーティーコマンドウィンドウだけになり、それがすべて自分の側に引き寄せます。xを押すとパーティーコマンドウィンドウが再びセットアップされ、戦闘を選ぶと通常のやり方でそれが非アクティブになります。これによりクリアされるのがその理由です。
caster が最初のアクターである場合、prior_command は start_party_command_selection に進み、パーティーコマンドウィンドウをアクティブにします。start_actor_command_selection はそれを閉じるだけで、非アクティブにはしません。そのため、もしあなたのコードがその後 caster にアクターコマンドを渡す場合、パーティーウィンドウはバックグラウンドでアクティブなままになる可能性があります。
以下のコードを試してみてください。問題が解消するかもしれません:
class Scene_Battle < Scene_Base
alias autosend_start_actor_command_selection start_actor_command_selection
def start_actor_command_selection
@party_command_window.deactivate
autosend_start_actor_command_selection
end
end
本当にどうもありがとう(またしてもLOL)!これで抱えていた問題が解決しました。