private static void OnLobbyCreated(LobbyCreated_t pCallback, bool bIOFailure) { if (!SteamManager.Initialized) { Logger.Error("CONNECTION FAILED"); return; } if (!bIOFailure) { Scoreboard.Instance.UpsertScoreboardEntry(Controllers.PlayerController.Instance._playerInfo.playerId, Controllers.PlayerController.Instance._playerInfo.playerName); _lobbyInfo.LobbyID = new CSteamID(pCallback.m_ulSteamIDLobby); _lobbyInfo.TotalSlots = SteamMatchmaking.GetLobbyMemberLimit(_lobbyInfo.LobbyID); _lobbyInfo.HostName = GetUserName(); Logger.Debug($"Lobby has been created"); var hostUserId = SteamMatchmaking.GetLobbyOwner(_lobbyInfo.LobbyID); SteamMatchmaking.SetLobbyData(_lobbyInfo.LobbyID, "version", PACKET_VERSION); var me = SteamUser.GetSteamID(); Connection = ConnectionState.CONNECTED; if (hostUserId.m_SteamID == me.m_SteamID) { setLobbyStatus("Waiting In Menu"); SendLobbyPacket(true); } MultiplayerLobby.RefreshScores(); } }
protected void CreateUI() { try { _mainMenuViewController = Resources.FindObjectsOfTypeAll <MainMenuViewController>().First(); _mainMenuRectTransform = _mainMenuViewController.transform as RectTransform; _mockPartyViewController = new MockPartyViewController(); if (Config.Instance.AutoStartLobby) { SteamAPI.CreateLobby(!Config.Instance.IsPublic); } AvatarController.LoadAvatars(); SongListUtils.Initialize(); MultiplayerListing.Init(); MultiplayerLobby.Init(); WaitingMenu.Init(); CreateMainMenuButton(); CreateSettingsMenu(); } catch (Exception e) { Logger.Error($"Unable to create UI! Exception: {e}"); } }
protected void CreateUI() { try { _mainMenuViewController = Resources.FindObjectsOfTypeAll <MainMenuViewController>().First(); _mainMenuViewController.didFinishEvent += (sender, result) => { Logger.Debug($"finish \"{result}\""); if (result == MainMenuViewController.MenuButton.Party) { try { _mockPartyViewController = new MockPartyViewController(); } catch (Exception e) { Logger.Error(e); } } }; _mainMenuRectTransform = _mainMenuViewController.transform as RectTransform; if (Config.Instance.AutoStartLobby) { SteamAPI.CreateLobby(!Config.Instance.IsPublic); } try { AvatarController.LoadAvatars(); } catch (Exception e) { Logger.Error($"Unable to load avatars! Exception: {e}"); } SongListUtils.Initialize(); MultiplayerListing.Init(); MultiplayerLobby.Init(); WaitingMenu.Init(); CreateSettingsMenu(); CreateMainMenuButton(); } catch (Exception e) { Logger.Error($"Unable to create UI! Exception: {e}"); } }
public static void Handle(Player p, byte[] Data) { MultiplayerLobby m = new MultiplayerLobby(Data); m.Creator = m.Host = p.Id; Log.LogFormat($"%#00FF44%{p.Username} %#007cee%created a new MultiplayerLobby {m.Name}"); m.AddPlayer(p, m.Password); Packet pack = m.Packet(26); m.Broadcast(pack); for (int i = 0; i < Global.Lobby.Count; i++) { Global.Lobby[i].AddQueue(pack); } pack.Id = 36; p.AddQueue(pack); p.AddQueue(Packets.Packets.SingleStringPacket(64, "#multiplayer")); p.AddQueue(Packets.Packets.ChannelAvailable("#multiplayer", "Multiplayer Game Channel", (short)m.Players.Count)); }
public static void Handle(Player p, byte[] Data) { if (p.Match != null) { LeaveMatch.Handle(p); } int MatchId = BitConverter.ToInt32(Data, 0); if (MatchId > short.MaxValue) { return; } MultiplayerLobby m = Global.FindMatch((short)MatchId); if (m?.AddPlayer(p, Tools.Ext.ReadStringFast(Data, 4)) ?? false) { p.AddQueue(m.Packet(36)); m.Update(); p.AddQueue(Packets.Packets.SingleStringPacket(64, "#multiplayer")); p.AddQueue(Packets.Packets.ChannelAvailable("#multiplayer", "Multiplayer Game Channel", (short)m.Players.Count)); return; } p.AddQueue(Packets.Packets.NoDataPacket(37)); }
public void UpsertPlayer(PlayerPacket info) { if (info.playerId == _playerInfo.playerId) { return; } try { if (!_connectedPlayers.Keys.Contains(info.playerId)) { _connectedPlayers.Add(info.playerId, info); if ((Config.Instance.AvatarsInLobby && Plugin.instance.CurrentScene == "MenuCore") || (Config.Instance.AvatarsInGame && Plugin.instance.CurrentScene == "GameCore")) { AvatarController avatar = new GameObject("AvatarController").AddComponent <AvatarController>(); avatar.SetPlayerPacket(info, new Vector3(0, 0, 0), info.playerId == _playerInfo.playerId); _connectedPlayerAvatars.Add(info.playerId, avatar); } MultiplayerLobby.RefreshScores(); Scoreboard.Instance.UpsertScoreboardEntry(info.playerId, info.playerName); return; } if (_connectedPlayers.ContainsKey(info.playerId)) { if (info.playerScore != _connectedPlayers[info.playerId].playerScore || info.playerComboBlocks != _connectedPlayers[info.playerId].playerComboBlocks) { Scoreboard.Instance.UpsertScoreboardEntry(info.playerId, info.playerName, (int)info.playerScore, (int)info.playerComboBlocks); MultiplayerLobby.RefreshScores(); } if (_connectedPlayerAvatars.ContainsKey(info.playerId) && (Config.Instance.AvatarsInLobby && Plugin.instance.CurrentScene == "MenuCore") || (Config.Instance.AvatarsInGame && Plugin.instance.CurrentScene == "GameCore")) { Vector3 offset = new Vector3(0, 0, 0); if (Plugin.instance.CurrentScene == "GameCore") { ulong[] playerInfosByID = new ulong[_connectedPlayers.Count + 1]; playerInfosByID[0] = _playerInfo.playerId; _connectedPlayers.Keys.ToList().CopyTo(playerInfosByID, 1); Array.Sort(playerInfosByID); offset = new Vector3((Array.IndexOf(playerInfosByID, info.playerId) - Array.IndexOf(playerInfosByID, _playerInfo.playerId)) * 2f, 0, Math.Abs((Array.IndexOf(playerInfosByID, info.playerId) - Array.IndexOf(playerInfosByID, _playerInfo.playerId)) * 2.5f)); } _connectedPlayerAvatars[info.playerId].SetPlayerPacket(info, offset, info.playerId == _playerInfo.playerId); } bool changedReady = (_connectedPlayers[info.playerId].Ready != info.Ready || _connectedPlayers[info.playerId].playerProgress != info.playerProgress); _connectedPlayers[info.playerId] = info; MockPartyViewController.Instance.UpdatePlayButton(); if (changedReady) { WaitingMenu.RefreshData(); if (SteamAPI.IsHost()) { if (info.Ready) { if (_connectedPlayers.Values.ToList().All(u => u.Ready)) { Data.Logger.Debug($"Everyone has confirmed that they are ready to play, broadcast that we want them all to start playing"); SteamAPI.StartPlaying(); } } else { if (_connectedPlayers.Values.ToList().All(u => !u.Ready)) { Data.Logger.Debug($"Everyone has confirmed they are in game, set the lobby screen to in game"); SteamAPI.StartGame(); } } } } } } catch (Exception e) { Logger.Error(e); } }
public GameSettings(MultiplayerLobby lobby) { Lobby = lobby; }
public void OnLobbyDataUpdate(LobbyDataUpdate_t pCallback) { if (pCallback.m_ulSteamIDLobby == pCallback.m_ulSteamIDMember) { if (pCallback.m_ulSteamIDLobby == 0) { return; } LobbyPacket info = new LobbyPacket(SteamMatchmaking.GetLobbyData(new CSteamID(pCallback.m_ulSteamIDLobby), "LOBBY_INFO")); Logger.Debug($"Received: {info.ToString()}"); if (pCallback.m_ulSteamIDLobby == SteamAPI.getLobbyID().m_SteamID) { SteamAPI.UpdateLobbyPacket(info); if (DidScreenChange(info.Screen, LobbyPacket.SCREEN_TYPE.WAITING)) { currentScreen = info.Screen; Logger.Debug($"Song has been selected, going to the waiting screen"); WaitingMenu.Instance.Present(); } else if (DidScreenChange(info.Screen, LobbyPacket.SCREEN_TYPE.MENU)) { currentScreen = info.Screen; Logger.Debug($"Song has finished, updating state to menu"); MultiplayerLobby.UpdateJoinButton(); GameController.Instance.SongFinished(null, null, null, null); } else if (DidScreenChange(info.Screen, LobbyPacket.SCREEN_TYPE.PLAY_SONG)) { currentScreen = info.Screen; Logger.Debug($"Host requested to play the current song {info.CurrentSongId}"); IBeatmapLevel song = SongListUtils.GetInstalledSong(); if (SteamAPI.IsHost()) { SteamAPI.setLobbyStatus("Playing " + song.songName + " by " + song.songAuthorName); } try { SteamAPI.ClearPlayerReady(new CSteamID(SteamAPI.GetUserID()), true); SongListUtils.StartSong(song, SteamAPI.GetSongDifficulty(), info.GameplayModifiers, null); } catch (Exception e) { Logger.Error(e); } } else if (DidScreenChange(info.Screen, LobbyPacket.SCREEN_TYPE.IN_GAME)) { MultiplayerLobby.UpdateJoinButton(); } } else { SteamAPI.SetOtherLobbyData(pCallback.m_ulSteamIDLobby, info); } } else { string status = SteamMatchmaking.GetLobbyMemberData(new CSteamID(pCallback.m_ulSteamIDLobby), new CSteamID(pCallback.m_ulSteamIDMember), "STATUS"); if (status == "DISCONNECTED") { SteamAPI.DisconnectPlayer(pCallback.m_ulSteamIDMember); } else if (status.StartsWith("KICKED")) { ulong playerId = Convert.ToUInt64(status.Substring(7)); if (playerId != 0 && playerId == SteamAPI.GetUserID()) { SteamAPI.Disconnect(); } } } }