7Placer

typescript pixelplace.io bot

当前为 2025-03-24 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name 7Placer
  3. // @description typescript pixelplace.io bot
  4. // @version 1.6
  5. // @author Azti
  6. // @match https://pixelplace.io/*
  7. // @require https://update.greasyfork.org/scripts/498080/1395134/Hacktimer.js
  8. // @require https://pixelplace.io/js/jquery.min.js?v2=1
  9. // @require https://pixelplace.io/js/jquery-ui.min.js?v2=1
  10. // @grant none
  11. // @run-at document-start
  12. // @namespace https://greasyfork.org/users/374503
  13. // ==/UserScript==
  14.  
  15. /******/ (() => { // webpackBootstrap
  16. /******/ var __webpack_modules__ = ({
  17.  
  18. /***/ "./src/auth/Auth.ts":
  19. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  20.  
  21. "use strict";
  22. __webpack_require__.r(__webpack_exports__);
  23. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  24. /* harmony export */ "default": () => (/* binding */ Auth)
  25. /* harmony export */ });
  26. class Auth {
  27. constructor(authObj) {
  28. this.authKey = authObj.authKey;
  29. this.authId = authObj.authId;
  30. this.authToken = authObj.authToken;
  31. }
  32. }
  33. /***/ }),
  34. /***/ "./src/auth/util/commands.ts":
  35. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  36. "use strict";
  37. __webpack_require__.r(__webpack_exports__);
  38. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  39. /* harmony export */ connect: () => (/* binding */ connect),
  40. /* harmony export */ deleteAccount: () => (/* binding */ deleteAccount),
  41. /* harmony export */ disconnect: () => (/* binding */ disconnect),
  42. /* harmony export */ getAccounts: () => (/* binding */ getAccounts),
  43. /* harmony export */ getAuth: () => (/* binding */ getAuth),
  44. /* harmony export */ saveAccount: () => (/* binding */ saveAccount),
  45. /* harmony export */ saveAuth: () => (/* binding */ saveAuth)
  46. /* harmony export */ });
  47. /* harmony import */ var _Auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/auth/Auth.ts");
  48. /* harmony import */ var _bot_Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
  49. /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/variables.ts");
  50. /* harmony import */ var _requests_get_painting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/requests/get-painting.ts");
  51. /* harmony import */ var _bot_util_websocket__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/bot/util/websocket.ts");
  52. const window2 = window;
  53. var LocalAccounts = new Map();
  54. // save changes in localstorage
  55. function storagePush() {
  56. const obj = Object.fromEntries(LocalAccounts);
  57. localStorage.setItem('LocalAccounts', JSON.stringify(obj));
  58. }
  59. // restore localstorage to localaccounts
  60. function storageGet() {
  61. const storedAccounts = localStorage.getItem('LocalAccounts');
  62. if (storedAccounts) {
  63. const parsedAccounts = JSON.parse(storedAccounts);
  64. LocalAccounts = new Map(Object.entries(parsedAccounts));
  65. }
  66. else
  67. LocalAccounts = new Map();
  68. }
  69. async function delay(ms) {
  70. return new Promise(resolve => setTimeout(resolve, ms));
  71. }
  72. // saves from params
  73. function saveAuth(username, authId, authKey, authToken, print = true) {
  74. if (!authId || !authKey || !authToken) {
  75. console.log('[7p] saveAuth usage: saveAuth(username, authId, authKey, authToken)');
  76. return;
  77. }
  78. const account = { authId, authKey, authToken };
  79. LocalAccounts.set(username, account);
  80. storagePush();
  81. if (print)
  82. console.log('Auth saved. Saved list: ', LocalAccounts);
  83. }
  84. // returns client's auth
  85. async function getAuth(print = true) {
  86. const cookieStore = window2.cookieStore;
  87. const authToken = await cookieStore.get("authToken");
  88. const authKey = await cookieStore.get("authKey");
  89. const authId = await cookieStore.get("authId");
  90. if (authToken == null || authKey == null || authId == null) {
  91. console.log('[7p] Please login first!');
  92. return;
  93. }
  94. if (print)
  95. console.log(`authId = "${authId.value}", authKey = "${authKey.value}", authToken = "${authToken.value}"`);
  96. return { authToken: authToken.value, authKey: authKey.value, authId: authId.value };
  97. }
  98. // saves auth from client cookies
  99. async function saveAccount() {
  100. storageGet();
  101. const AuthObj = await getAuth(false);
  102. const userinfo = await (0,_requests_get_painting__WEBPACK_IMPORTED_MODULE_2__["default"])(AuthObj.authId, AuthObj.authKey, AuthObj.authToken);
  103. saveAuth(userinfo.user.name, AuthObj.authId, AuthObj.authKey, AuthObj.authToken, false);
  104. console.log('Auth saved. Saved list: ', LocalAccounts);
  105. }
  106. // logs saved auths
  107. function getAccounts() {
  108. storageGet();
  109. if (!LocalAccounts || LocalAccounts.size == 0) {
  110. console.log('No accounts found');
  111. return;
  112. }
  113. console.log(`Found ${LocalAccounts.size} accounts`);
  114. console.log(LocalAccounts);
  115. }
  116. // deletes auths
  117. function deleteAccount(identifier) {
  118. if (identifier == null) {
  119. console.log('deleteAccount usage: deleteAccount(user or index)');
  120. return;
  121. }
  122. storageGet();
  123. if (typeof identifier == 'string') {
  124. if (identifier == 'all') {
  125. LocalAccounts.forEach((value, key) => {
  126. LocalAccounts.delete(key);
  127. });
  128. return;
  129. }
  130. if (!LocalAccounts.has(identifier)) {
  131. console.log(`[7p] Error deleting: No account with name ${identifier}`);
  132. return;
  133. }
  134. LocalAccounts.delete(identifier);
  135. console.log(`[7p] Deleted account ${identifier}.`);
  136. console.log(LocalAccounts);
  137. }
  138. if (typeof identifier == 'number') {
  139. const keys = Array.from(LocalAccounts.keys());
  140. if (identifier > keys.length) {
  141. console.log(`[7p] Error deleting: No account with index ${identifier}`);
  142. return;
  143. }
  144. LocalAccounts.delete(keys[identifier]);
  145. console.log(`Deleted account ${identifier}`);
  146. console.log(LocalAccounts);
  147. }
  148. storagePush();
  149. }
  150. async function connect(username) {
  151. storageGet();
  152. const account = LocalAccounts.get(username);
  153. const connectedbot = window2.seven.bots.find((bot) => bot.generalinfo?.user.name == username);
  154. if (!username) {
  155. console.log('[7p] Missing bot username, connect("username")');
  156. return;
  157. }
  158. if (username == 'all') {
  159. for (const [username, account] of LocalAccounts) {
  160. // checks if bot is already connected
  161. const connectedbot = window2.seven.bots.find((bot) => bot.generalinfo?.user.name == username);
  162. const auth = new _Auth__WEBPACK_IMPORTED_MODULE_4__["default"](account);
  163. if (connectedbot) {
  164. console.log(`[7p] Account ${username} is already connected.`);
  165. continue;
  166. }
  167. new _bot_Bot__WEBPACK_IMPORTED_MODULE_0__.WSBot(auth, username);
  168. await delay(500);
  169. }
  170. return;
  171. }
  172. if (!account) {
  173. console.log(`[7p] No account found with username ${username}`);
  174. return;
  175. }
  176. if (connectedbot) {
  177. console.log(`[7p] Account ${username} is already connected.`);
  178. return;
  179. }
  180. const auth = new _Auth__WEBPACK_IMPORTED_MODULE_4__["default"](account);
  181. new _bot_Bot__WEBPACK_IMPORTED_MODULE_0__.WSBot(auth, username);
  182. }
  183. function disconnect(username) {
  184. const bot = window2.seven.bots.find((bot) => bot.generalinfo?.user.name == username);
  185. if (!username) {
  186. console.log('[7p] disconnect requires a username, disconnect("username")');
  187. return;
  188. }
  189. if (username == 'all') {
  190. if (window2.seven.bots.length == 1) {
  191. console.log('[7p] No bots connected.');
  192. return;
  193. }
  194. for (const bot of window2.seven.bots) {
  195. (0,_bot_util_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
  196. }
  197. return;
  198. }
  199. if (!bot) {
  200. console.log(`[7p] No bot connected with username ${username}`);
  201. return;
  202. }
  203. (0,_bot_util_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
  204. }
  205. /***/ }),
  206. /***/ "./src/bot/Bot.ts":
  207. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  208. "use strict";
  209. __webpack_require__.r(__webpack_exports__);
  210. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  211. /* harmony export */ Bot: () => (/* binding */ Bot),
  212. /* harmony export */ Client: () => (/* binding */ Client),
  213. /* harmony export */ WSBot: () => (/* binding */ WSBot)
  214. /* harmony export */ });
  215. /* harmony import */ var _util_websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/util/websocket.ts");
  216. /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/Canvas.ts");
  217. /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/variables.ts");
  218. /* harmony import */ var _css_style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/css/style.ts");
  219. /* harmony import */ var _requests_get_painting__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/requests/get-painting.ts");
  220. const seven = window.seven;
  221. class Bot {
  222. constructor() {
  223. this.trackeriters = 0;
  224. this.lastplace = Date.now();
  225. this.botid = Bot.botIndex;
  226. Bot.botIndex += 1; // id for next bot
  227. }
  228. emit(event, params) {
  229. this.ws.send(`42["${event}",${params}]`);
  230. }
  231. async placePixel(x, y, color, tracker = true) {
  232. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
  233. return new Promise((resolve) => {
  234. const canvascolor = canvas.getColor(x, y);
  235. if (canvascolor == color || canvascolor == 200)
  236. return resolve(true);
  237. new Promise((resolve) => {
  238. setTimeout(() => resolve(true), Math.max(0, seven.pixelspeed - (Date.now() - this.lastplace)));
  239. }).then(() => {
  240. this.emit('p', `[${x},${y},${color},1]`);
  241. this.lastplace = Date.now();
  242. if (tracker && this.trackeriters >= 6) {
  243. $(this.tracker).css({ top: y, left: x, display: 'block' });
  244. this.trackeriters = 0;
  245. }
  246. // console.log(`[7p] placing: ${canvascolor} -> ${color}`)
  247. this.trackeriters += 1;
  248. resolve(true);
  249. });
  250. });
  251. }
  252. static async findAvailableBot() {
  253. const bots = seven.bots;
  254. var tick = 0;
  255. while (true) {
  256. for (var i = 0; i < bots.length; i++) {
  257. const bot = bots[i];
  258. if (Date.now() - bot.lastplace >= seven.pixelspeed) {
  259. return bot;
  260. }
  261. }
  262. tick += 1;
  263. if (tick == seven.tickspeed) {
  264. tick = 0;
  265. await new Promise(resolve => setTimeout(resolve, 0));
  266. }
  267. }
  268. }
  269. createTracker() {
  270. const tracker = $('<div class="track" id="bottracker">').text(`[7P] ${this.username}`).css(_css_style__WEBPACK_IMPORTED_MODULE_3__.trackercss);
  271. $('#canvas').ready(function () {
  272. // console.log(`[7p] created tracker: ${name}`)
  273. $('#painting-move').append(tracker);
  274. });
  275. return tracker;
  276. }
  277. set ws(wss) {
  278. this._ws = wss;
  279. }
  280. get ws() {
  281. return this._ws;
  282. }
  283. }
  284. Bot.botIndex = 0;
  285. class WSBot extends Bot {
  286. constructor(auth, username) {
  287. super();
  288. if (!username || !auth) {
  289. console.error("[7p ERROR]: 'auth' and 'username' should both be in the constructor arguments.");
  290. return;
  291. }
  292. this._auth = auth;
  293. this.username = username;
  294. this.startBot();
  295. }
  296. async startBot() {
  297. this.generalinfo = await (0,_requests_get_painting__WEBPACK_IMPORTED_MODULE_4__["default"])(this.auth.authId, this.auth.authKey, this.auth.authToken);
  298. this.tracker = this.createTracker();
  299. this.ws = await (0,_util_websocket__WEBPACK_IMPORTED_MODULE_0__.hookBot)(this);
  300. }
  301. get auth() {
  302. return this._auth;
  303. }
  304. }
  305. class Client extends Bot {
  306. constructor() {
  307. super();
  308. this.username = 'Client';
  309. Client.instance = this;
  310. this.tracker = this.createTracker();
  311. seven.bots.push(this);
  312. }
  313. static get Client() {
  314. return Client.instance;
  315. }
  316. }
  317. /***/ }),
  318. /***/ "./src/bot/util/onmessage.ts":
  319. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  320. "use strict";
  321. __webpack_require__.r(__webpack_exports__);
  322. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  323. /* harmony export */ onBotMessage: () => (/* binding */ onBotMessage),
  324. /* harmony export */ onClientMessage: () => (/* binding */ onClientMessage)
  325. /* harmony export */ });
  326. /* harmony import */ var _Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
  327. /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/Canvas.ts");
  328. /* harmony import */ var _palive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/bot/util/palive.ts");
  329. /* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/bot/util/websocket.ts");
  330. /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/variables.ts");
  331. /* harmony import */ var _auth_util_commands__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./src/auth/util/commands.ts");
  332. /* harmony import */ var _modules_defaultModules_SevenProtect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./src/modules/defaultModules/SevenProtect.ts");
  333. const seven = window.seven;
  334. // client
  335. function onClientMessage(event) {
  336. const msg = event.data;
  337. const bot = _Bot__WEBPACK_IMPORTED_MODULE_0__.Client.instance;
  338. if (msg.startsWith("42")) {
  339. const msg = JSON.parse(event.data.substr(2));
  340. const type = msg[0];
  341. switch (type) {
  342. case "p":
  343. for (const pixel of msg[1]) {
  344. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
  345. const x = pixel[0];
  346. const y = pixel[1];
  347. const color = pixel[2];
  348. const id = pixel[4];
  349. canvas.updatePixel(x, y, color);
  350. _modules_defaultModules_SevenProtect__WEBPACK_IMPORTED_MODULE_6__["default"].checkPixel(x, y, color);
  351. }
  352. break;
  353. case "canvas":
  354. for (const pixel of msg[1]) {
  355. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
  356. const x = pixel[0];
  357. const y = pixel[1];
  358. const color = pixel[2];
  359. canvas.updatePixel(x, y, color);
  360. }
  361. break;
  362. }
  363. }
  364. }
  365. // multibot
  366. async function onBotMessage(event, bot) {
  367. const message = event.data;
  368. // game packets
  369. if (message.startsWith("42")) {
  370. const message = JSON.parse(event.data.substr(2));
  371. const type = message[0];
  372. const botid = bot.generalinfo.user.id;
  373. const botname = bot.username;
  374. switch (type) {
  375. case "server_time":
  376. bot.paliveServerTime = message[1]; // stores servertime for palive
  377. break;
  378. case "ping.alive":
  379. const hash = (0,_palive__WEBPACK_IMPORTED_MODULE_2__["default"])(bot.paliveServerTime, botid);
  380. console.log('[7p]', botname, ': pong =', hash, botid);
  381. bot.emit('pong.alive', `"${hash}"`);
  382. break;
  383. case "throw.error":
  384. if (message[1] == 49) {
  385. console.log(`[7p] [Bot ${botname}] Error (${message[1]}): This auth is not valid! Deleting account from saved accounts...`);
  386. (0,_auth_util_commands__WEBPACK_IMPORTED_MODULE_5__.deleteAccount)(botname);
  387. (0,_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
  388. return;
  389. }
  390. else if (message[1] == 16) {
  391. (0,_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
  392. }
  393. console.log(`[7p] [Bot ${botname}] Pixelplace WS error: ${message[1]}`);
  394. break;
  395. case "canvas":
  396. console.log(`[7p] Succesfully connected to bot ${bot.username}`);
  397. seven.bots.push(bot);
  398. break;
  399. }
  400. }
  401. // start
  402. if (message.startsWith("0"))
  403. bot.ws.send('40');
  404. // auth
  405. if (message.startsWith("40"))
  406. bot.ws.send(`42["init",{"authKey":"${bot.auth.authKey}","authToken":"${bot.auth.authToken}","authId":"${bot.auth.authId}","boardId":${_canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance.ID}}]`);
  407. // keep alive
  408. if (message.startsWith("2"))
  409. bot.ws.send('3');
  410. }
  411. /***/ }),
  412. /***/ "./src/bot/util/palive.ts":
  413. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  414. "use strict";
  415. __webpack_require__.r(__webpack_exports__);
  416. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  417. /* harmony export */ "default": () => (/* binding */ getPalive),
  418. /* harmony export */ getTDelay: () => (/* binding */ getTDelay)
  419. /* harmony export */ });
  420. // credits to symmetry
  421. function randomString(charList, num) {
  422. return Array.from({ length: num }, () => charList.charAt(Math.floor(Math.random() * charList.length))).join('');
  423. }
  424. function randomString1(num) {
  425. const charList = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  426. return randomString(charList, num);
  427. }
  428. function randomString2(num) {
  429. const charList = 'gmbonjklezcfxta1234567890GMBONJKLEZCFXTA';
  430. return randomString(charList, num);
  431. }
  432. function randInt(min, max) {
  433. return Math.floor(Math.random() * (max - min + 1)) + min;
  434. }
  435. const paliveCharmap = {
  436. "0": "g",
  437. "1": "n",
  438. "2": "b",
  439. "3": "r",
  440. "4": "z",
  441. "5": "s",
  442. "6": "l",
  443. "7": "x",
  444. "8": "i",
  445. "9": "o",
  446. };
  447. function getPalive(serverTime, userId) {
  448. const tDelay = getTDelay(serverTime);
  449. const sequenceLengths = [6, 5, 9, 4, 5, 3, 6, 6, 3];
  450. const currentTimestamp = Math.floor(Date.now() / 1000) + tDelay - 5400;
  451. const timestampString = currentTimestamp.toString();
  452. const timestampCharacters = timestampString.split('');
  453. let result = '';
  454. for (let i = 0; i < sequenceLengths.length; i++) {
  455. const sequenceNumber = sequenceLengths[i];
  456. result += randInt(0, 1) == 1 ? randomString2(sequenceNumber) : randomString1(sequenceNumber);
  457. const letter = paliveCharmap[parseInt(timestampCharacters[i])];
  458. result += randInt(0, 1) == 0 ? letter.toUpperCase() : letter;
  459. }
  460. result += userId.toString().substring(0, 1) + (randInt(0, 1) == 1 ? randomString2(randInt(4, 20)) : randomString1(randInt(4, 25)));
  461. return result + "0=";
  462. }
  463. function getTDelay(serverTime) {
  464. const currentTime = new Date().getTime() / 1e3;
  465. return Math.floor(serverTime - currentTime);
  466. }
  467. /***/ }),
  468. /***/ "./src/bot/util/websocket.ts":
  469. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  470. "use strict";
  471. __webpack_require__.r(__webpack_exports__);
  472. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  473. /* harmony export */ closeBot: () => (/* binding */ closeBot),
  474. /* harmony export */ hookBot: () => (/* binding */ hookBot)
  475. /* harmony export */ });
  476. /* harmony import */ var _Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
  477. /* harmony import */ var _onmessage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/bot/util/onmessage.ts");
  478. /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/variables.ts");
  479. const seven = window.seven;
  480. // client
  481. const customWS = window.WebSocket;
  482. window.WebSocket = function (url, protocols) {
  483. const client = new _Bot__WEBPACK_IMPORTED_MODULE_0__.Client();
  484. const socket = new customWS(url, protocols);
  485. socket.addEventListener("message", (event) => { (0,_onmessage__WEBPACK_IMPORTED_MODULE_1__.onClientMessage)(event); });
  486. client.ws = socket;
  487. return socket;
  488. };
  489. // multibot
  490. async function hookBot(bot) {
  491. console.log(`[7p] Attempting to connect account ${bot.username}`);
  492. const socket = new customWS("wss://pixelplace.io/socket.io/?EIO=4&transport=websocket");
  493. socket.addEventListener("message", (event) => { (0,_onmessage__WEBPACK_IMPORTED_MODULE_1__.onBotMessage)(event, bot); });
  494. socket.addEventListener("close", () => { _Bot__WEBPACK_IMPORTED_MODULE_0__.Bot.botIndex -= 1; });
  495. return socket;
  496. }
  497. function closeBot(bot) {
  498. if (bot instanceof _Bot__WEBPACK_IMPORTED_MODULE_0__.Client)
  499. return;
  500. if (!bot) {
  501. console.log('[7p] Cannot close bot that doesnt exist.');
  502. return;
  503. }
  504. bot.ws.close();
  505. const result = seven.bots.filter((checkedBot) => checkedBot.botid != bot.botid);
  506. seven.bots = result;
  507. console.log('[7placer] Ended bot ', bot.botid);
  508. }
  509. /***/ }),
  510. /***/ "./src/canvas/Canvas.ts":
  511. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  512. "use strict";
  513. __webpack_require__.r(__webpack_exports__);
  514. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  515. /* harmony export */ Canvas: () => (/* binding */ Canvas),
  516. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  517. /* harmony export */ });
  518. /* harmony import */ var _css_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/css/style.ts");
  519. /* harmony import */ var _util_canvasloader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/util/canvasloader.ts");
  520. class Canvas {
  521. constructor() {
  522. this._ID = this.ParseID();
  523. this._isProcessed = false;
  524. this._customCanvas = this.newPreviewCanvas();
  525. }
  526. static get instance() {
  527. if (!Canvas._instance) {
  528. Canvas._instance = new Canvas;
  529. (0,_util_canvasloader__WEBPACK_IMPORTED_MODULE_1__.processColors)();
  530. }
  531. return Canvas._instance;
  532. }
  533. newPreviewCanvas() {
  534. const canvas = $(`<canvas width="2500" height="2088">`).css(_css_style__WEBPACK_IMPORTED_MODULE_0__.canvascss);
  535. $('#canvas').ready(function () {
  536. $('#painting-move').append(canvas);
  537. });
  538. const ctx = canvas[0].getContext("2d");
  539. return ctx;
  540. }
  541. ParseID() {
  542. return parseInt(window.location.href.split("/").slice(-1)[0].split("-")[0]);
  543. }
  544. get previewCanvas() {
  545. return this._customCanvas;
  546. }
  547. get canvasArray() {
  548. return this._canvasArray;
  549. }
  550. get isProcessed() {
  551. return this._isProcessed;
  552. }
  553. set isProcessed(bool) {
  554. this._isProcessed = bool;
  555. }
  556. get ID() {
  557. return this._ID;
  558. }
  559. set canvasArray(array) {
  560. this._canvasArray = array;
  561. this.isProcessed = true;
  562. }
  563. getColor(x, y) {
  564. try {
  565. return this.canvasArray[x][y];
  566. }
  567. catch {
  568. return 200;
  569. }
  570. ;
  571. }
  572. updatePixel(x, y, color) {
  573. if (!this._isProcessed)
  574. return;
  575. this.canvasArray[x][y] = color;
  576. // console.log(this.getColor(x, y), "->", color)
  577. }
  578. }
  579. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Canvas);
  580. /***/ }),
  581. /***/ "./src/canvas/util/canvasloader.ts":
  582. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  583. "use strict";
  584. __webpack_require__.r(__webpack_exports__);
  585. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  586. /* harmony export */ processColors: () => (/* binding */ processColors),
  587. /* harmony export */ processWater: () => (/* binding */ processWater)
  588. /* harmony export */ });
  589. /* harmony import */ var _Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
  590. /* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/util/colors.ts");
  591. async function processWater() {
  592. const image = await fetch('https://pixelplace.io/canvas/' + _Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance.ID + 'p.png?t200000=' + Date.now());
  593. const blob = await image.blob();
  594. const bitmap = await createImageBitmap(blob);
  595. const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
  596. var waterArray = Array.from({ length: canvas.width }, () => Array.from({ length: canvas.height }, () => 1));
  597. const context = canvas.getContext('2d');
  598. context.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height);
  599. const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
  600. return new Promise((resolve) => {
  601. if (bitmap.width == 1 && bitmap.height == 1) { // custom canvases ?
  602. resolve(waterArray);
  603. }
  604. for (let y = 0; y < canvas.height; y++) {
  605. for (let x = 0; x < canvas.width; x++) {
  606. const index = (y * imageData.width + x) * 4;
  607. var r = imageData.data[index];
  608. var g = imageData.data[index + 1];
  609. var b = imageData.data[index + 2];
  610. if (r == 204 && g == 204 && b == 204) {
  611. waterArray[x][y] = 200;
  612. }
  613. }
  614. }
  615. console.log(waterArray);
  616. resolve(waterArray);
  617. });
  618. }
  619. async function processColors() {
  620. const startTotalTime = performance.now();
  621. const waterArray = await processWater();
  622. const startColorsTime = performance.now();
  623. const canvas = document.getElementById('canvas');
  624. const ctx = canvas.getContext('2d');
  625. const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  626. const pixelData = imageData.data;
  627. var CanvasArray = Array.from({ length: canvas.width }, () => Array.from({ length: canvas.height }, () => 1));
  628. if (waterArray.length > 1) {
  629. CanvasArray = waterArray;
  630. }
  631. for (let y = 0; y < canvas.height; y++) {
  632. for (let x = 0; x < canvas.width; x++) {
  633. if (CanvasArray[x][y] == 200) {
  634. continue;
  635. }
  636. const pixelIndex = (y * canvas.width + x) * 4;
  637. const r = pixelData[pixelIndex];
  638. const g = pixelData[pixelIndex + 1];
  639. const b = pixelData[pixelIndex + 2];
  640. const colornum = (r << 16) | (g << 8) | b;
  641. const colorIndex = _colors__WEBPACK_IMPORTED_MODULE_1__.colors.indexOf(colornum);
  642. CanvasArray[x][y] = colorIndex;
  643. }
  644. }
  645. console.log(CanvasArray);
  646. _Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance.canvasArray = CanvasArray;
  647. const finalTotalTime = performance.now() - startTotalTime;
  648. const finalColorsTime = performance.now() - startColorsTime;
  649. const finalWaterTime = startColorsTime - startTotalTime;
  650. console.log(`[7p PROCESSING] Total Time: ${finalTotalTime}ms, Colors Time: ${finalColorsTime}ms, Water Time: ${finalWaterTime}ms`);
  651. }
  652. /***/ }),
  653. /***/ "./src/canvas/util/colors.ts":
  654. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  655. "use strict";
  656. __webpack_require__.r(__webpack_exports__);
  657. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  658. /* harmony export */ colors: () => (/* binding */ colors)
  659. /* harmony export */ });
  660. const colors = [
  661. 0xFFFFFF,
  662. 0xC4C4C4,
  663. 0x888888,
  664. 0x555555,
  665. 0x222222,
  666. 0x000000,
  667. 0x006600,
  668. 0x22B14C,
  669. 0x02BE01,
  670. 0x51E119,
  671. 0x94E044,
  672. 0xFBFF5B,
  673. 0xE5D900,
  674. 0xE6BE0C,
  675. 0xE59500,
  676. 0xA06A42,
  677. 0x99530D,
  678. 0x633C1F,
  679. 0x6B0000,
  680. 0x9F0000,
  681. 0xE50000,
  682. 0xFF3904,
  683. 0xBB4F00,
  684. 0xFF755F,
  685. 0xFFC49F,
  686. 0xFFDFCC,
  687. 0xFFA7D1,
  688. 0xCF6EE4,
  689. 0xEC08EC,
  690. 0x820080,
  691. 0x5100FF,
  692. 0x020763,
  693. 0x0000EA,
  694. 0x044BFF,
  695. 0x6583CF,
  696. 0x36BAFF,
  697. 0x0083C7,
  698. 0x00D3DD,
  699. 0x45FFC8,
  700. 0x003638,
  701. 0x477050,
  702. 0x98FB98,
  703. 0xFF7000,
  704. 0xCE2939,
  705. 0xFF416A,
  706. 0x7D26CD,
  707. 0x330077,
  708. 0x005BA1,
  709. 0xB5E8EE,
  710. 0x1B7400,
  711. 0x75CEA9,
  712. 0x34EB6B,
  713. 0xFFCC00,
  714. 0xBB276C,
  715. 0xFF7EBB,
  716. 0x440414,
  717. 0x591C91,
  718. 0xC1A162,
  719. 0xCAFF70,
  720. 0x013182,
  721. 0xA6A6A6,
  722. 0x6F6F6F,
  723. 0x3A3A3A,
  724. 0x4D082C
  725. ];
  726. /***/ }),
  727. /***/ "./src/css/drop.ts":
  728. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  729. "use strict";
  730. __webpack_require__.r(__webpack_exports__);
  731. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  732. /* harmony export */ createDropArea: () => (/* binding */ createDropArea)
  733. /* harmony export */ });
  734. /* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/css/style.ts");
  735. /* harmony import */ var _modules_defaultModules_SevenImageTools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenImageTools.ts");
  736. /* harmony import */ var _modules_util_getClientMouse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/util/getClientMouse.ts");
  737. function createDropArea() {
  738. const dropobject = $('<div>').text('Drop Image').css(_style__WEBPACK_IMPORTED_MODULE_0__.drop);
  739. const [x, y] = (0,_modules_util_getClientMouse__WEBPACK_IMPORTED_MODULE_2__["default"])();
  740. $('body').append(dropobject);
  741. dropobject.on("click", function () {
  742. dropobject.remove();
  743. });
  744. dropobject.on("drop", async function (event) {
  745. event.preventDefault();
  746. event.stopPropagation();
  747. const image = event.originalEvent.dataTransfer.files[0];
  748. dropobject.remove();
  749. await (0,_modules_defaultModules_SevenImageTools__WEBPACK_IMPORTED_MODULE_1__.botImage)(x, y, image);
  750. // console.log(image)
  751. }).on('dragover', false);
  752. }
  753. /***/ }),
  754. /***/ "./src/css/style.ts":
  755. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  756. "use strict";
  757. __webpack_require__.r(__webpack_exports__);
  758. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  759. /* harmony export */ canvascss: () => (/* binding */ canvascss),
  760. /* harmony export */ drop: () => (/* binding */ drop),
  761. /* harmony export */ trackercss: () => (/* binding */ trackercss)
  762. /* harmony export */ });
  763. const trackercss = {
  764. top: '0px',
  765. left: '0px',
  766. borderColor: 'rgb(138,43,226)',
  767. color: 'rgb(138,43,226)',
  768. backgroundColor: 'black',
  769. opacity: '60%',
  770. display: 'none',
  771. transition: 'all 0.06s ease-in-out',
  772. pointerEvents: 'none'
  773. };
  774. // design by 0vc4
  775. const drop = {
  776. width: 'calc(100% - 2em)',
  777. height: 'calc(100% - 2em)',
  778. position: 'fixed',
  779. left: '0px',
  780. top: '0px',
  781. backgroundColor: 'rgba(0, 0, 0, 0.533)',
  782. zIndex: '9999-',
  783. display: 'flex',
  784. color: 'white',
  785. fontSize: '48pt',
  786. justifyContent: 'center',
  787. alignItems: 'center',
  788. border: '3px white dashed',
  789. borderRadius: '18px',
  790. margin: '1em',
  791. };
  792. const canvascss = {
  793. position: 'absolute',
  794. pointerEvents: 'none',
  795. left: '0px',
  796. top: '0px',
  797. imageRendering: 'pixelated',
  798. opacity: '50%',
  799. animation: 'blink 3s ease-out infinite'
  800. };
  801. const blink = document.createElement("style");
  802. blink.type = "text/css";
  803. blink.innerText = `
  804. @keyframes blink {
  805. 0% { opacity: .30; }
  806. 50% { opacity: .10; }
  807. 100% { opacity: .30; }
  808. }`;
  809. document.head.appendChild(blink);
  810. /***/ }),
  811. /***/ "./src/index.ts":
  812. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  813. "use strict";
  814. // ESM COMPAT FLAG
  815. __webpack_require__.r(__webpack_exports__);
  816. ;// CONCATENATED MODULE: ./package.json
  817. const package_namespaceObject = {"rE":"1.6"};
  818. ;// CONCATENATED MODULE: ./src/index.ts
  819. // @ts-ignore (GLOBAL IMPORT)
  820. const context = __webpack_require__("./src sync recursive \\.*");
  821. context.keys().forEach(context);
  822. Object.defineProperty(window.console, 'log', {
  823. configurable: false,
  824. enumerable: true,
  825. writable: false,
  826. value: console.log
  827. });
  828. console.log('7Placer Loaded! Version:', package_namespaceObject.rE);
  829. /***/ }),
  830. /***/ "./src/modules/defaultModules/SevenImageTools.ts":
  831. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  832. "use strict";
  833. __webpack_require__.r(__webpack_exports__);
  834. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  835. /* harmony export */ ImageToPixels: () => (/* binding */ ImageToPixels),
  836. /* harmony export */ botImage: () => (/* binding */ botImage)
  837. /* harmony export */ });
  838. /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
  839. /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/variables.ts");
  840. /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
  841. /* harmony import */ var _canvas_util_colors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/canvas/util/colors.ts");
  842. /* harmony import */ var _SevenSorting__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/defaultModules/SevenSorting.ts");
  843. function getColorDistance(c1, c2) {
  844. // Image Color
  845. const r1 = (c1 >> 16) & 0xFF;
  846. const g1 = (c1 >> 8) & 0xFF;
  847. const b1 = c1 & 0xFF;
  848. // Pixelplace Color
  849. const r2 = (c2 >> 16) & 0xFF;
  850. const g2 = (c2 >> 8) & 0xFF;
  851. const b2 = c2 & 0xFF;
  852. return (r1 - r2) ** 2 + (g1 - g2) ** 2 + (b1 - b2) ** 2;
  853. }
  854. function findClosestColor(color) {
  855. let minDistance = Infinity;
  856. let colorNumber;
  857. let index = 0;
  858. for (const pxpColor of _canvas_util_colors__WEBPACK_IMPORTED_MODULE_4__.colors) {
  859. const distance = getColorDistance(color, pxpColor);
  860. if (distance < minDistance) {
  861. minDistance = distance;
  862. colorNumber = index;
  863. }
  864. index += 1;
  865. }
  866. return colorNumber;
  867. }
  868. function previewCanvasImage(x, y, image) {
  869. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance;
  870. const ctx = canvas.previewCanvas;
  871. const img = new Image();
  872. img.onload = function () {
  873. ctx.drawImage(img, x, y);
  874. };
  875. img.src = URL.createObjectURL(image);
  876. }
  877. async function ImageToPixels(image) {
  878. const result = [];
  879. const canvas = new OffscreenCanvas(image.width, image.height);
  880. const ctx = canvas.getContext('2d');
  881. ctx.drawImage(image, 0, 0, image.width, image.height);
  882. const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  883. const pixelData = imageData.data;
  884. for (let y = 0; y < canvas.height; y++) {
  885. for (let x = 0; x < canvas.width; x++) {
  886. const pixelIndex = (y * canvas.width + x) * 4;
  887. const r = pixelData[pixelIndex];
  888. const g = pixelData[pixelIndex + 1];
  889. const b = pixelData[pixelIndex + 2];
  890. const a = pixelData[pixelIndex + 3];
  891. const colornum = (r << 16) | (g << 8) | b;
  892. if (a < 1) {
  893. continue; // ignore transparent pixels
  894. }
  895. const color = findClosestColor(colornum);
  896. result.push({ x, y, color });
  897. }
  898. }
  899. return result;
  900. }
  901. async function botImage(x, y, image) {
  902. const bitmap = await createImageBitmap(image);
  903. const processed = await ImageToPixels(bitmap);
  904. previewCanvasImage(x, y, image);
  905. (0,_SevenSorting__WEBPACK_IMPORTED_MODULE_3__["default"])(processed, window.seven.order);
  906. processed.forEach((pixel) => _SevenQueue__WEBPACK_IMPORTED_MODULE_2__["default"].add(pixel.x + x, pixel.y + y, pixel.color));
  907. }
  908. /***/ }),
  909. /***/ "./src/modules/defaultModules/SevenProtect.ts":
  910. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  911. "use strict";
  912. __webpack_require__.r(__webpack_exports__);
  913. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  914. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  915. /* harmony export */ });
  916. /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
  917. /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
  918. class Protector {
  919. protect(x, y, color) {
  920. Protector.protected.push({ x: x, y: y, color: color });
  921. }
  922. static clear() {
  923. Protector.protected = [];
  924. }
  925. static checkPixel(x, y, color) {
  926. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance;
  927. if (Protector.protected.length == 0) {
  928. return;
  929. }
  930. function isInsideProtected(pixel) {
  931. if (pixel.x == x && pixel.y == y) {
  932. return true;
  933. }
  934. return false;
  935. }
  936. function isSameColor(pixel) {
  937. const canvasColor = canvas.getColor(x, y);
  938. if (canvasColor == pixel.color) {
  939. return true;
  940. }
  941. return false;
  942. }
  943. Protector.protected.forEach((pixel) => {
  944. if (isInsideProtected(pixel) && !isSameColor(pixel)) {
  945. _SevenQueue__WEBPACK_IMPORTED_MODULE_1__["default"].add(x, y, pixel.color);
  946. }
  947. });
  948. }
  949. }
  950. Protector.protected = [];
  951. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Protector);
  952. /***/ }),
  953. /***/ "./src/modules/defaultModules/SevenQueue.ts":
  954. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  955. "use strict";
  956. __webpack_require__.r(__webpack_exports__);
  957. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  958. /* harmony export */ "default": () => (/* binding */ Queue)
  959. /* harmony export */ });
  960. /* harmony import */ var _bot_Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
  961. /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/Canvas.ts");
  962. /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/variables.ts");
  963. /* harmony import */ var _SevenProtect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/defaultModules/SevenProtect.ts");
  964. const seven = window.seven;
  965. class Queue {
  966. constructor() {
  967. Queue.performance = performance.now();
  968. }
  969. static add(x, y, color) {
  970. seven.queue.push({ x: x, y: y, color: color });
  971. if (seven.queue.length == 1) {
  972. Queue.start();
  973. }
  974. }
  975. static clear() {
  976. // console.log('Queue cleared: ', seven.queue)
  977. seven.queue = [];
  978. }
  979. static async start() {
  980. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
  981. const protector = new _SevenProtect__WEBPACK_IMPORTED_MODULE_3__["default"];
  982. if (!canvas.isProcessed) {
  983. console.log('[7p] Error starting queue: Canvas has not been processed yet.');
  984. Queue.stop();
  985. return;
  986. }
  987. seven.inprogress = true;
  988. while (seven.inprogress) {
  989. console.log(performance.now() - Queue.performance);
  990. Queue.performance = performance.now();
  991. const pixel = seven.queue[0];
  992. const bot = await _bot_Bot__WEBPACK_IMPORTED_MODULE_0__.Bot.findAvailableBot();
  993. await bot.placePixel(pixel.x, pixel.y, pixel.color);
  994. seven.queue.shift();
  995. if (seven.protect) {
  996. protector.protect(pixel.x, pixel.y, pixel.color);
  997. }
  998. if (seven.queue.length == 0) {
  999. seven.inprogress = false;
  1000. console.log('[7p] Queue done.');
  1001. }
  1002. }
  1003. }
  1004. static stop() {
  1005. seven.inprogress = false;
  1006. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
  1007. canvas.previewCanvas.clearRect(0, 0, 3000, 3000);
  1008. _SevenProtect__WEBPACK_IMPORTED_MODULE_3__["default"].clear();
  1009. Queue.clear();
  1010. }
  1011. }
  1012. /***/ }),
  1013. /***/ "./src/modules/defaultModules/SevenSorting.ts":
  1014. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1015. "use strict";
  1016. __webpack_require__.r(__webpack_exports__);
  1017. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1018. /* harmony export */ "default": () => (/* binding */ sort)
  1019. /* harmony export */ });
  1020. const seven = window.seven;
  1021. function sort(array, order) {
  1022. switch (seven.order) {
  1023. case 'rand':
  1024. array.sort(() => Math.random() - 0.5);
  1025. return array;
  1026. case 'colors':
  1027. array.sort((a, b) => a.color - b.color);
  1028. return array;
  1029. case 'vertical':
  1030. array.sort((a, b) => a.x - b.x);
  1031. return array;
  1032. case 'horizontal':
  1033. array.sort((a, b) => a.y - b.y);
  1034. return array;
  1035. default:
  1036. case 'circle':
  1037. const CX = Math.floor((array[0].x + array[array.length - 1].x) / 2);
  1038. const CY = Math.floor((array[0].y + array[array.length - 1].y) / 2);
  1039. array.sort((a, b) => {
  1040. const distanceA = Math.sqrt((a.x - CX) ** 2 + (a.y - CY) ** 2);
  1041. const distanceB = Math.sqrt((b.x - CX) ** 2 + (b.y - CY) ** 2);
  1042. return distanceA - distanceB;
  1043. });
  1044. return array;
  1045. }
  1046. }
  1047. /***/ }),
  1048. /***/ "./src/modules/defaultModules/SevenSquareMaker.ts":
  1049. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1050. "use strict";
  1051. __webpack_require__.r(__webpack_exports__);
  1052. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1053. /* harmony export */ BotSquare: () => (/* binding */ BotSquare)
  1054. /* harmony export */ });
  1055. /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
  1056. /* harmony import */ var _SevenSorting__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenSorting.ts");
  1057. function BotSquare(x1, y1, x2, y2, color) {
  1058. var result = [];
  1059. if (x2 < x1)
  1060. [x1, x2] = [x2, x1];
  1061. if (y2 < y1)
  1062. [y1, y2] = [y2, y1];
  1063. for (let x = x1; x <= x2; x++) {
  1064. for (let y = y1; y <= y2; y++) {
  1065. result.push({ x, y, color });
  1066. }
  1067. }
  1068. result = (0,_SevenSorting__WEBPACK_IMPORTED_MODULE_1__["default"])(result, window.seven.order);
  1069. result.forEach((pixel) => {
  1070. _SevenQueue__WEBPACK_IMPORTED_MODULE_0__["default"].add(pixel.x, pixel.y, pixel.color);
  1071. });
  1072. }
  1073. /***/ }),
  1074. /***/ "./src/modules/defaultModules/defaultKeys.ts":
  1075. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1076. "use strict";
  1077. __webpack_require__.r(__webpack_exports__);
  1078. /* harmony import */ var _css_drop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/css/drop.ts");
  1079. /* harmony import */ var _util_getClientMouse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/util/getClientMouse.ts");
  1080. /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
  1081. /* harmony import */ var _SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/defaultModules/SevenSquareMaker.ts");
  1082. var coord1 = null;
  1083. $(document).on('keyup', function (event) {
  1084. if ($(':input[type="text"]').is(':focus'))
  1085. return; //; prevent with chat open
  1086. switch (event.which) {
  1087. case (87):
  1088. if (!event.altKey)
  1089. return;
  1090. _SevenQueue__WEBPACK_IMPORTED_MODULE_1__["default"].stop();
  1091. break;
  1092. case (66):
  1093. if (!event.altKey)
  1094. return;
  1095. (0,_css_drop__WEBPACK_IMPORTED_MODULE_0__.createDropArea)();
  1096. break;
  1097. case 88:
  1098. const [x, y, color] = (0,_util_getClientMouse__WEBPACK_IMPORTED_MODULE_3__["default"])();
  1099. if (coord1 == null) {
  1100. coord1 = { x: x, y: y };
  1101. return;
  1102. }
  1103. (0,_SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__.BotSquare)(coord1.x, coord1.y, x, y, color);
  1104. coord1 = null;
  1105. break;
  1106. // add more
  1107. }
  1108. });
  1109. /***/ }),
  1110. /***/ "./src/modules/defaultModules/index.ts":
  1111. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1112. "use strict";
  1113. __webpack_require__.r(__webpack_exports__);
  1114. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1115. /* harmony export */ BotSquare: () => (/* reexport safe */ _SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__.BotSquare),
  1116. /* harmony export */ ImageToPixels: () => (/* reexport safe */ _SevenImageTools__WEBPACK_IMPORTED_MODULE_0__.ImageToPixels),
  1117. /* harmony export */ botImage: () => (/* reexport safe */ _SevenImageTools__WEBPACK_IMPORTED_MODULE_0__.botImage)
  1118. /* harmony export */ });
  1119. /* harmony import */ var _SevenImageTools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/modules/defaultModules/SevenImageTools.ts");
  1120. /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
  1121. /* harmony import */ var _SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/defaultModules/SevenSquareMaker.ts");
  1122. /* harmony import */ var _defaultKeys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/defaultModules/defaultKeys.ts");
  1123. /***/ }),
  1124. /***/ "./src/modules/index.ts":
  1125. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1126. "use strict";
  1127. __webpack_require__.r(__webpack_exports__);
  1128. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1129. /* harmony export */ BotSquare: () => (/* reexport safe */ _defaultModules__WEBPACK_IMPORTED_MODULE_0__.BotSquare),
  1130. /* harmony export */ ImageToPixels: () => (/* reexport safe */ _defaultModules__WEBPACK_IMPORTED_MODULE_0__.ImageToPixels),
  1131. /* harmony export */ botImage: () => (/* reexport safe */ _defaultModules__WEBPACK_IMPORTED_MODULE_0__.botImage)
  1132. /* harmony export */ });
  1133. /* harmony import */ var _defaultModules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/modules/defaultModules/index.ts");
  1134. // custom exports
  1135. /***/ }),
  1136. /***/ "./src/modules/util/getClientMouse.ts":
  1137. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1138. "use strict";
  1139. __webpack_require__.r(__webpack_exports__);
  1140. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1141. /* harmony export */ "default": () => (/* binding */ getClientMouse)
  1142. /* harmony export */ });
  1143. function getClientMouse() {
  1144. const coordinates = $('#coordinates').text();
  1145. const [x, y] = coordinates.split(',').map(coord => parseInt(coord.trim()));
  1146. const selectedcolor = $('#palette-buttons a.selected').data('id');
  1147. return [x, y, selectedcolor];
  1148. }
  1149. /***/ }),
  1150. /***/ "./src/requests/get-painting.ts":
  1151. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1152. "use strict";
  1153. __webpack_require__.r(__webpack_exports__);
  1154. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1155. /* harmony export */ "default": () => (/* binding */ getPainting)
  1156. /* harmony export */ });
  1157. /* harmony import */ var _getCookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/requests/getCookie.ts");
  1158. /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
  1159. async function getPainting(authId, authKey, authToken) {
  1160. const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance;
  1161. const originalAuthId = (0,_getCookie__WEBPACK_IMPORTED_MODULE_1__["default"])('authId');
  1162. const originalAuthKey = (0,_getCookie__WEBPACK_IMPORTED_MODULE_1__["default"])('authKey');
  1163. const originalAuthToken = (0,_getCookie__WEBPACK_IMPORTED_MODULE_1__["default"])('authToken');
  1164. document.cookie = `authId=${authId}; path=/`;
  1165. document.cookie = `authKey=${authKey}; path=/`;
  1166. document.cookie = `authToken=${authToken}; path=/`;
  1167. try {
  1168. const response = await fetch(`https://pixelplace.io/api/get-painting.php?id=${canvas.ID}&connected=1`, {
  1169. headers: {
  1170. 'Accept': 'application/json, text/javascript, */*; q=0.01',
  1171. },
  1172. credentials: 'include'
  1173. });
  1174. const json = response.json();
  1175. return json;
  1176. }
  1177. finally {
  1178. document.cookie = `authId=${originalAuthId}; path=/`;
  1179. document.cookie = `authKey=${originalAuthKey}; path=/`;
  1180. document.cookie = `authToken=${originalAuthToken}; path=/`;
  1181. }
  1182. }
  1183. /***/ }),
  1184. /***/ "./src/requests/getCookie.ts":
  1185. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1186. "use strict";
  1187. __webpack_require__.r(__webpack_exports__);
  1188. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1189. /* harmony export */ "default": () => (/* binding */ getCookie)
  1190. /* harmony export */ });
  1191. function getCookie(name) {
  1192. const value = `; ${document.cookie}`;
  1193. const parts = value.split(`; ${name}=`);
  1194. if (parts.length === 2)
  1195. return parts.pop().split(';').shift();
  1196. }
  1197. /***/ }),
  1198. /***/ "./src/requests/ping.ts":
  1199. /***/ (() => {
  1200. // to do
  1201. /***/ }),
  1202. /***/ "./src/variables.ts":
  1203. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1204. "use strict";
  1205. __webpack_require__.r(__webpack_exports__);
  1206. /* harmony import */ var _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/auth/util/commands.ts");
  1207. window.seven = {
  1208. bots: [],
  1209. pixelspeed: 21,
  1210. queue: [],
  1211. inprogress: false,
  1212. protect: false,
  1213. tickspeed: 1000,
  1214. order: 'fromCenter',
  1215. saveAuth: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.saveAuth,
  1216. getAuth: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.getAuth,
  1217. saveAccount: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.saveAccount,
  1218. getAccounts: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.getAccounts,
  1219. deleteAccount: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.deleteAccount,
  1220. connect: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.connect,
  1221. disconnect: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.disconnect,
  1222. };
  1223. /***/ }),
  1224. /***/ "./src sync recursive \\.*":
  1225. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1226. var map = {
  1227. ".": "./src/index.ts",
  1228. "./": "./src/index.ts",
  1229. "./auth/Auth": "./src/auth/Auth.ts",
  1230. "./auth/Auth.ts": "./src/auth/Auth.ts",
  1231. "./auth/util/commands": "./src/auth/util/commands.ts",
  1232. "./auth/util/commands.ts": "./src/auth/util/commands.ts",
  1233. "./bot/Bot": "./src/bot/Bot.ts",
  1234. "./bot/Bot.ts": "./src/bot/Bot.ts",
  1235. "./bot/util/onmessage": "./src/bot/util/onmessage.ts",
  1236. "./bot/util/onmessage.ts": "./src/bot/util/onmessage.ts",
  1237. "./bot/util/palive": "./src/bot/util/palive.ts",
  1238. "./bot/util/palive.ts": "./src/bot/util/palive.ts",
  1239. "./bot/util/websocket": "./src/bot/util/websocket.ts",
  1240. "./bot/util/websocket.ts": "./src/bot/util/websocket.ts",
  1241. "./canvas/Canvas": "./src/canvas/Canvas.ts",
  1242. "./canvas/Canvas.ts": "./src/canvas/Canvas.ts",
  1243. "./canvas/util/canvasloader": "./src/canvas/util/canvasloader.ts",
  1244. "./canvas/util/canvasloader.ts": "./src/canvas/util/canvasloader.ts",
  1245. "./canvas/util/colors": "./src/canvas/util/colors.ts",
  1246. "./canvas/util/colors.ts": "./src/canvas/util/colors.ts",
  1247. "./css/drop": "./src/css/drop.ts",
  1248. "./css/drop.ts": "./src/css/drop.ts",
  1249. "./css/style": "./src/css/style.ts",
  1250. "./css/style.ts": "./src/css/style.ts",
  1251. "./index": "./src/index.ts",
  1252. "./index.ts": "./src/index.ts",
  1253. "./modules": "./src/modules/index.ts",
  1254. "./modules/": "./src/modules/index.ts",
  1255. "./modules/defaultModules": "./src/modules/defaultModules/index.ts",
  1256. "./modules/defaultModules/": "./src/modules/defaultModules/index.ts",
  1257. "./modules/defaultModules/SevenImageTools": "./src/modules/defaultModules/SevenImageTools.ts",
  1258. "./modules/defaultModules/SevenImageTools.ts": "./src/modules/defaultModules/SevenImageTools.ts",
  1259. "./modules/defaultModules/SevenProtect": "./src/modules/defaultModules/SevenProtect.ts",
  1260. "./modules/defaultModules/SevenProtect.ts": "./src/modules/defaultModules/SevenProtect.ts",
  1261. "./modules/defaultModules/SevenQueue": "./src/modules/defaultModules/SevenQueue.ts",
  1262. "./modules/defaultModules/SevenQueue.ts": "./src/modules/defaultModules/SevenQueue.ts",
  1263. "./modules/defaultModules/SevenSorting": "./src/modules/defaultModules/SevenSorting.ts",
  1264. "./modules/defaultModules/SevenSorting.ts": "./src/modules/defaultModules/SevenSorting.ts",
  1265. "./modules/defaultModules/SevenSquareMaker": "./src/modules/defaultModules/SevenSquareMaker.ts",
  1266. "./modules/defaultModules/SevenSquareMaker.ts": "./src/modules/defaultModules/SevenSquareMaker.ts",
  1267. "./modules/defaultModules/defaultKeys": "./src/modules/defaultModules/defaultKeys.ts",
  1268. "./modules/defaultModules/defaultKeys.ts": "./src/modules/defaultModules/defaultKeys.ts",
  1269. "./modules/defaultModules/index": "./src/modules/defaultModules/index.ts",
  1270. "./modules/defaultModules/index.ts": "./src/modules/defaultModules/index.ts",
  1271. "./modules/index": "./src/modules/index.ts",
  1272. "./modules/index.ts": "./src/modules/index.ts",
  1273. "./modules/util/getClientMouse": "./src/modules/util/getClientMouse.ts",
  1274. "./modules/util/getClientMouse.ts": "./src/modules/util/getClientMouse.ts",
  1275. "./requests/get-painting": "./src/requests/get-painting.ts",
  1276. "./requests/get-painting.ts": "./src/requests/get-painting.ts",
  1277. "./requests/getCookie": "./src/requests/getCookie.ts",
  1278. "./requests/getCookie.ts": "./src/requests/getCookie.ts",
  1279. "./requests/ping": "./src/requests/ping.ts",
  1280. "./requests/ping.ts": "./src/requests/ping.ts",
  1281. "./variables": "./src/variables.ts",
  1282. "./variables.ts": "./src/variables.ts"
  1283. };
  1284. function webpackContext(req) {
  1285. var id = webpackContextResolve(req);
  1286. return __webpack_require__(id);
  1287. }
  1288. function webpackContextResolve(req) {
  1289. if(!__webpack_require__.o(map, req)) {
  1290. var e = new Error("Cannot find module '" + req + "'");
  1291. e.code = 'MODULE_NOT_FOUND';
  1292. throw e;
  1293. }
  1294. return map[req];
  1295. }
  1296. webpackContext.keys = function webpackContextKeys() {
  1297. return Object.keys(map);
  1298. };
  1299. webpackContext.resolve = webpackContextResolve;
  1300. module.exports = webpackContext;
  1301. webpackContext.id = "./src sync recursive \\.*";
  1302. /***/ })
  1303. /******/ });
  1304. /************************************************************************/
  1305. /******/ // The module cache
  1306. /******/ var __webpack_module_cache__ = {};
  1307. /******/
  1308. /******/ // The require function
  1309. /******/ function __webpack_require__(moduleId) {
  1310. /******/ // Check if module is in cache
  1311. /******/ var cachedModule = __webpack_module_cache__[moduleId];
  1312. /******/ if (cachedModule !== undefined) {
  1313. /******/ return cachedModule.exports;
  1314. /******/ }
  1315. /******/ // Create a new module (and put it into the cache)
  1316. /******/ var module = __webpack_module_cache__[moduleId] = {
  1317. /******/ // no module.id needed
  1318. /******/ // no module.loaded needed
  1319. /******/ exports: {}
  1320. /******/ };
  1321. /******/
  1322. /******/ // Execute the module function
  1323. /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
  1324. /******/
  1325. /******/ // Return the exports of the module
  1326. /******/ return module.exports;
  1327. /******/ }
  1328. /******/
  1329. /************************************************************************/
  1330. /******/ /* webpack/runtime/define property getters */
  1331. /******/ (() => {
  1332. /******/ // define getter functions for harmony exports
  1333. /******/ __webpack_require__.d = (exports, definition) => {
  1334. /******/ for(var key in definition) {
  1335. /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  1336. /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
  1337. /******/ }
  1338. /******/ }
  1339. /******/ };
  1340. /******/ })();
  1341. /******/
  1342. /******/ /* webpack/runtime/hasOwnProperty shorthand */
  1343. /******/ (() => {
  1344. /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  1345. /******/ })();
  1346. /******/
  1347. /******/ /* webpack/runtime/make namespace object */
  1348. /******/ (() => {
  1349. /******/ // define __esModule on exports
  1350. /******/ __webpack_require__.r = (exports) => {
  1351. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  1352. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  1353. /******/ }
  1354. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  1355. /******/ };
  1356. /******/ })();
  1357. /******/
  1358. /************************************************************************/
  1359. /******/
  1360. /******/ // startup
  1361. /******/ // Load entry module and return exports
  1362. /******/ // This entry module is referenced by other modules so it can't be inlined
  1363. /******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
  1364. /******/
  1365. /******/ })()
  1366. ;