private void Slice() { if (Deleted || !Alive) { StopTimer(); return; } if (Aspect == null || Aspect.Deleted || !Aspect.Alive || !Aspect.InRange(this, Aspect.RangePerception * 2)) { Destroy(); return; } if (!Aspect.InCombat()) { return; } if (_Spawn == null) { _Spawn = ListPool <ISpawnable> .AcquireObject(); } if (_Spawn.Count < 3) { var s = new Tinker(Aspect); _Spawn.Add(s); s.Spawner = this; Register(s); var p = this.GetRandomPoint3D(1, 2, Map, true, true); s.OnBeforeSpawn(p, Map); s.MoveToWorld(p, Map); s.OnAfterSpawn(); } }
public override void OnThink() { base.OnThink(); if (Deleted || !Alive || !Aspect.InCombat()) { return; } if (!this.InCombat() && Utility.RandomDouble() < 0.01) { var t = Aspect.AcquireRandomTarget(Aspect.RangePerception); if (t != null) { if (this.PlayAttackAnimation()) { this.PlayAttackSound(); } MoveToWorld(t.Location, t.Map); } } if (_Aura == null) { _Aura = new EnergyExplodeEffect(Location, Map, 2) { AverageZ = false, Reversed = true, Interval = TimeSpan.FromMilliseconds(500.0), EffectMutator = e => { if (e.ProcessIndex == 0 && Utility.RandomDouble() < 0.33) { e.SoundID = 252; } e.Hue = Hue; }, EffectHandler = HandleAura, Callback = () => { if (this.PlayAttackAnimation()) { this.PlayAttackSound(); } } }; } if (_Aura.Sending || Core.TickCount < _NextAura) { return; } _NextAura = Core.TickCount + 5000; _Aura.Start = Location; _Aura.Map = Map; _Aura.Send(); }
public override void OnThink() { base.OnThink(); if (Deleted || !Alive || Aspect == null || !Aspect.InCombat() || Core.TickCount < _NextHeal) { return; } if (ControlMaster != Aspect) { ControlMaster = Aspect; } if (ControlTarget != Aspect) { ControlTarget = Aspect; } if (ControlOrder != OrderType.Follow) { ControlOrder = OrderType.Follow; } if (!InRange(Aspect, Aspect.RangePerception)) { AIObject.MoveTo(Aspect, true, Aspect.RangePerception); return; } _NextHeal = Core.TickCount + 5000; var q = new MovingEffectQueue(); q.Callback = q.Dispose; for (var i = 0; i < 5; i++) { var fx = new MovingEffectInfo( this, Aspect, Map, 0x36F4, 1150, 10, EffectRender.LightenMore, TimeSpan.FromMilliseconds(200)); fx.ImpactCallback += HealAspect; q.Add(fx); } if (this.PlayAttackAnimation()) { this.PlayAttackSound(); this.TryParalyze( TimeSpan.FromSeconds(1.5), m => { SpellHelper.Turn(m, Aspect); q.Process(); }); } else { SpellHelper.Turn(this, Aspect); q.Process(); } }