Ejemplo n.º 1
0
        private static double GetEffectModifier(this EconTraitXmlEffect effect, int lvl, int index, int seed = 0)
        {
            var seedoffset = effect.SeedOffset;

            if (seedoffset != 0)
            {
                seedoffset -= 1;
            }
            else
            {
                seedoffset = index;
            }

            var finalSeed = seed > 0 && seedoffset < 4 ? (seed & (255 << (8 * seedoffset))) >> (8 * seedoffset) : 0;

            var result = effect.Scaling * lvl + effect.Amount;

            if (finalSeed <= 0)
            {
                return(result);
            }

            var modifier = ((int)(finalSeed * 0.078431375) - 10.0) * 0.004999999888241291 + 1.0;

            result = modifier * (result - 1.0) + 1.0;
            if (effect.IsBonus && result < 1)
            {
                result = 1.0 - result + 1.0;
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static string GetDisplayNameLocalized(this EconTraitXmlEffect effect, ILanguages languages,
                                                     string language = "English")
        {
            switch (effect.SubType)
            {
            case EffectSubTypeEnum.ActionEnable:
            {
                return(languages["stringtablex"][language][42080].Text.Replace("%2s",
                                                                               effect.Action.GetDisplayNameLocalized(languages, language)));
            }

            case EffectSubTypeEnum.AreaDamageReduction:
            {
                return
                    ($"{languages["stringtablex"][language][58257].Text}:");
            }

            case EffectSubTypeEnum.Armor:
            {
                return(languages["stringtablex"][language][49361].Text.Replace(" %s%2.1f", string.Empty)
                       .Replace("%s", effect.DamageType.GetDisplayNameLocalized(languages, language)));
            }

            case EffectSubTypeEnum.BuildingWorkRate:
            {
                return(languages["stringtablex"][language][55094].Text.Replace(" +%1.1f", string.Empty));
            }

            case EffectSubTypeEnum.BuildPoints:
            {
                return(languages["stringtablex"][language][58300].Text);
            }

            case EffectSubTypeEnum.CarryCapacity:
            {
                // ReSharper disable once SwitchStatementMissingSomeCases
                switch (effect.UnitType)
                {
                case EffectUnitTypeEnum.AbstractFarm:
                    return
                        ($"{languages["stringtablex"][language][65869].Text}:");

                case EffectUnitTypeEnum.AbstractFish:
                    return
                        ($"{languages["stringtablex"][language][65870].Text}:");

                case EffectUnitTypeEnum.AbstractFruit:
                    return
                        ($"{languages["stringtablex"][language][65866].Text}:");

                case EffectUnitTypeEnum.Fish:
                    return
                        ($"{languages["stringtablex"][language][65870].Text}:");

                case EffectUnitTypeEnum.Gold:
                    return
                        ($"{languages["stringtablex"][language][65872].Text}:");

                case EffectUnitTypeEnum.Herdable:
                    return
                        ($"{languages["stringtablex"][language][65867].Text}:");

                case EffectUnitTypeEnum.Huntable:
                    return
                        ($"{languages["stringtablex"][language][65868].Text}:");

                case EffectUnitTypeEnum.Stone:
                    return
                        ($"{languages["stringtablex"][language][65873].Text}:");

                case EffectUnitTypeEnum.Tree:
                    return
                        ($"{languages["stringtablex"][language][65871].Text}:");

                default:
                    throw new ArgumentOutOfRangeException(nameof(effect.UnitType), effect.UnitType, null);
                }
            }

            case EffectSubTypeEnum.ConvertResist:
            {
                return
                    ($"{languages["stringtablex"][language][58299].Text}:");
            }

            case EffectSubTypeEnum.CostAll:
            {
                return(languages["stringtablex"][language][34447].Text);
            }

            case EffectSubTypeEnum.Damage:
            {
                return(languages["stringtablex"][language][58207].Text.Replace(" %s%.1f", string.Empty));
            }

            case EffectSubTypeEnum.DamageBonus:
            {
                return(effect.UnitType != EffectUnitTypeEnum.Invalid
                            ? effect.UnitType.GetDisplayNameLocalized(languages, language) + " " + languages
                       ["stringtablex"][language][57581].Text
                            : languages["stringtablex"][language][57581].Text);
            }

            case EffectSubTypeEnum.DamageBonusReduction:
            {
                return(effect.UnitType != EffectUnitTypeEnum.Invalid
                            ? effect.UnitType.GetDisplayNameLocalized(languages, language) + " " + languages
                       ["stringtablex"][language][57582].Text
                            : languages["stringtablex"][language][57582].Text);
            }

            case EffectSubTypeEnum.HitPercent:
            {
                return(languages["stringtablex"][language][55093].Text.Replace(" +%1.0f", ":"));
            }

            case EffectSubTypeEnum.Hitpoints:
            {
                return(languages["stringtablex"][language][57580].Text);
            }

            case EffectSubTypeEnum.Los:
            {
                return(languages["stringtablex"][language][58204].Text);
            }

            case EffectSubTypeEnum.MaximumRange:
            {
                return(languages["stringtablex"][language][58203].Text);
            }

            case EffectSubTypeEnum.MaximumVelocity:
            {
                return(languages["stringtablex"][language][58206].Text);
            }

            case EffectSubTypeEnum.TargetSpeedBoost:
            {
                return(languages["stringtablex"][language][57584].Text);
            }

            case EffectSubTypeEnum.TargetSpeedBoostResist:
            {
                return(languages["stringtablex"][language][57585].Text);
            }

            case EffectSubTypeEnum.TrainPoints:
            {
                return(languages["stringtablex"][language][57583].Text);
            }

            case EffectSubTypeEnum.WorkRate:
            {
                return(languages["stringtablex"][language][55094].Text.Replace(" +%1.1f", string.Empty));
            }

            default:
            {
                throw new ArgumentOutOfRangeException(nameof(effect.SubType), effect.SubType, null);
            }
            }
        }