private void ProcessCreateLobbyResponse(NetHookItem item) { var msg = item.ReadAsProtobufMsg <CMsgClientMMSCreateLobbyResponse>(); Variables.Lobby.LobbyId = msg.Body.steam_id_lobby; CheckIfReJoiningStartedLobby(); }
private void ProcessLeaderBoardUpdate(NetHookItem item) { var msg = item.ReadAsProtobufMsg <CMsgClientLBSSetScore>(); if (msg.Body.leaderboard_id == 180533) { LobbyUtils.StartLobby(Variables.Lobby); } }
private void ProcessJoinLobbyResponse(NetHookItem item) { var msg = item.ReadAsProtobufMsg <CMsgClientMMSJoinLobbyResponse>(); Variables.Lobby.LobbyId = msg.Body.steam_id_lobby; if (msg.Body.chat_room_enter_response != 2) { CheckIfReJoiningStartedLobby(); } else //Lobby is not joinable any more { SetLobbyPresence(false); } }
private void ProcessLobbyUpdate(NetHookItem item) { var msg = item.ReadAsProtobufMsg <CMsgClientMMSLobbyData>(); if (msg == null || msg.Body == null) { return; } var lobbyData = new KeyValue(); using (var stream1 = new MemoryStream(msg.Body.metadata)) { if (!lobbyData.TryReadAsBinary(stream1)) { throw new Exception("Failed to read lobby metadata"); } else { if (lobbyData == null || lobbyData.Children == null || lobbyData.Children.Count == 0) { return; } TryExtractLobbyData(lobbyData); if (msg.Body.members.Count > 0) { this.ClearOverlayTeams(); var lobbyMembers = new List <Player>(); foreach (var playerData in msg.Body.members) { var memberData = new KeyValue(); using (var stream2 = new MemoryStream(playerData.metadata)) { try { if (memberData.TryReadAsBinary(stream2)) { var player = new Player() { SteamId = playerData.steam_id, Name = playerData.persona_name }; try { player.RankRM = int.Parse(memberData.Children.SingleOrDefault(c => c.Name == "STAT_ELO_RM").Value); } catch { } try { player.RankDM = int.Parse(memberData.Children.SingleOrDefault(c => c.Name == "STAT_ELO_DM").Value); } catch { } lobbyMembers.Add(player); } } catch (Exception e) { Console.WriteLine("Error while processing lobby member: " + playerData.persona_name); Console.WriteLine(e.ToString()); } } } Variables.LobbyMembers = lobbyMembers; } if (lobbyData.Children.Any(c => c.Name == "player0_desc")) { foreach (var lobbyMember in Variables.LobbyMembers) { lobbyMember.Position = 0; } var lobbyPlayers = new List <Player>(); for (var i = 0; i < 8; i++) { try { var player = new Player() { Position = i + 1 }; TryExtractNameAndRank(player, lobbyData.Children.SingleOrDefault(c => c.Name == "player" + i + "_desc")?.Value, Variables.Lobby.Ranked > 0); var lobbyMember = Variables.LobbyMembers.FirstOrDefault(lm => lm.Name == player.Name && lm.Position == 0); if (lobbyMember != null) { lobbyMember.Position = i + 1; player.SteamId = lobbyMember.SteamId; if (player.Rank == 0) { if (Variables.Lobby.Ranked != 2) { player.Rank = lobbyMember.RankRM; } else { player.Rank = lobbyMember.RankDM; } } player.RankRM = lobbyMember.RankRM; player.RankDM = lobbyMember.RankDM; } if (player.SteamId != 0) { try { using (IRepository repository = new Repository()) { var lobbySlot = repository.LobbySlots.Include(ls => ls.User).GetLobbySlot(player.SteamId, Variables.Lobby.LobbyId).FirstOrDefault(); if (lobbySlot == null) { var user = UserUtils.GetUser(repository, player); var lobby = repository.Lobbies.FirstOrDefault(l => l.LobbyId == Variables.Lobby.LobbyId); if (lobby == null) { throw new Exception("Lobby not found in database: " + Variables.Lobby.LobbyId); } lobbySlot = new LobbySlot() { Name = player.Name, RankDM = player.RankDM, RankRM = player.RankRM, User = user, Lobby = lobby }; repository.Add(lobbySlot); repository.SaveChanges(); LobbyUtils.AssignLobbySlotId(lobbySlot, player); } else { LobbyUtils.AssignLobbySlotId(lobbySlot, player); } } } catch (Exception e) { LogUtils.Error(string.Format("Failed to persist player joining to lobby event - Player: {0}({1}) - Lobby: {2}", player.Name, player.SteamId, Variables.Lobby.LobbyId), e); } } lobbyPlayers.Add(player); UserUtils.FetchUserGameStats(player); UserUtils.FetchUserProfile(player); UserUtils.FetchUserReputationStats(player); } catch (Exception e) { Console.WriteLine("Error while processing lobby player in slot: " + i); Console.WriteLine(e.ToString()); } lock (Variables.LobbyPlayers) { Variables.LobbyPlayers = lobbyPlayers; } } } } } if (Variables.ReplayMode) { Thread.Sleep(500); } }