feat: update shop
This commit is contained in:
@@ -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
|
||||
# =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user