Autodarts - Show thrown darts each leg in stats

Zeigt die Statistik besser an.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Autodarts - Show thrown darts each leg in stats
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  Zeigt die Statistik besser an.
// @author       benebelter
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
// @match        https://play.autodarts.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=autodarts.io
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM_xmlhttpRequest
// @license      MIT
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';
    var players_highscores = new Array();
    var legsoverview  = new Array();
    let table_head = '';
    let table_rows = '';
    var shortlegs = new Array();
    var players = new Array();
    var several_highscores = new Array();
    var interval = setInterval(function() {


        if( $(".ad-ext-player-name").length != 0
           && window.location.href.indexOf("/history/matches/") != -1 ) {


            if(   $('#dartsthrows').length == 0) {
                var gameid =  location.pathname.split("/")[3] ;

                fetch('https://api.autodarts.io/as/v0/matches/'+gameid+'/stats', {
                    credentials: 'include',
                    method: 'GET'
                })
                    .then(function(response) { return response.json(); })
                    .then(function(json) {
                    let count_players = json['players'].length;
                    for (let i = 0; i < json['games'].length; i++){

                        if(i == 0) {// collect players
                            for (let p = 0; p < json['players'].length; p++) {

                                players.push  ({'id':p , 'name': json['players'][p]['name'] , 'playerid': json['players'][p]['id'] });
                                console.log('player pushed #'+ p +' = '+ json['players'][p]['name'] );
                                players_highscores[p] = [];
                                players_highscores[p]['PlayerGameId'] = p;
                                players_highscores[p]['playerId'] = json['players'][p]['id'];
                                players_highscores[p]['name'] = json['players'][p]['name'];
                                players_highscores[p]['60'] = 0;
                                players_highscores[p]['90'] = 0;
                                players_highscores[p]['100'] = 0;
                                players_highscores[p]['130'] = 0;
                                players_highscores[p]['170'] = 0;
                                players_highscores[p]['180'] = 0;
                                var tdDartsThrown = tdDartsThrown + '<td class="css-1fq7vy1" id="td_player_'+p+'"></td>';
                                var td90sThrown   = td90sThrown   + '<td class="css-1fq7vy1" id="td_player90s_'+p+'"></td>';
                                var td130sThrown  = td130sThrown  + '<td class="css-1fq7vy1" id="td_player130s_'+p+'"></td>';
                            }
                            // Get +90 and 130+ stats
                            json['games'].forEach((game) => {
                                game['turns'].forEach((turn) => {
                                    if(turn['points'] >= 60) {
                                        const thisplayerId = players_highscores.findIndex((item) => item.playerId === turn['playerId']);

                                        switch (true) {
                                            case (turn['points'] == 180):
                                                players_highscores[thisplayerId]['180'] ++;
                                                break;
                                            case (turn['points'] >=170):
                                                players_highscores[thisplayerId]['170'] ++;
                                                break;
                                            case (turn['points'] >=130):
                                                players_highscores[thisplayerId]['130'] ++;
                                                break;
                                            case (turn['points'] >=90):
                                                players_highscores[thisplayerId]['90'] ++;
                                                break;
                                            case (turn['points'] >=60):
                                                players_highscores[thisplayerId]['60'] ++;
                                                break;
                                        }
                                    }
                                });

                            });

                            // find html & add row to page
                            let appendDartsThrown = '<tr class="css-0" id="dartsthrows"><td class="css-1vmvwla">Darts legs won</td>'+tdDartsThrown+'</tr>';
                            let append90sThrown   = '<tr class="css-0" id="dartsthrows"><td class="css-1vmvwla">90+</td>'+td90sThrown+'</tr>';
                            let append130sThrown  = '<tr class="css-0" id="dartsthrows"><td class="css-1vmvwla">130+</td>'+td130sThrown+'</tr>';

                            if($('#dartsthrows').length == 0) {
                                $('.chakra-table > thead ').after(appendDartsThrown);

                                $('tr:has(td:contains("100+"))').hide();
                                $('tr:has(td:contains("140+"))').hide();
                                $('tr:has(td:contains("60+"))').after(append90sThrown);
                                $('tr:has(td:contains("100+"))').after(append130sThrown);
                            }

                        }

                        var winner = players.find(item => item.playerid === json['games'][i]['winnerPlayerId']);
                        var winner_name = winner['name'];
                        var winner_id = winner['id'];

                        //darts throwns
                        // welcher Spieler ist der Winner im aktuellen Leg gewesen?
                        let winnerindex = json['legStats'][i]['playerIndices'].indexOf(winner_id);
                        let dartsthrown = json['legStats'][i]['stats'][winnerindex]['dartsThrown'];

                        // Restscore other players this leg
                        for (let p = 0; p < json['players'].length; p++) {
                            var name = players.find(item => item.id === p);
                            table_rows += '<tr><td>'+name['name']+'</td>';
                            for (let i = 0; i < json['games'].length; i++){
                                table_rows += '<td>15d</td>';}
                            table_rows += '</tr>';

                            if( p == winnerindex) {var iswinner = 1;} else {var iswinner = 0;}
                            legsoverview.push  ( {'leg':i , 'playerid':p ,
                                                  'leftscore': json['games'][i]['scores'][p],
                                                  'iswinner': iswinner ,
                                                  'dartstrown':json['legStats'][i]['stats'][p]['dartsThrown']
                                                 } );
                        }
                        //build table
                        table_head = '<table><tr class=""><th class="" style="min-width: 40px; border-bottom: 1px solid #c0c0c0; border-right: 1px solid #c0c0c0;  ">Leg</th>';
                        for (let i = 0; i < json['games'].length; i++){
                            table_head += '<th class="text-center" style="min-width: 40px; border-bottom: 1px solid #c0c0c0; border-right: 1px solid #c0c0c0;  ">'+(i+1)+'</th>';
                        }

                        table_head += table_rows+'</tr></table>';

                        $('#td_player_'+winner_id).append('<span style="white-space:nowrap; background-color: #4162a1; color: white; border-radius: 10% / 50%; padding: 2px 5px 2px 5px; margin-left: 2px;">'+dartsthrown+'</span>');
                    }

                    // Display new scores
                    $("tr td:contains('130+')").each(function(){
                        for (let i = 0; i < count_players; i++) {
                            $(this).closest('td').nextAll().eq(i).text(players_highscores[i][130]);
                            $(this).closest('td').nextAll().eq(i).css("background", "var(--chakra-colors-table-background-odd)");
                            $(this).css("background", "var(--chakra-colors-table-background-odd)");
                        }
                    });

                    $("tr td:contains('90+')").each(function(){
                        for (let i = 0; i < count_players; i++) {
                            $(this).closest('td').nextAll().eq(i).text(players_highscores[i][90]);
                        }
                    });


                    $("tr td:contains('60+')").each(function(){
                        for (let i = 0; i < count_players; i++) {
                            $(this).closest('td').nextAll().eq(i).text(players_highscores[i][60]);
                        }
                    });

                    $("tr:nth-of-type(2n+1)").eq(7).css("background", "rgba(255, 255, 225, 0.0) "); // change background of 100+
                    //end stats

                }); // end-then



            } // end if $("#dartsthrows").length
        } // end if $(".ad-ext-player-name").length != 0

        $( ".chakra-button:contains('Leg')" ).on("click", function() {
            $( "#dartsthrows").hide();
            $('tr:has(td:contains("90+"))').hide();
            $('tr:has(td:contains("130+"))').hide();
            $('tr:has(td:contains("100+"))').show();
            $('tr:has(td:contains("140+"))').show();
        })
        $( ".chakra-button:contains('Match')" ).on("click", function() {
            $( "#dartsthrows").show();
            $('tr:has(td:contains("90+"))').show();
            $('tr:has(td:contains("130+"))').show();
            $('tr:has(td:contains("100+"))').hide();
            $('tr:has(td:contains("140+"))').hide();
        })
    }, 2000)

    })();