koc chatv2

tester

Tính đến 18-05-2025. Xem phiên bản mới nhất.

Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta // @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();
    }
};