Skip to content

Instantly share code, notes, and snippets.

@KristianFenn
Last active April 3, 2017 09:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KristianFenn/2361116da698065d16ae1b04e596e636 to your computer and use it in GitHub Desktop.
Save KristianFenn/2361116da698065d16ae1b04e596e636 to your computer and use it in GitHub Desktop.
const p = r.place;
const colors = [
{ r: 255, g: 255, b: 255, v: 0 },
{ r: 228, g: 228, b: 228, v: 1 },
{ r: 136, g: 136, b: 136, v: 2 },
{ r: 34, g: 34, b: 34, v: 3 },
{ r: 255, g: 167, b: 209, v: 4 },
{ r: 229, g: 0, b: 0, v: 5 },
{ r: 229, g: 149, b: 0, v: 6 },
{ r: 160, g: 106, b: 66, v: 7 },
{ r: 229, g: 217, b: 0, v: 8 },
{ r: 148, g: 224, b: 68, v: 9 },
{ r: 2, g: 190, b: 1, v: 10 },
{ r: 0, g: 131, b: 199, v: 11 },
{ r: 0, g: 131, b: 199, v: 12 },
{ r: 0, g: 0, b: 234, v: 13 },
{ r: 207, g: 110, b: 228, v: 14 },
{ r: 130, g: 0, b: 128, v: 15 },
{ r: 255, g: 0, b: 255, v: null }
];
let ourColors = null;
var timer = 0;
const referenceImage = new Image();
referenceImage.crossOrigin = "Anonymous";
let storedData = [];
const getDistanceTo = (color, r, g, b) => Math.sqrt(
Math.pow(r - color.r, 2) +
Math.pow(g - color.g, 2) +
Math.pow(b - color.b, 2)
);
const getColorIndex = (r, g, b) => {
const sorted = colors.map((color, i) => {
return { distance: getDistanceTo(color, r, g, b), value: color.v };
}).sort((a, b) => a.distance - b.distance);
return sorted[0].value;
}
referenceImage.onload = function() {
const canvas = document.createElement("canvas");
canvas.width = 1000;
canvas.height = 1000;
const ctx = canvas.getContext("2d");
ctx.drawImage(referenceImage, 0, 0);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
storedData = imageData;
ourColors = [];
for (let y = 0; y < 1000; y++) {
if (ourColors[y] == null) {
ourColors[y] = [];
}
for (let x = 0; x < 1000; x++) {
let i = ((1000 * y) + x) * 4;
let red = imageData[i];
let green = imageData[i + 1];
let blue = imageData[i + 2];
ourColors[y][x] = getColorIndex(red, green, blue);
}
}
}
const loadImage = () => {
console.log("Refreshing image data");
referenceImage.src = 'https://cyanlabs.net/place/index.php?' + Math.random();
};
loadImage();
setInterval(() => loadImage(), 60e3);
setInterval(() => {
timer -= 1e3;
console.log("Waiting for " + Math.max(0, Math.floor(timer / 1000)) + " seconds");
}, 1e3);
r.placeModule("placeBot", loader => {
const api = loader("api");
console.log("module defined");
const doIt = () => {
if (ourColors == null) {
setTimeout(() => doIt(), 10e3);
return;
}
let timeRemaining = p.getCooldownTimeRemaining();
console.log("Setting timer to " + Math.floor(timeRemaining / 1000));
timer = timeRemaining;
setTimeout(() => {
api.getCanvasBitmapState()
.then((a, previousColors) => {
for (let y = 0; y < 1000; y++) {
for (let x = 0; x < 1000; x++) {
const color = ourColors[y][x];
const previousColor = previousColors[x + (y * 1000)];
if (color !== null && color !== previousColor) {
p.setColor(color);
p.drawTile(x, y);
let i = ((1000 * y) + x) * 4;
console.log("Drawing at " + x + ", " + y + " (https://www.reddit.com/r/place/#x=" + x + "&y=" + y + ") Prev color: " + previousColor + ", New color: "+ color + ", ref: "+ storedData[i] + ","+storedData[i+1]+","+storedData[i+2]);
setTimeout(() => doIt(), 10e3);
return;
}
}
}
console.log("Nothing to fix");
setTimeout(() => doIt(), 5e3);
});
}, timeRemaining);
}
console.log("Running script");
doIt();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment