feat: update 2.1.9
This commit is contained in:
@@ -10,7 +10,7 @@ signal session_restored
|
||||
signal logged_out
|
||||
|
||||
# Auth modes
|
||||
enum AuthMode {GUEST, EMAIL, GOOGLE, APPLE, FACEBOOK, CUSTOM}
|
||||
enum AuthMode {GUEST, EMAIL, GOOGLE, APPLE, FACEBOOK, STEAM, CUSTOM}
|
||||
|
||||
# User data
|
||||
var current_user: Dictionary = {}
|
||||
@@ -325,6 +325,74 @@ func login_with_facebook(access_token: String) -> bool:
|
||||
emit_signal("auth_completed", true, current_user)
|
||||
return true
|
||||
|
||||
func login_with_steam() -> bool:
|
||||
emit_signal("auth_started")
|
||||
auth_mode = AuthMode.STEAM
|
||||
is_guest = false
|
||||
|
||||
print("[AuthManager] Steam login...")
|
||||
|
||||
# Get Steamworks manager from BackendService
|
||||
var backend = get_node_or_null("/root/BackendService")
|
||||
if not backend:
|
||||
emit_signal("auth_failed", "BackendService not available")
|
||||
return false
|
||||
|
||||
var steamworks = backend.get_steamworks_manager()
|
||||
if not steamworks or not steamworks.is_initialized():
|
||||
emit_signal("auth_failed", "Steamworks not available. Please launch through Steam.")
|
||||
return false
|
||||
|
||||
# Try full Steam ticket auth first, fall back to Steam ID custom auth for dev/testing
|
||||
var session: NakamaSession = await _authenticate_steam_with_fallback(steamworks)
|
||||
|
||||
if session == null or session.is_exception():
|
||||
var error: String = "Steam authentication failed"
|
||||
if session != null:
|
||||
error = session.get_exception().message
|
||||
emit_signal("auth_failed", error)
|
||||
return false
|
||||
|
||||
NakamaManager.session = session
|
||||
_save_session(session, AuthMode.STEAM)
|
||||
|
||||
var socket_success := await _connect_socket()
|
||||
if not socket_success:
|
||||
emit_signal("auth_failed", "Failed to connect to game server")
|
||||
return false
|
||||
|
||||
await _load_user_profile()
|
||||
is_authenticated = true
|
||||
|
||||
emit_signal("auth_completed", true, current_user)
|
||||
return true
|
||||
|
||||
func _authenticate_steam_with_fallback(steamworks: Node) -> NakamaSession:
|
||||
# Try proper Steam ticket auth first
|
||||
var auth_ticket = steamworks.get_auth_session_ticket()
|
||||
if not auth_ticket.is_empty():
|
||||
print("[AuthManager] Got Steam auth ticket, authenticating with Nakama...")
|
||||
var session: NakamaSession = await NakamaManager.client.authenticate_steam_async(auth_ticket, null, true)
|
||||
if not session.is_exception():
|
||||
return session
|
||||
print("[AuthManager] Steam ticket auth failed: %s" % session.get_exception().message)
|
||||
print("[AuthManager] Falling back to Steam ID custom auth (dev mode)...")
|
||||
|
||||
# Fallback: use Steam ID + username to create an email-style account (works without publisher key)
|
||||
var steam_id = str(steamworks.get_steam_user_id())
|
||||
var steam_name = steamworks.get_steam_user_name()
|
||||
if steam_id == "0" or steam_id.is_empty():
|
||||
return null
|
||||
|
||||
# Derive email and password from Steam credentials
|
||||
var email = steam_name.to_lower().replace(" ", "_") + "@steam.local"
|
||||
var password = steam_name # Default password = Steam username
|
||||
var username = steam_name
|
||||
|
||||
print("[AuthManager] Using Steam email auth: %s (%s)" % [email, username])
|
||||
var fallback_session: NakamaSession = await NakamaManager.client.authenticate_email_async(email, password, username, true)
|
||||
return fallback_session
|
||||
|
||||
# =============================================================================
|
||||
# Account Linking (Convert Guest to Full Account)
|
||||
# =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user