Trace beta probe phases for live crash diagnosis

This commit is contained in:
shen
2026-09-24 01:02:27 -07:00
parent a57c83dd71
commit 8b593261a9
+7
View File
@@ -61,6 +61,7 @@ func _finish(output: String, report: Dictionary) -> void:
# PythonUISurface observes app.Exit, stops the interpreter and ends this process.
func _run() -> void:
printerr("BETA_STAGE: start")
var output := OS.get_environment("MT_BETA_OUTPUT")
if output.is_empty() or not output.is_absolute_path():
printerr("BETA_PROBE: MT_BETA_OUTPUT must be an absolute directory")
@@ -88,6 +89,7 @@ func _run() -> void:
+ "assert isinstance(_stream.curPhaseWindow, introLogin.LoginWindow)")), "login_window"):
_finish(output, report)
return
printerr("BETA_STAGE: login_window")
if not _check(_py("import os\n"
+ "_env = os.environ\n"
+ "_slot = int(_env.get('MT_LIVE_SLOT', '0'))\n"
@@ -109,11 +111,13 @@ func _run() -> void:
_finish(output, report)
return
_key(KEY_ENTER, 0)
printerr("BETA_STAGE: login_submitted")
var selecting := await _until(30, func(): return _py(
"assert isinstance(_stream.curPhaseWindow, introSelect.SelectCharacterWindow)"))
if not _check(selecting, "character_select"):
_finish(output, report)
return
printerr("BETA_STAGE: character_select")
if not _check(_py("import net\n"
+ "assert net.GetAccountCharacterSlotDataString(_slot, net.ACCOUNT_CHARACTER_SLOT_NAME)\n"
+ "_stream.curPhaseWindow.SelectSlot(_slot)\n"
@@ -125,12 +129,14 @@ func _run() -> void:
if not _check(in_game, "game_window"):
_finish(output, report)
return
printerr("BETA_STAGE: game_window")
var world: Node = get_parent().get_node("Python3DSurface")
_check(await _until(10, func(): return world.draw_count > 0), "character_draws")
_check(not Metin2PythonHost.current_map_name().is_empty(), "map_selected")
_check(int(world.terrain_report.get("chunks_splatted", 0)) > 0, "terrain_textured")
_check(_py("assert net.IsConnect()"), "network_connected")
if _check(_py("import player\n_beta_start_pos = player.GetMainCharacterPosition()"), "movement_start_position"):
printerr("BETA_STAGE: move_start")
_key_state(KEY_UP, 0, true)
await get_tree().create_timer(1.5).timeout
_key_state(KEY_UP, 0, false)
@@ -138,6 +144,7 @@ func _run() -> void:
_check(_py("_beta_end_pos = player.GetMainCharacterPosition()\n"
+ "assert abs(_beta_end_pos[0] - _beta_start_pos[0])"
+ " + abs(_beta_end_pos[1] - _beta_start_pos[1]) > 20"), "movement_position_changed")
printerr("BETA_STAGE: move_end")
# Let the loading fade finish before assessing what a player actually sees.
await get_tree().create_timer(2.0).timeout
report["draw_count"] = world.draw_count