Beispiel #1
0
        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));
 }
Beispiel #3
0
 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));
 }