koc chatv2

tester

Version vom 18.05.2025. Aktuellste Version

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.ip-ddns.com/scripts/534027/1591171/koc%20chatv2.js

Tabs.TabDemo = {
    tabOrder: 8001,
    tabLabel: 'Truce/AP Monitor',
    tabColor: 'blue',
    myDiv: null,
    Options: {
        Counter: 0,
    },
    targets: [],

    init: function(div) {
        var t = Tabs.TabDemo;
        t.myDiv = div;

        if (!Options.TabDemo) {
            Options.TabDemo = t.Options;
        } else {
            for (var y in t.Options) {
                if (!Options.TabDemo.hasOwnProperty(y)) {
                    Options.TabDemo[y] = t.Options[y];
                }
            }
        }
    },

    hide: function() {
        var t = Tabs.TabDemo;
    },

    show: function() {
        var t = Tabs.TabDemo;
        t.loadTargets();
        t.displayTargetList();
    },

    paint: function() {
        var m = `
            <div class="divHeader" align="center">Truce/AP Monitor</div>
            <br>
            <div align="center">
                <label for="targetInput">Player Name/UID:</label>
                <input type="text" id="targetInput" class="btInput">
                <button id="addTargetButton" class="buttonv2 std blue">Add Target</button>
                <br><br>
                <div id="targetList"></div> <br>
                <div id="truceMonitorStatus"></div>
            </div>
        `;

        this.myDiv.innerHTML = m;

        // Event listeners
        var self = this;
        $("#addTargetButton").click(function() {
            self.addTarget();
        });
    },

    addTarget: function() {
        var targetInput = $("#targetInput").val().trim();
        if (targetInput === "") {
            return;
        }

        var self = this;
        getPlayerInfo(targetInput)
            .then(function(player) {
                if (player) {
                    self.targets.push(player);
                    self.saveTargets();
                    self.displayTargetList();
                    self.updateStatus(tx("Target added."));
                } else {
                    self.updateStatus(tx("Player not found."));
                }
            })
            .catch(function(error) {
                self.updateStatus(tx("Error adding target: ") + error.message);
            });

        $("#targetInput").val(""); // Clear input field
    },

    displayTargetList: function() {
        var targetList = $("#targetList");
        targetList.empty();

        if (this.targets.length === 0) {
            targetList.append("<p>No targets are currently being monitored.</p>");
            return;
        }

        var html = "<ul>";
        this.targets.forEach(function(target) {
            html += `<li>${target.name} (${target.uid})</li>`;
        });
        html += "</ul>";
        targetList.html(html);
    },

    checkTrucesAndAP: function() {
        var self = this;
        this.targets.forEach(function(target) {
            var truceEnds = getTruceEndTime(target);
            var apEnds = getAPEndTime(target);

            if (truceEnds) {
                self.displayTruceInfo(target, truceEnds);
            }

            if (apEnds) {
                self.displayAPInfo(target, apEnds);
            }
        });
    },

    displayTruceInfo: function(target, endTime) {
        var timeLeft = endTime - unixTime();
        if (timeLeft <= 0) {
            this.notifyTruceEnded(target);
        } else {
            var hours = Math.floor(timeLeft / 3600);
            var minutes = Math.floor((timeLeft % 3600) / 60);
            $("#targetList").append(
                `<p>${target.name}'s truce ends in ${hours}h ${minutes}m</p>`
            );
        }
    },

    displayAPInfo: function(target, endTime) {
        var timeLeft = endTime - unixTime();
        if (timeLeft <= 0) {
            this.notifyAPEnded(target);
        } else {
            var hours = Math.floor(timeLeft / 3600);
            var minutes = Math.floor((timeLeft % 3600) / 60);
            $("#targetList").append(
                `<p>${target.name}'s AP ends in ${hours}h ${minutes}m</p>`
            );
        }
    },

    notifyTruceEnded: function(target) {
        this.updateStatus("Target " + target.name + "'s truce has ended!");
        this.playNotificationSound();
    },

    notifyAPEnded: function(target) {
        this.updateStatus("Target " + target.name + "'s AP has ended!");
        this.playNotificationSound();
    },

    updateStatus: function(message) {
        $("#truceMonitorStatus").html(message);
    },

    saveTargets: function() {
        GM_setValue("truceTargets", JSON.stringify(this.targets));
    },

    loadTargets: function() {
        var savedTargets = GM_getValue("truceTargets", "[]");
        this.targets = JSON.parse(savedTargets);
    },

    playNotificationSound: function() {
        var audio = new Audio("/sounds/notification.mp3");
        audio.play();
    },

    hide: function() {
        // Clear interval when hiding
        if (this.checkInterval) {
            clearInterval(this.checkInterval);
        }
    },

    EverySecond: function() {
        this.checkTrucesAndAP();
    }
};