protected void Active() { if (reData) { oldX = npc.position.X; upperPoint = npc.position.Y - 50f; idle = npc.position; upper = new Vector2(oldX, upperPoint); type = -1; points = new Vector2[5]; reData = false; } switch (type) { case -1: BeginInRange(); if (BeginActive()) { type = 0; index = 0; goto case 0; } break; case 0: Vector2 ground = ArchaeaNPC.FindEmptyRegion(target(), targetRange); if (index < points.Length) { if (ground != Vector2.Zero) { points[index] = ground; index++; } } else { index = 0; goto case 1; } break; case 1: type = 1; if (index++ > moveRate) { rand = Main.rand.Next(points.Length); index = 0; moveCount++; count++; } newMove = points[rand]; ArchaeaNPC.PositionToVel(npc, newMove, 0.6f, 0.4f, true, -5f, 5f); if (npc.Distance(target().position) > range * 2f || moveCount > 2) { moveCount = 0; type = 0; goto case 0; } break; } }