From 35918f24f1a3cd1cec8732eeb9ba389311ac1d31 Mon Sep 17 00:00:00 2001 From: Golumpa Date: Wed, 19 Aug 2026 11:37:46 +0100 Subject: [PATCH] Improve history and achievement export guidance --- src/nte_history_exporter/console.py | 42 ++++++++++--------- .../live_capture/runner.py | 30 +++++++------ 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/nte_history_exporter/console.py b/src/nte_history_exporter/console.py index cb50cc4..3a7908c 100644 --- a/src/nte_history_exporter/console.py +++ b/src/nte_history_exporter/console.py @@ -62,7 +62,7 @@ def print_banner() -> None: print() print(rule("=")) print(style(f" NTE History Exporter v{EXPORTER_VERSION}", BOLD, CYAN)) - print(style(f" {GAME_NAME} pull history -> tracker JSON", DIM)) + print(style(f" {GAME_NAME} history and achievements -> JSON", DIM)) print(style(f" {REPOSITORY_URL}", DIM)) heart = "❤️" if (getattr(sys.stdout, "encoding", None) or "").lower().replace("-", "") == "utf8" else "<3" print(style(" Created with ", DIM) + style(heart, RED) + style(" by Golumpa", DIM)) @@ -75,27 +75,29 @@ def print_live_instructions(local_ip: str, backend: str = "windows_raw", detail: backend_detail = f" ({detail})" if detail and detail != local_ip else "" print(style(f" Capture backend: {backend}{backend_detail}", DIM)) print() - print(style(" How to export your pull history", BOLD)) - print(" 1. For automatic user UID detection, start this tool") - print(" before pressing Start on the game's main menu.") - print(" Already in game? You can still capture history;") - print(" the tool will ask for your UID if it cannot detect it.") - print(" 2. Open a supported history screen:") - print(style(" Monopoly > Standard Board history", CYAN)) - print(style(" Monopoly > Limited Character Board history", CYAN)) - print(style(" Gashapon > Arc Miracle Box history", CYAN)) - print(style(" Gashapon > Mystery Box history", CYAN)) - print(" 3. Start at page 1 and scroll down through every page") - print(" you want exported.") - print(" 4. Scroll one page past where you plan to stop so the") - print(" last pull group can be confirmed as complete.") - print(" 5. You can open several boards in the same session.") + print(style(" Before you begin", BOLD)) + print(" Start this exporter before pressing Start on the game's") + print(" main menu. This lets it capture your achievements and") + print(" detect your account UID and server automatically.") print() - print(style(" Achievement export", BOLD)) - print(" Start the exporter before launching the game. Achievements") - print(" loaded at login are captured automatically.") + print(" Already in game? Pull history still works, but achievement") + print(" capture requires restarting the game. Missing account details") + print(" will be requested when your exports are saved.") print() - print(style(" Waiting for history pages... press any key here when done.", BOLD, GREEN)) + print(style(" Pull history", BOLD)) + print(" Open a supported history screen, start at page 1, then") + print(" scroll through every page you want to export. Go one page") + print(" further so the exporter can confirm the final pull group.") + print() + print(style(" Monopoly:", DIM) + " Standard Board or Limited Character Board") + print(style(" Gashapon:", DIM) + " Arc Miracle Box or Mystery Box") + print(style(" You can capture more than one board in the same session.", DIM)) + print() + print(style(" Achievements", BOLD)) + print(" Your completed achievements are captured automatically when") + print(" you log in after following the step above.") + print() + print(style(" Ready - use the game, then press any key here when finished.", BOLD, GREEN)) print(rule()) diff --git a/src/nte_history_exporter/live_capture/runner.py b/src/nte_history_exporter/live_capture/runner.py index 7bf94e3..904d1a9 100644 --- a/src/nte_history_exporter/live_capture/runner.py +++ b/src/nte_history_exporter/live_capture/runner.py @@ -154,13 +154,6 @@ def run_live_capture( stats = capture.stats() capture.close() - if stats: - console.print_capture_stats( - stats.received, - stats.dropped, - stats.interface_dropped, - ) - exports = [] achievement_path = None if achievement_ids: @@ -168,7 +161,6 @@ def run_live_capture( achievement_path.write_text( json.dumps(achievement_ids, ensure_ascii=False) + "\n", encoding="utf-8" ) - console.print_note(f"Achievement list written: {achievement_path}") diagnostics_path = None if write_debug_csv: diagnostics_path = new_diagnostics_path() @@ -214,14 +206,25 @@ def run_live_capture( ) console.print_results_header() + if stats: + console.print_capture_stats( + stats.received, + stats.dropped, + stats.interface_dropped, + ) + if stats: + print() + if not exports: if achievement_path is not None: - console.print_note("No pull-history pages were captured.") + console.print_success("Achievement export complete.") + console.print_note("No pull history was captured (this is fine if you only wanted achievements).") + print() + console.print_note(f"Export written: {achievement_path}") else: console.print_problem("No history pages were captured.") - console.print_note("Make sure the capture backend is running, then reopen the") - console.print_note("history screen and scroll from page 1. If no page messages") - console.print_note("appear, return to the main menu and re-enter the game.") + console.print_note("Reopen a supported history screen and scroll from page 1.") + console.print_note("If no page messages appear, return to the main menu and re-enter the game.") if diagnostics_path is not None: console.print_note(f"Diagnostics written: {diagnostics_path}") return { @@ -246,6 +249,9 @@ def run_live_capture( if item["csv_path"] is not None: console.print_note(f"CSV written: {item['csv_path']}") console.print_note(f"Export written: {item['json_path']}") + if achievement_path is not None: + print() + console.print_note(f"Export written: {achievement_path}") if diagnostics_path is not None: console.print_note(f"Diagnostics written: {diagnostics_path}")