├── @kittenwof.zip
├── Not-Pixel-AutoFarm.user.js
├── Not-Pixel-Restart.user.js
├── README.md
├── README_EN.md
└── img
└── 1.png
/@kittenwof.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ilfae/Script-Not-Pixel/a18cfe5e9689f153170c024685aaeffb50481678/@kittenwof.zip
--------------------------------------------------------------------------------
/Not-Pixel-AutoFarm.user.js:
--------------------------------------------------------------------------------
1 | // ==UserScript==
2 | // @name Not Pixel AutoFarm
3 | // @namespace KittenWoof
4 | // @match *://*notpx.app/*
5 | // @version 1.6
6 | // @grant none
7 | // @icon https://notpx.app/favicon.ico
8 | // @downloadURL https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-AutoFarm.user.js
9 | // @updateURL https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-AutoFarm.user.js
10 | // @homepage https://github.com/ilfae/Script-Not-Pixel
11 | // ==/UserScript==
12 |
13 | const GAME_SETTINGS = {
14 | minDelay: 1000,
15 | maxDelay: 2000,
16 | minPauseDuration: 60000,
17 | maxPauseDuration: 180000,
18 | autoClaimEnabled: false,
19 | autoClaimMinDelay: 120000,
20 | autoClaimMaxDelay: 600000,
21 | autoChangeColorEnabled: false,
22 | autoChangeColorMinDelay: 120000,
23 | autoChangeColorMaxDelay: 600000,
24 | isPaused: false,
25 | interval: 1000,
26 | timer: null,
27 | countdown: null,
28 | isClickInProgress: false,
29 | noEnergyTimeout: null
30 | };
31 |
32 |
33 |
34 |
35 | function createMenu() {
36 | const controlsContainer = document.createElement('div');
37 | controlsContainer.style.position = 'fixed';
38 | controlsContainer.style.bottom = '0';
39 | controlsContainer.style.right = '0';
40 | controlsContainer.style.zIndex = '9999';
41 | controlsContainer.style.backgroundColor = 'black';
42 | controlsContainer.style.padding = '10px 20px';
43 | controlsContainer.style.borderRadius = '10px';
44 | controlsContainer.style.cursor = 'move';
45 | document.body.appendChild(controlsContainer);
46 |
47 | const buttonsContainer = document.createElement('div');
48 | buttonsContainer.style.display = 'flex';
49 | buttonsContainer.style.justifyContent = 'center';
50 | controlsContainer.appendChild(buttonsContainer);
51 |
52 | const hiddenLink = document.createElement('div');
53 | hiddenLink.id = 'logDisplay';
54 | hiddenLink.style.color = 'white';
55 | hiddenLink.style.marginBottom = '10px';
56 | controlsContainer.prepend(hiddenLink);
57 | OutGamePausedTrue();
58 |
59 | const pauseButton = document.createElement('button');
60 | pauseButton.textContent = GAME_SETTINGS.isPaused ? '▶' : '❚❚';
61 | pauseButton.style.padding = '4px 8px';
62 | pauseButton.style.backgroundColor = '#5d2a8f';
63 | pauseButton.style.color = 'white';
64 | pauseButton.style.border = 'none';
65 | pauseButton.style.borderRadius = '10px';
66 | pauseButton.style.cursor = 'pointer';
67 | pauseButton.style.marginRight = '5px';
68 | pauseButton.onclick = togglePause;
69 | buttonsContainer.appendChild(pauseButton);
70 |
71 | function togglePause() {
72 | GAME_SETTINGS.isPaused = !GAME_SETTINGS.isPaused;
73 | pauseButton.textContent = GAME_SETTINGS.isPaused ? '▶' : '❚❚';
74 |
75 | if (!GAME_SETTINGS.isPaused) {
76 | GAME_SETTINGS.autoClaimEnabled = true;
77 | GAME_SETTINGS.autoChangeColorEnabled = true;
78 | startScript();
79 | } else {
80 | GAME_SETTINGS.autoClaimEnabled = false;
81 | GAME_SETTINGS.autoChangeColorEnabled = false;
82 | }
83 | }
84 | }
85 |
86 | function OutGamePausedTrue() {
87 | const GamePausedTrue = atob('VEc6IEtpdHRlbldvZg==');
88 | const GamePausedFalse = atob('aHR0cHM6Ly90Lm1lL2tpdHRlbndvZg==');
89 | document.getElementById('logDisplay').innerHTML = `${GamePausedTrue}`;
90 | }
91 |
92 | function waitForElement(selector, callback) {
93 | const element = document.querySelector(selector);
94 | if (element) {
95 | callback(element);
96 | } else {
97 | setTimeout(() => waitForElement(selector, callback), 500);
98 | }
99 | }
100 |
101 | function simulatePointerEvents(element, startX, startY, endX, endY) {
102 | const events = [
103 | new PointerEvent('pointerdown', { clientX: startX, clientY: startY, bubbles: true }),
104 | new PointerEvent('pointermove', { clientX: startX, clientY: startY, bubbles: true }),
105 | new PointerEvent('pointermove', { clientX: endX, clientY: endY, bubbles: true }),
106 | new PointerEvent('pointerup', { clientX: endX, clientY: endY, bubbles: true })
107 | ];
108 |
109 | events.forEach(event => element.dispatchEvent(event));
110 | }
111 |
112 | function triggerEvents(element) {
113 | const events = [
114 | new PointerEvent('pointerdown', { bubbles: true, cancelable: true, isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0.5, pointerType: "touch" }),
115 | new MouseEvent('mousedown', { bubbles: true, cancelable: true, isTrusted: true, screenX: 182, screenY: 877 }),
116 | new PointerEvent('pointerup', { bubbles: true, cancelable: true, isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0, pointerType: "touch" }),
117 | new MouseEvent('mouseup', { bubbles: true, cancelable: true, isTrusted: true, screenX: 182, screenY: 877 }),
118 | new PointerEvent('click', { bubbles: true, cancelable: true, isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0, pointerType: "touch" }),
119 | new PointerEvent('pointerout', { bubbles: true, cancelable: true, isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0, pointerType: "touch" }),
120 | new PointerEvent('pointerleave', { bubbles: true, cancelable: true, isTrusted: true, pointerId: 1, width: 1, height: 1, pressure: 0, pointerType: "touch" }),
121 | new MouseEvent('mouseout', { bubbles: true, cancelable: true, isTrusted: true, screenX: 182, screenY: 877 }),
122 | new MouseEvent('mouseleave', { bubbles: true, cancelable: true, isTrusted: true, screenX: 182, screenY: 877 })
123 | ];
124 |
125 | events.forEach((event, index) => {
126 | setTimeout(() => element.dispatchEvent(event), index * 100);
127 | });
128 | }
129 |
130 | function openPaintWindow() {
131 | waitForElement('#canvasHolder', (canvas) => {
132 | const centerX = Math.floor(canvas.width / 2);
133 | const centerY = Math.floor(canvas.height / 2);
134 | simulatePointerEvents(canvas, centerX, centerY, centerX, centerY);
135 | });
136 | }
137 |
138 | function randomClick() {
139 | if (GAME_SETTINGS.isClickInProgress || GAME_SETTINGS.isPaused) {
140 | return;
141 | }
142 |
143 | GAME_SETTINGS.isClickInProgress = true;
144 |
145 | const paintButton = document.evaluate('//*[@id="root"]/div/div[6]/div/button', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
146 | if (paintButton) {
147 | const buttonText = paintButton.querySelector('span[class^="_button_text_"]').textContent;
148 |
149 | if (buttonText === 'Paint') {
150 | waitForElement('#canvasHolder', (canvas) => {
151 | const moveX = Math.floor(Math.random() * 200) - 100;
152 | const moveY = Math.floor(Math.random() * 200) - 100;
153 | simulatePointerEvents(canvas, canvas.width / 2, canvas.height / 2, canvas.width / 2 + moveX, canvas.height / 2 + moveY);
154 |
155 | const x = Math.floor(Math.random() * canvas.width);
156 | const y = Math.floor(Math.random() * canvas.height);
157 | simulatePointerEvents(canvas, x, y, x, y);
158 |
159 | simulatePointerEvents(paintButton, 0, 0, 0, 0);
160 | const nextClickDelay = getRandomDelay(GAME_SETTINGS.minDelay, GAME_SETTINGS.maxDelay);
161 | GAME_SETTINGS.isClickInProgress = false;
162 | setTimeout(randomClick, nextClickDelay);
163 | });
164 | } else if (buttonText === 'No energy') {
165 | if (GAME_SETTINGS.noEnergyTimeout === null) {
166 | const randomPause = getRandomDelay(GAME_SETTINGS.minPauseDuration, GAME_SETTINGS.maxPauseDuration);
167 | GAME_SETTINGS.noEnergyTimeout = setTimeout(() => {
168 | GAME_SETTINGS.noEnergyTimeout = null;
169 | GAME_SETTINGS.isClickInProgress = false;
170 | randomClick();
171 | }, randomPause);
172 | } else {
173 | GAME_SETTINGS.isClickInProgress = false;
174 | setTimeout(randomClick, 1000);
175 | }
176 | } else {
177 | const nextClickDelay = getRandomDelay(GAME_SETTINGS.minDelay, GAME_SETTINGS.maxDelay);
178 | GAME_SETTINGS.isClickInProgress = false;
179 | setTimeout(randomClick, nextClickDelay);
180 | }
181 | } else {
182 | openPaintWindow();
183 | GAME_SETTINGS.isClickInProgress = false;
184 | setTimeout(randomClick, 2000);
185 | }
186 | }
187 |
188 | function getRandomDelay(min, max) {
189 | return Math.floor(Math.random() * (max - min + 1)) + min;
190 | }
191 |
192 |
193 | function autoClaimReward() {
194 | tryClaimReward();
195 |
196 | function tryClaimReward() {
197 | const openRewardButton = document.querySelector('button._button_tksty_1');
198 | const claimTimer = document.querySelector('div._info_3i6l4_32');
199 | const loadingInfo = document.querySelector('div._container_3i6l4_1 > div._info_3i6l4_32');
200 |
201 | if (claimTimer && (claimTimer.textContent.includes('CLAIM IN') || (loadingInfo && loadingInfo.textContent === 'Loading...'))) {
202 | const exitButton = document.querySelector('button._button_1cryl_1');
203 | if (exitButton) {
204 | triggerEvents(exitButton);
205 | }
206 | } else if (openRewardButton) {
207 | triggerEvents(openRewardButton);
208 |
209 | setTimeout(() => {
210 | const claimButton = document.querySelector('button._button_3i6l4_11');
211 | if (claimButton) {
212 | triggerEvents(claimButton);
213 |
214 | setTimeout(() => {
215 | const exitButton = document.querySelector('button._button_1cryl_1');
216 | if (exitButton) {
217 | triggerEvents(exitButton);
218 | }
219 | }, 1000);
220 | }
221 | }, 2000);
222 | }
223 |
224 | setTimeout(tryClaimReward, 300000);
225 | }
226 | }
227 |
228 |
229 |
230 | function changeColor() {
231 | if (GAME_SETTINGS.isPaused || !GAME_SETTINGS.autoChangeColorEnabled) {
232 | return;
233 | }
234 |
235 | function tryChangeColor() {
236 | const expandablePanel = document.querySelector('div._expandable_panel_layout_1v9vd_1');
237 | if (expandablePanel && expandablePanel.style.height !== '0px' && expandablePanel.style.opacity !== '0') {
238 | const colors = document.querySelectorAll('div._color_item_epppt_22');
239 | if (colors.length === 0) {
240 | setTimeout(tryChangeColor, 1000);
241 | return;
242 | }
243 |
244 | const randomColor = colors[Math.floor(Math.random() * colors.length)];
245 | setTimeout(() => triggerEvents(randomColor), 1000);
246 |
247 | const activeColor = document.evaluate('//*[@id="root"]/div/div[6]/div/div[2]/div[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
248 | setTimeout(() => triggerEvents(activeColor), 2000);
249 | return;
250 | }
251 |
252 | const activeColor = document.evaluate('//*[@id="root"]/div/div[6]/div/div[2]/div[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
253 | if (!activeColor) {
254 | setTimeout(tryChangeColor, 1000);
255 | return;
256 | }
257 | triggerEvents(activeColor);
258 |
259 | const colors = document.querySelectorAll('div._color_item_epppt_22');
260 | if (colors.length === 0) {
261 | setTimeout(tryChangeColor, 1000);
262 | return;
263 | }
264 |
265 | const randomColor = colors[Math.floor(Math.random() * colors.length)];
266 | setTimeout(() => triggerEvents(randomColor), 1000);
267 |
268 | setTimeout(() => triggerEvents(activeColor), 2000);
269 | }
270 |
271 | tryChangeColor();
272 |
273 | const nextChangeDelay = getRandomDelay(GAME_SETTINGS.autoChangeColorMinDelay, GAME_SETTINGS.autoChangeColorMaxDelay);
274 | setTimeout(changeColor, nextChangeDelay);
275 | }
276 |
277 | function startScript() {
278 | if (!GAME_SETTINGS.isPaused) {
279 | openPaintWindow();
280 | setTimeout(randomClick, 2000);
281 | setTimeout(autoClaimReward, 2000);
282 | setTimeout(changeColor, 2000);
283 | }
284 | }
285 |
286 | function initializeScript() {
287 | createMenu();
288 | startScript();
289 | }
290 |
291 | if (document.readyState === 'loading') {
292 | document.addEventListener('DOMContentLoaded', initializeScript);
293 | } else {
294 | initializeScript();
295 | }
296 |
--------------------------------------------------------------------------------
/Not-Pixel-Restart.user.js:
--------------------------------------------------------------------------------
1 | // ==UserScript==
2 | // @name Not Pixel Restart
3 | // @version 1.2
4 | // @match *://*notpx.app/*
5 | // @match https://web.telegram.org/*
6 | // @icon https://notpx.app/favicon.ico
7 | // @downloadURL https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-Restart.user.js
8 | // @updateURL https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-Restart.user.js
9 | // @homepage https://github.com/ilfae/Script-Not-Pixel
10 | // @grant none
11 | // ==/UserScript==
12 |
13 | (function() {
14 | 'use strict';
15 |
16 | const telegramCloseSelector = '.btn-icon._BrowserHeaderButton_m63td_65';
17 | const telegramStartCommandSelector = '.new-message-bot-commands-view';
18 |
19 | function clickElement(selector) {
20 | const element = document.querySelector(selector);
21 | if (element) {
22 | element.click();
23 | }
24 | }
25 |
26 | function restartProcess() {
27 | if (window.location.hostname.includes('web.telegram.org')) {
28 | clickElement(telegramCloseSelector);
29 | setTimeout(() => {
30 | clickElement(telegramStartCommandSelector);
31 | }, 3000);
32 | }
33 | }
34 |
35 | setInterval(restartProcess, 800000);
36 | })();
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Пожертвование
2 |
3 | Мы принимаем следующие криптовалюты:
4 |
5 | - **Binance ID** (KittenWoof): `280906050`
6 | - **Tron** (TRC20): `TDgpGjUPY7V2wrstA74Uq3B7b8BkmvС1zW`
7 | - **BNB/Ethereum** (BEP20/ERC20): `0x06594b75f08cacc789bc59daf2a4c866265fac77`
8 | - **TON/NOT/DOGS**: `EQD5mxRgCuRNLxKxeOjG6r14iSroLF5FtomPnet-sgP5xNJb` MEMO: `106604145`
9 |
10 | Пожертвования будут использованы для поддержания/сохранения проекта.
11 |
12 |
13 |
14 | > Контакты: [Telegram](https://t.me/kittenwof)
15 |
16 | ## Languages
17 | [](README.md) [](README_EN.md)
18 |
19 | ## Введение
20 |
21 | Всем Салам!
22 | Данный скрипт разработан для игры Not Pixel
23 |
24 | ## Особенности скрипта:
25 |
26 | - **Меню управления**: Интерфейс с кнопкой для паузы/продолжения и отображением логов.
27 | - **Асинхронное выполнение**: Использует функции для ожидания появления энергии, поиска окна рисования, клика в рандомное место на карте и по кнопке paint.
28 | - **Управление ошибками**: Проверяет, не вылетела ли игра, и перезагружает страницу при необходимости.
29 |
30 | ## Инструкция по настройке и запуску
31 |
32 | ### 1. Android
33 | - Скачайте браузер Kiwi из Google Play по следующей [ссылке](https://play.google.com/store/apps/details?id=com.kiwibrowser.browser).
34 |
35 | ### 1.1 Windows или Mac
36 | - Используйте Google Chrome или другой браузер, поддерживающий Google расширения.
37 |
38 | ### 2. Установка расширений
39 | - Перейдите по данной [ссылке](https://chromewebstore.google.com/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe) и установите расширение "Ignore X-Frame Headers".
40 |
41 | ### 3. Android
42 | - Установите расширение "Violentmonkey BETA" для работы со скриптами:
43 | [Скачать Violentmonkey BETA](https://chromewebstore.google.com/detail/violentmonkey-beta/opokoaglpekkimldnlggpoagmjegichg).
44 |
45 | ### 3.1 Windows или Mac
46 | - Установите расширение "Violentmonkey" для работы со скриптами:
47 | [Скачать Violentmonkey](https://chromewebstore.google.com/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag).
48 |
49 | ### 4. Установка скрипта
50 |
51 | #### 4.1 Android
52 | - Для установки скрипта:
53 |
54 | 
55 |
56 | - Импортируйте [данный zip-архив](https://github.com/ilfae/Script-Not-Pixel/raw/refs/heads/main/@kittenwof.zip) в Violentmonkey BETA.
57 |
58 | #### 4.2 Windows или Mac
59 | - Нажмите на ссылку для автоматической установки автокликера:
60 | [Исходный код скрипта](https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-AutoFarm.user.js).
61 | - Нажмите на ссылку для автоматической установки дополнительного скрипта:
62 | [Исходный код скрипта](https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-Restart.user.js).
63 |
64 | ### 5. Запуск бота
65 | - Откройте [Бота Not Pixel](https://web.telegram.org/k/#?tgaddr=tg%3A%2F%2Fresolve%3Fdomain%3Dnotpixel%26appname%3Dapp%26startapp%3Df2001120886) и запустите игру.
66 |
67 | └ Работает лишь в данной версии сайта, она же версия "K", в версии сайта "A" перезапуск не работает
68 |
69 | ## Заключение
70 |
71 | Теперь вы можете использовать скрипт для автоматизации кликов в Not Pixel и на разных платформах. Удачи!
72 |
73 | ---
74 |
75 | ### 🌟 История звезд
76 |
77 | [](https://star-history.com/#ilfae/Script-Not-Pixel&Date)
78 | ## Star History
79 |
--------------------------------------------------------------------------------
/README_EN.md:
--------------------------------------------------------------------------------
1 | # Donation
2 |
3 | We accept the following cryptocurrencies:
4 |
5 | - **Binance ID** (KittenWoof): `280906050`
6 | - **Tron** (TRC20): `TDgpGjUPY7V2wrstA74Uq3B7b8BkmvС1zW`
7 | - **BNB/Ethereum** (BEP20/ERC20): `0x06594b75f08cacc789bc59daf2a4c866265fac77`
8 | - **TON/NOT/DOGS**: `EQD5mxRgCuRNLxKxeOjG6r14iSroLF5FtomPnet-sgP5xNJb` MEMO: `106604145`
9 |
10 | Donations will be used to support/preserve the project.
11 |
12 |
13 |
14 | > Contacts: [Telegram](https://t.me/kittenwof)
15 |
16 | ## Languages
17 | [](README.md) [](README_EN.md)
18 |
19 | ## Introduction
20 |
21 | Greetings!
22 | This script is designed for the game Not Pixel.
23 |
24 | ## Script Features:
25 |
26 | - **Control Menu**: Interface with a button to pause/resume and display logs.
27 | - **Asynchronous Execution**: Uses functions to wait for energy to appear, find the drawing window, click in a random spot on the map, and on the paint button.
28 | - **Error Handling**: Checks if the game has crashed and reloads the page if necessary.
29 |
30 | ## Setup and Launch Instructions
31 |
32 | ### 1. Android
33 | - Download the Kiwi browser from Google Play via the following [link](https://play.google.com/store/apps/details?id=com.kiwibrowser.browser).
34 |
35 | ### 1.1 Windows or Mac
36 | - Use Google Chrome or another browser that supports Google extensions.
37 |
38 | ### 2. Installing Extensions
39 | - Go to this [link](https://chromewebstore.google.com/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe) and install the "Ignore X-Frame Headers" extension.
40 |
41 | ### 3. Android
42 | - Install the "Violentmonkey BETA" extension to work with scripts:
43 | [Download Violentmonkey BETA](https://chromewebstore.google.com/detail/violentmonkey-beta/opokoaglpekkimldnlggpoagmjegichg).
44 |
45 | ### 3.1 Windows or Mac
46 | - Install the "Violentmonkey" extension to work with scripts:
47 | [Download Violentmonkey](https://chromewebstore.google.com/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag).
48 |
49 | ### 4. Installing the Script
50 |
51 | #### 4.1 Android
52 | - To install the script:
53 |
54 | 
55 |
56 | - Import [this zip archive](https://github.com/ilfae/Script-Not-Pixel/raw/refs/heads/main/@kittenwof.zip) into Violentmonkey BETA.
57 |
58 | #### 4.2 Windows or Mac
59 | - Click on the link to automatically install the autoclicker:
60 | [Script Source Code](https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-AutoFarm.user.js).
61 | - Click on the link to automatically install an additional script:
62 | [Script Source Code](https://github.com/ilfae/Script-Not-Pixel/raw/main/Not-Pixel-Restart.user.js).
63 |
64 | ### 5. Running the Bot
65 | - Open [Not Pixel Bot](https://web.telegram.org/k/#?tgaddr=tg%3A%2F%2Fresolve%3Fdomain%3Dnotpixel%26appname%3Dapp%26startapp%3Df2001120886) and start the game.
66 |
67 | └ Works only in this version of the site, it is also the "K" version, in the "A" version of the site the restart does not work
68 |
69 | ## Conclusion
70 |
71 | You can now use the script to automate clicks in Not Pixel across different platforms. Good luck!
72 |
73 | ---
74 |
75 | ### 🌟 Star History
76 |
77 | [](https://star-history.com/#ilfae/Script-Not-Pixel&Date)
78 | ## Star History
79 |
--------------------------------------------------------------------------------
/img/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ilfae/Script-Not-Pixel/a18cfe5e9689f153170c024685aaeffb50481678/img/1.png
--------------------------------------------------------------------------------