コード例 #1
0
ファイル: TownService.cs プロジェクト: zerratar/RavenNest
        public static float CalculateHouseExpBonus(SkillStat skill)
        {
            if (skill.Level == 0)
            {
                return(0);
            }

            // up to 50% exp bonus
            return((skill.Level / (float)OldMaxLevel) * MaxExpBonusPerSlot);
        }
コード例 #2
0
ファイル: TownService.cs プロジェクト: zerratar/RavenNest
        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;
            }));
        }