protected void RandomWalkAction() { if (Npc.Target != null || MoveController.IsActive) { return; } if (Npc.Attack != null && !Npc.Attack.IsFinished) { return; } if (Npc.NpcTemplate.Shape.WalkSpeed <= 0) { return; } if (Npc.Instance.IsEditingMode) { if (Npc.Position.FastDistanceTo(Npc.BindPoint) > 0) { MoveController.MoveTo(Creature.BindPoint); } return; } long now = RandomUtilities.GetCurrentMilliseconds(); if (now - 10000 < LastWalkUts) { return; } LastWalkUts = RandomUtilities.GetCurrentMilliseconds() + Random.Next(5000, 10000); if (Random.Next(0, 100) < 50) { return; } double distanceToBind = Npc.BindPoint.DistanceTo(Creature.Position); if (distanceToBind > 500) { MoveController.MoveTo(Creature.BindPoint); return; } MoveController.MoveTo(Npc.Position.X + Random.Next(150, 300) * (Random.Next(0, 100) < 50 ? 1 : -1) , Npc.Position.Y + Random.Next(150, 300) * (Random.Next(0, 100) < 50 ? 1 : -1)); }
protected void RandomWalkAction() { if (Npc.Target != null || MoveController.IsActive) { return; } if (Npc.Attack != null && !Npc.Attack.IsFinished) { return; } long now = Funcs.GetCurrentMilliseconds(); if (now - 10000 < LastWalkUts) { return; } LastWalkUts = Funcs.GetCurrentMilliseconds() + Random.Next(5000, 10000); if (Random.Next(0, 100) < 50) { return; } double distanceToBind = Npc.BindPoint.DistanceTo(Creature.Position); if (distanceToBind > 100) { MoveController.MoveTo(Creature.BindPoint); return; } MoveController.MoveTo(Npc.Position.X + Random.Next(50, 100) * (Random.Next(0, 100) < 50 ? 1 : -1) , Npc.Position.Y + Random.Next(50, 100) * (Random.Next(0, 100) < 50 ? 1 : -1)); }
public override void Init(Creature creature) { base.Init(creature); Projectile = (Projectile)creature; if (Projectile.TargetPosition != null) { MoveController = new NpcMoveController(creature); MoveController.MoveTo(Projectile.TargetPosition); } DieUts = Funcs.GetCurrentMilliseconds() + Projectile.Lifetime; }