Lobby test

This commit is contained in:
2025-08-06 22:40:07 -05:00
parent f0ce6b1994
commit 53b974faae
3 changed files with 173 additions and 7 deletions

View File

@@ -0,0 +1 @@
extends Node

View File

@@ -0,0 +1 @@
uid://ckuxhcwgtsrsp

View File

@@ -7,25 +7,57 @@ var steam_username: String = ""
var lobby_id = 0
var lobby_max_members = 4
var lobby_members: Array = []
var steam_initialized: bool = false
var peer: SteamMultiplayerPeer
func _init() -> void:
func _ready() -> void:
OS.set_environment("SteamAppId", str(steam_app_id))
OS.set_environment("SteamGameId", str(steam_app_id))
int_steam()
steam_initialized = init_steam()
# Connect Steam lobby signals
Steam.lobby_created.connect(_on_lobby_created)
Steam.lobby_joined.connect(_on_lobby_joined)
#Steam.lobby_match_list.connect(_on_lobby_match_list)
#Steam.lobby_chat_update.connect(_on_lobby_chat_update)
Steam.lobby_data_update.connect(_on_lobby_data_update)
#Steam.join_requested.connect(_on_lobby_join_requested)
Steam.persona_state_change.connect(_on_persona_change)
# Setup multiplayer signals
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
multiplayer.connected_to_server.connect(_on_connected_to_server)
multiplayer.connection_failed.connect(_on_connection_failed)
multiplayer.server_disconnected.connect(_on_server_disconnected)
create_lobby()
func _process(delta):
Steam.run_callbacks()
func int_steam():
func check_command_line() -> void:
var args: Array = OS.get_cmdline_args()
if args.size() > 0:
if args[0] == "+connect_lobby":
if args.size() > 1 and int(args[1]) > 0:
print("Command line lobby ID: %s" % args[1])
join_lobby(int(args[1]))
func init_steam() -> bool:
var response: Dictionary = Steam.steamInitEx()
print("Steam init response: %s " % response)
if response['status'] > 0:
print("Failed to init steam! Shutting down... Code: %s " % response)
get_tree().quit()
print("Failed to init steam! Code: %s " % response)
return false
is_owned = Steam.isSubscribed()
steam_id = Steam.getSteamID()
@@ -34,6 +66,138 @@ func int_steam():
print("Steam ID: %s " % steam_id)
if !is_owned:
print("Yo, you don't own this on steam")
get_tree().quit()
print("Yo, you don't own this on steam, whats up with that?")
return false
return true
func setup_multiplayer_peer(is_host: bool = false) -> void:
peer = SteamMultiplayerPeer.new()
if is_host:
var err = peer.create_host(0)
if err != OK:
print("Failed to create host: %s" % err)
return
print("Created host")
else:
pass
multiplayer.multiplayer_peer = peer
func create_lobby():
if lobby_id == 0:
print("Creating lobby...")
Steam.createLobby(Steam.LOBBY_TYPE_FRIENDS_ONLY, lobby_max_members)
func _on_lobby_created(connect: int, this_lobby_id: int):
if connect == 1:
lobby_id = this_lobby_id
print("Created lobby with id `%s`" % lobby_id)
Steam.setLobbyJoinable(lobby_id, true)
Steam.setLobbyData(lobby_id, "name", "%'s Lobby" % steam_username)
Steam.setLobbyData(lobby_id, "mode", "Splunk")
Steam.allowP2PPacketRelay(true)
setup_multiplayer_peer(true)
else :
print("Failed to create lobby...")
func join_lobby(this_lobby_id: int):
print("Attempting to join lobby: %s" % this_lobby_id)
lobby_members.clear()
Steam.joinLobby(this_lobby_id)
func _on_lobby_joined(this_lobby_id: int, permissions: int, locked: bool, response: int):
if response == Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS:
lobby_id = this_lobby_id
print("Successfully joined lobby: %s" % lobby_id)
get_lobby_members()
setup_multiplayer_peer_client()
func setup_multiplayer_peer_client() -> void:
pass
func get_lobby_members() -> void:
lobby_members.clear()
var num_members = Steam.getNumLobbyMembers(lobby_id)
for i in range(num_members):
var member_id = Steam.getLobbyMemberByIndex(lobby_id, i)
var member_name = Steam.getFriendPersonaName(member_id)
lobby_members.append({
"steam_id": member_id,
"steam_name": member_name
})
print("Lobby member: %s (%s)" % [member_name, member_id])
func _on_lobby_data_update(success: int) -> void:
pass
func _on_persona_change(steam_id_changed: int, flag: int) -> void:
pass
func leave_lobby() -> void:
pass
func _on_peer_connected(id: int) -> void:
print("Peer connected: %s" % id)
func _on_peer_disconnected(id: int) -> void:
print("Peer disconnected: %s" % id)
func _on_connected_to_server() -> void:
print("Connected to multiplayer host")
func _on_connection_failed() -> void:
print("Failed to connect to multiplayer host")
func _on_server_disconnected() -> void:
print("Disconnected from multiplayer host")
func start_game():
pass
@rpc("any_peer", "call_local", "reliable")
func start_game_rpc() -> void:
pass
func get_join_fail_reason(response: int) -> String:
match response:
Steam.CHAT_ROOM_ENTER_RESPONSE_DOESNT_EXIST:
return "Lobby no longer exists"
Steam.CHAT_ROOM_ENTER_RESPONSE_NOT_ALLOWED:
return "Not allowed to join"
Steam.CHAT_ROOM_ENTER_RESPONSE_FULL:
return "Lobby is full"
Steam.CHAT_ROOM_ENTER_RESPONSE_ERROR:
return "Unknown error"
Steam.CHAT_ROOM_ENTER_RESPONSE_BANNED:
return "You are banned"
Steam.CHAT_ROOM_ENTER_RESPONSE_LIMITED:
return "Limited account"
Steam.CHAT_ROOM_ENTER_RESPONSE_CLAN_DISABLED:
return "Lobby is locked"
Steam.CHAT_ROOM_ENTER_RESPONSE_COMMUNITY_BAN:
return "Community locked"
Steam.CHAT_ROOM_ENTER_RESPONSE_MEMBER_BLOCKED_YOU:
return "A member blocked you"
Steam.CHAT_ROOM_ENTER_RESPONSE_YOU_BLOCKED_MEMBER:
return "You blocked a member"
_:
return "Unknown reason"