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(); } }