private async Task IncreaseRoundCountAsync() { var game = await db.Game.FirstAsync(); game.Round++; await db.SaveChangesAsync(); }
public async Task <UpgradeViewModel> ResearchByIdAsync(int userId, int upgradeTypeId) { var user = await db.Users .Include(u => u.Country) .ThenInclude(c => c.Upgrades) .ThenInclude(u => u.Type) .SingleAsync(u => u.Id == userId); var upgrade = user.Country.Upgrades.Single(u => u.Type.Id == upgradeTypeId); if (upgrade.State == UpgradeState.Unresearched && !user.Country.Upgrades.Any(u => u.State == UpgradeState.InProgress)) { // can upgrade, starting upgrade user.Country.UpgradeTimeLeft = 15; upgrade.State = UpgradeState.InProgress; await db.SaveChangesAsync(); var upgrades = await GetUpgradesAsync(userId); return(upgrades.Single(u => u.Id == upgradeTypeId)); } else { throw new HttpResponseException { Status = 400, Value = "Most nem indíthatod el ezt a fejlesztést!" }; } }
public async Task <string> CreateRefreshTokenAsync(User user) { string charPool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < 30; ++i) { int index = (int)(random.NextDouble() * charPool.Length); if (index == charPool.Length) { --index; } sb.Append(charPool[index]); } string refreshToken = sb.ToString(); user.RefreshToken = refreshToken; await db.SaveChangesAsync(); return(refreshToken); }
public async Task <User> CreateUserAsync(RegisterDTO registerData) { var buildingTypes = db.BuildingTypes; var upgradeTypes = db.UpgradeTypes; var upgrades = new List <Upgrade>(); var buildings = new List <Building>(); foreach (var buildingType in buildingTypes) { buildings.Add(new Building { Type = buildingType, Count = 0 }); } foreach (var upgradeType in upgradeTypes) { upgrades.Add(new Upgrade { Type = upgradeType, State = UpgradeState.Unresearched }); } var buildingGroup = new BuildingGroup { Buildings = buildings }; var attackingArmy = new UnitGroup(); var defendingArmy = new UnitGroup(); var user = new User { UserName = registerData.UserName, GameId = 1 }; var country = new Country { Name = registerData.CountryName, BuildingGroup = buildingGroup, AttackingArmy = attackingArmy, DefendingArmy = defendingArmy, Upgrades = upgrades, User = user, Pearl = 100000, Coral = 100000, Stone = 5000 }; user.Country = country; await db.SaveChangesAsync(); return(user); }
public async Task <BuildingInfoViewModel> PurchaseBuildingByIdAsync(int userId, int buildingId) { var user = await db.Users.Include(ent => ent.Country) .ThenInclude(ent => ent.BuildingGroup) .ThenInclude(ent => ent.Buildings) .ThenInclude(ent => ent.Type) .SingleAsync(user => user.Id == userId); var building = user.Country.BuildingGroup.Buildings.Single(building => building.Type.Id == buildingId); var buildingTypes = db.BuildingTypes.ToList(); var underConstructionCount = user.Country.BuildingGroup.Buildings.Sum(building => building.UnderConstructionCount); if (underConstructionCount > 0) { throw new HttpResponseException { Status = 400, Value = "Már épül egy épületed!" }; } if (building.Type.Price > user.Country.Pearl) { throw new HttpResponseException { Status = 400, Value = "Nincs elég gyöngyöd az építéshez!" }; } if (building.Type.StonePrice > user.Country.Stone) { throw new HttpResponseException { Status = 400, Value = "Nincs elég köved az építéshez!" }; } building.UnderConstructionCount++; user.Country.BuildingTimeLeft = buildingTypes.Single(type => type.Id == buildingId).BuildingTime; user.Country.Pearl -= building.Type.Price; user.Country.Stone -= building.Type.StonePrice; await db.SaveChangesAsync(); var buildingInfos = await GetBuildingInfosAsync(userId); return(buildingInfos.Single(bi => bi.Id == buildingId)); }
public async Task <IEnumerable <SimpleUnitViewModel> > AttackAsync(int attackerUserId, AttackDTO attack) { var game = await db.Game .Include(game => game.Attacks) .SingleAsync(); var unitTypes = await db.UnitTypes.ToListAsync(); var attackingUser = await db.Users .Include(u => u.Country) .ThenInclude(country => country.DefendingArmy) .ThenInclude(defendingArmy => defendingArmy.Units) .ThenInclude(unit => unit.Type) .ThenInclude(type => type.Levels) .Include(u => u.Country) .ThenInclude(country => country.AttackingArmy) .ThenInclude(attackingArmy => attackingArmy.Units) .ThenInclude(unit => unit.Type) .ThenInclude(type => type.Levels) .SingleAsync(u => u.Id == attackerUserId); var defendingCountry = await db.Countries .Include(country => country.User) .SingleAsync(c => c.UserId == attack.DefenderUserId); var defendingUser = defendingCountry.User; var tranferList = new List <Unit>(); await db.SaveChangesAsync(); foreach (var sendUnit in attack.AttackingUnits) { int ownedCount = attackingUser.Country.DefendingArmy.Units .Count(u => u.Type.Id == sendUnit.Id && u.Level == sendUnit.Level); if (sendUnit.SendCount > ownedCount) { throw new HttpResponseException { Status = 400, Value = "Nem küldhetsz több egységet, mint amennyid van!" } } ; else { //Összeszedjük a kívánt egységeket a defending armyból foreach (var oneAttack in attack.AttackingUnits) { foreach (var defender in attackingUser.Country.DefendingArmy.Units) { if (defender.Type.Id == oneAttack.Id //Group by LVL && defender.Level == oneAttack.Level) { oneAttack.SendCount--; tranferList.Add(defender); } if (oneAttack.SendCount <= 0) { break; } } } // levonjuk az egységeket a defending armyból // ÉS hozzáadjuk az attacking armyhoz foreach (var item in tranferList) { attackingUser.Country.DefendingArmy.Units.Remove(item); item.UnitGroupId = attackingUser.Country.AttackingArmyId; attackingUser.Country.AttackingArmy.Units.Add(item); } } } game.Attacks.Add(new Attack { AttackerUserId = attackingUser.Id, AttackerUser = attackingUser, DefenderUserId = defendingUser.Id, DefenderUser = defendingUser, GameId = game.Id, UnitList = tranferList }); await db.SaveChangesAsync(); List <SimpleUnitViewModel> result = new List <SimpleUnitViewModel>(); var found = false; foreach (var unit in tranferList) { found = false; foreach (var unitvm in result) { if (unitvm.TypeId == unit.Type.Id //Group by LVL && unitvm.Level == unit.Level) { unitvm.Count++; found = true; break; } } if (!found) { result.Add(new SimpleUnitViewModel() { Count = 1, Level = unit.Level, TypeId = unit.Type.Id }); } } return(result); }