public static float CalculateHouseExpBonus(SkillStat skill) { if (skill.Level == 0) { return(0); } // up to 50% exp bonus return((skill.Level / (float)OldMaxLevel) * MaxExpBonusPerSlot); }
public async Task <IReadOnlyList <TownData> > GetTownsAsync() { return(await Task.Run(() => { List <TownData> result = new List <TownData>(); var activeSessions = this.gameData.GetActiveSessions(); //var vilages = this.gameData.GetVillages(); //foreach (var village in vilages) //{ foreach (var sess in activeSessions) { var village = gameData.GetVillageByUserId(sess.UserId); if (village == null) { continue; } var houses = this.gameData.GetVillageHouses(village); if (houses == null || houses.Count == 0) { continue; } var town = new TownData(); town.Id = village.Id; town.Level = village.Level; town.Experience = village.Experience; town.Name = village.Name; var owner = this.gameData.GetUser(village.UserId); town.Owner = new TownOwnerData(); town.Owner.Id = owner?.Id ?? Guid.Empty; town.Owner.UserId = owner?.UserId; town.Owner.UserName = owner?.UserName; var tHouses = new List <TownHouseData>(); var intSlotCount = 0; foreach (var house in houses) { ++intSlotCount; if (house.UserId == null) { continue; } var h = new TownHouseData(); h.Id = house.Id; h.Type = (TownHouseSlotType)house.Type; var bestHouseSkill = new SkillStat(); var chars = gameData.GetCharactersByUserId(house.UserId.GetValueOrDefault()); var isActive = false; if (chars != null && chars.Count > 0) { foreach (var c in chars) { var cs = gameData.GetCharacterSkills(c.SkillsId); var houseSkill = GetSkillByHouseType(cs, h.Type); if (c.UserIdLock == town.Owner.Id) { isActive = true; bestHouseSkill = houseSkill; h.AssignedCharacterId = c.Id; break; } if (houseSkill.Level > bestHouseSkill.Level) { bestHouseSkill = houseSkill; h.AssignedCharacterId = c.Id; } } h.Bonus = CalculateHouseExpBonus(bestHouseSkill); } h.IsActive = isActive; tHouses.Add(h); } town.TotalSlotCount = intSlotCount; town.UsedSlotCount = tHouses.Count; town.ActiveSlotCount = tHouses.Count(x => x.IsActive); town.TownHouses = tHouses; result.Add(town); } return result; })); }