Show total and stats of kills

blabla

目前为 2017-10-20 提交的版本。查看 最新版本

// ==UserScript==
// @name         Show total and stats of kills
// @version      0.1
// @description  blabla
// @author       A Meaty Alt
// @include      /index\.php\?page=54&ID=/
// @grant        none
// @namespace https://greasyfork.org/users/150647
// ==/UserScript==

(function() {
    'use strict';
    var killsTable = document.getElementsByClassName("sample")[0];
    var killsTbody = killsTable.firstElementChild;
    var killsData = killsTbody.children;
    var totalKills = 0;
    for(var i=1; i<killsData.length; i++){
        totalKills += parseInt(killsData[i].children[1].textContent);
    }
    var totalKillsRow = document.createElement("tr");
    totalKillsRow.classList.add("dont-count");
    var title = document.createElement("td");
    title.innerHTML = "<b>Total kills:</b> ";
    var value = document.createElement("td");
    value.innerHTML = "<b>"+totalKills+"</b>";
    totalKillsRow.appendChild(title);
    totalKillsRow.appendChild(value);
    killsTbody.appendChild(totalKillsRow);

    createStatsButton();
    function createStatsButton(){
        var button = document.createElement("input");
        button.type = "button";
        button.value = "Show kills from each clan";
        button.addEventListener("click", showStats);
        killsTable.parentElement.appendChild(button);
        function showStats(){
            button.disabled = true;
            loadClanKills()
            .then((clanKills) => {
                for(var clan in clanKills){
                    var clanKillsRow = document.createElement("tr");
                    clanKillsRow.classList.add("dont-count");
                    var title = document.createElement("td");
                    var clanName = clan? clan : "Clanless";
                    title.innerHTML = "<b>"+clanName+"</b> kills: ";
                    var value = document.createElement("td");
                    value.innerHTML = "<b>"+clanKills[clan]+"/"+totalKills+"</b>";
                    clanKillsRow.appendChild(title);
                    clanKillsRow.appendChild(value);
                    killsTbody.appendChild(clanKillsRow);
                }
            });
            function loadClanKills(){
                return new Promise((resolve) => {
                    var killsData = document.getElementsByClassName("sample")[0].firstElementChild.children;
                    var clanKills = {};
                    var auxI = 1;
                    for(var i=1; i<killsData.length; i++){
                        if(killsData[i].classList.contains("dont-count")) continue;
                        var userId = killsData[i].children[0].firstElementChild.href.match(/u=(.*)/)[1]; //yes, it's ugly. Deal with it
                        getClan(userId)
                            .then((clan) => {
                            var kills = parseInt(killsData[auxI++].children[1].textContent);
                            if(clanKills[clan]){
                                clanKills[clan] += kills;
                            }
                            else
                                clanKills[clan] = kills;
                        });
                    }
                    setTimeout(() => {
                        resolve(clanKills);
                    }, 10000);
                });
            }
        }
        function getClan(userId){
            return new Promise((resolve) => {
                $.post("https://fairview.deadfrontier.com/onlinezombiemmo/get_values.php",
                       "userID="+userId,
                       (response) => {
                    resolve(response.match(/df_clan_name=(.*?)&/)[1].trim());
                });
            });
        }
    }
})();