private List <BossFightProgressionOLD> GetBossFightProgression(int guildId) { var bossFights = _bossFightRepository.GetAll(true); var guildProgression = _guildRepository.GetBossFightsCleared(guildId); return(bossFights.Select(bossFight => guildProgression.Contains(bossFight.Id) ? new BossFightProgressionOLD(bossFight, true) : new BossFightProgressionOLD(bossFight, false)).ToList()); }
private void Validate_Successful_Encounters(int id) { bool limitToCurrentlyInvalid = id == -1; // For now, limit it to one BossFight to check that it works //var bossFights = _bossFightRepository.GetAll(true).Where(bf => bf.Id == 86).ToList(); var bossFights = _bossFightRepository.GetAll(true); if (id != -1) { bossFights = bossFights.Where(bf => bf.Id == id).ToList(); limitToCurrentlyInvalid = false; } var i = 0; foreach (var bossFight in bossFights) { i++; _logger.Debug($"Checking BossFight: {i}/{bossFights.Count} {bossFight.Name}"); // Check if this bossfight has difficulty settings #region Bosses with difficulty settings if (_bossFightRepository.DifficultyRecordsExist(bossFight.Id)) { var difficulties = _bossFightRepository.GetDifficultySettings(bossFight.Id).OrderByDescending(d => d.OverrideHitpoints); _logger.Debug($"BossFight {bossFight.Name} has {difficulties.Count()} difficulty settings"); var encounters = _encounterRepository.GetSuccessfulEncounters(bossFight.Id, limitToCurrentlyInvalid); _logger.Debug($"Encounters to check: {encounters.Count}"); var eN = 0; foreach (var encounter in encounters) { eN++; var damageTaken = _encounterRepository.GetTopDamageTakenForNpc(encounter.Id, difficulties.First().OverrideHitpointTarget); bool passedOneDifficulty = false; foreach (var difficulty in difficulties) { if (damageTaken >= difficulty.OverrideHitpoints) { if (encounter.EncounterDifficultyId == difficulty.EncounterDifficultyId) { if (encounter.ValidForRanking) { //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) is valid for {3} mode but the difficulty is already correct and the encounter is already valid.", encounter.Id, eN, encounters.Count, difficulty.EncounterDifficulty.Name)); passedOneDifficulty = true; break; } //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) is valid for {3} mode but the difficulty is already correct. Setting validity now.", encounter.Id, eN, encounters.Count, difficulty.EncounterDifficulty.Name)); _encounterRepository.MakeValidForRankings(encounter.Id); passedOneDifficulty = true; break; } if (encounter.ValidForRanking) { //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) is valid for {3} mode and is already valid, but the difficulty is incorrect. Changing from {4} to {5}.", encounter.Id, eN, encounters.Count, difficulty.EncounterDifficulty.Name, encounter.EncounterDifficultyId, difficulty.EncounterDifficultyId)); _encounterRepository.MakeValidForRankings(encounter.Id, difficulty.EncounterDifficultyId); passedOneDifficulty = true; break; } //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) is valid for {3} mode. Updating both difficulty and validity now.", encounter.Id, eN, encounters.Count, difficulty.EncounterDifficulty.Name)); _encounterRepository.MakeValidForRankings(encounter.Id, difficulty.EncounterDifficultyId); passedOneDifficulty = true; break; } //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) is not valid for {3} mode.", encounter.Id, eN, encounters.Count, difficulty.EncounterDifficulty.Name)); } if (!passedOneDifficulty && encounter.ValidForRanking) { // This encounter should not be valid for ranking, so update it here _logger.Debug( $"Encounter {encounter.Id} ({eN}/{encounters.Count}) was marked as valid, but didn't pass any difficulty requirements"); _encounterRepository.MakeInvalidForRankings(encounter.Id); } } } #endregion else #region Bosses without difficulty settings { // If we get here, then this bossfight doesn't have difficulty settings, so proceed normally if (bossFight.Hitpoints == 0) { continue; } var encounters = _encounterRepository.GetSuccessfulEncounters(bossFight.Id, limitToCurrentlyInvalid); _logger.Debug($"Encounters to check: {encounters.Count}"); var eN = 0; foreach (var encounter in encounters) { eN++; var damageTaken = _encounterRepository.GetTopDamageTakenForNpc(encounter.Id, string.IsNullOrEmpty(bossFight.HitpointTarget) ? bossFight.Name : bossFight.HitpointTarget); if (damageTaken >= bossFight.Hitpoints && !encounter.ValidForRanking) { // This encounter should be valid for ranking, so update it here //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) should be valid but has not been set yet - damage taken: {3}", encounter.Id, eN, encounters.Count, damageTaken)); _encounterRepository.MakeValidForRankings(encounter.Id); } if (damageTaken < bossFight.Hitpoints && encounter.ValidForRanking) { // This encounter should not be valid for ranking, so update it here //_logger.Debug(string.Format("Encounter {0} ({1}/{2}) invalid - damage taken: {3}", encounter.Id, eN, encounters.Count, damageTaken)); _encounterRepository.MakeInvalidForRankings(encounter.Id); } } } #endregion _logger.Debug($"Finished checking encounters for {bossFight.Name}"); } }