// === КОНФИГУРАЦИЯ ===
var CONFIG = {
ACTION_DELAY_BASE: 100,
LONG_DELAY: 1500,
SCROLL_DELAY: 2000,
CHECK_INTERVAL: 30000,
STABILITY_DELAY: 2000,
BREAK_CYCLE: 25,
BREAK_DURATION: 60000,
MAX_IDLE_TIME: 120000,
ANTICHEAT_LEVEL: ‘EXTREME’,
RANDOM_MOVEMENTS: true,
JITTER_MOVEMENTS: true,
RANDOM_BREAKS: true,
HUMAN_VARIATION: 120,
COLOR_TOLERANCE: 15,
MAX_PURCHASES_PER_HOUR: 45,
MIN_PURCHASE_INTERVAL: 45000,
ERROR_TOLERANCE: 3,
AUTO_RECOVERY: true,
ADAPTIVE_SCROLLING: true,
ENABLE_DEBUG: true,
};
// === КООРДИНАТЫ (Адаптивные) ===
function getAdaptiveCoordinates() {
var w = getScreenWidth();
var h = getScreenHeight();
var sx = w / 720;
var sy = h / 1600;
return {
pricePoint: {x: (500 * sx) | 0, y: (1200 * sy) | 0},
buyButton: {x: (500 * sx) | 0, y: (1400 * sy) | 0},
closeButton: {x: (60 * sx) | 0, y: (80 * sy) | 0},
lobbyCheck: {x: (360 * sx) | 0, y: (50 * sy) | 0},
errorCheck: {x: (360 * sx) | 0, y: (900 * sy) | 0},
scrollDown: {x: (360 * sx) | 0, y: (1550 * sy) | 0},
randomArea1: {x: (200 * sx) | 0, y: (800 * sy) | 0},
randomArea2: {x: (400 * sx) | 0, y: (600 * sy) | 0},
};
}
var COORDS = getAdaptiveCoordinates();
// === ЦВЕТА ===
var COLORS = {
colorPrice_0_03: [parseInt(«FFFFD700», 16), parseInt(«FFFFD800», 16), parseInt(«FFFFD600», 16), parseInt(«FFFFD900», 16)],
colorBuyActive: [parseInt(«FF333333», 16), parseInt(«FF343434», 16), parseInt(«FF323232», 16), parseInt(«FF353535», 16)],
};
// === СОСТОЯНИЕ ===
var STATE = {
lastActionTime: Date.now(),
isMarketActive: false,
cycleCounter: 1,
totalPurchases: 0,
purchaseTimes: [],
lastScrollTime: 0,
consecutiveErrors: 0,
};
var ADAPTIVE_SETTINGS = {
currentDelay: CONFIG.ACTION_DELAY_BASE,
};
// === УТИЛИТЫ ===
function getCurrentTime() {
return Date.now();
}
function log(msg, lvl) {
if (lvl === undefined) lvl = ‘INFO’;
if (CONFIG.ENABLE_DEBUG || lvl !== ‘DEBUG’) {
log(’[’ + lvl + ’] ’ + msg); // Используем встроенный логгер Perfect Click
}
}
function isColorMatch(x, y, targets, tol) {
tol = tol || CONFIG.COLOR_TOLERANCE;
var actual = getPixelColor(x, y); // Функция Perfect Click
if (!Array.isArray(targets)) targets = [targets];
for (var tgt of targets) {
var r_tgt = ((tgt >> 16) & 255);
var g_tgt = ((tgt >> 8) & 255);
var b_tgt = (tgt & 255);
var r_act = ((actual >> 16) & 255);
var g_act = ((actual >> 8) & 255);
var b_act = (actual & 255);
var distance = Math.sqrt(Math.pow(r_tgt - r_act, 2) + Math.pow(g_tgt - g_act, 2) + Math.pow(b_tgt - b_act, 2));
if (distance <= tol) return true;
}
return false;
}
// === ЛОГИКА ===
function simulateHumanCursor() {
if (!CONFIG.RANDOM_MOVEMENTS || !CONFIG.JITTER_MOVEMENTS) return;
var points = [COORDS.randomArea1, COORDS.randomArea2];
for (var p of points) {
setMousePos(p.x, p.y); // setMousePos вместо moveTo
for (var j=0; j<2; ++j) {
var jitterX = Math.floor(Math.random()*ADAPTIVE_SETTINGS.currentDelay/4 - ADAPTIVE_SETTINGS.currentDelay/8);
var jitterY = Math.floor(Math.random()*ADAPTIVE_SETTINGS.currentDelay/4 - ADAPTIVE_SETTINGS.currentDelay/8);
moveRel(jitterX, jitterY);
sleep(Math.random()*ADAPTIVE_SETTINGS.currentDelay/2|0);
}
sleep(ADAPTIVE_SETTINGS.currentDelay);
}
}
function checkMarketState() {
STATE.isMarketActive = isColorMatch(COORDS.lobbyCheck.x, COORDS.lobbyCheck.y, COLORS.colorBuyActive);
}
function findAndBuy() {
// Проверка на ошибку
if (isColorMatch(COORDS.errorCheck.x, COORDS.errorCheck.y, COLORS.colorBuyActive)) {
STATE.consecutiveErrors++;
if (STATE.consecutiveErrors >= CONFIG.ERROR_TOLERANCE && CONFIG.AUTO_RECOVERY) {
log(‘Критическая ошибка. Перезапуск.’, ‘ERROR’);
sleep(CONFIG.LONG_DELAY);
STATE.consecutiveErrors = 0;
return false;
}
log(‘Ошибка интерфейса.’, ‘WARN’);
mouseClick(COORDS.closeButton.x, COORDS.closeButton.y);
sleep(CONFIG.LONG_DELAY);
return false;
}
// Проверка цены и кнопки покупки
if (isColorMatch(COORDS.pricePoint.x, COORDS.pricePoint.y, COLORS.colorPrice_0_03)) {
if (isColorMatch(COORDS.buyButton.x, COORDS.buyButton.y, COLORS.colorBuyActive)) {
mouseClick(COORDS.buyButton.x, COORDS.buyButton.y);
STATE.totalPurchases++;
STATE.purchaseTimes.push(getCurrentTime());
log('Покупка #' + STATE.totalPurchases);
sleep(CONFIG.STABILITY_DELAY);
mouseClick(COORDS.closeButton.x, COORDS.closeButton.y);
sleep(CONFIG.ACTION_DELAY_BASE);
return true;
}
}
return false;
}
function scrollIfNeeded() {
var now = getCurrentTime();
if (CONFIG.ADAPTIVE_SCROLLING && now - STATE.lastScrollTime > CONFIG.SCROLL_DELAY) {
mouseClick(COORDS.scrollDown.x, COORDS.scrollDown.y);
STATE.lastScrollTime = now;
if (CONFIG.RANDOM_BREAKS && Math.random() < .2) {
sleep(Math.random()CONFIG.ACTION_DELAY_BASE2|0);
simulateHumanCursor();
}
log(‘Прокрутка’, ‘DEBUG’);
}
}
function takeBreak() {
STATE.cycleCounter++;
if (STATE.cycleCounter >= CONFIG.BREAK_CYCLE) {
log(‘Перерыв’, ‘INFO’);
sleep(CONFIG.BREAK_DURATION);
STATE.cycleCounter = 1;
}
var now = getCurrentTime();
STATE.purchaseTimes = STATE.purchaseTimes.filter(t => now - t < 36e5);
if (STATE.purchaseTimes.length >= CONFIG.MAX_PURCHASES_PER_HOUR && STATE.purchaseTimes.length > 1) {
var oldestIndex = STATE.purchaseTimes.length - CONFIG.MAX_PURCHASES_PER_HOUR;
var timeSinceOldest = now - STATE.purchaseTimes[oldestIndex];
var waitTime = CONFIG.MIN_PURCHASE_INTERVAL - timeSinceOldest;
if (waitTime > 5) { sleep(waitTime); }
}
}
// === ГЛАВНЫЙ ЦИКЛ ===
function mainLoop() {
while(true) {
try {
checkMarketState();
if (!STATE.isMarketActive) { sleep(CONFIG.CHECK_INTERVAL); continue; }
scrollIfNeeded();
simulateHumanCursor();
var success = findAndBuy();
takeBreak();
sleep(ADAPTIVE_SETTINGS.currentDelay);
STATE.lastActionTime = getCurrentTime();
if (success) STATE.consecutiveErrors = 0;
} catch(e) {
log(‘Критическая ошибка цикла’, ‘ERROR’);
sleep(CONFIG.LONG_DELAY);
}
}
}
log(‘Скрипт запущен’, ‘INFO’);
mainLoop();