Tyranu Evavu Player [T]

Autoplays Tyranu Evavu remembering which cards have been played, based on "Neopets: Tyranu Evavu Smart Player" but more clear and with no dependencies.

< Feedback on Tyranu Evavu Player [T]

Review: OK - script works, but has bugs

§
Posted: 2023-03-01

I updated the script to make it work again - the changes made were:

  1. Updated the card selector as mentioned by themagicteeth
  2. Updated the document selector to just #content
  3. Updated the Start button selector

This works for me (as of Feb 28, 2023). Many thanks to OP for fixing the original script

    // ==UserScript==
    // @name           Tyranu Evavu Player [T]
    // @version        1.1
    // @description    Autoplays Tyranu Evavu remembering which cards have been played, based on "Neopets: Tyranu Evavu Smart Player" but more clear and with no dependencies. Updated 2023/28/02 for various site changes. 
    // @include        https://www.neopets.com/games/tyranuevavu.phtml*
    // @author         Tobi
    // @email          [email protected]
    // @language       en
    // @namespace      https://greasyfork.org/users/208510
    // ==/UserScript==

    var KEY_PLAY = 'playTyranuEvavu';
    var KEY_CARDS = 'cards';

    addToggleButton();

    if (JSON.parse(localStorage.getItem(KEY_PLAY))) {
        setTimeout(execute, 1000 * (1 + Math.random()));
    }

    function execute() {
        startGame();
        playGame();
        endGame();
    }

    function addToggleButton() {
        var autoplayIsOn = !!JSON.parse(localStorage.getItem(KEY_PLAY));

        var toggleButton = document.createElement('button');
        toggleButton.id = 'autoplayer';
        toggleButton.style.display = 'block';
        toggleButton.style.margin = '0 auto';
        toggleButton.addEventListener('click', toggleAutoPlay);

        var content = document.getElementsByClassName('content')[0];
        content.prepend(toggleButton);
        updateButtonText();
    }

    function updateButtonText() {
        var autoplayIsOn = !!JSON.parse(localStorage.getItem(KEY_PLAY));
        document.getElementById('autoplayer').innerHTML = (autoplayIsOn ? 'Stop AP' : 'Start AP');
    }

    function toggleAutoPlay() {
        var autoplayIsOn = !!JSON.parse(localStorage.getItem(KEY_PLAY));
        localStorage.setItem(KEY_PLAY, !autoplayIsOn);
        updateButtonText();

        if (!autoplayIsOn) {
            execute();
        }
    }

    function startGame() {
        var minToWait=100;//100 = 0.1 second
        var maxToWait=1000;//5000 = 5 seconds
        //1000 = 1 second
        var wait=Math.floor(Math.random() * (maxToWait - minToWait + 1)) + minToWait;//This will generate a random number between min and max
        var form = document.querySelector('#content');

        if (form && form.querySelector('input[name="type"][value="play"]')) {
            var suits = ['hearts', 'clubs', 'diamonds', 'spades'];
            var cards = [];

            for (var i = 2; i <= 14; i++) {
                for (var j = 0, len = suits.length; j < len; j++) {
                    cards.push(i + '_' + suits[j]);
                }
            }

            localStorage.setItem('cards', JSON.stringify(cards));
            $("[value='Play Now!']").click();
        }
    }

    function playGame() {
        var tyranuButton = document.querySelector('a[href^="tyranuevavu.phtml?type=play&action=higher"]');
        var evavuButton = document.querySelector('a[href^="tyranuevavu.phtml?type=play&action=lower"]');

        if (tyranuButton) {
            updateRound();

            var url = document.querySelector('img[src^="//images.neopets.com/games/"]').src;
            var card = url.match('cards\/(.+)\.gif');

            var cards = JSON.parse(localStorage.getItem(KEY_CARDS));
            var length = cards.length;
            var index = cards.indexOf(card[1]);

            cards.splice(index, 1);
            localStorage.setItem(KEY_CARDS, JSON.stringify(cards));

            if (length > 1) {
                if (index/(length - 1) > 0.5) {
                    evavuButton.click();
                } else {
                    tyranuButton.click();
                }
            } else {
                alert('You have won the game!');
            }
        }
    }

    function updateRound() {
        var content = document.getElementsByClassName('content')[0];
        var center = content.getElementsByTagName('center')[0];
        var b = center.getElementsByTagName('b')[0];
        var round = parseInt(b.innerHTML);
        document.title += ' (' + round + ')';
    }

    function endGame() {
        var form = document.querySelector('form[action="tyranuevavu.phtml"]');

        if (form && form.querySelector('input[name="type"][value="intro"]')) {
            form.submit();
        } else {
            limitReached();
        }
    }

    function limitReached() {
        var form = document.querySelector('form[action="/gameroom.phtml"]');

        if (form) {
            document.title += ' (Limit Reached)';
        }
    }

Post reply

Sign in to post a reply.