public bool StartAbilityAtPos(AbilityInfo abInfo, byte castSequence, Point3D worldPos, ushort zoneID)
        {
            _pendingInfo = abInfo;
            _pendingInfo.TargetPosition = worldPos;
            _pendingItemCooldownGroup   = 0;
            _pendingCastSequence        = castSequence;

            byte result = ModifyInitials();

            if (result == 1 || !AllowStartCastAtPos() || !_caster.PointWithinRadiusFeet(_pendingInfo.TargetPosition, (int)(_caster.BaseRadius + _pendingInfo.Range)))
            {
                CancelPendingCast();
                return(false);
            }

            if (result == 2)
            {
                _abInterface.SetGlobalCooldown();
                CancelPendingCast();
                return(false);
            }

            if (result == 3)
            {
                _abInterface.SetCooldown(_pendingInfo.ConstantInfo.CooldownEntry != 0 ? _pendingInfo.ConstantInfo.CooldownEntry : _pendingInfo.Entry, _pendingInfo.Cooldown * 1000);
                CancelPendingCast();
                return(false);
            }

            // Cast success. Cancel existing ability if any

            if (AbInfo != null)
            {
                CancelCast(0);
            }

            AbInfo             = _pendingInfo;
            _pendingInfo       = null;
            _itemCooldownGroup = 0;
            _castSequence      = castSequence;

            _castStartTime = TCPManager.GetTimeStampMS();

            if (AbInfo.Level == 0)
            {
                AbInfo.Level = _abInterface.GetMasteryLevelFor(AbInfo.ConstantInfo.MasteryTree);
            }

            if (AbInfo.ConstantInfo.Origin != AbilityOrigin.AO_ITEM)
            {
                _caster.BuffInterface.NotifyAbilityStarted(AbInfo);
            }

            SendStart();

            if (!AbInfo.ConstantInfo.IgnoreGlobalCooldown)
            {
                _abInterface.SetGlobalCooldown();
            }

            if (AbInfo.ConstantInfo.ChannelID != 0)
            {
                // Channeled Morale 4s grant immunity and cannot be interrupted
                if (AbInfo.SpecialCost == -4)
                {
                    _caster.AddCrowdControlImmunity((int)CrowdControlTypes.Unstoppable);
                    _caster.IsImmovable = true;
                }

                GroundTarget gt = new GroundTarget(_caster, AbInfo.TargetPosition, GameObjectService.GetGameObjectProto(23));
                _caster.Region.AddObject(gt, _caster.Zone.ZoneId);

                gt.SetExpiry(TCPManager.GetTimeStampMS() + 20000);

                AbInfo.Target = gt;

                _channelHandler.Initialize(AbInfo, castSequence);
            }
            else
            {
                CastAtPosition();
            }

            return(false);
        }