mirror of
https://github.com/tiennm99/WPlace-AutoBOT.git
synced 2026-10-13 04:14:49 +00:00
fixed a lot of bs
This commit is contained in:
1 parent
c5ca628922
commit
59544427f5
20 files changed
+1466
-766
No files matched your search
@@ -2037,22 +2037,23 @@
|
||||
.wplace-account-item.current {
|
||||
background: var(--wplace-success)20;
|
||||
border-left: 3px solid var(--wplace-success);
|
||||
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
|
||||
0 0 25px rgba(46, 204, 113, 0.4),
|
||||
0 0 35px rgba(46, 204, 113, 0.2);
|
||||
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
|
||||
0 0 25px rgba(46, 204, 113, 0.4),
|
||||
0 0 35px rgba(46, 204, 113, 0.2);
|
||||
animation: currentAccountGlow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes currentAccountGlow {
|
||||
from {
|
||||
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
|
||||
0 0 25px rgba(46, 204, 113, 0.4),
|
||||
0 0 35px rgba(46, 204, 113, 0.2);
|
||||
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
|
||||
0 0 25px rgba(46, 204, 113, 0.4),
|
||||
0 0 35px rgba(46, 204, 113, 0.2);
|
||||
}
|
||||
|
||||
to {
|
||||
box-shadow: 0 0 20px rgba(46, 204, 113, 0.8),
|
||||
0 0 30px rgba(46, 204, 113, 0.6),
|
||||
0 0 40px rgba(46, 204, 113, 0.4);
|
||||
box-shadow: 0 0 20px rgba(46, 204, 113, 0.8),
|
||||
0 0 30px rgba(46, 204, 113, 0.6),
|
||||
0 0 40px rgba(46, 204, 113, 0.4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2061,6 +2062,7 @@
|
||||
box-shadow: 0 0 10px rgba(46, 204, 113, 0.8);
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
to {
|
||||
box-shadow: 0 0 15px rgba(46, 204, 113, 1.0);
|
||||
transform: scale(1.05);
|
||||
@@ -2191,4 +2193,47 @@ input[type="number"] {
|
||||
.wplace-notification-interval-input {
|
||||
-moz-appearance: textfield;
|
||||
appearance: textfield;
|
||||
}
|
||||
|
||||
.pill-container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
background: #2d1f40;
|
||||
border-radius: 50px;
|
||||
width: 100%;
|
||||
max-width: 280px;
|
||||
box-sizing: border-box;
|
||||
padding: 9px;
|
||||
}
|
||||
|
||||
.pill-highlight {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
height: calc(100% - 10px);
|
||||
background: linear-gradient(135deg, #7b2ff7, #9f44d3);
|
||||
border-radius: 50px;
|
||||
transition: transform 0.4s ease;
|
||||
z-index: 0;
|
||||
width: calc((100% - 10px) / 3);
|
||||
/* evenly divide space for 3 buttons */
|
||||
}
|
||||
|
||||
|
||||
.pill-btn {
|
||||
flex: 1;
|
||||
border: none;
|
||||
border-radius: 50px;
|
||||
padding: 8;
|
||||
background: transparent;
|
||||
color: #bfa9ff;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
.pill-btn.active {
|
||||
color: white;
|
||||
}
|
||||
+44
-20
@@ -44,16 +44,16 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
// Check if we need to inject dependencies first for Auto-Image.js or Art-Extractor.js
|
||||
if (scriptName === 'Auto-Image.js' || scriptName === 'Art-Extractor.js') {
|
||||
console.log(`🔑 ${scriptName} detected, ensuring dependencies are loaded first...`);
|
||||
|
||||
|
||||
try {
|
||||
// First inject token-manager.js
|
||||
const tokenManagerUrl = chrome.runtime.getURL('scripts/token-manager.js');
|
||||
const tokenManagerResponse = await fetch(tokenManagerUrl);
|
||||
|
||||
|
||||
if (tokenManagerResponse.ok) {
|
||||
const tokenManagerCode = await tokenManagerResponse.text();
|
||||
console.log('🔑 Token manager loaded, injecting first...');
|
||||
|
||||
|
||||
// Execute token manager first
|
||||
await chrome.scripting.executeScript({
|
||||
target: { tabId: tabId },
|
||||
@@ -68,7 +68,7 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
},
|
||||
args: [tokenManagerCode]
|
||||
});
|
||||
|
||||
|
||||
console.log('✅ Token manager injected successfully');
|
||||
} else {
|
||||
console.warn('⚠️ Could not load token-manager.js, proceeding without it');
|
||||
@@ -77,11 +77,11 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
// Then inject image-processor.js
|
||||
const imageProcessorUrl = chrome.runtime.getURL('scripts/image-processor.js');
|
||||
const imageProcessorResponse = await fetch(imageProcessorUrl);
|
||||
|
||||
|
||||
if (imageProcessorResponse.ok) {
|
||||
const imageProcessorCode = await imageProcessorResponse.text();
|
||||
console.log('🖼️ Image processor loaded, injecting second...');
|
||||
|
||||
|
||||
// Execute image processor second
|
||||
await chrome.scripting.executeScript({
|
||||
target: { tabId: tabId },
|
||||
@@ -96,7 +96,7 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
},
|
||||
args: [imageProcessorCode]
|
||||
});
|
||||
|
||||
|
||||
console.log('✅ Image processor injected successfully');
|
||||
} else {
|
||||
console.warn('⚠️ Could not load image-processor.js, proceeding without it');
|
||||
@@ -105,11 +105,11 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
// Then inject overlay-manager.js
|
||||
const overlayManagerUrl = chrome.runtime.getURL('scripts/overlay-manager.js');
|
||||
const overlayManagerResponse = await fetch(overlayManagerUrl);
|
||||
|
||||
|
||||
if (overlayManagerResponse.ok) {
|
||||
const overlayManagerCode = await overlayManagerResponse.text();
|
||||
console.log('🎨 Overlay manager loaded, injecting third...');
|
||||
|
||||
|
||||
// Execute overlay manager thirds
|
||||
await chrome.scripting.executeScript({
|
||||
target: { tabId: tabId },
|
||||
@@ -124,7 +124,7 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
},
|
||||
args: [overlayManagerCode]
|
||||
});
|
||||
|
||||
|
||||
console.log('✅ Overlay manager injected successfully');
|
||||
} else {
|
||||
console.warn('⚠️ Could not load overlay-manager.js, proceeding without it');
|
||||
@@ -133,11 +133,11 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
// Finally inject utils-manager.js
|
||||
const utilsManagerUrl = chrome.runtime.getURL('scripts/utils-manager.js');
|
||||
const utilsManagerResponse = await fetch(utilsManagerUrl);
|
||||
|
||||
|
||||
if (utilsManagerResponse.ok) {
|
||||
const utilsManagerCode = await utilsManagerResponse.text();
|
||||
console.log('🛠️ Utils manager loaded, injecting fourth...');
|
||||
|
||||
|
||||
// Execute utils manager fourth
|
||||
await chrome.scripting.executeScript({
|
||||
target: { tabId: tabId },
|
||||
@@ -152,12 +152,12 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
},
|
||||
args: [utilsManagerCode]
|
||||
});
|
||||
|
||||
|
||||
console.log('✅ Utils manager injected successfully');
|
||||
} else {
|
||||
console.warn('⚠️ Could not load utils-manager.js, proceeding without it');
|
||||
}
|
||||
|
||||
|
||||
// Small delay to ensure dependencies are fully initialized
|
||||
await new Promise(resolve => setTimeout(resolve, 200));
|
||||
} catch (error) {
|
||||
@@ -270,15 +270,32 @@ async function executeLocalScript(scriptName, tabId) {
|
||||
|
||||
// Helper function to get language data with detailed logging
|
||||
window.getLanguage = function (lang = 'en') {
|
||||
const langFile = lang + '.json';
|
||||
const result = window.AUTOBOT_LANGUAGES[langFile] || window.AUTOBOT_LANGUAGES['en.json'] || {};
|
||||
const langFile = `${lang}.json`;
|
||||
let sourceFile = langFile;
|
||||
let successMessage = 'Found exact match';
|
||||
let result = window.AUTOBOT_LANGUAGES[langFile];
|
||||
|
||||
if (!result) {
|
||||
const localeMatch = Object.keys(window.AUTOBOT_LANGUAGES).find(file => file.toLowerCase().startsWith(`${lang.toLowerCase()}-`));
|
||||
if (localeMatch) {
|
||||
result = window.AUTOBOT_LANGUAGES[localeMatch];
|
||||
sourceFile = localeMatch;
|
||||
successMessage = `Using regional fallback (${localeMatch.replace('.json', '')})`;
|
||||
}
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
result = window.AUTOBOT_LANGUAGES['en.json'] || {};
|
||||
sourceFile = 'en.json';
|
||||
successMessage = 'Fallback to English';
|
||||
}
|
||||
|
||||
console.group(`%c🔤 Language Access: ${lang.toUpperCase()}`, 'color: #06b6d4; font-weight: bold;');
|
||||
console.log(` 📋 Requested: ${lang}`);
|
||||
console.log(` 📄 File: ${langFile}`);
|
||||
console.log(` 📄 File: ${sourceFile}`);
|
||||
console.log(` 📍 Source: Extension local file`);
|
||||
console.log(` 📏 Keys returned: ${Object.keys(result).length}`);
|
||||
console.log(` ✅ Success: ${window.AUTOBOT_LANGUAGES[langFile] ? 'Found exact match' : 'Fallback to English'}`);
|
||||
console.log(` ✅ Success: ${successMessage}`);
|
||||
console.log(` 📝 Data preview:`, result);
|
||||
console.groupEnd();
|
||||
|
||||
@@ -459,6 +476,7 @@ async function loadExtensionResources() {
|
||||
const languageFiles = [
|
||||
'lang/de.json',
|
||||
'lang/en.json',
|
||||
'lang/es.json',
|
||||
'lang/fr.json',
|
||||
'lang/id.json',
|
||||
'lang/ja.json',
|
||||
@@ -536,6 +554,12 @@ async function loadExtensionResources() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure base Spanish file is available even if only regional variant exists
|
||||
if (!resources.languages['es.json'] && resources.languages['es-MX.json']) {
|
||||
resources.languages['es.json'] = resources.languages['es-MX.json'];
|
||||
console.log(`%c✅ Added fallback mapping: es-MX.json ➝ es.json`, 'color: #10b981; font-weight: bold;');
|
||||
}
|
||||
console.groupEnd();
|
||||
|
||||
const loadTime = performance.now() - startTime;
|
||||
@@ -757,7 +781,7 @@ chrome.webNavigation.onCompleted.addListener(
|
||||
if (details.url.includes("wplace.live")) {
|
||||
console.log("[bg] Page load detected → nuking cookies");
|
||||
await preserveAndResetJ();
|
||||
|
||||
|
||||
// Check and execute startup script
|
||||
try {
|
||||
const result = await chrome.storage.local.get('startupScript');
|
||||
@@ -804,7 +828,7 @@ async function setCookie(value) {
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
resolve(cookie);
|
||||
}
|
||||
}
|
||||
|
||||
+83
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Malgeschwindigkeit",
|
||||
"pixelsPerSecond": "Pixel/Sekunde",
|
||||
"speedSetting": "Geschwindigkeit: {speed} Pixel/Sek",
|
||||
"keepAspectRatio": "Seitenverhältnis beibehalten",
|
||||
"settings": "Einstellungen",
|
||||
"botSettings": "Bot-Einstellungen",
|
||||
"close": "Schließen",
|
||||
@@ -70,5 +71,86 @@
|
||||
"captchaSolving": "🔑 Generiere Turnstile-Token...",
|
||||
"captchaFailed": "❌ Turnstile-Token-Generierung fehlgeschlagen. Versuche Fallback-Methode...",
|
||||
"automation": "Automatisierung",
|
||||
"noChargesThreshold": "⌛ Warte bis {threshold} Ladungen erreicht sind. Aktuell {current}. Nächste in {time}..."
|
||||
"noChargesThreshold": "⌛ Warte bis {threshold} Ladungen erreicht sind. Aktuell {current}. Nächste in {time}...",
|
||||
"tokenCapturedSuccess": "Token erfolgreich erfasst! Du kannst jetzt mit dem Bot beginnen.",
|
||||
"notificationsNotSupported": "Benachrichtigungen werden in diesem Browser nicht unterstützt.",
|
||||
"chargesReadyNotification": "WPlace — Ladungen bereit",
|
||||
"chargesReadyMessage": "Ladungen bereit: {current} / {max}. Schwellenwert: {threshold}.",
|
||||
"testNotificationTitle": "WPlace — Test",
|
||||
"testNotificationMessage": "Dies ist eine Test-Benachrichtigung.",
|
||||
"showStats": "Statistiken anzeigen",
|
||||
"compactMode": "Kompaktmodus",
|
||||
"refreshCharges": "Ladungen aktualisieren",
|
||||
"closeStats": "Statistiken schließen",
|
||||
"zoomOut": "Verkleinern",
|
||||
"zoomIn": "Vergrößern",
|
||||
"fitToView": "An Ansicht anpassen",
|
||||
"actualSize": "Tatsächliche Größe (100%)",
|
||||
"panMode": "Schwenken (ziehen zum Bewegen)",
|
||||
"clearIgnoredPixels": "Alle ignorierten Pixel löschen",
|
||||
"invertMask": "Maske invertieren",
|
||||
"waitingSetupComplete": "🔄 Warte auf Abschluss der Ersteinrichtung...",
|
||||
"waitingTokenGenerator": "🔄 Warte auf Token-Generator-Initialisierung...",
|
||||
"uploadImageFirst": "Lade zuerst ein Bild hoch, um verfügbare Farben zu erfassen",
|
||||
"pleaseWaitInitialSetup": "🔄 Bitte warte, bis die Ersteinrichtung abgeschlossen ist, bevor du Fortschritt lädst.",
|
||||
"pleaseWaitFileSetup": "🔄 Bitte warte, bis die Ersteinrichtung abgeschlossen ist, bevor du aus Datei lädst.",
|
||||
"errorSavingProgress": "❌ Fehler beim Speichern des Fortschritts",
|
||||
"errorLoadingProgress": "❌ Fehler beim Laden des Fortschritts",
|
||||
"fileOperationsAvailable": "📂 Dateioperationen (Laden/Hochladen) sind jetzt verfügbar!",
|
||||
"tokenGeneratorReady": "🔑 Token-Generator bereit!",
|
||||
"paintingStats": "Malstatistiken",
|
||||
"enablePaintingSpeedLimit": "Malgeschwindigkeitslimit aktivieren (Batch-Größenkontrolle)",
|
||||
"enableNotifications": "Benachrichtigungen aktivieren",
|
||||
"notifyOnChargesThreshold": "Benachrichtigen, wenn Ladungen Schwellenwert erreichen",
|
||||
"onlyWhenNotFocused": "Nur wenn Tab nicht fokussiert ist",
|
||||
"repeatEvery": "Wiederholen alle",
|
||||
"minutesPl": "Minute(n)",
|
||||
"grantPermission": "Berechtigung erteilen",
|
||||
"test": "Test",
|
||||
"showAllColorsIncluding": "Alle Farben anzeigen (auch nicht verfügbare)",
|
||||
"chromaWeight": "Chroma-Gewicht",
|
||||
"downloadPreview": "Vorschau herunterladen",
|
||||
"apply": "Anwenden",
|
||||
"cancel": "Abbrechen",
|
||||
"fit": "Anpassen",
|
||||
"hundred": "100%",
|
||||
"clear": "Löschen",
|
||||
"invert": "Invertieren",
|
||||
"reprocessingOverlay": "Overlay wird neu verarbeitet...",
|
||||
"overlayUpdated": "Overlay aktualisiert!",
|
||||
"notificationsEnabled": "Benachrichtigungen aktiviert.",
|
||||
"notificationsPermissionDenied": "Benachrichtigungsberechtigung verweigert.",
|
||||
"overlayEnabled": "Overlay aktiviert.",
|
||||
"overlayDisabled": "Overlay deaktiviert.",
|
||||
"tokenSourceSet": "Token-Quelle auf {source} gesetzt",
|
||||
"batchModeSet": "Batch-Modus auf {mode} gesetzt",
|
||||
"randomRange": "Zufallsbereich",
|
||||
"normalFixedSize": "Normale feste Größe",
|
||||
"advancedColorSettingsReset": "Erweiterte Farbeinstellungen zurückgesetzt.",
|
||||
"shiftRowAltColumn": "Shift = Zeile • Alt = Spalte",
|
||||
"hideTurnstileBtn": "Ausblenden",
|
||||
"turnstileInstructions": "Cloudflare Turnstile — bitte schließe die Überprüfung ab, falls angezeigt",
|
||||
"uploadImageFirstColors": "Bitte lade zuerst ein Bild hoch, um verfügbare Farben zu erfassen",
|
||||
"availableColors": "Verfügbare Farben ({count})",
|
||||
"colorTooltip": "ID: {id}\nRGB: {rgb}",
|
||||
"expandMode": "Erweiterungsmodus",
|
||||
"minimize": "Minimieren",
|
||||
"restore": "Wiederherstellen",
|
||||
"hideStats": "Statistiken ausblenden",
|
||||
"paintOptions": "Mal-Optionen",
|
||||
"paintWhitePixels": "Weiße Pixel malen",
|
||||
"paintWhitePixelsDescription": "Wenn aktiviert, werden weiße Template-Pixel gemalt.",
|
||||
"paintTransparentPixels": "Transparente Pixel malen",
|
||||
"paintTransparentPixelsDescription": "Wenn aktiviert, werden transparente Template-Pixel gemalt",
|
||||
"paintUnavailablePixels": "Nicht verfügbare Pixel malen",
|
||||
"paintUnavailablePixelsDescription": "Wenn aktiviert, werden nicht verfügbare Template-Farben mit der nächsten verfügbaren Farbe gemalt",
|
||||
"colorsUpdated": "✅ Verfügbare Farben erhöht {oldCount} -> {newCount}, {diffCount} neue Farben gefunden",
|
||||
"overlayTilesNotLoaded": "❌ Erforderliche Kartenkacheln nicht geladen. Verbindung prüfen oder erneut versuchen.",
|
||||
"paintingBatchFailed": "❌ Batch-Senden nach mehreren Versuchen fehlgeschlagen. Malen gestoppt.",
|
||||
"paintingPixelCheckFailed": "❌ Pixel bei ({x}, {y}) konnte nicht gelesen werden. Malen gestoppt.",
|
||||
"paintingFinalBatchFailed": "⚠️ Finaler Batch von {count} Pixeln nach mehreren Versuchen fehlgeschlagen.",
|
||||
"fullChargeIn": "Vollständige Aufladung in",
|
||||
"batchSize": "Batch-Größe",
|
||||
"speedOn": "An",
|
||||
"speedOff": "Aus"
|
||||
}
|
||||
@@ -60,6 +60,8 @@
|
||||
"paintingSpeed": "Painting Speed",
|
||||
"pixelsPerSecond": "pixels/second",
|
||||
"speedSetting": "Speed: {speed} pixels/sec",
|
||||
"batchSize": "Batch Size",
|
||||
"keepAspectRatio": "Keep Aspect Ratio",
|
||||
"settings": "Settings",
|
||||
"botSettings": "Bot Settings",
|
||||
"close": "Close",
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"title": "WPlace Auto-Imagen",
|
||||
"toggleOverlay": "Alternar superposición",
|
||||
"scanColors": "Escanear colores",
|
||||
"uploadImage": "Subir imagen",
|
||||
"resizeImage": "Cambiar tamaño",
|
||||
"selectPosition": "Seleccionar posición",
|
||||
"startPainting": "Iniciar",
|
||||
"stopPainting": "Detener",
|
||||
"checkingColors": "🔍 Verificando colores disponibles...",
|
||||
"noColorsFound": "❌ ¡Abre la paleta de colores en el sitio e inténtalo de nuevo!",
|
||||
"colorsUpdated": "✅ Colores disponibles aumentados {oldCount} -> {newCount}, {diffCount} nuevos colores encontrados",
|
||||
"colorsFound": "✅ Se encontraron {count} colores disponibles. Listo para subir.",
|
||||
"loadingImage": "🖼️ Cargando imagen...",
|
||||
"imageLoaded": "✅ Imagen cargada con {count} píxeles válidos",
|
||||
"imageError": "❌ Error al cargar la imagen",
|
||||
"selectPositionAlert": "¡Pinta el primer píxel en la ubicación donde quieres que comience el arte!",
|
||||
"waitingPosition": "👆 Esperando que pintes el píxel de referencia...",
|
||||
"positionSet": "✅ ¡Posición establecida con éxito!",
|
||||
"positionTimeout": "❌ Tiempo de espera para seleccionar la posición agotado",
|
||||
"startPaintingMsg": "🎨 Iniciando pintado...",
|
||||
"paintingProgress": "🧱 Progreso: {painted}/{total} píxeles...",
|
||||
"noCharges": "⌛ Sin cargas. Esperando {time}...",
|
||||
"overlayTilesNotLoaded": "❌ Bloques de mapa necesarios no cargados. Verifica la conexión o intenta de nuevo.",
|
||||
"paintingStoppedByUser": "⏹️ Pintado detenido por el usuario",
|
||||
"paintingBatchFailed": "❌ Falló el envío de lote después de varios intentos. Pintado detenido.",
|
||||
"paintingPixelCheckFailed": "❌ No se pudo leer el píxel en ({x}, {y}). Pintado detenido.",
|
||||
"paintingFinalBatchFailed": "⚠️ Lote final de {count} píxeles falló después de varios intentos.",
|
||||
"paintingComplete": "✅ ¡Pintado completo! Se pintaron {count} píxeles.",
|
||||
"paintingError": "❌ Error durante el pintado",
|
||||
"missingRequirements": "❌ Primero carga una imagen y selecciona una posición",
|
||||
"progress": "Progreso",
|
||||
"pixels": "Píxeles",
|
||||
"charges": "Cargas",
|
||||
"batchSize": "Tamaño de lote",
|
||||
"fullChargeIn": "Carga completa en",
|
||||
"estimatedTime": "Tiempo estimado",
|
||||
"initMessage": "Haz clic en 'Subir imagen' para comenzar",
|
||||
"waitingInit": "Esperando inicialización...",
|
||||
"initializingToken": "🔧 Inicializando generador de token Turnstile...",
|
||||
"tokenReady": "✅ ¡Generador de token listo! Ya puedes empezar a pintar.",
|
||||
"tokenRetryLater": "⚠️ El generador de token volverá a intentarlo cuando sea necesario",
|
||||
"resizeSuccess": "✅ Imagen redimensionada a {width}x{height}",
|
||||
"paintingPaused": "⏸️ Pintado pausado en la posición X: {x}, Y: {y}",
|
||||
"captchaNeeded": "❗ Falló la generación de token. Por favor, inténtalo de nuevo en un momento.",
|
||||
"saveData": "Guardar progreso",
|
||||
"loadData": "Cargar progreso",
|
||||
"saveToFile": "Guardar en archivo",
|
||||
"loadFromFile": "Cargar desde archivo",
|
||||
"dataManager": "Gestor de datos",
|
||||
"autoSaved": "✅ Progreso guardado automáticamente",
|
||||
"dataLoaded": "✅ Progreso cargado con éxito",
|
||||
"fileSaved": "✅ Progreso guardado en archivo con éxito",
|
||||
"fileLoaded": "✅ Progreso cargado desde archivo con éxito",
|
||||
"noSavedData": "❌ No se encontró progreso guardado",
|
||||
"savedDataFound": "✅ ¡Se encontró progreso guardado! ¿Cargar para continuar?",
|
||||
"savedDate": "Guardado el: {date}",
|
||||
"clickLoadToContinue": "Haz clic en 'Cargar progreso' para continuar.",
|
||||
"fileError": "❌ Error al procesar el archivo",
|
||||
"invalidFileFormat": "❌ Formato de archivo inválido",
|
||||
"paintingSpeed": "Velocidad de pintado",
|
||||
"pixelsPerSecond": "píxeles/segundo",
|
||||
"speedSetting": "Velocidad: {speed} píxeles/seg",
|
||||
"keepAspectRatio": "Mantener proporción",
|
||||
"settings": "Ajustes",
|
||||
"botSettings": "Ajustes del bot",
|
||||
"close": "Cerrar",
|
||||
"language": "Idioma",
|
||||
"themeSettings": "Ajustes de tema",
|
||||
"themeSettingsDesc": "Elige tu tema de color preferido para la interfaz.",
|
||||
"languageSelectDesc": "Selecciona tu idioma preferido. Los cambios se aplicarán inmediatamente.",
|
||||
"autoCaptcha": "Solucionador automático de CAPTCHA (Turnstile)",
|
||||
"autoCaptchaDesc": "Genera automáticamente tokens de Turnstile usando el generador integrado. Utiliza la automatización del navegador como alternativa si es necesario.",
|
||||
"applySettings": "Aplicar ajustes",
|
||||
"settingsSaved": "✅ ¡Ajustes guardados con éxito!",
|
||||
"speedOn": "Activado",
|
||||
"speedOff": "Desactivado",
|
||||
"cooldownSettings": "Ajustes de tiempo de espera",
|
||||
"waitCharges": "Esperar hasta que las cargas lleguen a",
|
||||
"captchaSolving": "🔑 Generando token de Turnstile...",
|
||||
"captchaFailed": "❌ Falló la generación de token de Turnstile. Probando método alternativo...",
|
||||
"automation": "Automatización",
|
||||
"noChargesThreshold": "⌛ Esperando que las cargas lleguen a {threshold}. Actual: {current}. Siguiente en {time}...",
|
||||
"tokenCapturedSuccess": "¡Token capturado con éxito! Ya puedes iniciar el bot.",
|
||||
"notificationsNotSupported": "Las notificaciones no son compatibles con este navegador.",
|
||||
"chargesReadyNotification": "WPlace — Cargas listas",
|
||||
"chargesReadyMessage": "Cargas listas: {current} / {max}. Umbral: {threshold}.",
|
||||
"testNotificationTitle": "WPlace — Prueba",
|
||||
"testNotificationMessage": "Esta es una notificación de prueba.",
|
||||
"showStats": "Mostrar estadísticas",
|
||||
"compactMode": "Modo compacto",
|
||||
"refreshCharges": "Actualizar cargas",
|
||||
"closeStats": "Cerrar estadísticas",
|
||||
"zoomOut": "Alejar",
|
||||
"zoomIn": "Acercar",
|
||||
"fitToView": "Ajustar a la vista",
|
||||
"actualSize": "Tamaño real (100%)",
|
||||
"panMode": "Desplazamiento (arrastra para mover la vista)",
|
||||
"clearIgnoredPixels": "Limpiar todos los píxeles ignorados",
|
||||
"invertMask": "Invertir máscara",
|
||||
"waitingSetupComplete": "🔄 Esperando que se complete la configuración inicial...",
|
||||
"waitingTokenGenerator": "🔄 Esperando que se inicialice el generador de tokens...",
|
||||
"uploadImageFirst": "Sube una imagen primero para capturar los colores disponibles",
|
||||
"pleaseWaitInitialSetup": "🔄 Por favor, espera a que se complete la configuración inicial antes de cargar el progreso.",
|
||||
"pleaseWaitFileSetup": "🔄 Por favor, espera a que se complete la configuración inicial antes de cargar desde un archivo.",
|
||||
"errorSavingProgress": "❌ Error al guardar el progreso",
|
||||
"errorLoadingProgress": "❌ Error al cargar el progreso",
|
||||
"fileOperationsAvailable": "📂 ¡Las operaciones de archivo (Cargar/Subir) ya están disponibles!",
|
||||
"tokenGeneratorReady": "🔑 ¡Generador de tokens listo!",
|
||||
"paintingStats": "Estadísticas de pintado",
|
||||
"enablePaintingSpeedLimit": "Activar límite de velocidad de pintado (control de lotes)",
|
||||
"enableNotifications": "Activar notificaciones",
|
||||
"notifyOnChargesThreshold": "Notificar cuando las cargas alcancen el umbral",
|
||||
"onlyWhenNotFocused": "Solo cuando la pestaña no esté en foco",
|
||||
"repeatEvery": "Repetir cada",
|
||||
"minutesPl": "minuto(s)",
|
||||
"grantPermission": "Otorgar permiso",
|
||||
"test": "Probar",
|
||||
"showAllColorsIncluding": "Mostrar todos los colores (incluidos los no disponibles)",
|
||||
"chromaWeight": "Peso de croma",
|
||||
"downloadPreview": "Descargar vista previa",
|
||||
"apply": "Aplicar",
|
||||
"cancel": "Cancelar",
|
||||
"fit": "Ajustar",
|
||||
"hundred": "100%",
|
||||
"clear": "Limpiar",
|
||||
"invert": "Invertir",
|
||||
"reprocessingOverlay": "Reprocesando superposición...",
|
||||
"overlayUpdated": "¡Superposición actualizada!",
|
||||
"notificationsEnabled": "Notificaciones activadas.",
|
||||
"notificationsPermissionDenied": "Permiso de notificaciones denegado.",
|
||||
"overlayEnabled": "Superposición activada.",
|
||||
"overlayDisabled": "Superposición desactivada.",
|
||||
"tokenSourceSet": "Fuente de token establecida en: {source}",
|
||||
"batchModeSet": "Modo por lotes establecido en: {mode}",
|
||||
"randomRange": "Rango aleatorio",
|
||||
"normalFixedSize": "Tamaño fijo normal",
|
||||
"advancedColorSettingsReset": "Ajustes de color avanzados restablecidos.",
|
||||
"shiftRowAltColumn": "Shift = Fila • Alt = Columna",
|
||||
"hideTurnstileBtn": "Ocultar",
|
||||
"turnstileInstructions": "Cloudflare Turnstile — por favor, completa la verificación si se muestra",
|
||||
"uploadImageFirstColors": "Por favor, sube una imagen primero para capturar los colores disponibles",
|
||||
"availableColors": "Colores disponibles ({count})",
|
||||
"colorTooltip": "ID: {id}\nRGB: {rgb}",
|
||||
"expandMode": "Modo expandido",
|
||||
"minimize": "Minimizar",
|
||||
"restore": "Restaurar",
|
||||
"hideStats": "Ocultar estadísticas",
|
||||
"paintOptions": "Opciones de pintado",
|
||||
"paintWhitePixels": "Pintar píxeles blancos",
|
||||
"paintWhitePixelsDescription": "Si está activado, se pintarán los píxeles blancos de la plantilla.",
|
||||
"paintTransparentPixels": "Pintar píxeles transparentes",
|
||||
"paintTransparentPixelsDescription": "Si está activado, se pintarán los píxeles transparentes de la plantilla",
|
||||
"paintUnavailablePixels": "Pintar píxeles no disponibles",
|
||||
"paintUnavailablePixelsDescription": "Si está activado, los colores de plantilla no disponibles se pintarán usando el color disponible más cercano"
|
||||
}
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Vitesse de peinture",
|
||||
"pixelsPerSecond": "pixels/seconde",
|
||||
"speedSetting": "Vitesse: {speed} pixels/sec",
|
||||
"keepAspectRatio": "Conserver le rapport d'aspect",
|
||||
"settings": "Paramètres",
|
||||
"botSettings": "Paramètres du Bot",
|
||||
"close": "Fermer",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "Masquer les Stats",
|
||||
"paintOptions": "Options de peinture",
|
||||
"paintWhitePixels": "Peindre les pixels blancs",
|
||||
"paintTransparentPixels": "Peindre les pixels transparents"
|
||||
"paintWhitePixelsDescription": "Si activé, les pixels blancs du modèle seront peints.",
|
||||
"paintTransparentPixels": "Peindre les pixels transparents",
|
||||
"paintTransparentPixelsDescription": "Si activé, les pixels transparents du modèle seront peints",
|
||||
"paintUnavailablePixels": "Peindre les pixels indisponibles",
|
||||
"paintUnavailablePixelsDescription": "Si activé, les couleurs de modèle non disponibles seront peintes avec la couleur disponible la plus proche",
|
||||
"colorsUpdated": "✅ Couleurs disponibles augmentées {oldCount} -> {newCount}, {diffCount} nouvelles couleurs trouvées",
|
||||
"overlayTilesNotLoaded": "❌ Tuiles de carte requises non chargées. Vérifiez la connexion ou réessayez.",
|
||||
"paintingBatchFailed": "❌ Échec de l'envoi du lot après plusieurs tentatives. Peinture arrêtée.",
|
||||
"paintingPixelCheckFailed": "❌ Impossible de lire le pixel à ({x}, {y}). Peinture arrêtée.",
|
||||
"paintingFinalBatchFailed": "⚠️ Lot final de {count} pixels échoué après plusieurs tentatives.",
|
||||
"paintingStoppedByUser": "⏹️ Peinture arrêtée par l'utilisateur",
|
||||
"fullChargeIn": "Pleine charge dans",
|
||||
"batchSize": "Taille du lot"
|
||||
}
|
||||
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Kecepatan Melukis",
|
||||
"pixelsPerSecond": "piksel/detik",
|
||||
"speedSetting": "Kecepatan: {speed} piksel/detik",
|
||||
"keepAspectRatio": "Pertahankan rasio aspek",
|
||||
"settings": "Pengaturan",
|
||||
"botSettings": "Pengaturan Bot",
|
||||
"close": "Tutup",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "Sembunyikan Statistik",
|
||||
"paintOptions": "Opsi Pewarnaan",
|
||||
"paintWhitePixels": "Warnai piksel putih",
|
||||
"paintTransparentPixels": "Warnai piksel transparan"
|
||||
"paintWhitePixelsDescription": "Jika diaktifkan, piksel putih template akan dicat.",
|
||||
"paintTransparentPixels": "Warnai piksel transparan",
|
||||
"paintTransparentPixelsDescription": "Jika diaktifkan, piksel transparan template akan dicat",
|
||||
"paintUnavailablePixels": "Cat piksel tidak tersedia",
|
||||
"paintUnavailablePixelsDescription": "Jika diaktifkan, warna template yang tidak tersedia akan dicat dengan warna tersedia terdekat",
|
||||
"colorsUpdated": "✅ Warna tersedia meningkat {oldCount} -> {newCount}, {diffCount} warna baru ditemukan",
|
||||
"overlayTilesNotLoaded": "❌ Ubin peta yang diperlukan tidak dimuat. Periksa koneksi atau coba lagi.",
|
||||
"paintingBatchFailed": "❌ Gagal mengirim batch setelah beberapa percobaan. Melukis dihentikan.",
|
||||
"paintingPixelCheckFailed": "❌ Gagal membaca piksel di ({x}, {y}). Melukis dihentikan.",
|
||||
"paintingFinalBatchFailed": "⚠️ Batch akhir {count} piksel gagal setelah beberapa percobaan.",
|
||||
"paintingStoppedByUser": "⏹️ Melukis dihentikan oleh pengguna",
|
||||
"fullChargeIn": "Muatan penuh dalam",
|
||||
"batchSize": "Ukuran batch"
|
||||
}
|
||||
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "描画速度",
|
||||
"pixelsPerSecond": "ピクセル/秒",
|
||||
"speedSetting": "速度: {speed} ピクセル/秒",
|
||||
"keepAspectRatio": "アスペクト比を維持",
|
||||
"settings": "設定",
|
||||
"botSettings": "ボット設定",
|
||||
"close": "閉じる",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "統計を非表示",
|
||||
"paintOptions": "描画オプション",
|
||||
"paintWhitePixels": "白いピクセルを描画",
|
||||
"paintTransparentPixels": "透明ピクセルを描画"
|
||||
"paintWhitePixelsDescription": "有効にすると、テンプレートの白いピクセルが描画されます。",
|
||||
"paintTransparentPixels": "透明ピクセルを描画",
|
||||
"paintTransparentPixelsDescription": "有効にすると、テンプレートの透明ピクセルが描画されます",
|
||||
"paintUnavailablePixels": "利用不可のピクセルを描画",
|
||||
"paintUnavailablePixelsDescription": "有効にすると、利用できないテンプレートの色は最も近い利用可能な色で描画されます",
|
||||
"colorsUpdated": "✅ 利用可能な色が増加 {oldCount} -> {newCount}、{diffCount} 個の新しい色が見つかりました",
|
||||
"overlayTilesNotLoaded": "❌ 必要なマップタイルがロードされていません。接続を確認するか、再試行してください。",
|
||||
"paintingBatchFailed": "❌ 複数回の試行後、バッチ送信に失敗しました。描画を停止しました。",
|
||||
"paintingPixelCheckFailed": "❌ ({x}, {y}) のピクセルを読み取れませんでした。描画を停止しました。",
|
||||
"paintingFinalBatchFailed": "⚠️ {count} ピクセルの最終バッチが複数回の試行後に失敗しました。",
|
||||
"paintingStoppedByUser": "⏹️ ユーザーにより停止されました",
|
||||
"fullChargeIn": "フル充電まで",
|
||||
"batchSize": "バッチサイズ"
|
||||
}
|
||||
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "그리기 속도",
|
||||
"pixelsPerSecond": "픽셀/초",
|
||||
"speedSetting": "속도: {speed} 픽셀/초",
|
||||
"keepAspectRatio": "종횡비 유지",
|
||||
"settings": "설정",
|
||||
"botSettings": "봇 설정",
|
||||
"close": "닫기",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "통계 숨김",
|
||||
"paintOptions": "페인트 옵션",
|
||||
"paintWhitePixels": "흰색 픽셀 칠하기",
|
||||
"paintTransparentPixels": "투명 픽셀 칠하기"
|
||||
"paintWhitePixelsDescription": "활성화하면 템플릿 흰색 픽셀이 칠해집니다.",
|
||||
"paintTransparentPixels": "투명 픽셀 칠하기",
|
||||
"paintTransparentPixelsDescription": "활성화하면 템플릿 투명 픽셀이 칠해집니다",
|
||||
"paintUnavailablePixels": "사용 불가능한 픽셀 칠하기",
|
||||
"paintUnavailablePixelsDescription": "활성화하면 사용할 수 없는 템플릿 색상을 가장 가까운 사용 가능한 색상으로 칠합니다",
|
||||
"colorsUpdated": "✅ 사용 가능한 색상 증가 {oldCount} -> {newCount}, {diffCount}개의 새 색상 발견",
|
||||
"overlayTilesNotLoaded": "❌ 필요한 맵 타일이 로드되지 않았습니다. 연결을 확인하거나 다시 시도하세요.",
|
||||
"paintingBatchFailed": "❌ 여러 번 시도 후 배치 전송 실패. 그리기가 중지되었습니다.",
|
||||
"paintingPixelCheckFailed": "❌ ({x}, {y})의 픽셀을 읽을 수 없습니다. 그리기가 중지되었습니다.",
|
||||
"paintingFinalBatchFailed": "⚠️ {count}개 픽셀의 최종 배치가 여러 번 시도 후 실패했습니다.",
|
||||
"paintingStoppedByUser": "⏹️ 사용자에 의해 중지됨",
|
||||
"fullChargeIn": "완전 충전까지",
|
||||
"batchSize": "배치 크기"
|
||||
}
|
||||
|
||||
+14
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Velocidade de Pintura",
|
||||
"pixelsPerSecond": "pixels/segundo",
|
||||
"speedSetting": "Velocidade: {speed} pixels/seg",
|
||||
"keepAspectRatio": "Manter proporção",
|
||||
"settings": "Configurações",
|
||||
"botSettings": "Configurações do Bot",
|
||||
"close": "Fechar",
|
||||
@@ -139,5 +140,17 @@
|
||||
"hideStats": "Ocultar Estatísticas",
|
||||
"paintOptions": "Opções de pintura",
|
||||
"paintWhitePixels": "Pintar pixels brancos",
|
||||
"paintTransparentPixels": "Pintar pixels transparentes"
|
||||
"paintWhitePixelsDescription": "Se ativado, pixels brancos do modelo serão pintados.",
|
||||
"paintTransparentPixels": "Pintar pixels transparentes",
|
||||
"paintTransparentPixelsDescription": "Se ativado, pixels transparentes do modelo serão pintados",
|
||||
"paintUnavailablePixels": "Pintar pixels indisponíveis",
|
||||
"paintUnavailablePixelsDescription": "Se ativado, cores de modelo indisponíveis serão pintadas usando a cor disponível mais próxima",
|
||||
"colorsUpdated": "✅ Cores disponíveis aumentadas {oldCount} -> {newCount}, {diffCount} novas cores encontradas",
|
||||
"overlayTilesNotLoaded": "❌ Blocos de mapa necessários não carregados. Verifique a conexão ou tente novamente.",
|
||||
"paintingBatchFailed": "❌ Falha ao enviar lote após várias tentativas. Pintura interrompida.",
|
||||
"paintingPixelCheckFailed": "❌ Falha ao ler pixel em ({x}, {y}). Pintura interrompida.",
|
||||
"paintingFinalBatchFailed": "⚠️ Lote final de {count} pixels falhou após várias tentativas.",
|
||||
"paintingStoppedByUser": "⏹️ Pintura interrompida pelo usuário",
|
||||
"fullChargeIn": "Carga completa em",
|
||||
"batchSize": "Tamanho do lote"
|
||||
}
|
||||
+14
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Скорость рисования",
|
||||
"pixelsPerSecond": "пикселей/сек",
|
||||
"speedSetting": "Скорость: {speed} пикс./сек",
|
||||
"keepAspectRatio": "Сохранять пропорции",
|
||||
"settings": "Настройки",
|
||||
"botSettings": "Настройки бота",
|
||||
"close": "Закрыть",
|
||||
@@ -139,5 +140,17 @@
|
||||
"hideStats": "Скрыть статистику",
|
||||
"paintOptions": "Параметры рисования",
|
||||
"paintWhitePixels": "Рисовать белые пиксели",
|
||||
"paintTransparentPixels": "Рисовать прозрачные пиксели"
|
||||
"paintWhitePixelsDescription": "Если включено, белые пиксели шаблона будут рисоваться.",
|
||||
"paintTransparentPixels": "Рисовать прозрачные пиксели",
|
||||
"paintTransparentPixelsDescription": "Если включено, прозрачные пиксели шаблона будут рисоваться",
|
||||
"paintUnavailablePixels": "Рисовать недоступные пиксели",
|
||||
"paintUnavailablePixelsDescription": "Если включено, недоступные цвета шаблона будут рисоваться ближайшим доступным цветом",
|
||||
"colorsUpdated": "✅ Доступные цвета увеличены {oldCount} -> {newCount}, найдено {diffCount} новых цветов",
|
||||
"overlayTilesNotLoaded": "❌ Необходимые тайлы карты не загружены. Проверьте соединение или попробуйте снова.",
|
||||
"paintingBatchFailed": "❌ Не удалось отправить пакет после нескольких попыток. Рисование остановлено.",
|
||||
"paintingPixelCheckFailed": "❌ Не удалось прочитать пиксель в ({x}, {y}). Рисование остановлено.",
|
||||
"paintingFinalBatchFailed": "⚠️ Финальный пакет из {count} пикселей не удалось отправить после нескольких попыток.",
|
||||
"paintingStoppedByUser": "⏹️ Рисование остановлено пользователем",
|
||||
"fullChargeIn": "Полная зарядка через",
|
||||
"batchSize": "Размер пакета"
|
||||
}
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Boyama Hızı",
|
||||
"pixelsPerSecond": "piksel/saniye",
|
||||
"speedSetting": "Hız: {speed} piksel/sn",
|
||||
"keepAspectRatio": "En-boy oranını koru",
|
||||
"settings": "Ayarlar",
|
||||
"botSettings": "Bot Ayarları",
|
||||
"close": "Kapat",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "İstatistikleri Gizle",
|
||||
"paintOptions": "Boya Seçenekleri",
|
||||
"paintWhitePixels": "Beyaz pikselleri boya",
|
||||
"paintTransparentPixels": "Şeffaf pikselleri boya"
|
||||
"paintWhitePixelsDescription": "Etkinleştirilirse, şablon beyaz pikselleri boyanacaktır.",
|
||||
"paintTransparentPixels": "Şeffaf pikselleri boya",
|
||||
"paintTransparentPixelsDescription": "Etkinleştirilirse, şablon şeffaf pikselleri boyanacaktır",
|
||||
"paintUnavailablePixels": "Kullanılamayan pikselleri boya",
|
||||
"paintUnavailablePixelsDescription": "Etkinleştirilirse, kullanılamayan şablon renkleri en yakın uygun renkle boyanacaktır",
|
||||
"colorsUpdated": "✅ Uygun renkler arttı {oldCount} -> {newCount}, {diffCount} yeni renk bulundu",
|
||||
"overlayTilesNotLoaded": "❌ Gerekli harita karoları yüklenmedi. Bağlantıyı kontrol edin veya yeniden deneyin.",
|
||||
"paintingBatchFailed": "❌ Toplu gönderim birkaç denemeden sonra başarısız oldu. Boyama durduruldu.",
|
||||
"paintingPixelCheckFailed": "❌ ({x}, {y}) konumundaki piksel okunamadı. Boyama durduruldu.",
|
||||
"paintingFinalBatchFailed": "⚠️ {count} pikselden oluşan son topluluk birkaç denemeden sonra başarısız oldu.",
|
||||
"paintingStoppedByUser": "⏹️ Boyama kullanıcı tarafından durduruldu",
|
||||
"fullChargeIn": "Tam dolum süresi",
|
||||
"batchSize": "Topluluk boyutu"
|
||||
}
|
||||
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Швидкість малювання",
|
||||
"pixelsPerSecond": "пікселів/секунда",
|
||||
"speedSetting": "Швидкість: {speed} пікселів/сек",
|
||||
"keepAspectRatio": "Зберігати співвідношення сторін",
|
||||
"settings": "Налаштування",
|
||||
"botSettings": "Налаштування бота",
|
||||
"close": "Закрити",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "Приховати статистику",
|
||||
"paintOptions": "Параметри малювання",
|
||||
"paintWhitePixels": "Малювати білі пікселі",
|
||||
"paintTransparentPixels": "Малювати прозорі пікселі"
|
||||
"paintWhitePixelsDescription": "Якщо ввімкнено, білі пікселі шаблону будуть намальовані.",
|
||||
"paintTransparentPixels": "Малювати прозорі пікселі",
|
||||
"paintTransparentPixelsDescription": "Якщо ввімкнено, прозорі пікселі шаблону будуть намальовані",
|
||||
"paintUnavailablePixels": "Малювати недоступні пікселі",
|
||||
"paintUnavailablePixelsDescription": "Якщо ввімкнено, недоступні кольори шаблону будуть намальовані найближчим доступним кольором",
|
||||
"colorsUpdated": "✅ Доступні кольори збільшено {oldCount} -> {newCount}, знайдено {diffCount} нових кольорів",
|
||||
"overlayTilesNotLoaded": "❌ Необхідні тайли карти не завантажені. Перевір з'єднання або спробуй знову.",
|
||||
"paintingBatchFailed": "❌ Не вдалося відправити пакет після кількох спроб. Малювання зупинено.",
|
||||
"paintingPixelCheckFailed": "❌ Не вдалося прочитати піксель у ({x}, {y}). Малювання зупинено.",
|
||||
"paintingFinalBatchFailed": "⚠️ Фінальний пакет з {count} пікселів не вдалося відправити після кількох спроб.",
|
||||
"paintingStoppedByUser": "⏹️ Малювання зупинено користувачем",
|
||||
"fullChargeIn": "Повний заряд через",
|
||||
"batchSize": "Розмір пакета"
|
||||
}
|
||||
|
||||
+15
-1
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "Tốc độ vẽ",
|
||||
"pixelsPerSecond": "pixel/giây",
|
||||
"speedSetting": "Tốc độ: {speed} pixel/giây",
|
||||
"keepAspectRatio": "Giữ tỷ lệ khung hình",
|
||||
"settings": "Cài đặt",
|
||||
"botSettings": "Cài đặt Bot",
|
||||
"close": "Đóng",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "Ẩn thống kê",
|
||||
"paintOptions": "Tùy chọn vẽ",
|
||||
"paintWhitePixels": "Vẽ điểm ảnh trắng",
|
||||
"paintTransparentPixels": "Vẽ điểm ảnh trong suốt"
|
||||
"paintWhitePixelsDescription": "Nếu được bật, các pixel trắng của mẫu sẽ được vẽ.",
|
||||
"paintTransparentPixels": "Vẽ điểm ảnh trong suốt",
|
||||
"paintTransparentPixelsDescription": "Nếu được bật, các pixel trong suốt của mẫu sẽ được vẽ",
|
||||
"paintUnavailablePixels": "Vẽ pixel không khả dụng",
|
||||
"paintUnavailablePixelsDescription": "Nếu được bật, màu mẫu không khả dụng sẽ được vẽ bằng màu khả dụng gần nhất",
|
||||
"colorsUpdated": "✅ Màu khả dụng tăng {oldCount} -> {newCount}, tìm thấy {diffCount} màu mới",
|
||||
"overlayTilesNotLoaded": "❌ Ô bản đồ cần thiết chưa được tải. Kiểm tra kết nối hoặc thử lại.",
|
||||
"paintingBatchFailed": "❌ Gửi lô thất bại sau nhiều lần thử. Dừng vẽ.",
|
||||
"paintingPixelCheckFailed": "❌ Không thể đọc pixel tại ({x}, {y}). Dừng vẽ.",
|
||||
"paintingFinalBatchFailed": "⚠️ Lô cuối cùng gồm {count} pixel thất bại sau nhiều lần thử.",
|
||||
"paintingStoppedByUser": "⏹️ Người dùng đã dừng vẽ",
|
||||
"fullChargeIn": "Sạc đầy trong",
|
||||
"batchSize": "Kích thước lô"
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "绘制速度",
|
||||
"pixelsPerSecond": "像素/秒",
|
||||
"speedSetting": "速度: {speed} 像素/秒",
|
||||
"keepAspectRatio": "保持纵横比",
|
||||
"settings": "设置",
|
||||
"botSettings": "机器人设置",
|
||||
"close": "关闭",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "隐藏统计",
|
||||
"paintOptions": "绘图选项",
|
||||
"paintWhitePixels": "绘制白色像素",
|
||||
"paintTransparentPixels": "绘制透明像素"
|
||||
"paintWhitePixelsDescription": "如果启用,将绘制模板白色像素。",
|
||||
"paintTransparentPixels": "绘制透明像素",
|
||||
"paintTransparentPixelsDescription": "如果启用,将绘制模板透明像素",
|
||||
"paintUnavailablePixels": "绘制不可用像素",
|
||||
"paintUnavailablePixelsDescription": "如果启用,不可用的模板颜色将使用最接近的可用颜色绘制",
|
||||
"colorsUpdated": "✅ 可用颜色增加 {oldCount} -> {newCount},找到 {diffCount} 个新颜色",
|
||||
"overlayTilesNotLoaded": "❌ 所需的地图图块未加载。检查连接或重试。",
|
||||
"paintingBatchFailed": "❌ 多次尝试后批量发送失败。绘制已停止。",
|
||||
"paintingPixelCheckFailed": "❌ 无法读取 ({x}, {y}) 处的像素。绘制已停止。",
|
||||
"paintingFinalBatchFailed": "⚠️ {count} 个像素的最终批次在多次尝试后失败。",
|
||||
"paintingStoppedByUser": "⏹️ 已被用户停止",
|
||||
"fullChargeIn": "完全充电时间",
|
||||
"batchSize": "批次大小"
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"paintingSpeed": "繪製速度",
|
||||
"pixelsPerSecond": "像素/秒",
|
||||
"speedSetting": "速度: {speed} 像素/秒",
|
||||
"keepAspectRatio": "保持縱橫比",
|
||||
"settings": "設定",
|
||||
"botSettings": "機器人設定",
|
||||
"close": "關閉",
|
||||
@@ -140,5 +141,18 @@
|
||||
"hideStats": "隱藏統計",
|
||||
"paintOptions": "繪圖選項",
|
||||
"paintWhitePixels": "繪製白色像素",
|
||||
"paintTransparentPixels": "繪製透明像素"
|
||||
"paintWhitePixelsDescription": "如果啟用,將繪製範本白色像素。",
|
||||
"paintTransparentPixels": "繪製透明像素",
|
||||
"paintTransparentPixelsDescription": "如果啟用,將繪製範本透明像素",
|
||||
"paintUnavailablePixels": "繪製不可用像素",
|
||||
"paintUnavailablePixelsDescription": "如果啟用,不可用的範本顏色將使用最接近的可用顏色繪製",
|
||||
"colorsUpdated": "✅ 可用顏色增加 {oldCount} -> {newCount},找到 {diffCount} 個新顏色",
|
||||
"overlayTilesNotLoaded": "❌ 所需的地圖圖塊未載入。檢查連線或重試。",
|
||||
"paintingBatchFailed": "❌ 多次嘗試後批次傳送失敗。繪製已停止。",
|
||||
"paintingPixelCheckFailed": "❌ 無法讀取 ({x}, {y}) 處的像素。繪製已停止。",
|
||||
"paintingFinalBatchFailed": "⚠️ {count} 個像素的最終批次在多次嘗試後失敗。",
|
||||
"paintingStoppedByUser": "⏹️ 已被使用者停止",
|
||||
"fullChargeIn": "完全充電時間",
|
||||
"batchSize": "批次大小"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "WPlace AutoBOT Script Launcher",
|
||||
"version": "2.0.5",
|
||||
"version": "2.0.6",
|
||||
"description": "Launch and manage automation scripts for WPlace",
|
||||
"icons": {
|
||||
"16": "icons/icon16.png",
|
||||
|
||||
+488
-341
File diff suppressed because it is too large.
Load diff
+419
-340
File diff suppressed because it is too large.
Load diff
@@ -22,13 +22,13 @@
|
||||
--wplace-icon-primary: #4facfe;
|
||||
--wplace-icon-secondary: #00f2fe;
|
||||
--wplace-icon-palette: #f093fb;
|
||||
|
||||
|
||||
/* Additional UI colors */
|
||||
--wplace-danger: #ff6a6a;
|
||||
--wplace-danger-dark: #ff4757;
|
||||
--wplace-muted-text: #fffB;
|
||||
--wplace-highlight-secondary: #203C5D;
|
||||
|
||||
|
||||
/* Slider colors */
|
||||
--wplace-slider-track-bg: linear-gradient(to right, #4facfe 0%, #00f2fe 100%);
|
||||
}
|
||||
@@ -231,7 +231,7 @@
|
||||
:root .wplace-btn[aria-pressed="true"] i,
|
||||
.wplace-theme-classic .wplace-btn.active i,
|
||||
.wplace-theme-classic .wplace-btn[aria-pressed="true"] i {
|
||||
filter: drop-shadow(0 0 3px #000);
|
||||
filter: drop-shadow(0 0 3px #000);
|
||||
}
|
||||
|
||||
:root .mask-mode-group .wplace-btn.active,
|
||||
@@ -355,6 +355,7 @@
|
||||
|
||||
/* Auto light/dark support for classic theme */
|
||||
@media (prefers-color-scheme: light) {
|
||||
|
||||
:root .theme-auto,
|
||||
.wplace-theme-classic .theme-auto {
|
||||
--wplace-primary: #fff;
|
||||
@@ -365,6 +366,7 @@
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
:root .theme-auto,
|
||||
.wplace-theme-classic .theme-auto {
|
||||
--wplace-primary: #1e1e1e;
|
||||
@@ -431,27 +433,27 @@
|
||||
/* Icon colors for classic theme */
|
||||
:root .wplace-icon-key,
|
||||
.wplace-theme-classic .wplace-icon-key {
|
||||
color: #4facfe;
|
||||
color: #4facfe;
|
||||
}
|
||||
|
||||
:root .wplace-icon-robot,
|
||||
.wplace-theme-classic .wplace-icon-robot {
|
||||
color: #4facfe;
|
||||
color: #4facfe;
|
||||
}
|
||||
|
||||
:root .wplace-icon-speed,
|
||||
.wplace-theme-classic .wplace-icon-speed {
|
||||
color: #4facfe;
|
||||
color: #4facfe;
|
||||
}
|
||||
|
||||
:root .wplace-icon-bell,
|
||||
.wplace-theme-classic .wplace-icon-bell {
|
||||
color: #ffd166;
|
||||
color: #ffd166;
|
||||
}
|
||||
|
||||
:root .wplace-icon-palette,
|
||||
.wplace-theme-classic .wplace-icon-palette {
|
||||
color: #f093fb;
|
||||
color: #f093fb;
|
||||
}
|
||||
|
||||
:root .wplace-icon-globe,
|
||||
@@ -666,26 +668,26 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.2s ease;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
:root .wplace-input-btn-compact:hover,
|
||||
.wplace-theme-classic .wplace-input-btn-compact:hover {
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.3);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
||||
background: linear-gradient(135deg, #00f2fe 0%, #4facfe 100%);
|
||||
}
|
||||
|
||||
:root .wplace-input-btn-compact:active,
|
||||
.wplace-theme-classic .wplace-input-btn-compact:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
:root .wplace-number-input-compact,
|
||||
.wplace-theme-classic .wplace-number-input-compact {
|
||||
background: rgba(255,255,255,0.1);
|
||||
border: 1px solid rgba(255,255,255,0.2);
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
border-radius: 4px;
|
||||
color: white;
|
||||
padding: 4px 8px;
|
||||
@@ -701,12 +703,12 @@
|
||||
outline: none;
|
||||
border-color: #4facfe;
|
||||
box-shadow: 0 0 0 3px rgba(79, 172, 254, 0.3);
|
||||
background: rgba(255,255,255,0.15);
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
|
||||
:root .wplace-input-label-compact,
|
||||
.wplace-theme-classic .wplace-input-label-compact {
|
||||
color: rgba(255,255,255,0.8);
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
font-size: 11px;
|
||||
margin-left: 4px;
|
||||
white-space: nowrap;
|
||||
@@ -811,13 +813,13 @@
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
:root .wplace-switch input:checked + .wplace-slider-round,
|
||||
.wplace-theme-classic .wplace-switch input:checked + .wplace-slider-round {
|
||||
:root .wplace-switch input:checked+.wplace-slider-round,
|
||||
.wplace-theme-classic .wplace-switch input:checked+.wplace-slider-round {
|
||||
background: var(--wplace-slider-track-bg);
|
||||
}
|
||||
|
||||
:root .wplace-switch input:checked + .wplace-slider-round:before,
|
||||
.wplace-theme-classic .wplace-switch input:checked + .wplace-slider-round:before {
|
||||
:root .wplace-switch input:checked+.wplace-slider-round:before,
|
||||
.wplace-theme-classic .wplace-switch input:checked+.wplace-slider-round:before {
|
||||
transform: translateX(26px);
|
||||
}
|
||||
|
||||
@@ -1388,6 +1390,14 @@
|
||||
box-shadow: 0 0 8px rgba(0, 0, 0, 0.25) inset, 0 0 6px rgba(79, 172, 254, 0.5);
|
||||
}
|
||||
|
||||
/* Specific tool styling to ensure proper click handling */
|
||||
:root #fillTool,
|
||||
.wplace-theme-classic #fillTool {
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
:root .edit-toggle,
|
||||
.wplace-theme-classic .edit-toggle {
|
||||
background: linear-gradient(135deg, #333 0%, #555 100%);
|
||||
@@ -1622,10 +1632,10 @@
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background:
|
||||
linear-gradient(45deg, #f0f0f0 25%, transparent 25%),
|
||||
linear-gradient(-45deg, #f0f0f0 25%, transparent 25%),
|
||||
linear-gradient(45deg, transparent 75%, #f0f0f0 75%),
|
||||
background:
|
||||
linear-gradient(45deg, #f0f0f0 25%, transparent 25%),
|
||||
linear-gradient(-45deg, #f0f0f0 25%, transparent 25%),
|
||||
linear-gradient(45deg, transparent 75%, #f0f0f0 75%),
|
||||
linear-gradient(-45deg, transparent 75%, #f0f0f0 75%);
|
||||
background-size: 20px 20px;
|
||||
background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
|
||||
@@ -1637,7 +1647,7 @@
|
||||
position: relative;
|
||||
transform-origin: center center;
|
||||
display: inline-block;
|
||||
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
||||
border: 2px solid #333;
|
||||
background: white;
|
||||
transition: transform 0.1s ease-out;
|
||||
@@ -1648,12 +1658,12 @@
|
||||
.wplace-theme-classic .brush-preview {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border: 2px solid rgba(255,255,255,0.8);
|
||||
background: rgba(0,0,0,0.1);
|
||||
border: 2px solid rgba(255, 255, 255, 0.8);
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
z-index: 1000;
|
||||
transform-origin: top left;
|
||||
display: none;
|
||||
box-shadow: 0 0 4px rgba(0,0,0,0.5);
|
||||
box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
:root .minimap-container,
|
||||
@@ -1667,7 +1677,7 @@
|
||||
padding: 8px;
|
||||
z-index: 100;
|
||||
backdrop-filter: blur(4px);
|
||||
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
:root .minimap-header,
|
||||
@@ -1862,6 +1872,7 @@
|
||||
|
||||
/* Mobile Responsive Adjustments */
|
||||
@media (max-width: 1024px) {
|
||||
|
||||
:root .edit-container,
|
||||
.wplace-theme-classic .edit-container {
|
||||
width: 100vw;
|
||||
@@ -1872,31 +1883,31 @@
|
||||
left: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-nav-controls,
|
||||
.wplace-theme-classic .edit-nav-controls {
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-main-area,
|
||||
.wplace-theme-classic .edit-main-area {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-toolbar,
|
||||
.wplace-theme-classic .edit-toolbar {
|
||||
width: 60px;
|
||||
min-width: 60px;
|
||||
}
|
||||
|
||||
|
||||
:root .minimap-container,
|
||||
.wplace-theme-classic .minimap-container {
|
||||
top: 80px;
|
||||
right: 8px;
|
||||
transform: scale(0.8);
|
||||
}
|
||||
|
||||
|
||||
:root .zoom-controls,
|
||||
.wplace-theme-classic .zoom-controls {
|
||||
flex-wrap: wrap;
|
||||
@@ -1905,6 +1916,7 @@
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
|
||||
:root .edit-header,
|
||||
.wplace-theme-classic .edit-header {
|
||||
padding: 8px 12px;
|
||||
@@ -1912,28 +1924,28 @@
|
||||
gap: 8px;
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-main-area,
|
||||
.wplace-theme-classic .edit-main-area {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-toolbar,
|
||||
.wplace-theme-classic .edit-toolbar {
|
||||
width: 50px;
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
|
||||
:root .zoom-controls,
|
||||
.wplace-theme-classic .zoom-controls {
|
||||
scale: 0.9;
|
||||
}
|
||||
|
||||
|
||||
:root .minimap-container,
|
||||
.wplace-theme-classic .minimap-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-color-grid .color-btn,
|
||||
.wplace-theme-classic .edit-color-grid .color-btn {
|
||||
width: 16px;
|
||||
@@ -1943,19 +1955,20 @@
|
||||
|
||||
/* Touch Device Optimizations */
|
||||
@media (hover: none) and (pointer: coarse) {
|
||||
|
||||
:root .zoom-btn,
|
||||
.wplace-theme-classic .zoom-btn {
|
||||
min-width: 44px;
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-tool,
|
||||
.wplace-theme-classic .edit-tool {
|
||||
min-width: 44px;
|
||||
min-height: 44px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
|
||||
:root .edit-color-btn,
|
||||
.wplace-theme-classic .edit-color-btn {
|
||||
width: 32px;
|
||||
@@ -1965,13 +1978,14 @@
|
||||
|
||||
/* High DPI Display Support */
|
||||
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
|
||||
|
||||
:root .edit-canvas,
|
||||
.wplace-theme-classic .edit-canvas {
|
||||
image-rendering: pixelated;
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: crisp-edges;
|
||||
}
|
||||
|
||||
|
||||
:root .minimap-canvas,
|
||||
.wplace-theme-classic .minimap-canvas {
|
||||
image-rendering: pixelated;
|
||||
@@ -1999,5 +2013,4 @@
|
||||
:root .zoom-btn:active,
|
||||
.wplace-theme-classic .zoom-btn:active {
|
||||
transform: translateY(1px) scale(0.95);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user