feat: the rebuild gamemode of "Gauntlet"
This commit is contained in:
@@ -250,16 +250,12 @@ func _on_tab_changed(tab_index: int) -> void:
|
||||
func _rpc(rpc_name: String, payload: Dictionary) -> Dictionary:
|
||||
if not NakamaManager.client or not NakamaManager.session:
|
||||
return {"error": "Not connected"}
|
||||
var result = await NakamaManager.client.rpc_async(
|
||||
NakamaManager.session, rpc_name, JSON.stringify(payload)
|
||||
)
|
||||
if result.is_exception():
|
||||
var err: String = result.get_exception().message
|
||||
var result = await BackendService.api_rpc_async(rpc_name, JSON.stringify(payload))
|
||||
if result.get("success", false) == false:
|
||||
var err: String = str(result.get("message", "Unknown error"))
|
||||
_set_status(err, CLR_STATUS_ERR)
|
||||
return {"error": err}
|
||||
if result.payload:
|
||||
return JSON.parse_string(result.payload)
|
||||
return {}
|
||||
return result.get("data", {})
|
||||
|
||||
func _set_status(msg: String, color: Color = CLR_DIM) -> void:
|
||||
status_label.text = msg
|
||||
|
||||
@@ -15,26 +15,24 @@ func _load_config():
|
||||
status_lbl.text = "Not authenticated"
|
||||
return
|
||||
status_lbl.text = "Loading..."
|
||||
var res = await NakamaManager.client.rpc_async(NakamaManager.session, "get_daily_reward_config_admin", "{}")
|
||||
if res.is_exception():
|
||||
status_lbl.text = "Error: " + res.get_exception().message
|
||||
var result = await BackendService.get_daily_reward_config_admin()
|
||||
if result.get("success", false) == false:
|
||||
status_lbl.text = "Error: " + str(result.get("error", ""))
|
||||
return
|
||||
|
||||
var json = JSON.new()
|
||||
if json.parse(res.payload) == OK:
|
||||
var config = json.get_data().get("config", {})
|
||||
if config.is_empty():
|
||||
# generate default 12 months for 2026/2027
|
||||
var year = 2026
|
||||
for m in range(1, 13):
|
||||
var m_str = "%d-%02d" % [year, m]
|
||||
var arr = []
|
||||
for d in range(30):
|
||||
arr.append(min(10 + d*5, 100)) # Reward is star currency, max 100
|
||||
config[m_str] = arr
|
||||
|
||||
text_edit.text = JSON.stringify(config, "\t")
|
||||
status_lbl.text = "Loaded"
|
||||
var config = result.get("data", {}).get("config", {})
|
||||
if config.is_empty():
|
||||
# generate default 12 months for 2026/2027
|
||||
var year = 2026
|
||||
for m in range(1, 13):
|
||||
var m_str = "%d-%02d" % [year, m]
|
||||
var arr = []
|
||||
for d in range(30):
|
||||
arr.append(min(10 + d*5, 100)) # Reward is star currency, max 100
|
||||
config[m_str] = arr
|
||||
|
||||
text_edit.text = JSON.stringify(config, "\t")
|
||||
status_lbl.text = "Loaded"
|
||||
|
||||
func _on_save():
|
||||
var json = JSON.new()
|
||||
@@ -43,9 +41,9 @@ func _on_save():
|
||||
return
|
||||
|
||||
status_lbl.text = "Saving..."
|
||||
var req = { "config": json.get_data() }
|
||||
var res = await NakamaManager.client.rpc_async(NakamaManager.session, "set_daily_reward_config", JSON.stringify(req))
|
||||
if res.is_exception():
|
||||
status_lbl.text = "Save error: " + res.get_exception().message
|
||||
var config = json.get_data()
|
||||
var result = await BackendService.set_daily_reward_config(config)
|
||||
if result.get("success", false) == false:
|
||||
status_lbl.text = "Save error: " + str(result.get("error", ""))
|
||||
else:
|
||||
status_lbl.text = "Config saved successfully!"
|
||||
|
||||
@@ -39,34 +39,30 @@ func _fetch_state():
|
||||
status_label.text = "Must be logged in to claim rewards."
|
||||
return
|
||||
|
||||
var result = await NakamaManager.client.rpc_async(NakamaManager.session, "get_daily_reward_state", "{}")
|
||||
if result.is_exception():
|
||||
status_label.text = "Failed to load: " + result.get_exception().message
|
||||
var result = await BackendService.get_daily_reward_state()
|
||||
if result.get("success", false) == false:
|
||||
status_label.text = "Failed to load: " + str(result.get("error", ""))
|
||||
return
|
||||
|
||||
var json = JSON.new()
|
||||
if json.parse(result.payload) == OK:
|
||||
var data = json.get_data()
|
||||
_month_rewards = data.get("month_rewards", [])
|
||||
var state = data.get("state", {})
|
||||
var data = result.get("data", {})
|
||||
_month_rewards = data.get("month_rewards", [])
|
||||
var state = data.get("state", {})
|
||||
|
||||
var claimed_list = state.get("claimed_days", [])
|
||||
_claimed_days.clear()
|
||||
for item in claimed_list:
|
||||
_claimed_days.append(int(item))
|
||||
|
||||
var claimed_list = state.get("claimed_days", [])
|
||||
_claimed_days.clear()
|
||||
for item in claimed_list:
|
||||
_claimed_days.append(int(item))
|
||||
|
||||
_can_claim = data.get("can_claim_today", false)
|
||||
_today = data.get("today_date", "")
|
||||
_today_index = data.get("today_index", 0)
|
||||
_server_month = data.get("server_month", 1)
|
||||
|
||||
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
|
||||
if _server_month >= 1 and _server_month <= 12:
|
||||
month_label.text = months[_server_month - 1] + " Sign-in"
|
||||
|
||||
_update_ui()
|
||||
else:
|
||||
status_label.text = "Error parsing data."
|
||||
_can_claim = data.get("can_claim_today", false)
|
||||
_today = data.get("today_date", "")
|
||||
_today_index = data.get("today_index", 0)
|
||||
_server_month = data.get("server_month", 1)
|
||||
|
||||
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
|
||||
if _server_month >= 1 and _server_month <= 12:
|
||||
month_label.text = months[_server_month - 1] + " Sign-in"
|
||||
|
||||
_update_ui()
|
||||
|
||||
func _get_reward_display_data(type: String) -> Dictionary:
|
||||
if type == "gold": return {"icon": "💰", "name": "Gold"}
|
||||
@@ -145,9 +141,9 @@ func _on_claim_pressed():
|
||||
claim_btn.text = "Claiming..."
|
||||
status_label.text = ""
|
||||
|
||||
var result = await NakamaManager.client.rpc_async(NakamaManager.session, "claim_daily_reward", "{}")
|
||||
if result.is_exception():
|
||||
status_label.text = "Failed to claim: " + result.get_exception().message
|
||||
var result = await BackendService.claim_daily_reward()
|
||||
if result.get("success", false) == false:
|
||||
status_label.text = "Failed to claim: " + str(result.get("error", ""))
|
||||
claim_btn.disabled = false
|
||||
claim_btn.text = "Sign In"
|
||||
return
|
||||
|
||||
@@ -72,11 +72,11 @@ func show_panel() -> void:
|
||||
status_label.text = "Syncing scores..."
|
||||
# Bulk-sync all users' storage stats to native leaderboard (server-side operation)
|
||||
if NakamaManager.session:
|
||||
var sync_result = await NakamaManager.client.rpc_async(NakamaManager.session, "sync_leaderboard", "{}")
|
||||
if sync_result.is_exception():
|
||||
push_error("[Leaderboard] sync_leaderboard RPC failed: ", sync_result.get_exception().message)
|
||||
var sync_result = await BackendService.sync_leaderboard()
|
||||
if sync_result.get("success", false) == false:
|
||||
push_error("[Leaderboard] sync_leaderboard RPC failed: " + str(sync_result.get("error", "")))
|
||||
else:
|
||||
print("[Leaderboard] Server sync finished: ", sync_result.payload)
|
||||
print("[Leaderboard] Server sync finished: ", sync_result.get("data", {}))
|
||||
_fetch_leaderboard_data()
|
||||
|
||||
func _on_close_pressed() -> void:
|
||||
@@ -150,29 +150,25 @@ func _fetch_native_leaderboard() -> Array:
|
||||
|
||||
func _fetch_via_rpc() -> void:
|
||||
"""Fallback: call server RPC which reads the same native leaderboard."""
|
||||
var result = await NakamaManager.client.rpc_async(NakamaManager.session, "get_leaderboard_stats", "{}")
|
||||
var result = await BackendService.get_leaderboard_stats()
|
||||
|
||||
if result.is_exception():
|
||||
if result.get("success", false) == false:
|
||||
status_label.text = "Failed to load leaderboard"
|
||||
push_error("[Leaderboard] RPC failed: ", result.get_exception().message)
|
||||
push_error("[Leaderboard] RPC failed: " + str(result.get("error", "")))
|
||||
return
|
||||
|
||||
var json := JSON.new()
|
||||
if json.parse(result.payload) == OK:
|
||||
var data = json.get_data()
|
||||
if data.has("leaderboard") and data.leaderboard.size() > 0:
|
||||
_apply_local_overrides(data.leaderboard)
|
||||
leaderboard_data = data.leaderboard
|
||||
_calculate_win_rates()
|
||||
status_label.text = ""
|
||||
_sort_by(current_sort_key)
|
||||
if leaderboard_data.size() > 0:
|
||||
_show_entry_preview(0)
|
||||
else:
|
||||
# No records exist yet — show a helpful hint
|
||||
status_label.text = "No scores recorded yet.\nPlay a match to appear here!"
|
||||
var data = result.get("data", {})
|
||||
if data.has("leaderboard") and data.leaderboard.size() > 0:
|
||||
_apply_local_overrides(data.leaderboard)
|
||||
leaderboard_data = data.leaderboard
|
||||
_calculate_win_rates()
|
||||
status_label.text = ""
|
||||
_sort_by(current_sort_key)
|
||||
if leaderboard_data.size() > 0:
|
||||
_show_entry_preview(0)
|
||||
else:
|
||||
status_label.text = "Error parsing server data"
|
||||
# No records exist yet — show a helpful hint
|
||||
status_label.text = "No scores recorded yet.\nPlay a match to appear here!"
|
||||
|
||||
func _calculate_win_rates() -> void:
|
||||
for entry in leaderboard_data:
|
||||
|
||||
@@ -645,11 +645,9 @@ func _setup_account_settings_ui() -> void:
|
||||
"new_email": new_email_input.text,
|
||||
"new_password": new_pass_input.text
|
||||
}
|
||||
var r = await NakamaManager.client.rpc_async(
|
||||
NakamaManager.session, "change_credentials", JSON.stringify(payload)
|
||||
)
|
||||
if r.is_exception():
|
||||
_set_status("Error: " + r.get_exception().message, Color.RED)
|
||||
var r = await BackendService.api_rpc_async("change_credentials", JSON.stringify(payload))
|
||||
if r.get("success", false) == false:
|
||||
_set_status("Error: " + str(r.get("message", "Unknown error")), Color.RED)
|
||||
else:
|
||||
_set_status("Credentials updated!", Color(0.4, 1.0, 0.4))
|
||||
acc_settings_dialog.hide()
|
||||
@@ -671,8 +669,8 @@ func _setup_account_settings_ui() -> void:
|
||||
)
|
||||
|
||||
func _on_reset_stats_confirmed() -> void:
|
||||
var r = await NakamaManager.client.rpc_async(NakamaManager.session, "reset_stats", "{}")
|
||||
if not r.is_exception():
|
||||
var r = await BackendService.api_rpc_async("reset_stats", "{}")
|
||||
if r.get("success", false) == true:
|
||||
UserProfileManager.stats = {
|
||||
"games_played": 0, "games_won": 0, "games_lost": 0,
|
||||
"total_score": 0, "high_score": 0, "play_time_minutes": 0
|
||||
|
||||
@@ -103,15 +103,14 @@ func _on_search_pressed() -> void:
|
||||
return
|
||||
|
||||
_search_btn.disabled = true
|
||||
var payload = JSON.stringify({"query": query})
|
||||
var result = await NakamaManager.client.rpc_async(NakamaManager.session, "search_users", payload)
|
||||
var result = await BackendService.search_users(query)
|
||||
_search_btn.disabled = false
|
||||
|
||||
if result.is_exception():
|
||||
push_warning("[Social] Search failed: " + result.get_exception().message)
|
||||
if result.get("success", false) == false:
|
||||
push_warning("[Social] Search failed: " + str(result.get("error", "")))
|
||||
return
|
||||
|
||||
var response = JSON.parse_string(result.payload)
|
||||
var response = result.get("data", {})
|
||||
if not response or not response.has("users"):
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user