Zombs Retextured (Browser)

Retextured but for browser

// ==UserScript==
// @name         Zombs Retextured (Browser)
// @namespace    https://discord.gg/fcf3SH6sHJ
// @version      1.0
// @description  Retextured but for browser
// @author       Jamz
// @match        https://zombsroyale.io/
// @icon         https://www.google.com/s2/favicons?domain=zombsroyale.io
// @grant        none
// ==/UserScript==

var config = [
    ["3 Little Monkies","Colossal Bat Wings"],
    ["Bat","Saturn Chute"],
    ["8-Bit Blade", "Surtr Blade"],
    ["Happy","Poop"],
    ["Albert","8-Bit Default"],
    ["Bounty Hunter (Blue)","8-Bit Glasses"],
    ["Alien Intel Gatherer","Daedalus Wings"],
    ["Galaxy","Adept Wizard"],
    ["Giant Bot","Afro (Blue)"],
    ["Xeno","Afro (Orange)"],
    ["Scientist","Afro (Peach)"],
    ["Demon Wings","Alien Tentacles"],
    ["Berry Branch Wings","Android Utility Pack"],
    ["Antler Crown","Toucan Wings"],
    ["Alien Beast","Afro (Pink)"],
    ["Alien Brain","Afro (Purple)"],
    ["Purple Spear","All-Seeing Sword"],
    ["Alien Beast Claws","Anchor Sword (Blue)"],
    ["Discord Nitro Gloves","Anchor Sword (Light Purple)"],
    ["Chief Tribal Mask","Afro (Red)"],
    ["Spooky Skull","Afro (Sky)"],
    ["Spooky Flame Wings","Azure Football Pack"],
    ["American Wings","Baby Koala"],
    ["Dino Wings","Ballooned Tail"],
    ["Bone Wings","Bottled Message"],
    ["Evil Wings","Bow Tied"],
    ["Cat Tail","Brilliant Shells"],
    ["Unlucky Cat","Afro (White)"],
    ["Ankylosaur Fossil","Aggro Lobster"],
    ["Apep","Air Daredevil"],
    ["Terror","Alien Automaton"],
    ["Terror Eyes","Alien Identifier"],
    ["Terror Corruption","Amazonian Manatee"],
    ["Black Knight","Ancient Wizard Dragon"],
    ["Block Of Coal","Android"],
]


// here we will modify the response
function modifyResponse(response) {

    var original_response, modified_response, string_original;

    if (this.readyState === 4) {
        if (!response.target.responseURL.includes("/api/shop/available")) return

        // we need to store the original response before any modifications
        // because the next step will erase everything it had
        var enc = new TextEncoder("utf-8");
        var dec = new TextDecoder("utf-8");
        original_response = JSON.parse(dec.decode(response.target.response));

        // here we "kill" the response property of this request
        // and we set it to writable
        Object.defineProperty(this, "response", { writable: true });

        config.forEach(function (retexture) {
            var findIndex = original_response.items.findIndex((o) => o.name == retexture[0]);
            var replaceIndex = original_response.items.findIndex((o) => o.name == retexture[1]);
            var ogFindSku = original_response.items[findIndex].sku
            var ogReplaceSku = original_response.items[replaceIndex].sku
            original_response.items[findIndex].sku = ogReplaceSku
            original_response.items[replaceIndex].sku = ogFindSku
        })

        this.response = enc.encode(JSON.stringify(original_response))
    }
}

// here we listen to all requests being opened
function openBypass(original_function) {

    return function (method, url, async) {

        // here we listen to the same request the "original" code made
        // before it can listen to it, this guarantees that
        // any response it receives will pass through our modifier
        // function before reaching the "original" code
        this.addEventListener("readystatechange", modifyResponse);

        // here we return everything original_function might
        // return so nothing breaks
        return original_function.apply(this, arguments);

    };

}

// here we override the default .open method so that
// we can listen and modify the request before the original function get its
XMLHttpRequest.prototype.open = openBypass(XMLHttpRequest.prototype.open);
// to see the original response just remove/comment the line above

/---END RETEXTURE-----------------------------------------------------------------/// ==UserScript==