Lo logré mis loritos lindos, tienen que poner este código en Settings > JS
Luego se usa ! + Xd (X es la cantidad de dados) + Y (Y es la cantidad de caras)
[Dados 3d12: 3 + 1 + 9 = 13]
[code] document.addEventListener('click', function(e) {
// Detecta si el elemento clickeado es un botón de responder (ya sea de Dollchan o del foro)
const target = e.target;
const isPostButton = target.id === 'formButton' ||
target.value === 'Reply' ||
target.value === 'Post' ||
target.classList.contains('qr-submit') ||
target.textContent.toLowerCase().includes('post') ||
target.textContent.toLowerCase().includes('reply');
if (isPostButton) {
// Localiza el cuadro de texto activo en la página
const textareas = document.querySelectorAll('textarea');
// Regex para buscar patrones como [Dados 2d6: 6 + 3 = 9], [Dado 1d20: 11], [Dados 3d14: 14 + 3 + 2 = 19], etc. (insensible a mayúsculas/minúsculas)
const regex = /!(\d+)d(\d+)/gi;
textareas.forEach(textarea => {
if (regex.test(textarea.value)) {
// Reiniciamos el índice de la regex por seguridad
regex.lastIndex = 0;
// Reemplazamos todas las ocurrencias que aparezcan en el texto
textarea.value = textarea.value.replace(regex, (match, cantidadStr, carasStr) => {
const cantidad = parseInt(cantidadStr, 10);
const caras = parseInt(carasStr, 10);
// Validación básica para evitar valores absurdos o vacíos
if (cantidad <= 0 || caras <= 0) return match;
let tiradas = [];
let total = 0;
for (let i = 0; i < cantidad; i++) {
const tirada = Math.floor(Math.random() * caras) + 1;
tiradas.push(tirada);
total += tirada;
}
// Si se lanza 1 solo dado, podemos omitir la suma y mostrar solo el resultado directo,
// o mantener el formato detallado. Aquí se muestra detallado si hay varios, o directo si es 1.
if (cantidad === 1) {
return `[Dado ${cantidad}d${caras}: ${tiradas[0]}]`;
} else {
return `[Dados ${cantidad}d${caras}: ${tiradas.join(' + ')} = ${total}]`;
}
});
// Fuerza a Dollchan y al DOM a leer el nuevo texto modificado
textarea.dispatchEvent(new Event('input', { bubbles: true }));
textarea.dispatchEvent(new Event('change', { bubbles: true }));
}
});
}
}, true);