woodcutter-grabber

try to take over the world!

Verze ze dne 16. 02. 2018. Zobrazit nejnovější verzi.

// ==UserScript==
// @name         woodcutter-grabber
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @author       ceviri
// @match        https://dominion.games/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setClipboard
// @require      http://code.jquery.com/jquery-3.3.1.min.js
// @connect      ceviri.me
// @connect      pastebin.com
// ==/UserScript==

function wait_until_condition(condition, interval, delayedFunction){
    if (condition()){
        setTimeout(delayedFunction, 500);
    }
    else{
        currentlyWaiting = setTimeout(function(){wait_until_condition(condition, interval, delayedFunction);}, interval);
    }
}

WC_grabber = {
  loopclock: function(){
      WC_grabber.timeout = setTimeout(WC_grabber.loopclock, 500);
      WC_grabber.redraw();
  },

  redraw: function(){
      if (angular.element($('table-starter')).controller('tableStarter')){
          if (angular.element($('table-starter')).controller('tableStarter').replayService.shouldShowReplayWindow()) {
              console.log('ping');
              if ($('table-starter .wc-grab-logs').length == 0){
                  console.log('pong');
                  var log_grab_button = $('<button class="lobby-button wc-grab-logs" onclick="WC_grabber.grabLogs()">Grab Logs</button>');
                  $('table-starter div[class=""]').append(log_grab_button);
              }
          }
      }
  },


  grabLogs: function(){
      var logOne, logTwo, supply, playerNames;

      angular.element($('table-starter')).controller('tableStarter').submitReplay();

      wait_until_condition(function(){return $('.lobby-page').length > 0;}, 100,function(){
          playerNames = [];
          for (i=0;i<2;i++){
              playerNames[i] = angular.element($('order-players')).controller('orderPlayers').getOriginalPlayerName(i);
          }
          playerNameString = playerNames.join('~');

          angular.element($('rules-editor')).controller('rulesEditor').addBot();
          angular.element($('order-players')).controller('orderPlayers').playerOrderService.shouldRandomize = false;
          angular.element($('order-players')).controller('orderPlayers').playerOrderService.done();
          unsafeWindow.publicTableService.ready();

          wait_until_condition(function(){return $('.base-hero-bar .opponent-name-counter-pane').length > 0;},100,function(){
              var oldConfirm = unsafeWindow.confirm;
              unsafeWindow.confirm = function() {
                  return true;
              };

              logOne = Object.values(angular.element($(".log-container")).controller().log.getBulletedEntries()).map(x=>x.string).join("~");
              x=activeGame.model.gameState.cards.map(x =>LANGUAGE.getCardName[x.cardName.name].singular);
              supply = Array.from(new Set(x)).map( i => i+"-"+x.filter(j=>j==i).length).join("~");

              angular.element($('top-controls')).controller('topControls').getControls()[2].execute();
              angular.element($('game-ended-notification')).controller('gameEndedNotification').ok();

              wait_until_condition(function(){return $('score-table-buttons').length > 0;}, 100,function(){
                  angular.element($('score-table-buttons')).controller('scoreTableButtons').editTable();

                  wait_until_condition(function(){return $('.lobby-page').length > 0;}, 100,function(){
                      angular.element(document.querySelector('.window.my-table')).injector().get('playerOrderService').moveDown(0);
                      angular.element(document.querySelector('.window.my-table')).injector().get('playerOrderService').done();
                      unsafeWindow.publicTableService.ready();

                      wait_until_condition(function(){return $('.base-hero-bar .opponent-name-counter-pane').length > 0;},100,function(){
                          logTwo = Object.values(angular.element($(".log-container")).controller().log.getBulletedEntries()).map(x=>x.string).join("~");

                          angular.element($('top-controls')).controller('topControls').getControls()[2].execute();
                          angular.element($('game-ended-notification')).controller('gameEndedNotification').ok();

                          datastring = "fileone=" + encodeURIComponent(logOne) + "&filetwo=" + encodeURIComponent(logTwo) +
                              "&supply=" + encodeURIComponent(supply) + "&players="+encodeURIComponent(playerNames);

                          unsafeWindow.confirm = oldConfirm;

                          GM_xmlhttpRequest({
                              method: "POST",
                              url: "http://ceviri.me/woodcutter/submit",
                              data: datastring,
                              headers: {
                                  "Content-Type": "application/x-www-form-urlencoded"
                              },
                              onload: function(response) {
                                  raw = response.responseText;
                                  GM_setClipboard(raw);
                              }
                          });

                          wait_until_condition(function(){return $('score-table-buttons').length > 0;}, 100,function(){
                              angular.element($('score-table-buttons')).controller('scoreTableButtons').leave();
                          });
                      });
                  });
              });
          });
      });
  }
};

WC_grabber.loopclock();