private void CompetitiveStage(IRallyPilotsServices pilots, IPeople people, IRallyNavigatorsServices navigators, ITeamServices team, IRaceHistoryServices raceHistory, ICarServices cars, List <CompetitionsTeams> teams, RallyRunway runway, int count, List <CompetitionsTeams> crashed, decimal stages, int numberStage) { string input = string.Empty; for (int i = 0; i < count; i++) { var pilot = pilots.GetPilotNoTracking(teams[i].PilotId); var energyPilot = pilots.EnergyPilot(teams[i].PilotId) - stages * damageConstant; people.ReduceEnergy(pilot, energyPilot); var navigator = navigators.GetNavigator(teams[i].NavigatorId); var energyNavigator = navigators.EnergyNavigator(teams[i].NavigatorId) - stages * damageConstant; people.ReduceEnergy(navigator, energyNavigator); var teamRace = team.FindUserAsync(teams[i].TeamId).GetAwaiter().GetResult(); int drive; if (numberStage == 1) { if (i == 0) { if (teams[i].Drive == DriveType.Aggressive) { input = $"Първи стартира отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който тръгва с мръсна газ. Наблюдаваме доста агресивно" + $" каране дано, навигатор до него {navigator.FirstName} му влее малко разум."; drive = 3; } else if (teams[i].Drive == DriveType.Normal) { input = $"Първи стартира отборът на {teamRace.Name}, с пилот {pilot.FirstName}" + $" и навигатор до него {navigator.FirstName} "; drive = 2; } else { input = $"Първи стартира отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който потегля доста плахо. С това предпазливо каране, ще " + $"изостане доста в класацията, дано навигатор до него {navigator.FirstName} му повлияе полужително."; drive = 1; } } else { if (teams[i].Drive == DriveType.Aggressive) { input = $"Следващ е отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който тръгва с мръсна газ. Наблюдаваме доста агресивно" + $" каране дано, навигатор до него {navigator.FirstName} му влее малко разум."; drive = 3; } else if (teams[i].Drive == DriveType.Normal) { input = $"Следващия отборът на старта е {teamRace.Name}, с пилот {pilot.FirstName}" + $" и навигатор до него {navigator.FirstName} "; drive = 2; } else { input = $"Към старт линията се приближава отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който потегля доста плахо. С това предпазливо каране, ще " + $"изостане доста в класацията, дано навигатор до него {navigator.FirstName} му повлияе полужително."; drive = 1; } } } else { if (teams[i].Drive == DriveType.Aggressive) { input = $"Пилот {pilot.FirstName} от отборът на {teamRace.Name}, продължава с агресивното шофиране. Не съм обеден че това ще му донесе привилегии " + $" за напред. Дано, навигатор до него {navigator.FirstName} го успокой за да не станем свидетели на катастрофа."; drive = 3; } else if (teams[i].Drive == DriveType.Normal) { input = $"Пилот {pilot.FirstName} от отборът на {teamRace.Name}, продължава с едно чудестно представяне."; drive = 2; } else { input = $"Пилот {pilot.FirstName} от отборът на {teamRace.Name}, продължава с плахото шофиране. Очаквах повече от този пилот " + $"Дано навигатор до него {navigator.FirstName} даде малко смелост да натисне педала."; drive = 1; } } raceHistory.AddHistory(input); var random = RandomEvents(pilot, navigator, runway.Difficulty, drive); if (random == "the end") { input = $"Мик невнимание и пилота {pilot.FirstName} изпусна завоя, колата се преобърна в канавката. Дано всички са наред. " + $"Това беше края на състезанието за отбор: {teamRace.Name}"; var date = new DateTime(); ratingList.AddInRatingList(teamRace, date); crashed.Add(teams[i]); } else if (random == "Ok") { input = $"Без проблеми отборрът на {teamRace.Name} с {pilot.FirstName} зад волана и навигатор до него {navigator.FirstName}" + $"преминаха през втората контрола"; var turbo = cars.GetTurbo(teamRace.User); if (turbo != null && teams[i].UseOfTurboType == UseOfTurboType.Medium) { var speed = (cars.GetMaxCurrentSpeed(teamRace.User) + cars.GetTurbo(teamRace.User).Speed) / 60; //to convene in km / h double time = (double)stages / (double)speed; var date = new DateTime(); var realTime = date.AddMinutes(time); ratingList.AddInRatingList(teamRace, realTime); } else { var speed = cars.GetMaxCurrentSpeed(teamRace.User) / 60; //to convene in km / h double time = (double)stages / (double)speed; var date = new DateTime(); var realTime = date.AddMinutes(time); ratingList.AddInRatingList(teamRace, realTime); } } else { input = $"Пилота {pilot.FirstName} от отбора на {teamRace.Name}, се разсея за момент и излезе от идеалната линия. Това му костваше цени секунди"; var turbo = cars.GetTurbo(teamRace.User); if (turbo != null && teams[i].UseOfTurboType == UseOfTurboType.Medium) { var speed = (cars.GetMaxSpeed(teamRace.User) + cars.GetTurbo(teamRace.User).Speed) / 60; //to convene in km / h double time = (double)stages / (double)speed; var date = new DateTime(); var realTime = date.AddMinutes(time).AddSeconds(double.Parse(random)); ratingList.AddInRatingList(teamRace, realTime); } else { var speed = cars.GetMaxSpeed(teamRace.User) / 60; //to convene in km / h double time = (double)stages / (double)speed; var date = new DateTime(); var realTime = date.AddMinutes(time).AddSeconds(double.Parse(random)); ratingList.AddInRatingList(teamRace, realTime); } } raceHistory.AddHistory(input); pilots.DecreaseEnergy(pilot.Id, 100 - (int)energyPilot); pilots.IncreaseExperience(pilot.Id, numberStage); //2 comes from the number of Stage - stageTwo navigators.DecreaseEnergy(navigator.Id, 100 - (int)energyNavigator); navigators.IncreaseExperience(navigator.Id, numberStage); //2 comes from the number of Stage - stageTwo cars.Damage(teamRace.CarId, numberStage, runway.Difficulty); //2 comes from the number of Stage - stageTwo } }