Go! Go! Go! Autoplayer

Automatically plays Go! Go! Go!

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         Go! Go! Go! Autoplayer
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Automatically plays Go! Go! Go!
// @author       romboyz
// @include      http://www.neopets.com/prehistoric/gogogo*
// ==/UserScript==

//functional variables
var maxWait = 3000;
var minWait = 800;
var waitTime = Math.random() * (maxWait - minWait) + minWait;
var patt = new RegExp("\\d+"); //Get card value
var exists2 = false;
var selected = false;
var count2 = 0;
var selectedValue = 0;
var playFaceUp = false;
//TODO Play the lowest playable card in the faceup deck (Works for 2)

//individual elements
var startButton = document.querySelector("input[value='Go! Go! Go!']");
var playRoundButton = document.querySelector("input[value*='Play Round']");
var playAgainButton = document.querySelector("input[value*='Play Again!!!']");
var continueButton = document.querySelector("input[value='Continue...']");
var playCardsButton = document.querySelector("input[value='Play Cards']");
var pickUpPileButton = document.querySelector("input[value='Pick Up Pile']");
var cardsStack = document.querySelector("tr:nth-of-type(6)>td>table>tbody>tr:nth-of-type(2)>td:nth-of-type(1)>img");

//lists of card elements
var deck;
var fullSet;
var cardsHand = document.querySelectorAll("tr:nth-of-type(2)>td>table>tbody>tr>td>a>img:nth-of-type(1)");
var cardsFaceUp = document.querySelectorAll("tr:nth-of-type(4)>td:nth-of-type(2)>table>tbody>tr>td>a>img:nth-of-type(1)");
var cardsFaceDown = document.querySelector("tr:nth-of-type(4)>td:nth-of-type(1)>table>tbody>tr>td>a>img:nth-of-type(1)");

//Random timeout before any actions done
console.log("Waiting for " + waitTime/1000 + " seconds");
setTimeout(gogogo, waitTime);

function gogogo() {
    //If no game/game finished, press button to start game
    if (startButton != null) startButton.click(); //Go! Go! Go!
    if (playRoundButton != null) playRoundButton.click(); //Play Round #
    if (playAgainButton != null) playAgainButton.click(); //Play Again

    //Gameplay
    //If not your turn, press continue
    if (continueButton != null) continueButton.click(); //Continue...

    //If it's your turn...
    //Get value of top card in stack
    var active = parseInt(patt.exec(cardsStack.getAttribute("src")));
    console.log("Active card: " + active);

    //Determine which hand to work with
    if (cardsHand.length > 0) { //hand
        console.log("Playing from hand");
        deck = parseCards(cardsHand);
        fullSet = find4(cardsHand, active, deck);
        if (fullSet == null) playCard(cardsHand, active, deck);
        if (!selected && exists2) wildCardCheck(cardsHand, active);
    }
    else if (cardsFaceUp.length > 0) { //face up
        console.log("Playing from face up");
        playFaceUp = true;
        deck = parseCards(cardsFaceUp);
        playCard(cardsFaceUp, active, deck);
        if (!selected && exists2) wildCardCheck(cardsFaceUp, active);
    }
    else { //face down
        console.log("Playing from face down");
        cardsFaceDown.click();
        selected = true;
    }

    //Finish turn
    if (selected) {
        console.log("Card has been played");
        if (playCardsButton != null) playCardsButton.click();
    }
    else {
        console.log("Have to pick up pile");
        if (pickUpPileButton != null) pickUpPileButton.click();
    }
}

function wildCardCheck(hand, active) {
    if (count2 == hand.length && !playFaceUp) { //If the entire hand is just 2s, select all of them
        for (var i = 0; i < hand.length; i++) {
            hand[i].click();
            selected = true;
        }
    }
    else {
        for (var j = 0; j < hand.length; j++) { //Else only select the first one
            var card = parseInt(patt.exec(hand[j].getAttribute("src")));
            if (card == 2 && !selected) {
                hand[j].click();
                selected = true;
            }
        }
    }

}

function parseCards(hand) {
    var deck = [];
    for (var i = 0; i < hand.length; i++) {
        var card = parseInt(patt.exec(hand[i].getAttribute("src")));
        deck.push(card);
    }
    //deck.sort(function(a, b){return a-b});
    return deck;
}

