Lobby test
This commit is contained in:
1
splunk/networking/networkmanager.gd
Normal file
1
splunk/networking/networkmanager.gd
Normal file
@@ -0,0 +1 @@
|
||||
extends Node
|
||||
1
splunk/networking/networkmanager.gd.uid
Normal file
1
splunk/networking/networkmanager.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ckuxhcwgtsrsp
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user