diff --git a/Auto-Farm.js b/Auto-Farm.js new file mode 100644 index 0000000..c1df7e6 --- /dev/null +++ b/Auto-Farm.js @@ -0,0 +1,419 @@ +(async () => { + // Configurações globais + const CONFIG = { + START_X: 742, + START_Y: 1148, + PIXELS_PER_LINE: 100, + COLOR_ID: 1, + DELAY: 1000, + THEME: { + primary: '#000000', + secondary: '#111111', + accent: '#222222', + text: '#ffffff', + highlight: '#775ce3', + success: '#00ff00', + error: '#ff0000' + } + }; + + // Estado do aplicativo + const state = { + running: false, + paintedCount: 0, + charges: { count: 0, max: 80, cooldownMs: 30000 }, + userInfo: null, + lastPixel: null, + minimized: false, + menuOpen: false + }; + + // Funções utilitárias + const sleep = ms => new Promise(r => setTimeout(r, ms)); + + const fetchAPI = async (url, options = {}) => { + try { + const res = await fetch(url, { + credentials: 'include', + ...options + }); + return await res.json(); + } catch (e) { + console.error('Erro na requisição:', e); + return null; + } + }; + + // Funções da API + const getRandomPosition = () => ({ + x: Math.floor(Math.random() * CONFIG.PIXELS_PER_LINE), + y: Math.floor(Math.random() * CONFIG.PIXELS_PER_LINE) + }); + + const paintPixel = async (x, y, color) => { + return await fetchAPI(`https://backend.wplace.live/s0/pixel/${CONFIG.START_X}/${CONFIG.START_Y}`, { + method: 'POST', + headers: { 'Content-Type': 'text/plain;charset=UTF-8' }, + body: JSON.stringify({ coords: [x, y], colors: [color] }) + }); + }; + + const getCharge = async () => { + const data = await fetchAPI('https://backend.wplace.live/me'); + if (data) { + state.userInfo = data; + state.charges = { + count: Math.floor(data.charges.count), + max: Math.floor(data.charges.max), + cooldownMs: data.charges.cooldownMs + }; + if (state.userInfo.level) { + state.userInfo.level = Math.floor(state.userInfo.level); + } + } + return state.charges; + }; + + // Lógica principal + const paintLoop = async () => { + while (state.running) { + const { count, cooldownMs } = state.charges; + + if (count < 1) { + updateUI(`⌛ Sem cargas. Esperando ${Math.ceil(cooldownMs/1000)}s...`, 'status'); + await sleep(cooldownMs); + await getCharge(); + continue; + } + + const randomPos = getRandomPosition(); + const paintResult = await paintPixel(randomPos.x, randomPos.y, CONFIG.COLOR_ID); + + if (paintResult?.painted === 1) { + state.paintedCount++; + state.lastPixel = { + x: CONFIG.START_X + randomPos.x, + y: CONFIG.START_Y + randomPos.y, + time: new Date() + }; + state.charges.count--; + + // Efeito visual + document.getElementById('paintEffect').style.animation = 'pulse 0.5s'; + setTimeout(() => { + document.getElementById('paintEffect').style.animation = ''; + }, 500); + + updateUI(`✅ Pixel pintado!`, 'success'); + } else { + updateUI(`❌ Falha ao pintar`, 'error'); + } + + await sleep(CONFIG.DELAY); + updateStats(); + } + }; + + // Interface do usuário + const createUI = () => { + if (state.menuOpen) return; + state.menuOpen = true; + + // Adiciona Font Awesome + const fontAwesome = document.createElement('link'); + fontAwesome.rel = 'stylesheet'; + fontAwesome.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css'; + document.head.appendChild(fontAwesome); + + // Adiciona estilos + const style = document.createElement('style'); + style.textContent = ` + @keyframes pulse { + 0% { box-shadow: 0 0 0 0 rgba(0, 255, 0, 0.7); } + 70% { box-shadow: 0 0 0 10px rgba(0, 255, 0, 0); } + 100% { box-shadow: 0 0 0 0 rgba(0, 255, 0, 0); } + } + @keyframes slideIn { + from { transform: translateY(20px); opacity: 0; } + to { transform: translateY(0); opacity: 1; } + } + .wplace-bot-panel { + position: fixed; + top: 20px; + right: 20px; + width: 250px; + background: ${CONFIG.THEME.primary}; + border: 1px solid ${CONFIG.THEME.accent}; + border-radius: 8px; + padding: 0; + box-shadow: 0 5px 15px rgba(0,0,0,0.5); + z-index: 9999; + font-family: 'Segoe UI', Roboto, sans-serif; + color: ${CONFIG.THEME.text}; + animation: slideIn 0.4s ease-out; + overflow: hidden; + } + .wplace-header { + padding: 12px 15px; + background: ${CONFIG.THEME.secondary}; + color: ${CONFIG.THEME.highlight}; + font-size: 16px; + font-weight: 600; + display: flex; + justify-content: space-between; + align-items: center; + cursor: move; + user-select: none; + } + .wplace-header-title { + display: flex; + align-items: center; + gap: 8px; + } + .wplace-header-controls { + display: flex; + gap: 10px; + } + .wplace-header-btn { + background: none; + border: none; + color: ${CONFIG.THEME.text}; + cursor: pointer; + opacity: 0.7; + transition: opacity 0.2s; + } + .wplace-header-btn:hover { + opacity: 1; + } + .wplace-content { + padding: 15px; + display: ${state.minimized ? 'none' : 'block'}; + } + .wplace-controls { + display: flex; + gap: 10px; + margin-bottom: 15px; + } + .wplace-btn { + flex: 1; + padding: 10px; + border: none; + border-radius: 6px; + font-weight: 600; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all 0.2s; + } + .wplace-btn:hover { + transform: translateY(-2px); + } + .wplace-btn-primary { + background: ${CONFIG.THEME.accent}; + color: white; + } + .wplace-btn-stop { + background: ${CONFIG.THEME.error}; + color: white; + } + .wplace-stats { + background: ${CONFIG.THEME.secondary}; + padding: 12px; + border-radius: 6px; + margin-bottom: 15px; + } + .wplace-stat-item { + display: flex; + justify-content: space-between; + padding: 6px 0; + font-size: 14px; + } + .wplace-stat-label { + display: flex; + align-items: center; + gap: 6px; + opacity: 0.8; + } + .wplace-status { + padding: 8px; + border-radius: 4px; + text-align: center; + font-size: 13px; + } + .status-default { + background: rgba(255,255,255,0.1); + } + .status-success { + background: rgba(0, 255, 0, 0.1); + color: ${CONFIG.THEME.success}; + } + .status-error { + background: rgba(255, 0, 0, 0.1); + color: ${CONFIG.THEME.error}; + } + #paintEffect { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + border-radius: 8px; + } + `; + document.head.appendChild(style); + + // Cria o painel + const panel = document.createElement('div'); + panel.className = 'wplace-bot-panel'; + panel.innerHTML = ` +
+