Greasy Fork

Greasy Fork is available in English.

沙琪玛定制ATERNOS

""

当前为 2022-09-06 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         沙琪玛定制ATERNOS
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  ""
// @author       沙琪玛
// @match        https://aternos.org/sqm/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=aternos.org
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

(function() {
    //前置
    document.querySelector("body").style.backgroundColor = "#272727"
    function randomString(length) {
        return Array(length + 1).join((Math.random().toString(36) + '00000000000000000').slice(2, 18)).slice(0, length);
    }
    function generateAjaxToken(url) {
        var key = randomString(16);
        var value = randomString(16);

        document.cookie = "ATERNOS_SEC_" + key + "=" + value + ";path=" + url;

        return key + ":" + value;
    }
    function buildURL(url, data) {
        data.SEC = generateAjaxToken(url);
        data.TOKEN = "ERaCGmQXEJWYgawaXlvd";
        return url + "?" + $.param(data);
    }

    function aget(url, data, callback) {
        if (callback === undefined) {
            callback = data;
            data = {};
        }

        $.ajax({
            type: "get",
            url: buildURL(url, data),
            success: callback
        });
    }

    function apost(url, data, callback) {
        $.ajax({
            type: "post",
            data: data,
            url: buildURL(url, {}),
            success: callback
        });
    }


    var SQMDEBUG = false

    //自动开服状态
    var autoStartBool = GM_getValue("autoStartBoolGM")
    //自动开服循环
    var autoStartInterval = null

    function autoStartUpdate() {
        if (autoStartBool) {
            //获取伺服器信息
            aget('/panel/ajax/status.php', function (data) {
                var serverStatus = JSON.parse(data)

                //如果为离线状态就自动启动(headstart态)
                if (serverStatus.class == 'offline') {
                    apost('/panel/ajax/start.php', {'headstart': 1, 'access-credits': 1})
                }

                //无人只剩十秒倒计时时自动重启伺服器(重启比关闭后开启的开机速度快)
                if (serverStatus.class == 'online' && serverStatus.countdown != null && serverStatus.countdown < 10) {
                    apost('/panel/ajax/restart.php')
                }

                if (SQMDEBUG) {
                    out("      状态:" + serverStatus.class + " 倒计时:" + serverStatus.countdown)
                    out("      离线:" + (serverStatus.class == 'offline') + " 十秒倒计时:" + (serverStatus.class == 'online' && serverStatus.countdown != null && serverStatus.countdown <= 10))
                    if (serverStatus.players > 0) out("      玩家人数:" + serverStatus.players + " 玩家列表" + serverStatus.playerlist)
                    out("")
                }
            })
        }
        aget('/panel/ajax/status.php', function (data) {var serverStatus = JSON.parse(data); document.querySelector("div.title-label").textContent = "SQM定制控制台 — " + serverStatus.label + ((serverStatus.class == 'online')? "(" + ((serverStatus.players > 0)? serverStatus.players + " / " + serverStatus.slots: serverStatus.countdown + "秒") + ")": "")})

    }

    //自初始化动开服按钮
    document.querySelector("div.title-buttons > a").remove()
    let autoStartBtn = document.createElement('a');
    autoStartBtn.id = "autoStart"
    autoStartBtn.className = 'close';
    autoStartBtn.style.backgroundColor = (autoStartBool)? "#1FD78D": ""
    document.querySelector("div.title-buttons").appendChild(autoStartBtn)
    $("#autoStart").append('<i class="fas fa-sync-alt" id="autoStartBtnIcon"></i>')
    document.querySelector("#autoStartBtnIcon").style.color = (autoStartBool)? "#FFFFFF": ""

    //自动开服按钮点击事件
    autoStartBtn.onclick = function() {
        //自动开服状态切换
        GM_setValue("autoStartBoolGM", !GM_getValue("autoStartBoolGM"))
        autoStartBool = GM_getValue("autoStartBoolGM")

        //自动开服按钮Style切换
        autoStartBtn.style.backgroundColor = (autoStartBool)? "#1FD78D": ""
        document.querySelector("#autoStartBtnIcon").style.color = (autoStartBool)? "#FFFFFF": ""

        if (SQMDEBUG) out("自动启动:" + autoStartBool + "\n ")
    }

    //劫持输入栏
    var sqmInput = document.querySelector("#in")
    sqmInput.id = "sqmInput"
    /*
    append = function(raw, delay) {
        if(delay === undefined) {
            delay = 0;
        }
        setTimeout(function(){
            $('#out').append(raw + "<br />");
        }, delay);
    }
*/

    //输入栏回车事件
    sqmInput.onkeyup = function(key){
        if(key.keyCode == 13) {
            var commando = sqmInput.value
            switch (commando) {
                case "start":
                    aget('/panel/ajax/start.php', {'headstart': 1, 'access-credits': 1}, function(data) {out("started")})
                break
                case "stop":
                    aget('/panel/ajax/stop.php', function(data) {out("stoped")})
                break
                case "restart":
                    aget('/panel/ajax/stop.php', function(data) {out("restarted")})
                break
                case "status":
                    aget('/panel/ajax/status.php', function(data) {out(JSON.stringify(JSON.parse(data)))})
                break
                case "player":
                    aget('/panel/ajax/status.php', function (data) {
                        var serverStatus = JSON.parse(data)
                        if (serverStatus.players > 0) {out("玩家人数:" + serverStatus.players + " 玩家列表:" + serverStatus.playerlist)} else {out("无玩家在线")}})
                break
                case "debug":
                    SQMDEBUG = !SQMDEBUG
                    out("DEBUG:" + SQMDEBUG)
                break
            }
            sqmInput.value = ""
        }
    }

    window.setInterval(autoStartUpdate, 500)
})();