public static Dictionary <Skill, short> GetIncreaseSkills(this Item equipmentItem) { Dictionary <Skill, short> result = new Dictionary <Skill, short>(); if (equipmentItem != null && equipmentItem.IsEquipment()) { result = GameDataHelpers.CombineSkills(equipmentItem.increaseSkillLevels, result); } return(result); }
public void UpdateData(ICharacterData character) { this.character = character; int selectedSkillId = CacheSkillSelectionManager.SelectedUI != null ? CacheSkillSelectionManager.SelectedUI.Skill.DataId : 0; CacheSkillSelectionManager.DeselectSelectedUI(); CacheSkillSelectionManager.Clear(); if (character == null) { CacheSkillList.HideAll(); return; } // All skills included equipment skill levels displayingSkills = character.GetSkills(); BaseCharacter database = character.GetDatabase(); if (database != null) { CharacterSkill tempCharacterSkill; Skill tempSkill; int tempIndexOfSkill; short tempLevel; // Combine skills from database (skill that can level up) and equipment skills Dictionary <Skill, short> skillLevels = new Dictionary <Skill, short>(); skillLevels = GameDataHelpers.CombineSkills(skillLevels, database.CacheSkillLevels); skillLevels = GameDataHelpers.CombineSkills(skillLevels, character.GetEquipmentSkills()); // Filter skills to show by specific skill types / categories Dictionary <Skill, short> filteredSkillLevels = new Dictionary <Skill, short>(); foreach (KeyValuePair <Skill, short> skillLevel in skillLevels) { if (string.IsNullOrEmpty(skillLevel.Key.category) || filterCategories == null || filterCategories.Count == 0 || filterCategories.Contains(skillLevel.Key.category)) { if (filterSkillTypes == null || filterSkillTypes.Count == 0 || filterSkillTypes.Contains(skillLevel.Key.skillType)) { filteredSkillLevels.Add(skillLevel.Key, skillLevel.Value); } } } skillLevels = filteredSkillLevels; // Generate UIs CacheSkillList.Generate(skillLevels, (index, skillLevel, ui) => { UICharacterSkill uiCharacterSkill = ui.GetComponent <UICharacterSkill>(); tempSkill = skillLevel.Key; tempIndexOfSkill = character.IndexOfSkill(tempSkill.DataId); // Set character skill data if (tempIndexOfSkill >= 0) { tempCharacterSkill = character.Skills[tempIndexOfSkill]; } else { tempCharacterSkill = CharacterSkill.Create(tempSkill, 0); } // Set skill level data tempLevel = 0; if (displayingSkills.ContainsKey(tempSkill)) { tempLevel = displayingSkills[tempSkill]; } // Set UI data uiCharacterSkill.Setup(new CharacterSkillTuple(tempCharacterSkill, tempLevel), character, tempIndexOfSkill); uiCharacterSkill.Show(); UICharacterSkillDragHandler dragHandler = uiCharacterSkill.GetComponentInChildren <UICharacterSkillDragHandler>(); if (dragHandler != null) { dragHandler.SetupForSkills(uiCharacterSkill); } CacheSkillSelectionManager.Add(uiCharacterSkill); if (selectedSkillId == skillLevel.Key.DataId) { uiCharacterSkill.OnClickSelect(); } }); } }
protected override void UpdateData() { if (Level <= 0) { onSetLevelZeroData.Invoke(); } else { onSetNonLevelZeroData.Invoke(); } if (InventoryType != InventoryType.StorageItems) { if (EquipmentItem != null) { if (InventoryType != InventoryType.NonEquipItems) { onSetEquippedData.Invoke(); } else { onSetUnEquippedData.Invoke(); } } else { onSetUnEquippableData.Invoke(); } } else { onSetStorageItemData.Invoke(); } if (uiTextTitle != null) { string str = string.Format( LanguageManager.GetText(formatKeyTitle), Item == null ? LanguageManager.GetUnknowTitle() : Item.Title); if (!dontAppendRefineLevelToTitle && EquipmentItem != null && Level > 1) { str = string.Format( LanguageManager.GetText(formatKeyTitleWithRefineLevel), (Level - 1).ToString("N0")); } uiTextTitle.text = str; } if (uiTextDescription != null) { uiTextDescription.text = string.Format( LanguageManager.GetText(formatKeyDescription), Item == null ? LanguageManager.GetUnknowDescription() : Item.Description); } if (uiTextRarity != null) { uiTextRarity.text = string.Format( LanguageManager.GetText(formatKeyRarityTitle), Item == null ? LanguageManager.GetUnknowTitle() : Item.RarityTitle); } if (uiTextLevel != null) { if (EquipmentItem != null) { if (showLevelAsDefault) { uiTextLevel.text = string.Format( LanguageManager.GetText(formatKeyLevel), Level.ToString("N0")); } else { uiTextLevel.text = string.Format( LanguageManager.GetText(formatKeyRefineLevel), (Level - 1).ToString("N0")); } } else if (PetItem != null) { uiTextLevel.text = string.Format( LanguageManager.GetText(formatKeyLevel), Level.ToString("N0")); } uiTextLevel.gameObject.SetActive(EquipmentItem != null || PetItem != null); } if (imageIcon != null) { Sprite iconSprite = Item == null ? null : Item.icon; imageIcon.gameObject.SetActive(iconSprite != null); imageIcon.sprite = iconSprite; } if (uiTextItemType != null) { if (Item != null) { switch (Item.itemType) { case ItemType.Junk: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_JUNK.ToString())); break; case ItemType.Armor: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), ArmorItem.ArmorType.Title); break; case ItemType.Weapon: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), WeaponItem.WeaponType.Title); break; case ItemType.Shield: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_SHIELD.ToString())); break; case ItemType.Potion: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_POTION.ToString())); break; case ItemType.Ammo: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_AMMO.ToString())); break; case ItemType.Building: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_BUILDING.ToString())); break; case ItemType.Pet: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_PET.ToString())); break; case ItemType.SocketEnhancer: uiTextItemType.text = string.Format( LanguageManager.GetText(formatKeyItemType), LanguageManager.GetText(UILocaleKeys.UI_ITEM_TYPE_SOCKET_ENHANCER.ToString())); break; } } } if (uiTextSellPrice != null) { uiTextSellPrice.text = string.Format( LanguageManager.GetText(formatKeySellPrice), Item == null ? "0" : Item.sellPrice.ToString("N0")); } if (uiTextStack != null) { string stackString = ""; if (Item == null) { stackString = string.Format( LanguageManager.GetText(formatKeyStack), "0", "0"); } else { stackString = string.Format( LanguageManager.GetText(formatKeyStack), CharacterItem.amount.ToString("N0"), Item.maxStack); } uiTextStack.text = stackString; uiTextStack.gameObject.SetActive(showAmountWhenMaxIsOne || (Item != null && Item.maxStack > 1)); } if (uiTextDurability != null) { string durabilityString = ""; if (Item == null) { durabilityString = string.Format( LanguageManager.GetText(formatKeyDurability), "0", "0"); } else { durabilityString = string.Format( LanguageManager.GetText(formatKeyDurability), CharacterItem.durability.ToString("N0"), Item.maxDurability); } uiTextDurability.text = durabilityString; uiTextDurability.gameObject.SetActive(EquipmentItem != null && Item.maxDurability > 0); } if (uiTextWeight != null) { uiTextWeight.text = string.Format( LanguageManager.GetText(formatKeyWeight), Item == null ? "0" : Item.weight.ToString("N2")); } if (uiRequirement != null) { if (EquipmentItem == null || (EquipmentItem.requirement.level == 0 && EquipmentItem.requirement.character == null && EquipmentItem.CacheRequireAttributeAmounts.Count == 0)) { uiRequirement.Hide(); } else { uiRequirement.Show(); uiRequirement.Data = EquipmentItem; } } if (uiStats != null) { CharacterStats stats = CharacterStats.Empty; if (EquipmentItem != null) { stats = EquipmentItem.GetIncreaseStats(Level, CharacterItem.GetEquipmentBonusRate()); } else if (SocketEnhancerItem != null) { stats = SocketEnhancerItem.socketEnhanceEffect.stats; } if (stats.IsEmpty()) { // Hide ui if stats is empty uiStats.Hide(); } else { uiStats.Show(); uiStats.Data = stats; } } if (uiIncreaseAttributes != null) { Dictionary <Attribute, short> attributes = null; if (EquipmentItem != null) { attributes = EquipmentItem.GetIncreaseAttributes(Level, CharacterItem.GetEquipmentBonusRate()); } else if (SocketEnhancerItem != null) { attributes = GameDataHelpers.CombineAttributes(SocketEnhancerItem.socketEnhanceEffect.attributes, attributes, 1f); } if (attributes == null || attributes.Count == 0) { // Hide ui if attributes is empty uiIncreaseAttributes.Hide(); } else { uiIncreaseAttributes.Show(); uiIncreaseAttributes.Data = attributes; } } if (uiIncreaseResistances != null) { Dictionary <DamageElement, float> resistances = null; if (EquipmentItem != null) { resistances = EquipmentItem.GetIncreaseResistances(Level, CharacterItem.GetEquipmentBonusRate()); } else if (SocketEnhancerItem != null) { resistances = GameDataHelpers.CombineResistances(SocketEnhancerItem.socketEnhanceEffect.resistances, resistances, 1f); } if (resistances == null || resistances.Count == 0) { // Hide ui if resistances is empty uiIncreaseResistances.Hide(); } else { uiIncreaseResistances.Show(); uiIncreaseResistances.Data = resistances; } } if (uiIncreaseDamageAmounts != null) { Dictionary <DamageElement, MinMaxFloat> damageAmounts = null; if (EquipmentItem != null) { damageAmounts = EquipmentItem.GetIncreaseDamages(Level, CharacterItem.GetEquipmentBonusRate()); } else if (SocketEnhancerItem != null) { damageAmounts = GameDataHelpers.CombineDamages(SocketEnhancerItem.socketEnhanceEffect.damages, damageAmounts, 1f); } if (damageAmounts == null || damageAmounts.Count == 0) { // Hide ui if damage amounts is empty uiIncreaseDamageAmounts.Hide(); } else { uiIncreaseDamageAmounts.Show(); uiIncreaseDamageAmounts.Data = damageAmounts; } } if (uiIncreaseSkillLevels != null) { Dictionary <Skill, short> skillLevels = null; if (EquipmentItem != null) { skillLevels = EquipmentItem.GetIncreaseSkills(); } else if (SocketEnhancerItem != null) { skillLevels = GameDataHelpers.CombineSkills(SocketEnhancerItem.socketEnhanceEffect.skills, skillLevels); } if (skillLevels == null || skillLevels.Count == 0) { // Hide ui if skill levels is empty uiIncreaseSkillLevels.Hide(); } else { uiIncreaseSkillLevels.Show(); uiIncreaseSkillLevels.Data = skillLevels; } } if (uiEquipmentSet != null) { if (EquipmentItem == null || EquipmentItem.equipmentSet == null || EquipmentItem.equipmentSet.effects.Length == 0) { // Only equipment item has equipment set data uiEquipmentSet.Hide(); } else { uiEquipmentSet.Show(); int equippedCount = 0; Character.CacheEquipmentSets.TryGetValue(EquipmentItem.equipmentSet, out equippedCount); uiEquipmentSet.Data = new EquipmentSetWithEquippedCountTuple(EquipmentItem.equipmentSet, equippedCount); } } if (uiEquipmentSockets != null) { if (EquipmentItem == null || EquipmentItem.maxSocket <= 0) { uiEquipmentSockets.Hide(); } else { uiEquipmentSockets.Show(); uiEquipmentSockets.Data = new EnhancedSocketsWithMaxSocketTuple(CharacterItem.Sockets, EquipmentItem.maxSocket); } } if (uiDamageAmounts != null) { if (WeaponItem == null) { uiDamageAmounts.Hide(); } else { uiDamageAmounts.Show(); KeyValuePair <DamageElement, MinMaxFloat> keyValuePair = WeaponItem.GetDamageAmount(Level, CharacterItem.GetEquipmentBonusRate(), null); uiDamageAmounts.Data = new DamageElementAmountTuple(keyValuePair.Key, keyValuePair.Value); } } if (PetItem != null && PetItem.petEntity != null) { int[] expTree = GameInstance.Singleton.ExpTree; int currentExp = 0; int nextLevelExp = 0; if (CharacterItem.GetNextLevelExp() > 0) { currentExp = CharacterItem.exp; nextLevelExp = CharacterItem.GetNextLevelExp(); } else if (Level - 2 > 0 && Level - 2 < expTree.Length) { int maxExp = expTree[Level - 2]; currentExp = maxExp; nextLevelExp = maxExp; } if (uiTextExp != null) { uiTextExp.text = string.Format( LanguageManager.GetText(formatKeyExp), currentExp.ToString("N0"), nextLevelExp.ToString("N0")); uiTextExp.gameObject.SetActive(true); } } else { if (uiTextExp != null) { uiTextExp.gameObject.SetActive(false); } } if (clones != null && clones.Length > 0) { for (int i = 0; i < clones.Length; ++i) { if (clones[i] == null) { continue; } clones[i].Data = Data; } } if (uiNextLevelItem != null) { if (Level + 1 > Item.MaxLevel) { uiNextLevelItem.Hide(); } else { uiNextLevelItem.Setup(new CharacterItemTuple(CharacterItem, (short)(Level + 1), InventoryType), Character, IndexOfData); uiNextLevelItem.Show(); } } UpdateShopUIVisibility(true); UpdateRefineUIVisibility(true); UpdateEnhanceSocketUIVisibility(true); UpdateStorageUIVisibility(true); UpdateDealingState(true); }