var tiles = new List(); var runners = new Dictionary>(); var command = ""; var clickCount = 0; var expectedClicks = 0; var currentRunner = 0; OnIntercept(Out.Chat, e => { string message = e.Packet.ReadString(); if (message.ToLower().StartsWith("tile")) { e.Block(); command = "tile"; clickCount = 0; expectedClicks = 2; tiles.Clear(); Log("Click position 1 and 6"); } else if (message.ToLower().StartsWith("runner")) { e.Block(); var number = int.Parse(message.ToLower().Replace("runner", "")); command = "runner"; currentRunner = number; clickCount = 0; expectedClicks = number; runners[number] = new List(); Log($"Click {number} positions"); } }); OnIntercept(Out.Move, e => { if (command != "") { e.Block(); int x = e.Packet.ReadInt(); int y = e.Packet.ReadInt(); if (command == "tile" && clickCount < expectedClicks) { tiles.Add(new Point(x, y)); clickCount++; if (clickCount == expectedClicks) { var start = tiles[0]; var end = tiles[1]; var xStep = (end.X - start.X) / 5.0; var yStep = (end.Y - start.Y) / 5.0; tiles.Clear(); for (int i = 0; i < 6; i++) { tiles.Add(new Point( (int)(start.X + xStep * i), (int)(start.Y + yStep * i) )); } Log("Tiles set:"); for (int i = 0; i < tiles.Count; i++) { Log($"Tile {i+1}: {tiles[i]}"); } command = ""; } } else if (command == "runner" && clickCount < expectedClicks) { var position = new Point(x, y); var tileIndex = -1; for (int i = 0; i < tiles.Count; i++) { if (tiles[i] == position) { tileIndex = i + 1; break; } } if (tileIndex != -1) { runners[currentRunner].Add(tileIndex); clickCount++; if (clickCount == expectedClicks) { Log($"Runner {currentRunner} set: {string.Join(", ", runners[currentRunner])}"); command = ""; } } else { Log("Click a tile position"); } } } }); OnIntercept(In.DiceValue, e => { e.Packet.ReadInt(); var number = e.Packet.ReadInt(); if (number > 0 && number < 100) { foreach (var runner in runners) { if (runner.Value.Contains(number)) { var index = number - 1; if (index >= 0 && index < tiles.Count) { Move(tiles[index]); } break; } } Log($"[{number}]"); } }); Wait();