protected override void UpdateData() { Skill skill = Data.characterSkill.GetSkill(); short level = Data.targetLevel; if (uiTextRequireLevel != null) { if (skill == null) { uiTextRequireLevel.gameObject.SetActive(false); } else { uiTextRequireLevel.gameObject.SetActive(true); uiTextRequireLevel.text = string.Format( LanguageManager.GetText(formatKeyRequireLevel), skill.GetRequireCharacterLevel(level).ToString("N0")); } } if (uiRequireAttributeAmounts != null) { if (skill == null) { uiRequireAttributeAmounts.Hide(); } else { uiRequireAttributeAmounts.showAsRequirement = true; uiRequireAttributeAmounts.Show(); uiRequireAttributeAmounts.Data = skill.CacheRequireAttributeAmounts; } } if (uiRequireSkillLevels != null) { if (skill == null) { uiRequireSkillLevels.Hide(); } else { uiRequireSkillLevels.showAsRequirement = true; uiRequireSkillLevels.Show(); uiRequireSkillLevels.Data = skill.CacheRequireSkillLevels; } } }
public static bool CanLevelUp(this Skill skill, IPlayerCharacterData character, short level) { if (skill == null || character == null || !character.GetDatabase().CacheSkillLevels.ContainsKey(skill)) { return(false); } // Check is it pass attribute requirement or not Dictionary <Attribute, short> attributeAmountsDict = character.GetAttributes(false, false); Dictionary <Attribute, short> requireAttributeAmounts = skill.CacheRequireAttributeAmounts; foreach (KeyValuePair <Attribute, short> requireAttributeAmount in requireAttributeAmounts) { if (!attributeAmountsDict.ContainsKey(requireAttributeAmount.Key) || attributeAmountsDict[requireAttributeAmount.Key] < requireAttributeAmount.Value) { return(false); } } // Check is it pass skill level requirement or not Dictionary <Skill, int> skillLevelsDict = new Dictionary <Skill, int>(); foreach (CharacterSkill skillLevel in character.Skills) { if (skillLevel.GetSkill() == null) { continue; } skillLevelsDict[skillLevel.GetSkill()] = skillLevel.level; } Dictionary <Skill, short> requireSkillLevels = skill.CacheRequireSkillLevels; foreach (KeyValuePair <Skill, short> requireSkillLevel in requireSkillLevels) { if (!skillLevelsDict.ContainsKey(requireSkillLevel.Key) || skillLevelsDict[requireSkillLevel.Key] < requireSkillLevel.Value) { return(false); } } // Check another requirements return(character.SkillPoint > 0 && level < skill.maxLevel && character.Level >= skill.GetRequireCharacterLevel(level)); }
protected override void UpdateData() { if (Level <= 0) { onSetLevelZeroData.Invoke(); } else { onSetNonLevelZeroData.Invoke(); } if (uiTextTitle != null) { uiTextTitle.text = string.Format(titleFormat, Skill == null ? "Unknow" : Skill.title); } if (uiTextDescription != null) { uiTextDescription.text = string.Format(descriptionFormat, Skill == null ? "N/A" : Skill.description); } if (uiTextLevel != null) { uiTextLevel.text = string.Format(levelFormat, Level.ToString("N0")); } if (imageIcon != null) { var iconSprite = Skill == null ? null : Skill.icon; imageIcon.gameObject.SetActive(iconSprite != null); imageIcon.sprite = iconSprite; } if (uiTextSkillType != null) { switch (Skill.skillType) { case SkillType.Active: uiTextSkillType.text = string.Format(skillTypeFormat, activeSkillType); break; case SkillType.Passive: uiTextSkillType.text = string.Format(skillTypeFormat, passiveSkillType); break; case SkillType.CraftItem: uiTextSkillType.text = string.Format(skillTypeFormat, craftItemSkillType); break; } } if (uiTextAvailableWeapons != null) { if (Skill.availableWeapons == null || Skill.availableWeapons.Length == 0) { uiTextAvailableWeapons.gameObject.SetActive(false); } else { var str = string.Empty; foreach (var availableWeapon in Skill.availableWeapons) { if (!string.IsNullOrEmpty(str)) { str += "/"; } str += availableWeapon.title; } uiTextAvailableWeapons.text = string.Format(availableWeaponsFormat, str); uiTextAvailableWeapons.gameObject.SetActive(true); } } if (uiTextConsumeMp != null) { uiTextConsumeMp.text = string.Format(consumeMpFormat, Skill == null || Level <= 0 ? "N/A" : Skill.GetConsumeMp(Level).ToString("N0")); } if (uiRequirement != null) { if (Skill == null || (Skill.GetRequireCharacterLevel(Level) == 0 && Skill.CacheRequireSkillLevels.Count == 0)) { uiRequirement.Hide(); } else { uiRequirement.Show(); uiRequirement.Data = new SkillTuple(Skill, Level); } } if (uiCraftItem != null) { if (Skill == null || Skill.skillType != SkillType.CraftItem) { uiCraftItem.Hide(); } else { uiCraftItem.Show(); uiCraftItem.Data = Skill.itemCraft; } } var isAttack = Skill != null && Skill.IsAttack(); var isOverrideWeaponDamage = isAttack && Skill.skillAttackType == SkillAttackType.Normal; if (uiDamageAmount != null) { if (!isOverrideWeaponDamage) { uiDamageAmount.Hide(); } else { uiDamageAmount.Show(); var keyValuePair = Skill.GetDamageAmount(Level, null); uiDamageAmount.Data = new DamageElementAmountTuple(keyValuePair.Key, keyValuePair.Value); } } if (uiDamageInflictions != null) { var damageInflictionRates = Skill.GetWeaponDamageInflictions(Level); if (!isAttack || damageInflictionRates == null || damageInflictionRates.Count == 0) { uiDamageInflictions.Hide(); } else { uiDamageInflictions.Show(); uiDamageInflictions.Data = damageInflictionRates; } } if (uiAdditionalDamageAmounts != null) { var additionalDamageAmounts = Skill.GetAdditionalDamageAmounts(Level); if (!isAttack || additionalDamageAmounts == null || additionalDamageAmounts.Count == 0) { uiAdditionalDamageAmounts.Hide(); } else { uiAdditionalDamageAmounts.Show(); uiAdditionalDamageAmounts.Data = additionalDamageAmounts; } } if (uiSkillBuff != null) { if (!Skill.IsBuff()) { uiSkillBuff.Hide(); } else { uiSkillBuff.Show(); uiSkillBuff.Data = new BuffTuple(Skill.buff, Level); } } if (uiSkillDebuff != null) { if (!Skill.IsDebuff()) { uiSkillDebuff.Hide(); } else { uiSkillDebuff.Show(); uiSkillDebuff.Data = new BuffTuple(Skill.debuff, Level); } } if (uiNextLevelSkill != null) { if (Level + 1 > Skill.maxLevel) { uiNextLevelSkill.Hide(); } else { uiNextLevelSkill.Setup(new SkillTuple(Skill, (short)(Level + 1)), character, indexOfData); uiNextLevelSkill.Show(); } } }
public static bool CanLevelUp(this Skill skill, IPlayerCharacterData character, short level) { if (skill == null || character == null) { return(false); } var isPass = true; var skillLevelsDict = new Dictionary <Skill, int>(); var skillLevels = character.Skills; foreach (var skillLevel in skillLevels) { if (skillLevel.GetSkill() == null) { continue; } skillLevelsDict[skillLevel.GetSkill()] = skillLevel.level; } var requireSkillLevels = skill.CacheRequireSkillLevels; foreach (var requireSkillLevel in requireSkillLevels) { if (!skillLevelsDict.ContainsKey(requireSkillLevel.Key) || skillLevelsDict[requireSkillLevel.Key] < requireSkillLevel.Value) { isPass = false; break; } } return(character.SkillPoint > 0 && level < skill.maxLevel && character.Level >= skill.GetRequireCharacterLevel(level) && isPass); }