コード例 #1
0
        private static IBattleStatsDouble _getSummaryUnitMod(UnitType unitType, IReadOnlyDictionary <UnitType, Dictionary <BattleStatTypes, IBattleStatsDouble> > data)
        {
            var result = new BattleStatsDouble(1, 1);

            if (!data.ContainsKey(unitType) || data[unitType].ContainsKey(BattleStatTypes.SummaryMods))
            {
                return(result);
            }
            var unit = data[unitType][BattleStatTypes.SummaryMods];

            result.Attack += unit.Attack;
            result.Hp     += unit.Hp;
            return(result);
        }
コード例 #2
0
        public static Dictionary <UnitType, Dictionary <BattleStatTypes, IBattleStatsDouble> > GetUnitStatsAndMods(
            int userId, BattleTeches userTechs, BattleTeches allianceTeches, IBattleStatsDouble officerBonus,
            IBattleStatsDouble boosertsSummaryMods)
        {
            var key       = _stringGetKey(userId);
            var existData = TmpCache.Get(key);

            if (existData != null)
            {
                return((Dictionary <UnitType, Dictionary <BattleStatTypes, IBattleStatsDouble> >)existData);
            }
            boosertsSummaryMods.ConvertPercentToMod();
            var dic                      = new Dictionary <UnitType, Dictionary <BattleStatTypes, IBattleStatsDouble> >();
            var unitsStats               = UnitHelper.CreateBaseUnitStats();
            var userBaseUnitStats        = userTechs.GetBaseResultStats();
            var userProfileUnitStats     = userTechs.GetProfileResultStats();
            var allianceBaseUnitStats    = allianceTeches.GetBaseResultStats();
            var allianceProfileUnitStats = allianceTeches.GetProfileResultStats();

            foreach (var unitStats in unitsStats)
            {
                var unitTechType         = BattleTeches.UnitTypeToTechType(unitStats.Key);
                var statTypes            = new Dictionary <BattleStatTypes, IBattleStatsDouble>();
                var userUnitTechStat     = userProfileUnitStats[unitTechType];
                var allianceUnitTechStat = allianceProfileUnitStats[unitTechType];

                var summaryMod = new BattleStatsDouble(0, 0);
                summaryMod.Add(userBaseUnitStats, false);
                summaryMod.Add(userUnitTechStat, false);
                summaryMod.Add(allianceBaseUnitStats, false);
                summaryMod.Add(allianceUnitTechStat, false);
                summaryMod.Add(officerBonus, false);
                summaryMod.Add(boosertsSummaryMods, true);

                statTypes.Add(BattleStatTypes.UnitStat, unitStats.Value.DoubleStats);
                statTypes.Add(BattleStatTypes.UserTechMod, userBaseUnitStats);
                statTypes.Add(BattleStatTypes.UserUnitProfileTechMod, userUnitTechStat);
                statTypes.Add(BattleStatTypes.AllianceTechMod, allianceBaseUnitStats);
                statTypes.Add(BattleStatTypes.AllianceUnitProfileTechMod, allianceUnitTechStat);
                statTypes.Add(BattleStatTypes.OfficerBonus, officerBonus);
                statTypes.Add(BattleStatTypes.BooserMod, boosertsSummaryMods);
                statTypes.Add(BattleStatTypes.SummaryMods, summaryMod);
                dic.Add(unitStats.Key, statTypes);
            }

            TmpCache.AddOrUpdate(key, dic, _chacheTime);
            return(dic);
        }
