Autoplays Tyranu Evavu remembering which cards have been played, based on "Neopets: Tyranu Evavu Smart Player" but more clear and with no dependencies.
I updated the script to make it work again - the changes made were:
Updated the card selector as mentioned by themagicteeth
Updated the document selector to just #content
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)';
}
}
I updated the script to make it work again - the changes made were:
This works for me (as of Feb 28, 2023). Many thanks to OP for fixing the original script