Goatlings Accessibility Mod

Accessibility features for Goatlings

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name     Goatlings Accessibility Mod
// @namespace goatlings.accessibility
// @description Accessibility features for Goatlings
// @version  1.2.9
// @grant    none
// @match https://www.goatlings.com/*
// @license GPL
// ==/UserScript==

let page = document.location.href;
let modsActive = false;
let mode = "";

// each one of these conditions should have three parts:
// 1. assign the current mode
// 2. make mods active
// 3. style page to fit mode
if (page.includes("battle")) {
    mode = "battle";
    modsActive = true;

    if (page === "https://www.goatlings.com/battle") {
        findText("Battle Center").innerHTML += " (1)";
        findText("Training Center").innerHTML += " (2)";
        findText("Your Battle").innerHTML += " (3)";
        findText("Your Goatlings").innerHTML += " (4)"
    } else if (page === "https://www.goatlings.com/battle/challengers" || page === "https://www.goatlings.com/battle/train_challengers") {
        let battleButtons = document.querySelectorAll('input[type="submit" i]');
        for (i = 1; i < battleButtons.length; i++) {
            battleButtons[i].value = battleButtons[i].value + ` (${i})`
        }
    } else if (page === "https://www.goatlings.com/battle/thebattle") {
        window.battleItems = document.querySelectorAll(".itema");
        document.getElementsByName("s")[1].value = "Press Spacebar to " + document.getElementsByName("s")[1].value;
        for (i = 0; i < window.battleItems.length; i++) {
            window.battleItems[i].innerHTML += `<br> ${i + 1}`;
        }
        let endLink = findText("+THE BATTLE IS OVER! CLICK HERE TO FINALIZE AND CLAIM REWARDS!+");
        if (endLink) {
            endLink.innerHTML += "<br>PRESS SPACE TO CONTINUE";
        }
        let runAway = findText("Run Away From Battle");
        if (runAway) {
            runAway.innerHTML += " (R)";
        }
    } else if (page === "https://www.goatlings.com/battle/over") {
        findText("Battle Center").innerHTML += " (1)";
        findText("Training Center").innerHTML += " (2)";
        findText("Current Explore Adventure").innerHTML += " (3)";
        findText("Your Inventory").innerHTML += " (4)";
        findText("Your Goatlings").innerHTML += " (5)";
        if (document.querySelectorAll('input[type="submit" i]')[1]) {
            document.querySelectorAll('input[type="submit" i]')[1].value = "Press Spacebar to Battle Again";
        }
    } else if (page === "https://www.goatlings.com/battle/create_temp") {
        findText("inventory").textContent += " (Press Spacebar)";
    }
} else if (page.includes("explore")) {
    modsActive = true;

    if (page.includes("view")) {
        mode = "explore";
        if (findText("Explore Again!")) {
            findText("Explore Again!").textContent += " (Spacebar)"
        }
        if (findText("Start Battle")) {
            findText("Start Battle").textContent += " (1)"
            findText("Run Away").textContent += " (2)"
        } else {
            document.body.innerHTML = document.body.innerHTML.replace('map anywhere', 'map anywhere <b>or press spacebar</b>');
        }
    } else {
        mode = "explore_index"

        // none of these variables work properly here,
        // but making them properties of the window fixes it
        // idk but it works like this, so don't change it unless you know what you're doing
        // and you probably don't
        window.eAreas = document.querySelectorAll("center > div");

        window.eAreasArray = Array.prototype.slice.call(window.eAreas);

        window.x1 = window.eAreasArray.slice(0, 5);
        window.x2 = window.eAreasArray.slice(5, 10);
        window.x3 = window.eAreasArray.slice(10, 15);
        window.x4 = window.eAreasArray.slice(15, 20);
        window.x5 = window.eAreasArray.slice(20, 25);
        window.x6 = window.eAreasArray.slice(25, 30);

        window.y = [window.x1, window.x2, window.x3, window.x4, window.x5, window.x6]


        window.yPos = 0;
        window.xPos = 0;

        window.currentOption = y[window.yPos][window.xPos];

        window.currentOption.style.border = "5px red solid";
    }

} else if (page.includes("viewa")) {
    var priceText = document.body.innerHTML;
    var startIndex = document.body.innerHTML.indexOf("close to ") + 12;

    priceText = document.body.innerHTML.substring(startIndex);
    var endIndex = priceText.indexOf(" Sugar");
    priceText = priceText.substring(0, endIndex);
    var priceTextNoComma = priceText.replace("<b>", "");
    priceTextNoComma = priceText.replace("</b>", "");
    priceTextNoComma = priceText.replace(" ", "");
    priceTextNoComma = priceText.replace(",", "");
    var priceInt = parseInt(priceTextNoComma);
    document.body.innerHTML = document.body.innerHTML.replace(priceText, priceInt * .8);

} else if (page.includes("hol")) {
    mode = "hol";
    modsActive = true;

    if (page === "https://www.goatlings.com/hol") {
        document.getElementsByName("s")[1].value = "Press Spacebar to Play";
    } else if (page === "https://www.goatlings.com/hol/view") {
        document.getElementsByName("high")[0].value += " (1)";
        document.getElementsByName("low")[0].value += " (2)";
    } else if (page === "https://www.goatlings.com/hol/go") {
        let battleButtons = document.getElementsByName("s");
        for (i = 1; i < battleButtons.length; i++) {
            battleButtons[i].value = battleButtons[i].value + ` (${i})`
        }
    }
} else if (page.includes("rps")) {
    mode = "rps";
    modsActive = true;

    if (page == "https://www.goatlings.com/rps") {
        document.body.innerHTML = document.body.innerHTML.replace("https://www.goatlings.com/images/games/rps/Butterfly.jpg", "https://cdn.discordapp.com/attachments/500206268909223936/756708475211350166/Butterfly1.jpg");
        document.body.innerHTML = document.body.innerHTML.replace("https://www.goatlings.com/images/games/rps/Flower.jpg", "https://cdn.discordapp.com/attachments/500206268909223936/756708480139657246/Flower2.jpg");
        document.body.innerHTML = document.body.innerHTML.replace("https://www.goatlings.com/images/games/rps/Net.jpg", "https://cdn.discordapp.com/attachments/500206268909223936/756708483243704371/Net3.jpg");
    } else if (page.includes("play")) {
        findText("Play Again?").textContent = "Press Spacebar to play again!";
    }
}

