feat: the rebuild gamemode of "Gauntlet"

This commit is contained in:
2026-06-10 02:12:25 +08:00
parent 2d857a490b
commit 5653473c12
28 changed files with 1313 additions and 254 deletions
+18 -38
View File
@@ -321,18 +321,14 @@ func purchase_item(item_id: String) -> String:
"idempotency_key": str(randi()) + "_" + str(Time.get_ticks_usec())
})
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"purchase_item",
payload
)
var result = await BackendService.api_rpc_async("purchase_item", payload)
if result.is_exception():
var msg = result.get_exception().message
if result.get("success", false) == false:
var msg = str(result.get("message", "Unknown error"))
push_error("[UserProfileManager] Purchase failed: ", msg)
return msg
var response = JSON.parse_string(result.payload)
var response = result.get("data", {})
if typeof(response) == TYPE_DICTIONARY and response.has("success") and response.success == true:
await _reload_wallet()
if not inventory.has(item_id):
@@ -346,17 +342,13 @@ func purchase_item(item_id: String) -> String:
func fetch_shop_catalog() -> void:
if not NakamaManager.session: return
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"get_shop_catalog",
"{}"
)
var result = await BackendService.api_rpc_async("get_shop_catalog", "{}")
if result.is_exception():
push_error("[UserProfileManager] Failed to fetch shop catalog: ", result.get_exception().message)
if result.get("success", false) == false:
push_error("[UserProfileManager] Failed to fetch shop catalog: " + str(result.get("message", "")))
return
var payload: Dictionary = JSON.parse_string(result.payload)
var payload: Dictionary = result.get("data", {})
if payload and payload.has("catalog"):
shop_catalog = payload.catalog
if payload.has("featured_banners"):
@@ -368,13 +360,9 @@ func fetch_shop_catalog() -> void:
## The Nakama function requireAdmin() on the server prevents non-admin abuse.
func admin_topup_gold() -> bool:
if not NakamaManager.session: return false
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"admin_topup_gold",
"{}"
)
if result.is_exception():
push_error("[UserProfileManager] Topup failed: ", result.get_exception().message)
var result = await BackendService.api_rpc_async("admin_topup_gold", "{}")
if result.get("success", false) == false:
push_error("[UserProfileManager] Topup failed: " + str(result.get("message", "")))
return false
await _reload_wallet()
return true
@@ -389,21 +377,17 @@ func buy_currency(package_id: String) -> bool:
"store_type": "test"
})
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"buy_currency",
payload
)
var result = await BackendService.api_rpc_async("buy_currency", payload)
if result.is_exception():
var msg = result.get_exception().message
if result.get("success", false) == false:
var msg = str(result.get("message", "Unknown error"))
if "NotEnoughFunds" in msg:
push_error("[UserProfileManager] Failed to buy currency: Not enough funds.")
else:
push_error("[UserProfileManager] Failed to buy currency: ", msg)
return false
var response = JSON.parse_string(result.payload)
var response = result.get("data", {})
if typeof(response) == TYPE_DICTIONARY and response.has("status") and response.status == "pending":
print("[UserProfileManager] Currency purchase pending verification.")
@@ -494,14 +478,10 @@ func submit_to_leaderboard() -> void:
"loadout_character": profile.get("loadout_character", "Copper")
})
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"submit_score",
payload
)
var result = await BackendService.api_rpc_async("submit_score", payload)
if result.is_exception():
push_warning("[UserProfileManager] Leaderboard RPC failed: ", result.get_exception().message)
if result.get("success", false) == false:
push_warning("[UserProfileManager] Leaderboard RPC failed: " + str(result.get("message", "")))
else:
print("[UserProfileManager] Leaderboard score submitted: ", stats.get("high_score", 0))