protected override void OnInvoke(BaseAspect aspect)
        {
            if (aspect == null || aspect.Deleted)
            {
                return;
            }

            Point3D loc;
            var     tries = 30;

            do
            {
                loc = aspect.GetRandomPoint3D(4, 8, aspect.Map, true, true);
            }while (loc.FindEntitiesInRange <IAspectSpawn>(aspect.Map, 8).Any() && --tries >= 0);

            if (tries < 0)
            {
                return;
            }

            var s = CreateSpawn(aspect);

            if (s == null)
            {
                return;
            }

            Register(s);

            if (aspect.PlayAttackAnimation())
            {
                aspect.PlayAttackSound();

                aspect.TryParalyze(
                    TimeSpan.FromSeconds(1.5),
                    m =>
                {
                    SpellHelper.Turn(m, loc);

                    s.OnBeforeSpawn(loc, m.Map);
                    s.MoveToWorld(loc, m.Map);
                    s.OnAfterSpawn();
                });
            }
            else
            {
                SpellHelper.Turn(aspect, loc);

                s.OnBeforeSpawn(loc, aspect.Map);
                s.MoveToWorld(loc, aspect.Map);
                s.OnAfterSpawn();
            }
        }