function find4(hand, active, deck) { //If 4 of a playable number is found in the deck, return that number
    var num = 0;
    var occur = 0;
    for (var i = 0; i < deck.length; i++) {
        //If number changes, reset count and start counting new number
        if (deck[i] != num) {
            num = deck[i];
            occur = 1;
        }
        else { //Number hasn't changed and another occurence has been found
            occur++;
        }
        //If 4 occurrences found, check if the number is playable
        if (occur == 4) {
            if (Number.isInteger(active)) { //Active card on stack
                if (active <= num) {
                    if ((num % 2 == 0 && active != 3) || (num % 2 == 1 && active != 4)) {
                        selected = true;
                        selectedValue = num;
                        hand[i].click();
                        hand[i-1].click();
                        hand[i-2].click();
                        hand[i-3].click();
                        return num;
                    }
                }
            }
            else { //No card on stack
                selected = true;
                selectedValue = num;
                hand[i].click();
                hand[i-1].click();
                hand[i-2].click();
                hand[i-3].click();
                return num;
            }
        }
    }
    return null;
}

function playCard(hand, active, deck) {
    console.log(deck);
    for (var i = 0; i < hand.length; i++) {
        var card = deck[i];
        if (Number.isInteger(active)) { //Active card on stack
            if (card == 3 && active <= 3) {
                if (selectedValue == 0 || (selectedValue == 3 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 3;
                    hand[i].click();
                }
            }
            else if (card == 4 && active <= 4 && active != 3) {
                if (selectedValue == 0 || (selectedValue == 4 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 4;
                    hand[i].click();
                }
            }
            else if (card == 5 && active <= 5 && active != 4) {
                if (selectedValue == 0 || (selectedValue == 5 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 5;
                    hand[i].click();
                }
            }
            else if (card == 6 && active <= 6 && active != 3) {
                if (selectedValue == 0 || (selectedValue == 6 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 6;
                    hand[i].click();
                }
            }
            else if (card == 7 && active <= 7 && active != 4) {
                if (selectedValue == 0 || (selectedValue == 7 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 7;
                    hand[i].click();
                }
            }
            else if (card == 8 && active <= 8 && active != 3) {
                if (selectedValue == 0 || (selectedValue == 8 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 8;
                    hand[i].click();
                }
            }
            else if (card == 9 && active <= 9 && active != 4) {
                if (selectedValue == 0 || (selectedValue == 9 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 9;
                    hand[i].click();
                }
            }
            else if (card == 10 && active <= 10 && active != 3) {
                if (selectedValue == 0 || (selectedValue == 10 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 10;
                    hand[i].click();
                }
            }
            else if (card == 11 && active <= 11 && active != 4) { //Jack
                if (selectedValue == 0 || (selectedValue == 11 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 11;
                    hand[i].click();
                }
            }
            else if (card == 12 && active <= 12 && active != 3) { //Queen
                if (selectedValue == 0 || (selectedValue == 12 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 12;
                    hand[i].click();
                }
            }
            else if (card == 13 && active <= 13 && active != 4) { //King
                if (selectedValue == 0 || (selectedValue == 13 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 13;
                    hand[i].click();
                }
            }
            else if (card == 14 && active != 3) { //Ace
                if (selectedValue == 0 || (selectedValue == 14 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 14;
                    hand[i].click();
                }
            }
            else if (card == 2 && active != 3) {
                exists2 = true;
                count2++;
            }
        }
        else { //Stack is empty and any card can by played
            if (card == 3) {
                if (selectedValue == 0 || (selectedValue == 3 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 3;
                    hand[i].click();
                }
            }
            else if (card == 4) {
                if (selectedValue == 0 || (selectedValue == 4 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 4;
                    hand[i].click();
                }
            }
            else if (card == 5) {
                if (selectedValue == 0 || (selectedValue == 5 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 5;
                    hand[i].click();
                }
            }
            else if (card == 6) {
                if (selectedValue == 0 || (selectedValue == 6 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 6;
                    hand[i].click();
                }
            }
            else if (card == 7) {
                if (selectedValue == 0 || (selectedValue == 7 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 7;
                    hand[i].click();
                }
            }
            else if (card == 8) {
                if (selectedValue == 0 || (selectedValue == 8 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 8;
                    hand[i].click();
                }
            }
            else if (card == 9) {
                if (selectedValue == 0 || (selectedValue == 9 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 9;
                    hand[i].click();
                }
            }
            else if (card == 10) {
                if (selectedValue == 0 || (selectedValue == 10 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 10;
                    hand[i].click();
                }
            }
            else if (card == 11) { //Jack
                if (selectedValue == 0 || (selectedValue == 11 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 11;
                    hand[i].click();
                }
            }
            else if (card == 12) { //Queen
                if (selectedValue == 0 || (selectedValue == 12 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 12;
                    hand[i].click();
                }
            }
            else if (card == 13) { //King
                if (selectedValue == 0 || (selectedValue == 13 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 13;
                    hand[i].click();
                }
            }
            else if (card == 14) { //Ace
                if (selectedValue == 0 || (selectedValue == 14 && !playFaceUp)) {
                    selected = true;
                    selectedValue = 14;
                    hand[i].click();
                }
            }
            else if (card == 2) {
                exists2 = true;
                count2++;
            }
        }
    }
}