Autodarts - Rematch-Button

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

当前为 2025-03-15 提交的版本,查看 最新版本

// ==UserScript==
// @name         Autodarts - Rematch-Button
// @namespace    http://tampermonkey.net/
// @version      0.60
// @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?1',
            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) { //remove default player from lobby
        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 = [];
    var statedata = 0;



    // 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-1h3944a 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){  // Player 3 starts
                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){ // Player 4 starts
                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){ // Player 5 starts
                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){ // Player 6 starts
                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.toUpperCase()  == 'X01') {
                var gameconditions = startx01 + ' | ' +variante + ' | ' + 'First to '+firstto;


                                                 }
            else if(gamemode == 'Count Up') {
                gameconditions = 'Count-Up'; gamemode='count-up';
            }
            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 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 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 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 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 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 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  && statedata == 0 && location.pathname.split("/")[1] == 'matches' && $('#ad-ext-game-variant').text() != "Bull-off"  ) { // only on own match-page

            fetch('https://api.autodarts.io/gs/v0/matches/'+location.pathname.split("/")[2]+'/state', {credentials: 'include'})
                .then(function(response) { return response.json(); })
                .then(function(json) { //console.log(json);
                                      statedata = 1;
                                      player1 = json['players'][0]['name'];
                                       gamemode = $('#ad-ext-game-variant').text();

                                   //   gamemode = json['settings']['inMode'][0] +'I/' + json['settings']['outMode'][0]+ 'O' ;
                                      startx01 = json['settings']['baseScore'];
                                      variante =  json['settings']['inMode'][0] +'I/' + json['settings']['outMode'][0]+ 'O' ;
                                      firstto  = json['legs'];
                                      (async () => {

                                          await GM.setValue("gamemode" , gamemode ); // x01
                                          await GM.setValue("startx01" , startx01 ); // 501
                                          await GM.setValue("variante" , variante ); // SI/DO
                                          await GM.setValue("firstto" , firstto ); // int
                                      })();



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

                                          })();
                                      }
                                  }
                                 });

            // 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();

        }


        // 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');
        }




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