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); }
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); } } }