コード例 #3
0
        public static Dictionary <UnitType, Dictionary <BattleStatTypes, IBattleStatsDouble> > CreateSkagryMods(
            NpcModel npc)
        {
            // todo  нужно определить одинаковоые или разные  статы
            var dic = new Dictionary <UnitType, Dictionary <BattleStatTypes, IBattleStatsDouble> >();
            //todo  будут ли статы отличными. тут хорошее место для применения отличных статов от базы
            var unitsStats = UnitHelper.CreateBaseUnitStats();
            //todo  заполняем статы для нпс
            var npcTeches = new BattleTeches(npc.NpcMother.TechProgress);
            //todo  можно вести свзяь  с офицерами и элитными войсками скагри
            var officerBonus = new BattleStatsDouble(0, 0);
            // todo можно ввести связь с бустерами игрока, или ввести рандом на понижение сил скагрей
            var boosertsSummaryMods = new BattleStatsDouble(0, 0);

            var npcAllianceTeches        = new BattleTeches(npc.NpcAllianceTeth.Teches);
            var userBaseUnitStats        = npcTeches.GetBaseResultStats();
            var userProfileUnitStats     = npcTeches.GetProfileResultStats();
            var allianceBaseUnitStats    = npcAllianceTeches.GetBaseResultStats();
            var allianceProfileUnitStats = npcAllianceTeches.GetProfileResultStats();

            foreach (var unitStats in unitsStats)
            {
                var unitTechType         = BattleTeches.UnitTypeToTechType(unitStats.Key);
                var statTypes            = new Dictionary <BattleStatTypes, IBattleStatsDouble>();
                var userUnitTechStat     = userProfileUnitStats[unitTechType];
                var allianceUnitTechStat = allianceProfileUnitStats[unitTechType];

                var summaryMod = new BattleStatsDouble(0, 0);
                summaryMod.Add(userBaseUnitStats, false);
                summaryMod.Add(userUnitTechStat, false);
                summaryMod.Add(allianceBaseUnitStats, false);
                summaryMod.Add(allianceUnitTechStat, false);
                summaryMod.Add(officerBonus, false);
                summaryMod.Add(boosertsSummaryMods, true);

                statTypes.Add(BattleStatTypes.UnitStat, unitStats.Value.DoubleStats);
                statTypes.Add(BattleStatTypes.UserTechMod, userBaseUnitStats);
                statTypes.Add(BattleStatTypes.UserUnitProfileTechMod, userUnitTechStat);
                statTypes.Add(BattleStatTypes.AllianceTechMod, allianceBaseUnitStats);
                statTypes.Add(BattleStatTypes.AllianceUnitProfileTechMod, allianceUnitTechStat);
                statTypes.Add(BattleStatTypes.OfficerBonus, officerBonus);
                statTypes.Add(BattleStatTypes.BooserMod, boosertsSummaryMods);
                statTypes.Add(BattleStatTypes.SummaryMods, summaryMod);
                dic.Add(unitStats.Key, statTypes);
            }
            return(dic);
        }
コード例 #4
0
        public static IBattleStatsDouble GetBoosterBonuses(IDbConnection connection, int userId, IStoreService storeService)
        {
            var boosters = storeService.GetActiveBosters(connection, userId);

            if (boosters == null || !boosters.Any())
            {
                return(new BattleStatsDouble(0, 0));
            }

            var products        = storeService.SelectProductItems(connection, boosters.Select(i => i.ProductStoreId));
            var props           = products.Select(i => i.Property.GetBooserProperty()).ToList();
            var combineBoosters = props.Where(i => i.Attack > 0 && i.Hp > 0).ToList();

            if (combineBoosters.Any() && combineBoosters.Count == 1)
            {
                return(combineBoosters[0]);
            }
            if (combineBoosters.Count > 1)
            {
                var max = combineBoosters.Max(i => i.Attack);
                return(combineBoosters[combineBoosters.FindIndex(i => i.Attack == max)]);
            }
            var booster = new BattleStatsDouble(0, 0);

            var atkMax = props.Where(i => i.Hp < 1).Max(i => i.Attack);
            var hpMax  = props.Where(i => i.Attack < 1).Max(i => i.Hp);

            if (atkMax > 0)
            {
                booster.Attack = atkMax;
            }
            if (hpMax > 0)
            {
                booster.Hp = atkMax;
            }
            return(booster);
        }