Example #1
0
        public bool CanCast(Skill skill)
        {
            if (Core.Player.IsIncapacitated)
            {
                return(false);
            }

            if (!Core.Hotbar.ActivePowers.Contains(skill.SNOPower))
            {
                return(false);
            }

            if (!HasEnoughCharges(skill))
            {
                return(false);
            }

            if (!HasEnoughResource(skill))
            {
                return(false);
            }

            PowerManager.CanCastFlags reason;
            if (!PowerManager.CanCast(skill.SNOPower, out reason))
            {
                if (reason != PowerManager.CanCastFlags.PowerInvalidTarget || !AllowInvalidTargetPowers.Contains(skill.SNOPower))
                {
                    Core.Logger.Debug(LogCategory.Spells, $"PowerManager CanCast failed for {skill.SNOPower} with flags: {reason}");
                    return(false);
                }
            }

            return(true);
        }
Example #2
0
        public bool CanCast(Skill skill)
        {
            if (Core.Player.IsIncapacitated)
            {
                return(false);
            }

            var snoPower = skill.SNOPower;

            if (!Core.Hotbar.ActivePowers.Contains(snoPower))
            {
                return(false);
            }

            if (!HasEnoughCharges(skill))
            {
                return(false);
            }

            if (!HasEnoughResource(skill))
            {
                return(false);
            }

            if (!PowerManager.CanCast(snoPower, out var reason))
            {
                if (reason != PowerManager.CanCastFlags.PowerInvalidTarget || !AllowInvalidTargetPowers.Contains(snoPower))
                {
                    // TODO: This call is very expensive, 27636ms/31065ms spent in this func.
                    // Core.Logger.Debug(LogCategory.Spells, $"PowerManager CanCast failed for {snoPower} with flags: {reason}");
                    return(false);
                }
            }

            return(true);
        }