Ejemplo n.º 1
0
        private void _ProcessDamage(
            ISet <IItemStat> stats,
            List <TranslatedStat> result,
            List <string> damageTypes,
            TranslatedStatType location)
        {
            var candidates = stats.Where(m => damageTypes.Contains(m.Stat));

            foreach (var minDmg in candidates)
            {
                var type     = minDmg.Stat.Replace("offensive", "").Replace("Min", "");
                var maxDmg   = stats.FirstOrDefault(m => m.Stat.Equals($"offensive{type}Max"));
                var chance   = stats.FirstOrDefault(m => m.Stat.Equals($"offensive{type}Chance"));
                var duration = stats.FirstOrDefault(m => m.Stat.Equals($"offensive{type}DurationMin"));

                var minDmgVal = minDmg.Value;

                var sb = new StringBuilder();

                if (chance != null)
                {
                    sb.Append(_language.GetTag("customtag_damage_chanceof"));
                }

                if (maxDmg != null)
                {
                    sb.Append(_language.GetTag("customtag_damage_123"));
                }
                else
                {
                    sb.Append(type.Contains("Modifier")
                        ? _language.GetTag("customtag_damage_13%")
                        : _language.GetTag("customtag_damage_13"));
                }

                if (duration != null)
                {
                    sb.Append(_language.GetTag("customtag_damage_delay"));
                    minDmgVal *= duration.Value;
                }

                var sm = new TranslatedStat {
                    Text   = sb.ToString(),
                    Param0 = chance?.Value,
                    Param1 = minDmgVal,
                    Param2 = maxDmg?.Value,
                    Param3 = DamageTypeTranslation(type),
                    Param4 = duration?.Value,
                    Type   = location
                };

                result.Add(sm);
            }
        }
Ejemplo n.º 2
0
        public List <TranslatedStat> ProcessStats(ISet <IItemStat> stats, TranslatedStatType type)
        {
            List <TranslatedStat> result = new List <TranslatedStat>();

            if (stats == null)
            {
                return(result);
            }

            switch (type)
            {
            case TranslatedStatType.BODY:
                ProcessBodyDamage(stats, result);
                ProccessBodyRetaliation(stats, result);
                MapSimpleBodyEntries(stats, result);
                ProcessRacialBonuses(stats, result);
                ProcessConversionDamage(stats, result);
                ProcessReducedResistances(stats, result);
                ProcessFactionWrits(stats, result);
                ProcessAddMastery(stats, result);

                ProcessStun(stats, result);
                ProcessAngleDamage(stats, result);
                ProcessChainDamage(stats, result);
                ProcessAddSkill(stats, result);

                break;

            case TranslatedStatType.HEADER:
                ProcessShieldBlock(stats, result);
                ProcessHeaderDamage(stats, result);
                MapSimpleHeaderEntries(stats, result);
                ProcessAttackSpeed(stats, result);
                break;

            case TranslatedStatType.PET:
            {
                // In earlier preprocessing the pet stats were prefixed with "pet"
                List <TranslatedStat> petResults = new List <TranslatedStat>();

                var petStats = new HashSet <IItemStat>(stats.Where(m => m.Stat.StartsWith("pet") && m.Stat != "petBonusName")
                                                       .Select(m => new ItemStat
                    {
                        Stat      = m.Stat.Remove(0, 3),
                        TextValue = m.TextValue,
                        Value     = m.Value,
                        Record    = m.Record
                    }));

                ProcessShieldBlock(petStats, petResults);
                ProcessHeaderDamage(petStats, petResults);
                ProcessBodyDamage(petStats, petResults);
                ProccessBodyRetaliation(petStats, petResults);
                MapSimpleHeaderEntries(petStats, petResults);
                MapSimpleBodyEntries(petStats, petResults);
                ProcessRacialBonuses(petStats, petResults);
                ProcessConversionDamage(petStats, petResults);
                ProcessReducedResistances(petStats, petResults);

                ProcessStun(petStats, result);
                ProcessAngleDamage(petStats, result);
                ProcessChainDamage(petStats, result);

                result.AddRange(petResults.Select(m => { m.Type = TranslatedStatType.PET; return(m); }));
            }
            break;

            case TranslatedStatType.SKILL:
                throw new NotImplementedException();

            case TranslatedStatType.FOOTER:
                throw new NotImplementedException();
            }

            return(result);
        }