Greasy Fork is available in English.

Autodarts - Rematch-Button

Rematch-Button on mainpage with the last 2-6 players

// ==UserScript==
// @name         Autodarts - Rematch-Button
// @namespace    http://tampermonkey.net/
// @version      0.50
// @description  Rematch-Button on mainpage with the last 2-6 players
// @author       benebelter
// @match        https://play.autodarts.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=autodarts.io
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
// @license      MIT
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM_xmlhttpRequest
// ==/UserScript==


(function() {
    'use strict';
    var data = '';
    const avcpuPPR = [0, 20, 30, 40, 50, 60 ,70 , 80 ,90 ,100, 110 ,120];
    function startgame(){
        $.ajax({
            url: 'https://api.autodarts.io/gs/v0/lobbies/'+location.pathname.split("/")[2]+'/start',
            data: data,
            type: 'POST',
            asynch: false,
            xhrFields: {
                withCredentials: true
            },
            success: function(start){

                GM.deleteValue("player1");
                GM.deleteValue("player2");
                GM.deleteValue("player3");
                GM.deleteValue("player4");
                GM.deleteValue("player5");
                GM.deleteValue("player6");

                for (let index = 0; index < start['players'].length; ++index) {
                    if(start['players'][index]['name'] != ''){
                        (async () => {
                            await GM.setValue("player"+(index+1), start['players'][index]['name'].toUpperCase()  );
                        })();

                    }
                }
            }
        })
    }


    function removeplayer(playerID) {
        fetch('https://api.autodarts.io/gs/v0/lobbies/'+location.pathname.split("/")[2]+'/players/by-index/'+playerID,  {
            method: 'DELETE',
            credentials: 'include',
        })
    }

    function addplayer(playername, boardID, avcpuPPR) {
        if(typeof playername !== "undefined"  ) {

            if(playername.substring(0,9) === 'BOT LEVEL') {
                var level = playername.substring(10);
                console.log('Level: '+ level);
                data = '{"name":"'+playername+'","cpuPPR":'+avcpuPPR[level]+'}'; }
            else {

                data ='{"name":"'+playername+'","boardId":"'+boardID+'"}';  }

            $.ajax({
                url: 'https://api.autodarts.io/gs/v0/lobbies/'+location.pathname.split("/")[2]+'/players',
                data: data,
                type: 'POST',
                contentType: "text/xml",
                dataType: "text",
                asynch: false,

                xhrFields: {
                    withCredentials: true
                },
                success: function(data) {   },
                error: function(e){}
            });


        }

    }


    $.urlParam = function(name){
        var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
        if (results==null){
            return null;
        }
        else{
            return results[1] || 0;
        }
    }


    var player1 = '';
    var player2 = '';
    var player3 = '';
    var player4 = '';
    var player5 = '';
    var player6 = '';
    var rematch = '';
    var player_clicked = 0;
    var gamemode = '';
    var startx01 = '';
    var variante = '';
    var firstto = '';
    var gameconditions = '';
    var account;
    const players = [];



    // Load last players
    (async () => {
        player1 = await GM.getValue('player1');
        player2 = await GM.getValue('player2');
        player3 = await GM.getValue('player3');
        player4 = await GM.getValue('player4');
        player5 = await GM.getValue('player5');
        player6 = await GM.getValue('player6');
        gamemode = await GM.getValue('gamemode');
        startx01 = await GM.getValue('startx01');
        variante = await GM.getValue('variante');
        firstto = await GM.getValue('firstto');

    })();


    setInterval(function() {

        // Lobby autostart
        if($('button:contains("Open Lobby")').length != 0 && $.urlParam('rematch') != null) {
            rematch = $.urlParam('rematch');
            $('button:contains("Off")').eq(0).click();
            $('button:contains("Private")').click();

            setTimeout(() => { $('button:contains("Open Lobby")').click(); }, 2000)

        }


        // add players and start game
        if( $('button:contains("Start game")').length != 0
           && player_clicked == 0 && rematch != 0) {
            const boardID = $('.css-1wq9qmd option:selected').val();

            setTimeout(function(){

                $('button:contains("Join")').addClass("account css-1e89954");
                $('.account').css('color', 'yellow') ;
                $('.account').text(account);

            }, 200);

            const delay = 500;
            setTimeout(function(){  startgame(); }, (delay*8));
            // Player 1 starts
            if(rematch == 1){
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player5, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player6, boardID,avcpuPPR); }, (delay*7));
            }
            if(rematch == 2){  // Player 2 starts
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player5, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player6, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*7));
            }
            if(rematch == 3){
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player5, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player6, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*7));
            }
            if(rematch == 4){
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*7));
            }
            if(rematch == 5){
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player5, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player6, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*7));
            }
            if(rematch == 6){
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player6, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player5, boardID,avcpuPPR); }, (delay*7));
            }

            player_clicked = 1;
        }

        // add Rematch-button to mainpage
        if(player1 !='' && player2 !=''
           && $('#rematch_button').length == 0
           && typeof(player1) !== "undefined"
           && player1 !== null
           && typeof(player2) !== "undefined"
           && player2 !== null) {
            if(gamemode == 'X01') { var gameconditions = startx01 + ' | ' +variante + ' | ' + firstto; }
            else if(gamemode == 'Count Up') {
                gameconditions = 'Count-Up'; gamemode='count-up';
            }
            else if(gamemode == 'Bull-off') {
                gameconditions = 'X01'; gamemode='X01';
            }
            else {
                var gameconditions = gamemode;
            }


            var mainmenu = '<div><div class="chakra-stack css-1aucrbz"><span style="font-size: 3em;">REMATCH</span><div class="chakra-button css-hbk3el" style="font-size: 1em; color: yellow; min-height: 50px; " >'+gameconditions+'</div><a class="chakra-button css-z1xk1r" id="rematch_button" href="/lobbies/new/'+gamemode+'?rematch=1" style="font-size: 1em; min-height: 50px; width: 500px; "><span style="font-size: 1.5em;">'+player1+'</span>&nbsp;&nbsp;to throw first</a><a class="chakra-button css-z1xk1r" id="rematch_button" href="/lobbies/new/'+gamemode+'?rematch=2" style="font-size: 1em; min-height: 50px; width: 500px; "><span style="font-size: 1.5em;">'+player2+'</span>&nbsp;&nbsp;to throw first</a>';

            // 3. Spieler?
            if( typeof(player3) !== "undefined" && player3 !== null){
                mainmenu += '<a class="chakra-button css-z1xk1r" id="rematch_button" href="/lobbies/new/'+gamemode+'?rematch=3" style="font-size: 1em; min-height: 50px; width: 500px; "> <span style="font-size: 1.5em;">'+player3+'</span>&nbsp;&nbsp;to throw first</a>';
            }
            // 4. Spieler?
            if( typeof(player4) !== "undefined" && player4 !== null){
                mainmenu += '<a class="chakra-button css-z1xk1r" id="rematch_button" href="/lobbies/new/'+gamemode+'?rematch=4" style="font-size: 1em; min-height: 50px; width: 500px; "> <span style="font-size: 1.5em;">'+player4+'</span>&nbsp;&nbsp;to throw first</a>';
            }
            // 5. Spieler?
            if( typeof(player5) !== "undefined" && player5 !== null){
                mainmenu += '<a class="chakra-button css-z1xk1r" id="rematch_button" href="/lobbies/new/'+gamemode+'?rematch=5" style="font-size: 1em; min-height: 50px; width: 500px; "> <span style="font-size: 1.5em;">'+player5+'</span>&nbsp;&nbsp;to throw first</a>';
            }
            // 6. Spieler?
            if( typeof(player6) !== "undefined" && player6 !== null){
                mainmenu += '<a class="chakra-button css-z1xk1r" id="rematch_button" href="/lobbies/new/'+gamemode+'?rematch=6" style="font-size: 1em; min-height: 50px; width: 500px; "> <span style="font-size: 1.5em;">'+player6+'</span>&nbsp;&nbsp;to throw first</a>';
            }

            // OLD $('.css-lw6pyq').first().prepend(mainmenu+'</div>');
            $('.css-1aucrbz').first().prepend(mainmenu+'</div>');

        }

        /// read player-names
        if( $('button:contains("Abort")').length != 0 ) { // only on own match-page

            // Save Gamemode:
            gamemode = $('#ad-ext-game-variant').text();
            startx01 = $('.css-bs3vp6').eq( 1 ).text();
            variante = $('.css-bs3vp6').eq( 2 ).text();
            firstto  = $('.css-bs3vp6').eq( 3 ).text();
            (async () => {
                await GM.setValue("gamemode" , gamemode );
                await GM.setValue("startx01" , startx01 );
                await GM.setValue("variante" , variante );
                await GM.setValue("firstto" , firstto );
            })();
            //console.log('gamemode '+gamemode);
            //console.log('startx01 '+startx01);
            //console.log('variante '+variante);
            //console.log('firstto '+firstto);
        }


        // Refresh Mainpage with new names
        console.log(window.location.href);
        if( window.location.href == 'https://play.autodarts.io/' || window.location.href == 'https://play.autodarts.io' ) {
            $( '#root' ).remove();
            location.replace('https://play.autodarts.io?reloaded');
        }



        $('button:contains("Start game")').on( "click", function() {
             startgame();
        });


    },1000); // end-interval
})();