public static bool CanUse(this Skill skill, ICharacterData character, short level) { if (skill == null || character == null) { return(false); } var available = true; switch (skill.skillType) { case SkillType.Active: var availableWeapons = skill.availableWeapons; available = availableWeapons == null || availableWeapons.Length == 0; if (!available) { var rightWeaponItem = character.EquipWeapons.rightHand.GetWeaponItem(); var leftWeaponItem = character.EquipWeapons.leftHand.GetWeaponItem(); foreach (var availableWeapon in availableWeapons) { if (rightWeaponItem != null && rightWeaponItem.WeaponType == availableWeapon) { available = true; break; } else if (leftWeaponItem != null && leftWeaponItem.WeaponType == availableWeapon) { available = true; break; } else if (rightWeaponItem == null && leftWeaponItem == null && GameInstance.Singleton.DefaultWeaponItem.WeaponType == availableWeapon) { available = true; break; } } } break; case SkillType.CraftItem: if (!(character is BasePlayerCharacterEntity) || !skill.itemCraft.CanCraft(character as BasePlayerCharacterEntity)) { return(false); } break; default: return(false); } if (level <= 0) { return(false); } if (!available) { return(false); } if (character.CurrentMp < skill.GetConsumeMp(level)) { return(false); } var skillUsageIndex = character.IndexOfSkillUsage(skill.DataId, SkillUsageType.Skill); if (skillUsageIndex >= 0 && character.SkillUsages[skillUsageIndex].coolDownRemainsDuration > 0f) { return(false); } return(true); }
public SkillActivateAnimationType UseSkillActivateAnimationType(Skill skill) { return(UseSkillActivateAnimationType(skill.DataId)); }
public static Dictionary <DamageElement, MinMaxFloat> GetAdditionalDamageAmounts(this Skill skill, short level) { if (!skill.IsAttack()) { return(new Dictionary <DamageElement, MinMaxFloat>()); } level = skill.GetAdjustedLevel(level); return(GameDataHelpers.MakeDamageAmountsDictionary(skill.additionalDamageAmounts, new Dictionary <DamageElement, MinMaxFloat>(), level, 1f)); }