import threading import time import base64 from flask import Flask, jsonify, Response from PyQt5.QtCore import QMutex # Global datastore for character metrics data_store = { "hp_current": 0, "hp_total": 0, "mp_current": 0, "mp_total": 0, "fp_current": 0, "fp_total": 0, "exp": 0.0 } # Mutex for thread safety data_mutex = QMutex() # Flag to ensure only one character status collector node exists character_status_collector_exists = False # A place to store the screenshot in base64 status_screenshot_base64 = "" # Flask Application app = Flask(__name__) @app.route('/data') def data_api(): """ Returns the current character metrics as JSON. """ return jsonify(get_data()) @app.route('/exp') def exp_api(): """ Returns the EXP data. """ return jsonify({"exp": get_data()["exp"]}) @app.route('/hp') def hp_api(): """ Returns the HP data. """ return jsonify({ "hp_current": get_data()["hp_current"], "hp_total": get_data()["hp_total"] }) @app.route('/mp') def mp_api(): """ Returns the MP data. """ return jsonify({ "mp_current": get_data()["mp_current"], "mp_total": get_data()["mp_total"] }) @app.route('/fp') def fp_api(): """ Returns the FP data. """ return jsonify({ "fp_current": get_data()["fp_current"], "fp_total": get_data()["fp_total"] }) @app.route('/status_screenshot') def status_screenshot(): """ Returns an HTML page that displays the stored screenshot and automatically refreshes it every second without requiring a manual page reload. """ html = """