Ejemplo n.º 1
0
        public async Task ForEachPlog_Add(CharacterInformation info, PlogDbContext db, Dictionary <string, Item> itemDict, int batchNumber)
        {
            if (!info.Plog.Active)
            {
                info.Plog.Modified = DateTime.UtcNow;
                await _lock.WaitAsync();

                db.Plogs.Update(info.Plog);
                _lock.Release();
                return;
            }

            var totalPower = info.AbilitiesResult.Records.TotalAbility;

            var powerScore = await _powerService.CalculateScore(totalPower);

            var items = info.Items;

            var statLog = new ClanMemberStatLog
            {
                ClanMemberId = info.Plog.Id,
                Recorded     = DateTime.UtcNow,
                BatchId      = batchNumber,

                Level             = info.Character.Level, // No api route known, hard to parse from html
                HongmoonLevel     = info.Character.HongmoonLevel,
                Score             = powerScore,
                AttackPower       = totalPower.AttackPower,
                PvpAttackPower    = totalPower.PvpAttackPower,
                BossAttackPower   = totalPower.BossAttackPower,
                Critical          = totalPower.Critical,
                CriticalDamage    = totalPower.CriticalDamage,
                AdditionalDamage  = totalPower.AdditionalDamage,
                Accuracy          = totalPower.Accuracy,
                Piercing          = totalPower.Piercing,
                Concentration     = totalPower.Concentration,
                DebuffDamage      = totalPower.DebuffDamage,
                FlameDamage       = totalPower.FireDamage,
                FrostDamage       = totalPower.IceDamage,
                EarthDamage       = totalPower.EarthDamage,
                LightningDamage   = totalPower.LightningDamage,
                ShadowDamage      = totalPower.ShadowDamage,
                WindDamage        = totalPower.WindDamage,
                Health            = totalPower.Health,
                Defense           = totalPower.Defense,
                PvpDefense        = totalPower.PvpDefense,
                BossDefense       = totalPower.BossDefense,
                Evasion           = totalPower.Evasion,
                Block             = totalPower.Block,
                CriticalDefense   = totalPower.CriticalDefense,
                DamageReduction   = totalPower.DamageReduction,
                HealthRegen       = totalPower.HealthRegen,
                HealthRegenCombat = totalPower.HealthCombatRegen,
                DebuffDefense     = totalPower.DebuffDamageDefense,

                Weapon      = itemDict.GetValue(items.Weapon),
                Gem1        = itemDict.GetValue(items.Gem1),
                Gem2        = itemDict.GetValue(items.Gem2),
                Gem3        = itemDict.GetValue(items.Gem3),
                Gem4        = itemDict.GetValue(items.Gem4),
                Gem5        = itemDict.GetValue(items.Gem5),
                Gem6        = itemDict.GetValue(items.Gem6),
                Ring        = itemDict.GetValue(items.Ring),
                Earring     = itemDict.GetValue(items.Earring),
                Necklace    = itemDict.GetValue(items.Necklace),
                Bracelet    = itemDict.GetValue(items.Bracelet),
                Belt        = itemDict.GetValue(items.Belt),
                Gloves      = itemDict.GetValue(items.Gloves),
                Soul        = itemDict.GetValue(items.Soul),
                Heart       = itemDict.GetValue(items.Heart),
                Pet         = itemDict.GetValue(items.Pet),
                SoulBadge   = itemDict.GetValue(items.SoulBadge),
                MysticBadge = itemDict.GetValue(items.MysticBadge),
            };

            try
            {
                await _lock.WaitAsync();

                db.Logs.Add(statLog);
                _lock.Release();
            }
            catch (Exception ex)
            {
                await _loggingService.LogErrorAsync(ex.StackTrace);
            }
        }