private async Task AddAbilityToItemViewModelAsync(GameItemViewModel viewModel, IReadOnlyDictionary <uint, ItemAbilitySchemaItemModel> abilities) { ItemAbilitySchemaItemModel ability = null; bool abilityExists = abilities.TryGetValue(viewModel.Id, out ability); if (abilityExists) { string joinedBehaviors = db.GetJoinedBehaviors(ability.AbilityBehavior); string joinedUnitTargetTeamTypes = db.GetJoinedUnitTargetTeamTypes(ability.AbilityUnitTargetTeam); string joinedUnitTargetTypes = db.GetJoinedUnitTargetTypes(ability.AbilityUnitTargetType); string joinedUnitTargetFlags = db.GetJoinedUnitTargetFlags(ability.AbilityUnitTargetFlags); List <HeroAbilitySpecialViewModel> abilitySpecialViewModels = new List <HeroAbilitySpecialViewModel>(); foreach (var abilitySpecial in ability.AbilitySpecials) { abilitySpecialViewModels.Add(new HeroAbilitySpecialViewModel() { Name = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, abilitySpecial.Name)), RawName = abilitySpecial.Name, Value = abilitySpecial.Value.ToSlashSeparatedString() }); } viewModel.CastPoint = ability.AbilityCastPoint.ToSlashSeparatedString(); viewModel.CastRange = ability.AbilityCastRange.ToSlashSeparatedString(); viewModel.Cooldown = ability.AbilityCooldown.ToSlashSeparatedString(); viewModel.Damage = ability.AbilityDamage.ToSlashSeparatedString(); viewModel.Duration = ability.AbilityDuration.ToSlashSeparatedString(); viewModel.ManaCost = ability.AbilityManaCost.ToSlashSeparatedString(); viewModel.Attributes = abilitySpecialViewModels; viewModel.Behaviors = joinedBehaviors; viewModel.TargetFlags = joinedUnitTargetFlags; viewModel.TargetTypes = joinedUnitTargetTypes; viewModel.TeamTargets = joinedUnitTargetTeamTypes; viewModel.Note0 = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, "Note0")); viewModel.Note1 = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, "Note1")); viewModel.Note2 = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, "Note2")); viewModel.Note3 = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, "Note3")); viewModel.Note4 = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, "Note4")); viewModel.Note5 = await db.GetLocalizationTextAsync(String.Format("{0}_{1}_{2}", "DOTA_Tooltip_ability", viewModel.Name, "Note5")); viewModel.CastsOnPickup = ability.ItemCastOnPickup; viewModel.ContributesToNetWorthWhenDropped = ability.ItemContributesToNetWorthWhenDropped; viewModel.Declarations = db.GetJoinedItemDeclarationTypes(ability.ItemDeclarations); viewModel.DisassembleRule = db.GetJoinedItemDisassembleTypes(ability.ItemDisassembleRule); viewModel.DisplayCharges = ability.ItemDisplayCharges; viewModel.InitialCharges = ability.ItemInitialCharges; viewModel.IsAlertable = ability.ItemAlertable; viewModel.IsDroppable = ability.ItemDroppable; viewModel.IsKillable = ability.ItemKillable; viewModel.IsPermanent = ability.ItemPermanent; viewModel.IsPurchasable = ability.ItemPurchasable; viewModel.IsSellable = ability.ItemSellable; viewModel.IsStackable = ability.ItemStackable; viewModel.IsSupport = ability.ItemSupport; viewModel.Shareability = db.GetJoinedItemShareabilityTypes(ability.ItemShareability); viewModel.ShopTags = GetSplitAndRejoinedShopTags(ability.ItemShopTags); viewModel.StockInitial = ability.ItemStockInitial; viewModel.StockMax = ability.ItemStockMax; viewModel.StockTime = ability.ItemStockTime; } }