feat: update shop

This commit is contained in:
2026-04-17 00:17:37 +08:00
parent f10d777c90
commit ff0a2e0f41
5 changed files with 914 additions and 130 deletions
+51 -1
View File
@@ -12,6 +12,7 @@ var stats: Dictionary = {}
var wallet: Dictionary = {"gold": 0, "star": 0}
var inventory: Array = []
var loadout: Dictionary = {"head": "", "costume": "", "glove": "", "accessory": ""}
var shop_catalog: Dictionary = {}
var is_profile_loaded: bool = false
# Nakama storage collection names
@@ -107,7 +108,7 @@ func load_profile() -> Dictionary:
is_profile_loaded = true
emit_signal("profile_loaded", profile)
print("[UserProfileManager] Profile loaded: ", profile.display_name)
print("[UserProfileManager] Profile loaded: ", profile.get("display_name", "Unknown"))
# Auto-sync existing score to native Nakama leaderboard in background
if stats.get("high_score", 0) > 0 and NakamaManager.session and not AuthManager.is_guest:
@@ -315,6 +316,55 @@ func purchase_item(item_id: String, price_gold: int, price_star: int, category:
emit_signal("profile_updated")
return true
func fetch_shop_catalog() -> void:
if not NakamaManager.session: return
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"get_shop_catalog",
"{}"
)
if result.is_exception():
push_error("[UserProfileManager] Failed to fetch shop catalog: ", result.get_exception().message)
return
var payload: Dictionary = JSON.parse_string(result.payload)
if payload and payload.has("catalog"):
shop_catalog = payload.catalog
emit_signal("profile_updated")
func buy_currency(package_id: String) -> bool:
if not NakamaManager.session: return false
var payload = JSON.stringify({
"package_id": package_id
})
var result = await NakamaManager.client.rpc_async(
NakamaManager.session,
"buy_currency",
payload
)
if result.is_exception():
push_error("[UserProfileManager] Failed to buy currency: ", result.get_exception().message)
return false
await _reload_wallet()
return true
func _reload_wallet() -> void:
if not NakamaManager.session: return
var account = await NakamaManager.client.get_account_async(NakamaManager.session)
if account.is_exception(): return
if account.wallet:
var w_data = JSON.parse_string(account.wallet)
if w_data:
wallet["gold"] = w_data.get("gold", 0)
wallet["star"] = w_data.get("star", 0)
emit_signal("profile_updated")
# =============================================================================
# Stats Management
# =============================================================================