private void OnGameStop(object sender, EventArgs e) { BroadcastHubController.CurrentLeagueState = "None"; GameInfoPage.ClearPlayers(); BroadcastHubController.ToTick.Remove(this); OnBaronDespawn(); OnElderDespawn(); EmbedIOServer.socketServer.SendEventToAllAsync(new HeartbeatEvent(gameState.stateData)); EmbedIOServer.socketServer.SendEventToAllAsync(new GameEnd()); Logging.Info("Game ended"); }
public void UpdateTeams(List <Player> newData, List <OCRTeam> teamData) { var bluePlayers = newData.Where(p => p.team == "ORDER").ToList(); var redPlayers = newData.Where(p => p.team != "ORDER").ToList(); //Init data on first run bool firstRun = false; if (blueTeam == null) { blueTeam = new Team(0, bluePlayers); firstRun = true; } if (redTeam == null) { redTeam = new Team(1, redPlayers); firstRun = true; } if (firstRun) { Logging.Info("Init Team data"); blueTeam.UpdateIDs(); redTeam.UpdateIDs(); GameInfoPage.InitPlayers(blueTeam); GameInfoPage.InitPlayers(redTeam); return; } //Iterate through each player var Players = GetAllPlayers(); for (int i = 0; i < Players.Count; i++) { var p = Players.ElementAt(i); //Determine if the player has died during baron Player newP = newData.Where(p2 => p2.summonerName.Equals(p.summonerName, StringComparison.Ordinal)).FirstOrDefault(); if (newP == null) { return; } Team playerTeam = (newP.team == "ORDER") ? blueTeam : redTeam; if (playerTeam.hasBaron && newP.isDead && !p.diedDuringBaron) { p.diedDuringBaron = true; var pvmList = (newP.team == "ORDER") ? PlayerViewModel.BluePlayers : PlayerViewModel.RedPlayers; pvmList.Single(pvm => pvm.PlayerName == p.summonerName).HasBaron = false; } //Level up Events if (p.level < 6 && newP.level >= 6) { controller.OnLevelUp(new LevelUpEventArgs(p.id, 6)); } else if (p.level < 11 && newP.level >= 11) { controller.OnLevelUp(new LevelUpEventArgs(p.id, 11)); } else if (p.level < 16 && newP.level >= 16) { controller.OnLevelUp(new LevelUpEventArgs(p.id, 16)); } //New item Events var newItems = newP.items.ToList().Where(i => !p.items.ToList().Any(l => i.itemID == l.itemID)); newItems = newItems.Where(i => DataDragon.Instance.FullIDs.Contains(i.itemID)); newItems.ToList().ForEach(newI => controller.OnItemCompleted(new ItemCompletedEventArgs(p.id, DataDragon.Instance.GetItemById(newI.itemID)))); //Update old information p.UpdateInfo(newP); } //Only incase OCR is being used. Make sure OCR is actually returning data if (ActiveSettings.current.UseOCR && teamData != null && teamData.Count != 0) { //Do not add redundant or incorrect gold values var goldDiff = Math.Abs(teamData.ElementAt(0).Gold - teamData.ElementAt(1).Gold); bool shouldUpdateGold = ((stateData.blueGold != teamData.ElementAt(0).Gold || stateData.redGold != teamData.ElementAt(1).Gold) && goldDiff < 25000 && (Math.Abs(goldDiff - lastGoldDifference) >= 500)) || stateData.gameTime - lastGoldUpdate >= 30; //Team Updates GetBothTeams().ForEach(t => { //Update Gold Data if (shouldUpdateGold) { var ocrData = teamData.Single((t2) => t2.Id == t.id); t.gold = ocrData.Gold; t.goldHistory.Add(stateData.gameTime, t.gold); //Update State Data if (t.id == 0) { stateData.blueGold = t.gold; Logging.Verbose($"Updating gold data. Data points for current game: {t.goldHistory.Count}"); } else { stateData.redGold = t.gold; } lastGoldDifference = goldDiff; lastGoldUpdate = stateData.gameTime; } //Determine if the team still has baron if (t.hasBaron && t.players.All((p) => p.diedDuringBaron)) { t.hasBaron = false; SetObjectiveData(backEndData.baron, stateData.baron, 0); controller.OnBaronDespawn(); Logging.Verbose("All Players died during baron"); } //Determine if the team still has elder if (t.hasElder && t.players.All(p => p.diedDuringElder)) { t.hasElder = false; SetObjectiveData(backEndData.dragon, stateData.dragon, 0); controller.OnElderDespawn(); Logging.Verbose("All Players died during elder"); } }); } }