public async Task <float> GetSumAttackStrength(Squad squad) { int attackLevel = FightLevelByXP(squad.Army.AttackXP); var sumNumberOfUnits = squad.SquadUnits.Sum(su => su.NumberOfUnits); var sumAttackBase = squad.SquadUnits .Where(su => su.Unit.AttackStrength > 0) .Sum(su => su.NumberOfUnits * (su.Unit.AttackStrength + attackLevel)); //generate moral randomly Random random = new Random(); var moral = random.Next(2) > 0 ? true : false; // ADDING ATTACK BONUSES float attackBonusPercentage = 0; // Player ID var playerId = squad.Army.PlayerId; //moral Bonus if (moral) { attackBonusPercentage += 5; } else { attackBonusPercentage -= 5; } // Sonar gun attackBonusPercentage += await _laboratoryService.GetInnovationBonusPercentage(playerId, InnovationTypes.SonarGun); // Underwater Martial Arts attackBonusPercentage += await _laboratoryService.GetInnovationBonusPercentage(playerId, InnovationTypes.UnderwaterMartialArts); // Adding bonuses var attackBonus = await _incidentService.GetSoldierSatisfactionBonus(playerId) * sumNumberOfUnits; var sumAttackStrength = (sumAttackBase + attackBonus) * (1f + attackBonusPercentage / 100f); return(sumAttackStrength); }