Subir imagen como skin y aplicar borde blanco o negro según el color elegido (1 o 2)
// ==UserScript==
// @name Agar.io Skin con Borde Personalizado
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Subir imagen como skin y aplicar borde blanco o negro según el color elegido (1 o 2)
// @author ChatGPT Adaptado para José Andre
// @match *://agar.io/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
// Esperar a que cargue el DOM
const checkDOM = setInterval(() => {
const parent = document.querySelector('.form-group.clearfix');
const colorSelector = document.querySelector('#color');
const saveButton = document.querySelector('button[data-itr="save"]');
if (parent && colorSelector && saveButton) {
clearInterval(checkDOM);
// Crear botón para subir imagen
const input = document.createElement('input');
input.type = 'file';
input.accept = 'image/*';
input.style.marginLeft = '10px';
input.id = 'customSkinUpload';
// Insertar botón al lado del de 'Save'
saveButton.parentNode.insertBefore(input, saveButton.nextSibling);
// Crear lienzo temporal para aplicar borde
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = 512;
canvas.height = 512;
input.addEventListener('change', (event) => {
const file = event.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.onload = () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Dibujar imagen circular
ctx.save();
ctx.beginPath();
ctx.arc(256, 256, 230, 0, Math.PI * 2);
ctx.closePath();
ctx.clip();
ctx.drawImage(img, 0, 0, 512, 512);
ctx.restore();
// Detectar color elegido: 1 -> blanco, 2 -> negro
const colorValue = parseInt(colorSelector.value);
if (colorValue === 1) {
ctx.strokeStyle = 'white';
} else if (colorValue === 2) {
ctx.strokeStyle = 'black';
} else {
ctx.strokeStyle = 'transparent';
}
ctx.lineWidth = 16;
ctx.beginPath();
ctx.arc(256, 256, 230, 0, Math.PI * 2);
ctx.stroke();
// Convertir a dataURL
const finalImage = canvas.toDataURL('image/png');
// Asignar la imagen a la skin
localStorage.setItem('customSkinDataURL', finalImage);
// Mostrar en el círculo visual
const skinPreview = document.querySelector('.circle.bordered');
if (skinPreview) skinPreview.src = finalImage;
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
});
}
}, 500);
})();