Zombs Retextured (Browser)

Retextured but for browser

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Zombs Retextured (Browser)
// @namespace    https://discord.gg/fcf3SH6sHJ
// @version      1.1
// @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"],
    ["Cactus In Love","Afro (Blue)"],
    ["Demonic Champion","Afro (Orange)"],
    ["Ice Cream Octo","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==