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.62
// @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){
                (async () => {
                  await  GM.deleteValue("player1");
                   await GM.deleteValue("player2");
                   await GM.deleteValue("player3");
                   await GM.deleteValue("player4");
                   await GM.deleteValue("player5");
                   await GM.deleteValue("player6");
                  await  console.log('P6 nach Löschung:'+ GM.getValue("player6") ) ;

                    for (let index = 0; index < start['players'].length; ++index) {
                        if(start['players'][index]['name'] != ''){

                                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;
   var playerstart = 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 && playerstart > 0) {

 console.log('Open Lobby ... playerstart: '+playerstart) ;
//             rematch = $.urlParam('rematch');
//              rematch = playerstart;
            $('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 && playerstart > 0) {
            const boardID = $('.css-1h3944a option:selected').val();
            console.log('Start game entdeckt throw first' +playerstart);
            setTimeout(function(){

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

            }, 200);

            const delay = 700;
            setTimeout(function(){  startgame(); }, (delay*8));
            // Player 1 starts
            if(playerstart == 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(playerstart == 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(playerstart == 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(playerstart == 4){ // Player 4 starts
                setTimeout(function(){removeplayer(0);}, (delay*1));
                setTimeout(function(){addplayer(player4, boardID,avcpuPPR); }, (delay*2));
                setTimeout(function(){addplayer(player5, boardID,avcpuPPR); }, (delay*3));
                setTimeout(function(){addplayer(player6, boardID,avcpuPPR); }, (delay*4));
                setTimeout(function(){addplayer(player1, boardID,avcpuPPR); }, (delay*5));
                setTimeout(function(){addplayer(player2, boardID,avcpuPPR); }, (delay*6));
                setTimeout(function(){addplayer(player3, boardID,avcpuPPR); }, (delay*7));
            }
            if(playerstart == 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(playerstart == 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
           && gamemode !== undefined)
        {
            if(gamemode.toUpperCase()  == 'X01') {
                var gameconditions = startx01 + ' | ' +variante + ' | ' + 'First to '+firstto;
            }
            else if(gamemode == 'Count Up') {
                gameconditions = 'Count-Up'; gamemode='count-up';
            }
            else {

                if( variante == undefined ) { var variantetext = '';}
                else{ var variantetext = ' | '+ variante;}

                var gameconditions = gamemode + variantetext  ;
            }

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

             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="#" style="font-size: 1em; min-height: 50px; width: 500px;" data-id="1"><span style="font-size: 1.5em;" >'+player1+'</span>&nbsp;&nbsp;to throw first</a><a class="chakra-button css-z1xk1r rematch_button" href="#" style="font-size: 1em; min-height: 50px; width: 500px; " data-id="2"><span style="font-size: 1.5em;">'+player2+'</span>&nbsp;&nbsp;to throw first</a>';

            // 3. Spieler?
            if( typeof(player3) !== "undefined" && player3 !== ''){
                mainmenu += '<a class="chakra-button css-z1xk1r rematch_button"  href="#" style="font-size: 1em; min-height: 50px; width: 500px;" data-id="3"> <span style="font-size: 1.5em;" data-id="3">'+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="#" style="font-size: 1em; min-height: 50px; width: 500px;" data-id="4"> <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="#" style="font-size: 1em; min-height: 50px; width: 500px;" data-id="5"> <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="#" style="font-size: 1em; min-height: 50px; width: 500px;" data-id="6"> <span style="font-size: 1.5em;" >'+player6+'</span>&nbsp;&nbsp;to throw first</a>';
            }

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



        // only on own match-page::
        if( $('button:contains("Abort")').length != 0  && statedata != 1 && location.pathname.split("/")[1] === 'matches' && $('#ad-ext-game-variant').text() != "Bull-off"  ) {
            console.log('fetching data');
            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);
                                      (async() => {
                                          let storedValues = await GM.listValues();
                                          for (let key of storedValues) {
                                              GM.deleteValue(key);
                                          }

                                          statedata = 1;
                                          player_clicked = 0;
                                          playerstart = 0;
                                          for (let i = 0; i < json.players.length; i++) {
                                              console.log('#'+i + '= '+json.players[i]['name']);
                                              if(i == 0){ player1 = json['players'][0]['name'];}
                                              if(i == 1){ player2 = json['players'][1]['name'];}
                                              if(i == 2){ player3 = json['players'][2]['name'];}
                                              if(i == 3){ player4 = json['players'][3]['name'];}
                                              if(i == 4){ player5 = json['players'][4]['name'];}
                                              if(i == 5){ player6 = json['players'][5]['name'];}
                                          }

                                          gamemode = json['variant'];
                                          startx01 = json['settings']['baseScore'];
                                          if( json['settings']['inMode'] == undefined) {
                                              variante = json['settings']['Mode'];
                                          }
                                          else { 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']);

                                                  })();
                                              }
                                          }
                                      })(); // end async
                                     });
        }

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

    $(document).on('click', $('button:contains("Start game")'), function(){
        statedata = 0;
    })

    $(document).on ('click', '.rematch_button',function() {
 //$(this).css('border','2px solid orange');

        playerstart = $(this).data("id");
      console.log ('value playerstart aus click: '+playerstart);
//         $('.chakra-button:contains("X01")').css('border','2px solid red');
//         $('.css-z1xk1r').eq(2).css('border','2px solid yellow');
    setTimeout(function(){

    console.log ('value playerstart: '+playerstart );

         $('.chakra-button:contains("X01")')[0].click();
        console.log('clicked!');
                         }, 100);
    });

})();