Evolve Creative Mode Script

刚来的新人,脚本是网上找的,看您心情打赏吧

/** * Evolve Creative Mode * @author SimplyNo (u/zechatron) * */ (function() { let tabs = $($("nav")[0].firstChild); let hackIsOpen = false; let sections = $("#mainColumn > div > div > section"); let hackContent = `<div id="hackContent" style="padding: 20px;"> <span>Evolve Creative Mode\n[made by SimplyNo]</span> <table> <tr> <th style="font-weight: normal;" class="has-text-warning"> Type </th> <th style="font-weight: normal;" class="has-text-warning"> Item </th> <th style="font-weight: normal;" class="has-text-warning"> Property </th> <th style="font-weight: normal;" class="has-text-warning"> New Value </th> <th style="font-weight: normal;" class="has-text-success"> Current Value </th> </tr> </table> <button class="button" onClick="newSet()">New Set</button> <button class="button" onClick="save()" style="float: right;">Save Changes</button> </div>` tabs.append(`<li id="hackTab" class><a onClick="openHackTab()">Creative Mode</a></li>`); /** * Gets the game object */ window.getSession = () => JSON.parse(LZString.decompressFromBase64(exportGame())); /** * * getKeys("resource") - gets the property 'resource' from game object and returns all the keys inside of it, if any, as HTML option elements * getKeys("fill", {}) - same thing but it uses a predefined object instead of the game object */ window.getKeys = (key, fill) => { let session = window.getSession(); let keys; let obj; if (key == "*") { obj = session; keys = Object.keys(obj); } else if (key == "fill") { obj = fill; keys = Object.keys(obj); } else { obj = session[key]; keys = Object.keys(obj); } if (typeof obj != "object") return 0; keys.sort((a, b) => { if (a.toLowerCase() > b.toLowerCase()) { return 1; } if (b.toLowerCase() > a.toLowerCase()) { return -1; } return 0; }) if (!keys.length) return -1; return `<option>${keys.join("</option><option>")}</option>`; } /** * * @description is called whenever the TYPE dropdown box is changed and it controls what the other boxes will be * */ window.handleType = (selector) => { let table = $(selector.parentElement.parentElement); let type = selector.value; let newKeys = window.getKeys(type); while (table[0].childElementCount > 1) { $(table[0].lastChild).remove() } if (newKeys == -1) { $(table[0]).append(`<td style="border:0;" class="hackItem">n/a</td>`) $(table[0]).append(`<td style="border:0;" class="hackProp">n/a</td>`) $(table[0]).append(`<td style="border:0;" class="hackVal">n/a</td>`) $(table[0]).append(`<td style="border:0;">n/a</td>`) } else if (!newKeys) { $(table[0]).append(`<td style="border:0;" class="hackItem">n/a</td>`) $(table[0]).append(`<td style="border:0;" class="hackProp">n/a</td>`) $(table[0]).append(`<td style="border:0;"><input placeholder="New Value" class="hackVal"></input></td>`) $(table[0]).append(`<td style="border:0;">${window.getSession()[type]}</td>`) } else { let tr = table.append(`<td style="border:0;"><select onchange="handleItem(this)" class="hackItem">${newKeys}</select></td>`); window.handleItem(tr[0].children[1].firstChild) } } /** * * @description is called whenever the ITEM dropdown box is changed and it controls what the other boxes will be * */ window.handleItem = (selector) => { let table = $(selector.parentElement.parentElement); let type = table[0].children[0].children[0].value; let item = selector.value; let newKeys = window.getKeys('fill', window.getSession()[type][item]); while (table[0].childElementCount > 2) { $(table[0].lastChild).remove() } if (newKeys == -1) { $(table[0]).append(`<td style="border:0;" class="hackProp">n/a</td>`) $(table[0]).append(`<td style="border:0;" class="hackValue">n/a</td>`) $(table[0]).append(`<td style="border:0;">n/a</td>`) } else if (!newKeys) { $(table[0]).append(`<td style="border:0;" class="hackProp">n/a</td>`) $(table[0]).append(`<td style="border:0;"><input placeholder="New Value" class="hackVal"></input></td>`) $(table[0]).append(`<td style="border:0;">${window.getSession()[type][item]}</td>`) } else { let tr = table.append(`<td style="border:0;"><select onchange="handleProp(this)" class="hackProp">${newKeys}</select></td>`) window.handleProp(tr[0].children[2].firstChild) } } /** * * @description is called whenever the PROP dropdown box is changed and it controls what the other boxes will be * */ window.handleProp = (selector) => { let table = $(selector.parentElement.parentElement); let type = table[0].children[0].children[0].value; let item = table[0].children[1].children[0].value let prop = selector.value; let newKeys = window.getKeys('fill', window.getSession()[type][item][prop]); while (table[0].childElementCount > 3) { $(table[0].lastChild).remove() } if (newKeys == -1) { $(table[0]).append(`<td style="border:0;" class="hackValue">n/a</td>`) $(table[0]).append(`<td style="border:0;" >n/a</td>`) } else if (!newKeys) { $(table[0]).append(`<td style="border:0;"><input placeholder="New Value" class="hackVal"></input></td>`) $(table[0]).append(`<td style="border:0;">${window.getSession()[type][item][prop]}</td>`) } else { alert("oh") } } window.newSet = () => { let table = $("#hackContent > table > tbody"); let tr = table.append(` <tr> <td style="border: 0;"> <select class="hackType" onchange="handleType(this)"> ${getKeys('*')} </select> </td> </tr>`) window.handleType(tr[0].lastChild.children[0].children[0]) } /** * gets values from drop down boxes and appends it to a copy of the game object. * encrypts game object to Base64 and imports it. (page reload) */ window.save = () => { let newSave = window.getSession(); console.log(newSave.resource.Food.amount) let sets = Array.from($("#hackContent > table > tbody")[0].children) sets.forEach((el, i) => { let type = document.getElementsByClassName("hackType")[i] ? document.getElementsByClassName("hackType")[i].value : null; let item = document.getElementsByClassName("hackItem")[i] ? document.getElementsByClassName("hackItem")[i].value : null; let prop = document.getElementsByClassName("hackProp")[i] ? document.getElementsByClassName("hackProp")[i].value : null; let val = document.getElementsByClassName("hackVal")[i] ? document.getElementsByClassName("hackVal")[i].value : null; let ary = [type, item, prop, val] if (val) { val = parseInt(val) || val; if (prop) { newSave[type][item][prop] = val; } else if (item) { newSave[type][item] = val; } else if (type) { newSave[type] = val; } } }) let encrypted = LZString.compressToBase64(JSON.stringify(newSave)); console.log(newSave.resource.Food.amount) importGame(encrypted); } /** * makes everything invisible */ window.openHackTab = () => { if (hackIsOpen) return; hackIsOpen = true; // remove other tabs sections[0].childNodes.forEach(el => { if (el.id !== "hackContent") { el.setAttribute("style", "display: none"); } }) /** * @type HTMLElement */ let hacktab = $("#hackContent")[0]; hacktab.removeAttribute("style"); tabs[0].childNodes.forEach(el => { if (el.id !== "hackTab") { el.setAttribute("class", ""); el.setAttribute("onClick", "closeHackTab()"); } else { el.setAttribute("class", "is-active"); } }) } window.closeHackTab = () => { if (!hackIsOpen) return; hackIsOpen = false; tabs[0].childNodes.forEach(el => { if (el.id !== "hackTab") { el.setAttribute("onClick", "closeHackTab()"); } else { el.setAttribute("class", ""); } }) $("#hackContent")[0].setAttribute("style", "display: none"); } $(sections[0]).append(hackContent); window.openHackTab(); window.newSet(); })()
4 打赏
打赏 10 积分后可见