// find element that contains passed text, stored in variable toFind
function findText(toFind) {
    let xpath = `//a[text()='${toFind}']`;
    let matchingElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

    return matchingElement;
}

function battle_function(key) {
    if (page === "https://www.goatlings.com/battle") {
        // If on the main battle page
        if (key == 1) {
            findText("Battle Center (1)").click();
        } else if (key == 2) {
            findText("Training Center (2)").click();
        } else if (key == 3) {
            findText("Your Battle (3)").click();
        } else if (key == 4) {
            findText("Your Pets (4)").click();
        }
    } else if (page === "https://www.goatlings.com/battle/challengers" || page === "https://www.goatlings.com/battle/train_challengers") {
        // If on the battle center or training center pages
        let battleButtons = document.querySelectorAll('input[type="submit" i]');
        // using key without subtracting one because the first value of the list is the search button on the sidebar
        // using the regular number skips it
        battleButtons[key].click();
    } else if (page === "https://www.goatlings.com/battle/thebattle") {
        // If in the actual battle

        if (key === ' ' || key === 'Spacebar' || key == "q") {
            let endLink = findText("+THE BATTLE IS OVER! CLICK HERE TO FINALIZE AND CLAIM REWARDS!+");
            if (endLink) {
                endLink.click();
            } else {
                endLink = document.getElementsByName("s")[1];
                endLink.click();
            }
        } else if (key < 10) {
            window.battleItems[key - 1].childNodes[0].click();
        }
        else if (key == "r") {
            findText("Run Away From Battle (R)").click()
        }
    } else if (page === "https://www.goatlings.com/battle/over") {
        // If on the main battle page OR battle over page
        if (key == 1) {
            findText("Battle Center (1)").click();
        } else if (key == 2) {
            findText("Training Center (2)").click();
        } else if (key == 3 || key == "q") {
            findText("Current Explore Adventure (3)").click();
        } else if (key == 4) {
            findText("Your Inventory (4)").click();
        } else if (key == 5) {
            findText("Your Goatlings (5)").click();
        } else if (key === ' ' || key === "Spacebar" || key == "q") {
            document.querySelectorAll('input[type="submit" i]')[1].click();
        }
    } else if (page.includes("https://www.goatlings.com/battle/attack")) {
        if (key === ' ' || key === 'Spacebar' || key == "q") {
            let returnLink = findText("Click here to go back");
            returnLink.click();
        }
    } else if (page === "https://www.goatlings.com/battle/create_temp") {
        if (key === ' ' || key === 'Spacebar') {
            findText("inventory (Press Spacebar)").click()
        }
    }
}

