From 948a99cf9048c424c6830dd1524d51ebe810cfad Mon Sep 17 00:00:00 2001 From: adtpdn Date: Mon, 22 Jun 2026 17:45:58 +0800 Subject: [PATCH] Fix global RPC data parsing in BackendService - Resolved massive bug where api_rpc_async returned raw payload strings instead of the parsed 'data' Dictionary expected by every system (Gacha, Mail, Leaderboard, Admin Panel, etc.) - Restored Admin Panel's _rpc helper to use the standard result.get('data') format now that BackendService correctly supplies it. --- scripts/services/backend_service.gd | 11 ++++++++++- scripts/ui/admin_panel.gd | 10 +--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/scripts/services/backend_service.gd b/scripts/services/backend_service.gd index 48ee7db..254c8f4 100644 --- a/scripts/services/backend_service.gd +++ b/scripts/services/backend_service.gd @@ -121,9 +121,18 @@ func api_rpc_async(rpc_id: String, payload: String = "{}") -> Dictionary: } # Success + var payload_str: String = result.payload if result.payload != null else "{}" + if payload_str.is_empty(): + payload_str = "{}" + + var parsed_data = JSON.parse_string(payload_str) + if parsed_data == null: + parsed_data = {} + return { "success": true, - "payload": result.payload + "payload": payload_str, + "data": parsed_data } return { "success": false, "error": ErrorCode.NETWORK_ERROR, "message": "Max retries exceeded" } diff --git a/scripts/ui/admin_panel.gd b/scripts/ui/admin_panel.gd index 9e595c3..ba669b8 100644 --- a/scripts/ui/admin_panel.gd +++ b/scripts/ui/admin_panel.gd @@ -301,15 +301,7 @@ func _rpc(rpc_name: String, payload: Dictionary) -> Dictionary: var err: String = str(result.get("message", "Unknown error")) _set_status(err, CLR_STATUS_ERR) return {"error": err} - - var payload_str: String = result.get("payload", "{}") - if payload_str.is_empty(): - payload_str = "{}" - - var parsed = JSON.parse_string(payload_str) - if typeof(parsed) == TYPE_DICTIONARY: - return parsed - return {} + return result.get("data", {}) func _set_status(msg: String, color: Color = CLR_DIM) -> void: status_label.text = msg