Keeps the repo root clean - only README.md visible on landing page. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
108 lines
3.1 KiB
C#
108 lines
3.1 KiB
C#
var tiles = new List<Point>();
|
|
var runners = new Dictionary<int, List<int>>();
|
|
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<int>();
|
|
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(); |