function explore_function(key) {
    if (page.includes("view")) {
        if (findText("Explore Again! (Spacebar)") && (key === ' ' || key === 'Spacebar' || key == "q")) {
            let exploreAgain = findText("Explore Again! (Spacebar)")
            exploreAgain.click()
        } else if (key === ' ' || key === 'Spacebar' || key == "q") {
            let exploreWindow = document.querySelector("#content > center > a");
            exploreWindow.click();
        } else if (key == 1) {
            let yesBattle = findText("Start Battle (1)")
            yesBattle.click()
        } else if (key == 2) {
            let noBattle = findText("Run Away (2)")
            noBattle.click()
        }
    }
}

function explore_index_function(key) {
    if (key == "ArrowUp") {
        if (window.yPos > 0) {
            window.yPos -= 1;
        }
    } else if (key == "ArrowDown") {
        if (window.yPos < 5) {
            window.yPos += 1;
        }
    } else if (key == "ArrowLeft") {
        if (window.xPos > 0) {
            window.xPos -= 1;
        }
    } else if (key == "ArrowRight") {
        if (window.xPos < 4) {
            window.xPos += 1;
        }
    }
    window.currentOption.style.border = "";
    window.currentOption = y[window.yPos][window.xPos];
    window.currentOption.style.border = "5px red solid";

    if (key === ' ' || key === 'Spacebar') {
        window.currentOption.childNodes[0].click();
    }
}

function hol_function(key) {
    if (page === "https://www.goatlings.com/hol") {
        if (key === ' ' || key === 'Spacebar') {
            // "Play" button is given name "s"
            document.getElementsByName("s")[1].click();
        }
    } else if (page === "https://www.goatlings.com/hol/view") {
        if (key == 1) {
            document.getElementsByName("high")[0].click();
        } else if (key == 2) {
            document.getElementsByName("low")[0].click();
        }
    } else if (page === "https://www.goatlings.com/hol/go") {
        if (key == 1 || key == 2) {
            // "Play Again" and "Collect Pot" buttons are named "s"
            // buttons are contained in separate forms
            document.getElementsByName("s")[key].click();
        }
    }
}

function rps_function(key) {
    if (page.includes("play") && (key === ' ' || key === 'Spacebar')) {
        findText("Press Spacebar to play again!").click();
    } else if (page == "https://www.goatlings.com/rps") {
        let butterfly = Array.prototype.slice.call(document.querySelectorAll("a[href='https://www.goatlings.com/rps/play/2']"))[0];
        let flower = Array.prototype.slice.call(document.querySelectorAll("a[href='https://www.goatlings.com/rps/play/3']"))[0];
        let net = Array.prototype.slice.call(document.querySelectorAll("a[href='https://www.goatlings.com/rps/play/1']"))[0];

        let rps_array = [butterfly, flower, net];

        if (key > 0 && key < 4) {
            rps_array[key - 1].click();
        }
    }
}

function kPress(e) {
    switch (mode) {
        case "battle":
            battle_function(e.key);
        case "explore":
            explore_function(e.key);
        case "explore_index":
            explore_index_function(e.key);
        case "hol":
            hol_function(e.key);
        case "rps":
            rps_function(e.key);
    }
}

if (modsActive == true) {
    // creates the HUD element letting user know that shortcuts are active
    var hud = document.createElement("span");
    hud.innerHTML = "Shortcuts Active";
    hud.style = "top:10;left:10;position:absolute;z-index: 9999;color:white;font-weight:bold;background:green;border:5px green solid;font-size:16px"
    document.body.appendChild(hud);

    // adds key event listener
    window.addEventListener('keydown', kPress);
}