// ==UserScript== // @name Locale Money Manager // @namespace Violentmonkey Scripts // @match https://*.popmundo.com/World/Popmundo.aspx/Company/LocaleMoneyTransfer* // @grant none // @version 1.0 // @author drinkwater // @description A tool to manage money transfers between a company and its locales in Popmundo. // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Aguarda o carregamento completo da página jQuery(document).ready(function() { // Variável global para armazenar os fundos disponíveis let availableFunds = 0; // Extrai os fundos disponíveis da div principal const fundsText = jQuery("#ppm-content p:nth-of-type(2) strong").text(); if (fundsText) { availableFunds = parseFloat(fundsText.replace(/[^\d,]/g, '').replace(',', '.')); console.log("Fundos disponíveis:", availableFunds); } // Seleciona o elemento `tablelocales` const tableLocales = jQuery("#tablelocales"); // Verifica se o elemento existe if (tableLocales.length) { // Cria a nova div com a classe `box` const newDiv = jQuery("
").addClass("box"); // Adiciona a imagem no topo da nova div // Adiciona o h2 dentro da nova div const newH2 = jQuery("

").text("Locale Money Manager"); newDiv.append(newH2); const imageElement = jQuery("

").css("text-align", "center").html('Logo'); newDiv.append(imageElement); // Adiciona o parágrafo explicativo com melhorias const hintParagraph = jQuery("

") .html("Instruções: Utilize este campo para transferir dinheiro entre sua companhia e os locais controlados por ela.
" + "Digite um valor positivo para transferir dinheiro da companhia para os locais.
" + "Digite um valor negativo para transferir dinheiro dos locais para a companhia.
" + "Clique no botão Preencher para aplicar o valor a todos os locais listados abaixo.
" + "Caso o checkbox esteja marcado, o script ajustará automaticamente o valor máximo possível para os locais sem saldo suficiente."); newDiv.append(hintParagraph); // Adiciona o input number dentro da nova div com um atributo customizado const inputNumber = jQuery("") .attr("type", "number") .attr("min", "0") .attr("placeholder", "Digite um valor inteiro") .attr("class", "round width100px") .attr("data-custom-input", "true"); // Atributo para diferenciá-lo newDiv.append(inputNumber); // Adiciona o botão de submit dentro da nova div const inputSubmit = jQuery("") .attr("type", "button") // Altera para "button" para evitar envio de formulário .attr("value", "Preencher") .on("click", function(event) { event.preventDefault(); const inputValue = parseFloat(inputNumber.val()) || 0; // Validação de fundos totais if (inputValue > 0 && availableFunds < inputValue * localeData.length) { alert("Saldo insuficiente na companhia para esta operação."); return; } // Validação de fundos individuais if (inputValue < 0 && !jQuery("#removePartial").is(":checked")) { const insufficientLocales = localeData.filter(locale => locale.moneyAvailable + inputValue < 0); if (insufficientLocales.length > 0) { alert("Os seguintes locais não possuem caixa suficiente para essa operação:\n" + insufficientLocales.map(locale => locale.localeName).join("\n")); return; } } // Preenche os valores nos inputs correspondentes localeData.forEach(locale => { if (jQuery("#removePartial").is(":checked") && inputValue < 0) { const valueToFill = Math.min(Math.abs(inputValue), locale.moneyAvailable); jQuery(`#${locale.inputId}`).val(-valueToFill); } else { jQuery(`#${locale.inputId}`).val(inputValue); } }); inputNumber.val(0); }); newDiv.append(inputSubmit); // Adiciona o checkbox com texto explicativo const checkboxDiv = jQuery("

"); const inputCheckbox = jQuery("") .attr("type", "checkbox") .attr("id", "removePartial"); const checkboxLabel = jQuery("