3.8 KiB
[ ADT ] Report: Nakama Friend System & Steam Auth Implementation
Session Summary
Implemented comprehensive Nakama friend system with lobby invites, direct messaging, global chat, and Steam authentication fallback. Migrated all UI from dynamic node creation to scene-based architecture.
Completed Changes
Server (Nakama)
✅ Added afterAuthenticateSteam hook in tekton_admin.js to set Steam persona name as display name
✅ Added rpcSendLobbyInvite RPC for sending lobby invite notifications to friends
Authentication
✅ Implemented Steam login fallback to email-style auth in auth_manager.gd for dev/testing without publisher key
✅ Set Steam username as display name with default password matching username
✅ Set is_guest = false and auth_mode = "steam" on Steam login
Friend System
✅ Created FriendManager.gd autoload singleton for Nakama friend list, DM channels, and lobby invite notifications
✅ Registered FriendManager in project.godot autoload
✅ Added nakama_id field to LobbyManager player data
✅ Extended request_room_info RPC to include nakama_id for all players
Lobby UI
✅ Added optional InviteBtn reference in lobby.gd with safe node resolution
✅ Connected invite_btn.pressed to open invite friends dialog
✅ Connected FriendManager signals for lobby invite notifications
✅ Added + Friend buttons in player slots with friend status display
✅ Implemented invite friends popup using invite_friends_dialog.tscn scene
✅ Implemented lobby invite notification popup using lobby_invite_popup.tscn scene
✅ Added social panel modal opening from lobby
Social Panel
✅ Created social_panel.tscn with full UI layout (tabs, friend list, global chat, DM views)
✅ Created social_panel.gd with @onready references (no dynamic UI creation)
✅ Implemented friend list using friend_row.tscn instances
✅ Implemented global chat and DM tabs with UI nodes
✅ Handled DM history and message sending
UI Scenes (All .tscn based, no .new() calls)
✅ Created friend_row.tscn + friend_row.gd (friend list row with chat/accept/decline/remove buttons)
✅ Created invite_friends_dialog.tscn + invite_friends_dialog.gd (invite friends popup)
✅ Created invite_row.tscn + invite_row.gd (single invite row with invite button)
✅ Created lobby_invite_popup.tscn + lobby_invite_popup.gd (lobby invite notification dialog)
Profile Panel
✅ Fixed account type display to include Steam auth mode in profile_panel.gd
Version & Changelog
✅ Updated CHANGELOG_DRAFT.md with all changes (7 player-facing entries)
✅ Bumped version to 2.1.9 via generate_version_json.py
✅ Updated assets/data/version.json with new version and changelog
Files Modified
server/nakama/tekton_admin.jsscripts/managers/auth_manager.gdscripts/managers/friend_manager.gdscripts/managers/lobby_manager.gdscripts/ui/profile_panel.gdscripts/ui/social_panel.gdscripts/ui/friend_row.gdscripts/ui/invite_friends_dialog.gdscripts/ui/invite_row.gdscripts/ui/lobby_invite_popup.gdscenes/lobby.gdproject.godotCHANGELOG_DRAFT.mdassets/data/version.json
Files Created
scenes/ui/social_panel.tscnscenes/ui/friend_row.tscnscenes/ui/invite_friends_dialog.tscnscenes/ui/invite_row.tscnscenes/ui/lobby_invite_popup.tscn
Version Bumped
2.1.8 → 2.1.9 (2026-04-29)
Player-Facing Changelog
- Added friend system with friend list, direct messaging, and lobby invitations
- Improved Steam login support
- Added Social Panel with Friends, Global Chat, and Direct Message tabs
- Added ability to add/remove friends from lobby player slots
- Added Invite Friends button to lobby
- Added lobby invite notifications
- Fixed account type display in profile panel