protected override async Task GameOver() { var winners = Battle.GetTeam(Battle.GetWinner()); if (Battle.SizeTeamB == 0) { Console.WriteLine("Game Over with no enemies existing."); } if (Battle.GetWinner() == Team.A) { var RewardTables = Rewards; // Get the appropiate chest rewards table var chests = chestTable[Difficulty]; chests.RemoveAll(s => s is DefaultReward d && !d.HasChest); // If there was *no* mimic, add a counter weight var lurCapBonus = new[] { 16, 12, 10, 9, 8 }; if (!Battle.TeamB.Any(f => f.Name.Contains("Mimic"))) { chests.Add(new DefaultReward() { Weight = chests.Weight * lurCapBonus[LureCaps] }); } RewardTables.Add(chests); if (Battle.TeamB.Any(f => f.Name.Contains("Djinn"))) { var djinnTable = new RewardTable(); var djinnWeight = (int)Difficulty; if (Battle.TeamB.Any(f => f.Name.Contains("enus Djinn"))) { djinnTable.Add(new DefaultReward() { Djinn = "Venus", Weight = 1 }); } if (Battle.TeamB.Any(f => f.Name.Contains("ars Djinn"))) { djinnTable.Add(new DefaultReward() { Djinn = "Mars", Weight = 1 }); } if (Battle.TeamB.Any(f => f.Name.Contains("upiter Djinn"))) { djinnTable.Add(new DefaultReward() { Djinn = "Jupiter", Weight = 1 }); } if (Battle.TeamB.Any(f => f.Name.Contains("ercury Djinn"))) { djinnTable.Add(new DefaultReward() { Djinn = "Mercury", Weight = 1 }); } djinnTable.Add(new DefaultReward() { Weight = djinnTable.Weight * (10 - (int)Difficulty) * 3 - djinnTable.Weight }); RewardTables.Add(djinnTable); } winners.OfType <PlayerFighter>().ToList().ForEach(async p => await ServerGames.UserWonBattle(UserAccountProvider.GetById(p.Id), RewardTables.GetRewards(), p.battleStats, lobbyChannel, BattleChannel)); winners.OfType <PlayerFighter>().ToList().ForEach(async p => await ServerGames.UserWonSingleBattle(UserAccountProvider.GetById(p.Id), lobbyChannel, Difficulty)); chests.RemoveAll(s => s is DefaultReward d && !d.HasChest); _ = WriteGameOver(); } else { var losers = winners.First().battle.GetTeam(winners.First().enemies); losers.ForEach(p => p.Moves.OfType <Djinn>().ToList().ForEach(d => { d.Summon(p); d.CoolDown = 0; })); losers.ConvertAll(s => (PlayerFighter)s).ForEach(async p => await ServerGames.UserLostBattle(UserAccountProvider.GetById(p.Id), lobbyChannel)); _ = WriteGameOver(); } await Task.CompletedTask; }