Bobber / OGame Splitt-Tab

// ==UserScript==
// @name         OGame Splitt-Tab
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Fügt einen Splitt-Tab zu OGame hinzu, um Schiffe und Ressourcen zu teilen und zu senden.
// @license	 MIT
// @author       Bobber
// @match        https://*.gameforge.com/game/index.php?page=ingame&component=fleetdispatch*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function addSplittTab() {
        // Finde das Panel, in das der neue Tab eingefügt werden soll
        let panel = document.querySelector('#ago_panel');

        // Füge den neuen Tab "Splitt" hinzu
        let newTab = document.createElement('div');
        newTab.id = 'ago_panel_Splitt';
        newTab.className = 'ago_panel_tab';
        newTab.setAttribute('ago-data', '{"update":{"tab":"Splitt","status":"toggle"}}');
        newTab.innerHTML = 'Splitt<span class="ago_panel_tab_info"></span>';

        // Finde die Position für den neuen Tab und füge ihn ein
        let toolsTab = document.querySelector('#ago_panel_Tools');
        toolsTab.parentNode.insertBefore(newTab, toolsTab.nextSibling);

        // Erstelle das Splitt-Menü und füge es direkt unter dem Tab ein
        let splittMenu = document.createElement('div');
        splittMenu.id = 'ago_panel_Splitt_Content';
        splittMenu.className = 'ago_panel_tab_content';
        splittMenu.style.display = 'none';
        splittMenu.innerHTML = `
            <div id="split_panel_content" style="background: rgb(17, 16, 23); padding: 10px;">
                <div>
                    <div style="width: calc(100% - 4px); padding: 0 2px; float: left;">Split Anzahl:</div>
                    <div style="clear: left;"></div>
                </div>
                <div>
                    <div style="width: calc(100% - 4px); padding: 0 2px; float: left;">
                        <input type="number" id="splitNumber" min="1" step="1" style="width: 100%; margin-top: 3px; text-align: center; font-weight: bold; height: 24px; box-sizing: border-box;">
                    </div>
                    <div style="clear: left;"></div>
                </div>
                <div style="background: #111017; margin: 10px 0;">
                    <input id="splitButton" type="button" value="Split" style="cursor: pointer; width: 100%; background: #3b4858; color: #c8c8c8; height: 24px; background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0,rgba(0, 0, 0, 0.1)),color-stop(1,rgba(255, 255, 255, 0.1)));">
                </div>
            </div>
        `;
        newTab.insertAdjacentElement('afterend', splittMenu);

        // Zeige das Splitt-Menü, wenn auf den neuen Tab geklickt wird
        newTab.addEventListener('click', function() {
            // Alle anderen Menüs ausblenden
            document.querySelectorAll('.ago_panel_tab_content').forEach(function(content) {
                if (content !== splittMenu) {
                    content.style.display = 'none';
                }
            });
            // Das Splitt-Menü ein- und ausblenden
            splittMenu.style.display = splittMenu.style.display === 'none' ? 'block' : 'none';
        });

        // Füge die Funktionalität zum Split-Button hinzu
        document.getElementById('splitButton').addEventListener('click', function() {
            let splitNumber = parseInt(document.getElementById('splitNumber').value);
            if (splitNumber > 0) {
                // Hier wird die Logik zum Teilen der Schiffanzahl und Ressourcen eingefügt
                splitFleetAndResources(splitNumber);
            }
        });
    }

    // Funktion zur robusteren Simulation der Eingabe
    function setInputValue(element, value) {
        element.value = value;
        const events = ['input', 'change', 'blur'];
        events.forEach(eventType => {
            const event = new Event(eventType, { bubbles: true });
            element.dispatchEvent(event);
        });
    }

    // Beispielhafte Funktion, um die Flotte und Ressourcen zu teilen
    function splitFleetAndResources(splitNumber) {
        // Finde und teile die Ressourcen
        let metalElement = document.getElementById('ago_calc_available_metal');
        let crystalElement = document.getElementById('ago_calc_available_crystal');
        let deuteriumElement = document.getElementById('ago_calc_available_deuterium');

        let metal = parseInt(metalElement.textContent.replace(/\./g, '')) || 0;
        let crystal = parseInt(crystalElement.textContent.replace(/\./g, '')) || 0;
        let deuterium = parseInt(deuteriumElement.textContent.replace(/\./g, '')) || 0;

        let metalField = document.getElementById('ago_calc_resource_metal');
        let crystalField = document.getElementById('ago_calc_resource_crystal');
        let deuteriumField = document.getElementById('ago_calc_resource_deuterium');

        setInputValue(metalField, Math.floor(metal / splitNumber));
        setInputValue(crystalField, Math.floor(crystal / splitNumber));
        setInputValue(deuteriumField, Math.floor(deuterium / splitNumber));

        // Finde alle Schiff-Textfelder
        let shipFields = document.querySelectorAll('#shipsChosen input[type="text"]');

        shipFields.forEach(function(field) {
            if (!field.disabled) {
                let shipCount = parseInt(field.previousElementSibling.querySelector('.amount').getAttribute('data-value')) || 0; // Entfernt eventuelle Punkte und konvertiert in Zahl
                let newCount = Math.floor(shipCount / splitNumber); // Teilt die Schiffszahl durch die Split-Anzahl
                setInputValue(field, newCount); // Setzt das neue Ergebnis und löst Ereignisse aus
            }
        });
    }

    // Warte, bis das Dokument vollständig geladen ist
    window.addEventListener('load', function() {
        // Füge den neuen Tab hinzu
        addSplittTab();
    });
})();