public static int GetLevelMaxXp(this ICharacterLevels characterLevelsXml, int currentLevel) { return(currentLevel >= characterLevelsXml.MaxLevel ? characterLevelsXml[characterLevelsXml.MaxLevel].Xp : characterLevelsXml[currentLevel + 1].Xp); }
public static void ForceLevelUp(this AiCharacterXml myCharacter, ICharacterLevels characterLevels, IEquipmentData equipments, ICivilizations civilizations, int level) { myCharacter.CurrentAge = 1; myCharacter.Level = 1; myCharacter.Xp = 0; myCharacter.SkillPoints = 0; myCharacter.ActiveTechs.Clear(); if (level > characterLevels.MaxLevel) { level = characterLevels.MaxLevel; } if (level < 1) { level = 1; } var regions = new HashSet <int> { 0 }; foreach (var lvl in characterLevels.Gets(key => key.Level <= level) .OrderBy(key => key.Level)) { if (lvl.AgeUpEffect?.EnableAge > myCharacter.CurrentAge) { myCharacter.CurrentAge = (byte)lvl.AgeUpEffect.EnableAge; } if (lvl.SkillPointsEffect?.SkillPoints > 0) { myCharacter.SkillPoints += lvl.SkillPointsEffect.SkillPoints; } if (lvl.UnlockRegionEffect != null) { foreach (var region in lvl.UnlockRegionEffect) { regions.Add(region.Id); } } myCharacter.Xp = lvl.Xp; } //myCharacter.UnlockedRegion = UnlockedRegions.GetUnlockedRegion(regions); foreach (var equipment in equipments.Gets(key => key.Civilization == myCharacter.CivId) .OrderBy(key => key.Id)) { var ranks = equipment.Ranks.Gets().ToArray(); for (var index = 0; index < equipment.MaxRank; index++) { var rank = ranks[index]; var tech = rank.Tech; if (equipment.GrantedAtLevel && equipment.GrantingLevel <= level || equipment.QuestReward && equipment.AgeRequirement <= myCharacter.CurrentAge) { var status = !equipment.BldOrUnit ? TechStatusEnum.Obtainable : TechStatusEnum.Active; if (string.IsNullOrWhiteSpace(tech)) { var ageTech = civilizations.Get(myCharacter.CivId).Agetech .First(key => key.Tierequipmentid == equipment.Id); if (!equipment.BldOrUnit) { status = string.Equals(ageTech.Age, "Age0", StringComparison.OrdinalIgnoreCase) ? TechStatusEnum.Active : TechStatusEnum.Obtainable; } tech = ageTech.Tech; } myCharacter.ActiveTechs.AddOrUpdate(tech, status); } else { TechStatusEnum status; if (equipment.AgeRequirement <= myCharacter.CurrentAge) { status = !equipment.BldOrUnit ? TechStatusEnum.Obtainable : TechStatusEnum.Active; if (rank.Cost > 0) { myCharacter.SkillPoints -= rank.Cost; } } else { status = TechStatusEnum.Unobtainable; } myCharacter.ActiveTechs.AddOrUpdate(tech, status); } } } }