public void AddElementTest() { XmlArrayElement xmlArrayElement = new XmlArrayElement(); xmlArrayElement.AddElement(new XElement("Test")); xmlArrayElement.AddElement(new XElement("Test")); xmlArrayElement.AddElement(new XElement("Test")); Assert.AreEqual(2, xmlArrayElement.MaxIndex); Assert.AreEqual(3, xmlArrayElement.Elements.Count()); }
private XmlArrayElement GetTalentPrerequisites(XElement talentElement) { XmlArrayElement prerequisiteTalentArray = new XmlArrayElement(); foreach (XElement prerequisiteElement in talentElement.Elements("PrerequisiteTalentArray")) { prerequisiteTalentArray.AddElement(prerequisiteElement); } return(prerequisiteTalentArray); }
public void AddRemovedElementsTest() { XmlArrayElement xmlArrayElement = new XmlArrayElement(); xmlArrayElement.AddElement(new XElement("Test0")); // 0 xmlArrayElement.AddElement(new XElement("Test1")); // 1 xmlArrayElement.AddElement(new XElement("Test2")); // 2 xmlArrayElement.AddElement(new XElement("Test3")); // 3 xmlArrayElement.AddElement(new XElement("Test4")); // 4 xmlArrayElement.AddElement(new XElement("Test5")); // 5 xmlArrayElement.AddElement(new XElement("Test55", new XAttribute("index", 5), new XAttribute("removed", 1))); Assert.AreEqual(5, xmlArrayElement.MaxIndex); Assert.AreEqual(5, xmlArrayElement.Elements.Count()); }
private void SetTalents(Hero hero) { if (_talentsArray == null) { throw new NullReferenceException("Call SetData() first to set up the talents"); } foreach (XElement element in _talentsArray.Elements) { Talent?talent = _talentData.CreateTalent(hero, element); if (talent != null) { XmlArrayElement prerequisiteTalentArray = GetTalentPrerequisites(element); foreach (XElement prerequisiteTalentElement in prerequisiteTalentArray.Elements) { string?talentPrerequisite = prerequisiteTalentElement.Attribute("value")?.Value; if (!string.IsNullOrEmpty(talentPrerequisite)) { talent.PrerequisiteTalentIds.Add(talentPrerequisite); } } hero.AddTalent(talent); // makes the abilities that are granted from talents subabilities to that talent if (talent.AbilityTalentId.AbilityType != AbilityTypes.Heroic || talent.Tier == TalentTiers.Level20) { IEnumerable <Ability> abilities = hero.GetAbilitiesFromReferenceId(talent.AbilityTalentId.ReferenceId, StringComparison.OrdinalIgnoreCase); foreach (Ability ability in abilities) { ability.ParentLink = new AbilityTalentId(talent.AbilityTalentId.ReferenceId, talent.AbilityTalentId.ButtonId) { AbilityType = talent.AbilityTalentId.AbilityType, IsPassive = talent.AbilityTalentId.IsPassive, }; } } } } }
public void AddIndexedElementsTest() { XmlArrayElement xmlArrayElement = new XmlArrayElement(); xmlArrayElement.AddElement(new XElement("Test0")); // 0 xmlArrayElement.AddElement(new XElement("Test1")); // 1 xmlArrayElement.AddElement(new XElement("Test2", new XAttribute("value", 100))); // 2 xmlArrayElement.AddElement(new XElement("Test3")); // 3 xmlArrayElement.AddElement(new XElement("Test4", new XAttribute("value", 500))); // 4 xmlArrayElement.AddElement(new XElement("Test5")); // 5 xmlArrayElement.AddElement(new XElement("Test22", new XAttribute("index", 2))); xmlArrayElement.AddElement(new XElement("Test33", new XAttribute("index", 3))); xmlArrayElement.AddElement(new XElement("Test44", new XAttribute("index", 4), new XAttribute("value", 1000))); xmlArrayElement.AddElement(new XElement("Test55", new XAttribute("index", 5))); Assert.AreEqual(5, xmlArrayElement.MaxIndex); Assert.AreEqual(6, xmlArrayElement.Elements.Count()); Assert.AreEqual("Test33", xmlArrayElement.Elements.ToList()[3].Name.LocalName); Assert.AreEqual("100", xmlArrayElement.Elements.ToList()[2].Attribute("value")?.Value); Assert.AreEqual("1000", xmlArrayElement.Elements.ToList()[4].Attribute("value")?.Value); }
private void SetTalents(Hero hero) { if (TalentsArray == null) { throw new ArgumentNullException("Call SetData() first to set up the talents"); } foreach (XElement element in TalentsArray.Elements) { Talent talent = TalentData.CreateTalent(hero, element); if (talent != null) { XmlArrayElement prerequisiteTalentArray = GetTalentPrerequisites(element); foreach (XElement prerequisiteTalentElement in prerequisiteTalentArray.Elements) { string talentPrerequisite = prerequisiteTalentElement.Attribute("value")?.Value; if (!string.IsNullOrEmpty(talentPrerequisite)) { talent.AddPrerequisiteTalentId(talentPrerequisite); } } hero.AddTalent(talent); // makes the abilities that are granted from talents subabilities to that talent if ((talent.AbilityType != AbilityType.Heroic || talent.Tier == TalentTier.Level20) && hero.TryGetAbilities(talent.AbilityTalentId.ReferenceId, out IEnumerable <Ability> abilities)) { foreach (Ability ability in abilities) { ability.ParentLink = talent.AbilityTalentId; } } } } }
/// <summary> /// Returns the parsed game data from the given ids. Multiple ids may be used to identity one item. /// </summary> /// <param name="id">The ids of the item to parse.</param> /// <returns></returns> public Hero Parse(params string[] ids) { string heroId = ids.FirstOrDefault(); if (string.IsNullOrEmpty(heroId)) { return(null); } TalentsArray = new XmlArrayElement(); UnitData unitData = XmlDataService.UnitData; unitData.IsAbilityTierFilterEnabled = true; unitData.IsAbilityTypeFilterEnabled = true; unitData.IsHeroParsing = true; unitData.Localization = Localization; Hero hero = new Hero { Name = GameData.GetGameString(DefaultData.HeroData.HeroName.Replace(DefaultData.IdPlaceHolder, heroId)), Description = new TooltipDescription(GameData.GetGameString(DefaultData.HeroData.HeroDescription.Replace(DefaultData.IdPlaceHolder, heroId)), Localization), CHeroId = heroId, Id = heroId, }; HeroDataOverride = HeroOverrideLoader.GetOverride(heroId) ?? new HeroDataOverride(); XElement heroElement = GameData.MergeXmlElements(GameData.Elements(ElementType).Where(x => x.Attribute("id")?.Value == heroId)); if (heroElement == null) { return(null); } SetDefaultValues(hero); // must be done first to any find any units. FindUnits(heroElement, hero); // adds from overrides, parses for abilities AddHeroUnits(hero, unitData); // parses the hero's unit data; abilities // this must come after AddHeroUnits to correctly set the abilityTalentLinks for the talents unitData.SetUnitData(hero, HeroDataOverride, true); // parses the hero's hero data; talents SetData(heroElement, hero); SetTalents(hero); ClearHeroUnitsFromUnitIds(hero); // execute all overrides ApplyOverrides(hero, HeroDataOverride); foreach (Hero heroUnit in hero.HeroUnits) { ApplyOverrides(heroUnit, HeroOverrideLoader.GetOverride(heroUnit.CHeroId) ?? new HeroDataOverride()); } ValidateAbilityTalentLinkIds(hero); return(hero); }