CodemaoProMax

提供关于编程猫社区、神奇代码岛的合规辅助操作(不影响平衡,不泄露hash、不采集hash、不盗取hash)

נכון ליום 10-12-2022. ראה הגרסה האחרונה.

/*
 * ============================================================================== *
 ****************************** CodemaoProMax v3.10.11 ******************************
 ************* Copyright (C) 2022 幻想一笑而过、萌新大佬、xiaohong2022 ************
 * ============================================================================== *
*/

// ==UserScript==
// @name         CodemaoProMax
// @namespace    https://box3.codemao.cn/u/hxyxeg666666
// @version      3.10.11
// @icon         https://static.box3.codemao.cn/block/QmdNPcTby9AqfnG7iyq4axNwq6zn57e2MX5nVkc1fNRumK_cover_64_64.ico
// @contributionURL https://bcmcreator.cn/edit/img/_93633.jpg
// @contributionAmount 2
// @compatible   edge
// @compatible   chrome
// @description  提供关于编程猫社区、神奇代码岛的合规辅助操作(不影响平衡,不泄露hash、不采集hash、不盗取hash)
// @author       幻想一笑而过&萌新大佬&xiaohong2022
// @match        https://box3.codemao.cn/*
// @match        https://box3.fun/*
// @match        https://shequ.codemao.cn/*
// @match        https://static.box3.codemao.cn/block/*
// @match        https://static.box3.fun/block/*
// @grant        GM_xmlhttpRequest
// @require      https://cdn.jsdelivr.net/npm/[email protected]
// @require      https://cdn.jsdelivr.net/npm/[email protected]/examples/js/libs/stats.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js
// @require      https://greasyfork.org/scripts/451480-md5%E5%8A%A0%E5%AF%86/code/md5%E5%8A%A0%E5%AF%86.js?version=1094400
// @require      https://unpkg.com/[email protected]/dist/sweetalert2.min.js
// @resource     swalStyle https://unpkg.com/[email protected]/dist/sweetalert2.min.css
// @run-at       document-idle
// @grant        GM_openInTab
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_getResourceText
// @icon         data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJNMCA3OWMwLTM1LjQgMjguNS02NCA2My45LTY0LjFzNjQuMSAyOC42IDY0LjEgNjRjMCA5LjQtMi4xIDE4LjQtNS43IDI2LjUtMSAyLjMtMi4zIDQuNi0zLjYgNi43LS40LjYtMSAxLTEuNyAxSDExYy0uNyAwLTEuMy0uNC0xLjctMS0xLjMtMi4yLTIuNS00LjQtMy42LTYuN0MyLjEgOTcuNCAwIDg4LjQgMCA3OXptMjQuNC0zOS43Yy01LjIgNS4xLTkuMiAxMS4xLTEyIDE3LjgtMyA2LjktNC41IDE0LjItNC41IDIxLjhhNTUuODYgNTUuODYgMCAwIDAgNC40IDIxLjhjLjcgMS42IDEuNCAzLjIgMi4yIDQuN2g5OC44Yy44LTEuNSAxLjYtMy4xIDIuMi00LjdhNTUuODYgNTUuODYgMCAwIDAgNC40LTIxLjggNTUuODYgNTUuODYgMCAwIDAtNC40LTIxLjhjLTIuOC02LjctNi45LTEyLjctMTItMTcuOC01LjEtNS4yLTExLjEtOS4yLTE3LjgtMTJhNTUuODYgNTUuODYgMCAwIDAtMjEuOC00LjQgNTUuODYgNTUuODYgMCAwIDAtMjEuOCA0LjRjLTYuNiAyLjgtMTIuNiA2LjgtMTcuNyAxMnoiIGZpbGw9IiM0NDQiLz48cGF0aCBkPSJNMTIuNCA1Ny4xYzIuOC02LjcgNi45LTEyLjcgMTItMTcuOCA1LjEtNS4yIDExLjEtOS4yIDE3LjgtMTJBNTUuODYgNTUuODYgMCAwIDEgNjQgMjIuOWE1NS44NiA1NS44NiAwIDAgMSAyMS44IDQuNGM2LjcgMi44IDEyLjcgNi45IDE3LjggMTIgNS4yIDUuMSA5LjIgMTEuMSAxMiAxNy44YTU1Ljg2IDU1Ljg2IDAgMCAxIDQuNCAyMS44IDU1Ljg2IDU1Ljg2IDAgMCAxLTQuNCAyMS44Yy0uNyAxLjYtMS40IDMuMi0yLjIgNC43SDE0LjZjLS44LTEuNS0xLjYtMy4xLTIuMi00LjdBNTUuODYgNTUuODYgMCAwIDEgOCA3OC45Yy0uMS03LjYgMS40LTE0LjkgNC40LTIxLjh6IiBmaWxsPSIjNjQ5OTUwIi8+PHBhdGggZD0iTTc3LjUgNjAuOUM2OCA4MS4yIDY0LjkgODQuNiA2NC42IDg1Yy0xLjUgMS41LTMuNSAyLjMtNS42IDIuM3MtNC4xLS44LTUuNi0yLjNhNy45MSA3LjkxIDAgMCAxIDAtMTEuMmMuMy0uNCAzLjgtMy40IDI0LjEtMTIuOXptMC04Yy0xLjEgMC0yLjMuMi0zLjQuOEM2My4yIDU4LjggNTEgNjQuOSA0Ny44IDY4LjFjLTYuMiA2LjItNi4yIDE2LjMgMCAyMi41IDMuMSAzLjEgNy4yIDQuNyAxMS4yIDQuN3M4LjEtMS42IDExLjItNC43YzMuMi0zLjIgOS4zLTE1LjQgMTQuNC0yNi4zIDIuNi01LjYtMS43LTExLjQtNy4xLTExLjR6TTYzLjkgMjkuOGMtMjcuMiAwLTQ5LjUgMjIuNi00OS4xIDQ5LjggMCAzLjYuNSA3LjIgMS4zIDEwLjYuNCAxLjggMiAzLjEgMy45IDMuMSAyLjYgMCA0LjQtMi40IDMuOS00LjktLjctMy0xLjEtNi4yLTEuMS05LjNBNDIuMDQgNDIuMDQgMCAwIDEgMjYgNjNjMi01IDUtOS40IDguOC0xMy4yUzQzIDQzLjEgNDcuOSA0MWE0Mi4wNCA0Mi4wNCAwIDAgMSAzMi4yIDBjNC45IDIuMSA5LjMgNS4xIDEzLjEgOC45Qzk3IDUzLjYgOTkuOSA1OCAxMDIgNjNhNDIuMDQgNDIuMDQgMCAwIDEgMy4yIDE2LjFjMCAzLjItLjQgNi4zLTEuMSA5LjMtLjYgMi41IDEuMyA0LjkgMy45IDQuOSAxLjggMCAzLjUtMS4zIDMuOS0zLjEuOC0zLjYgMS4zLTcuMyAxLjMtMTEuMSAwLTI3LjMtMjIuMS00OS4zLTQ5LjMtNDkuM3oiIGZpbGw9IiM0NDQiLz48L3N2Zz4=
// @license      GPL-3.0-only
// ==/UserScript==
var banben = "v3.10.11";
(async function () {
    async function run() {
        //运行成功!
        console.log("CodemaoProMax运行成功");
        //工具
        var dialogzindex = 99999
        const setv = ((html, name, value) => { html.setAttribute(name, value) });
        const setn = ((html, value) => { html.setAttribute(value, "") });
        const seth = ((html, html5) => { html.innerHTML = html5 });
        const sett = ((html, text) => { html.innerText = text });
        const addhtml = ((position, localName, data, html) => { var newHtml = document.createElement(localName); for (var name in data) { newHtml.setAttribute(name, data[name]) }; newHtml.innerHTML = html; var newElement = position.appendChild(newHtml); return (newElement) })
        const addanot = ((position, value) => { var newHtml = document.createComment(value); var newElement = position.appendChild(newHtml); return (newElement) });
        const addwindow = (name, content, width, img = null, closeyes = true, position = document.body) => {
            var dialog = addhtml(position, "div", { class: "box3edittooldiv box3tooldialog dongtai kaishizhuangtai", show: "true", oncontextmenu: "return false;", style: `top:10px;left:10px;width:${width}px;z-index:${dialogzindex}` }, "");
            var dialogdb = addhtml(dialog, "div", { class: "db" }, "");
            setTimeout(() => { dialog.classList.remove("kaishizhuangtai") }, 10)
            setTimeout(() => { dialog.classList.remove("dongtai") }, 260);
            if (img) {
                addhtml(dialogdb, "img", { width: "100", height: "100%", src: img, style: "margin-right: 10px;" }, ``)
            }
            var dialogydtzd = addhtml(dialog, "div", { class: "ydtzd", title: "拖动" }, "");
            var a = addhtml(dialogdb, "div", { style: "display: flex;flex-direction: column;" }, `<span style='font-weight: bold;font-size:20px'>${name}</span><font style='font-size:12px;color:#aaa;display: flex;flex-direction: row;'></font>`)
            sett(a.getElementsByTagName("font")[0], content)
            var dialogclose = addhtml(dialogdb, "button", { title: "关闭", zdy: "", jy: !closeyes }, "×");
            if (closeyes) {
                dialogclose.onclick = () => { setTimeout(() => { dialog.classList.add("dongtai", "kaishizhuangtai"); }, 10); setTimeout(() => { dialog.remove(); }, 260) }
            }
            dialog.onmousedown = () => { dialogzindex += 1; dialog.style.zIndex = dialogzindex }
            dialogydtzd.onmousedown = (en) => {
                setv(dialogydtzd, "ox", en.offsetX)
                setv(dialogydtzd, "oy", en.offsetY)
                document.onmousemove = (e) => {
                    dialog.style.top = (e.clientY - en.offsetY) + "px"
                    dialog.style.left = (e.clientX - en.offsetX) + "px"
                }
            }
            dialogydtzd.onmouseup = () => { document.onmousemove = null; }
            return ({ close: () => { setTimeout(() => { dialog.classList.add("dongtai", "kaishizhuangtai"); }, 10); setTimeout(() => { dialog.remove(); }, 260) }, openclose: () => { setv(dialogclose, "jy", "false"); dialogclose.onclick = () => { setTimeout(() => { dialog.classList.add("dongtai", "kaishizhuangtai"); }, 10); setTimeout(() => { dialog.remove(); }, 260) } }, dialog })
        }
        function getCookie(variable = '') {
            var query = document.cookie
            var vars = query.split("; ");
            for (var i=0;i<vars.length;i++) {
                var pair = vars[i].split("=");
                if(pair[0] == variable){return pair[1]}
            }
            return null;
        }
        function setCookie(variable = 'a',content = '0'){
            document.cookie = `${variable}=${content}`
            return(document.cookie);
        }
        function getParameters(variable = ''){
            var query = window.location.search.substring(1);
            var vars = query.split("&");
            for (var i=0;i<vars.length;i++) {
                var pair = vars[i].split("=");
                if(pair[0] == variable){return pair[1]}
            }
            return(null);
        }
        function downloadMp3(filePath,name) {
            fetch(filePath).then(res => res.blob()).then(blob => {
                const a = document.createElement('a');
                a.style.display = 'none'
                const url = window.URL.createObjectURL(blob);
                a.href = url;
                a.download = name+'.mp3';
                a.click();
                window.URL.revokeObjectURL(url);
            });
        }
        function returnTime(t) {//返回时间 t:时间戳
            var nowTime = new Date(t);
            return {"年": nowTime.getFullYear(),"月": nowTime.getMonth() + 1,"日": nowTime.getDate(),"周": '星期' + "日一二三四五六".split("")[Number(nowTime.getDay())],"时": nowTime.getHours(),"分": nowTime.getMinutes(),"秒": nowTime.getSeconds()}
        };
        const reload=()=>{location.reload()};//重新加载
        function logs(...l){console.log("%cBox3ToolBox","background: #e7520d; border-radius: 3px; padding: 0 4px; color: #fff",...l)};//输出数据
        function isIE(){return !!document.documentMode};//是否是IE浏览器
        const requestAnimationFrame =
              window.requestAnimationFrame || // 谷歌浏览器
              window.webkitRequestAnimationFrame || // 其他浏览器
              window.mozRequestAnimationFrame || // 火狐浏览器
              window.oRequestAnimationFrame || // 欧朋浏览器
              window.msRequestAnimationFrame || // IE浏览器
              function(a){ // 上面这些都不是就返回这个函数
                  setTimeout(a,1000 / 60);
              };

        if(isIE()){alert("你这个浏览器好像太老了欸,\n试试换个Google Chrome或者Microsoft Edge再来体验CodemaoProMax吧~");return};//IE提示
        //主程序
        try{
            var mode114514 = 'box';
            var toolfunc = null;
            var toolfunc2 = null;
            var toolfunc3 = null;
            var tool;
            const getElement = async (selector, timeout = 30e3) => {
                let el;
                const start = Date.now();
                do {
                    el = document.querySelector(selector);
                    if (Date.now() - start > timeout) {
                        console.error("Wait element timeout.", selector);
                    }
                    await new Promise(requestAnimationFrame);
                } while (!el);
                return el;
            };
            const waitElement=async(selector)=>{let el;do{el=document.querySelector(selector);await new Promise(requestAnimationFrame)}while(!el);}
            addanot(document.body,"———————————————————————————————————————")
            addanot(document.body,`    CodemaoProMax ${banben} by 幻想一笑而过     `)
            addanot(document.body," https://box3.codemao.cn/u/hxyxeg666666 ")
            addanot(document.body,"———————————————————————————————————————")
            var statsDiv = new Stats();
            document.body.append(statsDiv.domElement);
            statsDiv.domElement.title="点击切换模式"
            function updatastate(){
                requestAnimationFrame(updatastate);
                statsDiv.update();
            }
            updatastate()
            var userhuanchun =null
            function logs(...l){console.log("[CodemaoProMaxLog]",...l)}
            function getMode(){
                var a = location.pathname,b
                if(window.location.hostname=='shequ.codemao.cn'){
                    mode114514='shequ'
                }else if(window.location.hostname=='box3.codemao.cn'||window.location.hostname=='box3.fun'){
                    mode114514='box'
                }

                if(mode114514=='box'){
                    if(a.startsWith("/e/")){
                        b="Edit"
                    }else if(a.startsWith("/p/")){
                        b="Play"
                    }else if(a.startsWith("/g/")){
                        b="MapRead"
                    }else if(a.startsWith("/m/")){
                        b="MusicRead"
                    }else if(a.startsWith("/v/")){
                        b="ModelRead"
                    }else if(a.startsWith("/me/content")){
                        if(/map|null/.test(String(getParameters("type"))))b="Works"
                        else if(/model/.test(String(getParameters("type"))))b="ModelWorks"
                        else if(/music/.test(String(getParameters("type"))))b="MusicWorks"
                        else b="OtherMode"
                    }else if(a.startsWith("/maas")){
                        b="Maas"
                    }else if(a.startsWith("/u/")){
                        b="User"//HomePage
                    }else if(a.startsWith("/block/Qm")&&/static.box3/.test(location.href)){
                        b="BoxStatic";
                    }else if(a=="/"){
                        //if(
                        b="HomePage"
                    }else {
                        b="OtherMode"
                    }
                }else{
                    //更换图标
                    //$('head').append('<link rel="shortcut icon" href="https://yuzifu.top/codemao.svg">')
                    if(a.startsWith("/work/")){ // 社区
                        b="shequWork"
                    }else if(a.startsWith("/community/")||a.startsWith('/wiki/forum/')){ // 社区帖子
                        b="shequCommunityRead"
                    }else if(a.startsWith("/community")){
                        b="shequCommunity";
                    }else{
                        b="ShequOtherMode"
                    }
                }
                return b;
            }
            var nowmode,beiyongnowmode;
            var initinterval = setInterval(()=>{
                nowmode = getMode();
                if(location.href != beiyongnowmode){
                    logs("更换模式 "+nowmode)
                    console.log(nowmode);
                    updatamode(nowmode)
                }
            },1)
            var cpmsetck=getCookie('cpmset');
            var codemaopromaxsettings = {
                width:245,
                showmonitor:true,
                monitorposition:0,
                monitortm:90,
                autoSave:false,
                save:()=>{
                    document.cookie=`cpmset=${JSON.stringify({
                        width:codemaopromaxsettings.width,
                        showmonitor:codemaopromaxsettings.showmonitor,
                        monitorposition:codemaopromaxsettings.monitorposition,
                        monitortm:codemaopromaxsettings.monitortm,
                        autoSave:codemaopromaxsettings.autoSave,
                    })};expires=Fri, 22 Sep 270056 16:00:00 GMT;path=/`;
                    cpmsetck=getCookie('cpmset');
                    if(!codemaopromaxsettings.autoSave)alert('保存成功!');
                },
                manualSave:()=>{
                    document.cookie=`cpmset=${JSON.stringify({
                        width:codemaopromaxsettings.width,
                        showmonitor:codemaopromaxsettings.showmonitor,
                        monitorposition:codemaopromaxsettings.monitorposition,
                        monitortm:codemaopromaxsettings.monitortm,
                        autoSave:codemaopromaxsettings.autoSave,
                    })};expires=Fri, 22 Sep 270056 16:00:00 GMT;path=/`;
                    cpmsetck=getCookie('cpmset');
                    alert('保存成功!');
                },
                del:()=>{
                    if(cpmsetck==null){alert('还未保存!');return;}
                    document.cookie=`cpmset=114514;expires=Fri, 22 Sep 2019 16:00:00 GMT`;
                    alert('删除成功!');
                },
                updateSettings:()=>{
                    var e = codemaopromaxsettings.monitorposition
                    var data=[[0,null,0,null],[0,null,null,0],[null,0,null,0],[null,0,0,null]];
                    statsDiv.domElement.style.top=typeof data[e][0]=="number"?data[e][0]+"px":"unset";statsDiv.domElement.style.bottom=typeof data[e][1]=="number"?data[e][1]+"px":"unset";
                    statsDiv.domElement.style.right=typeof data[e][3]=="number"?data[e][3]+"px":"unset";statsDiv.domElement.style.left=typeof data[e][2]=="number"?data[e][2]+"px":"unset";
                    tool.domElement.style.width=codemaopromaxsettings.width+"px";
                    var x = codemaopromaxsettings.showmonitor
                    statsDiv.domElement.style.display = x?"block":"none";//setmonitorposition.enable(x);setmonitortm.enable(x);
                    statsDiv.domElement.style.opacity = codemaopromaxsettings.monitortm/100;
                    GM_setValue("b3tbsettings", JSON.stringify(codemaopromaxsettings));
                },
                reset:()=>{
                    if(!confirm('确定重置全部设置吗!!'))return;
                    Object.assign(codemaopromaxsettings,{
                        width:245,
                        showmonitor:true,
                        monitorposition:0,
                        monitortm:90,
                    });
                    codemaopromaxsettings.autoSave=true;
                    codemaopromaxsettings.save();
                    codemaopromaxsettings.autoSave=false;
                    codemaopromaxsettings.updateSettings();
                    alert('重置成功!');
                }
            }
            if(cpmsetck!=null){
                try{
                    Object.assign(codemaopromaxsettings,JSON.parse(cpmsetck));
                }catch(err){
                    alert('保存的设置加载失败,如果需要,以下是错误信息:'+err);
                }
            }
            function updatamode(m){
                beiyongnowmode = location.href;
                logs("当前模式:"+m)
                var init = async(md)=>{
                    if(mode114514=='box'&&m!="BoxStatic"){
                        if(/Play|Edit/.test(m)){
                            toolfunc3 = document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props;
                        }else{
                            toolfunc3 = document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.website
                        }
                        logs(toolfunc2);
                        logs(toolfunc3);
                    }
                    const ranges = [
                        [0xA1, 0xA9, 0xA1, 0xFE],
                        [0xB0, 0xF7, 0xA1, 0xFE],
                        [0x81, 0xA0, 0x40, 0xFE],
                        [0xAA, 0xFE, 0x40, 0xA0],
                        [0xA8, 0xA9, 0x40, 0xA0],
                        [0xAA, 0xAF, 0xA1, 0xFE],
                        [0xF8, 0xFE, 0xA1, 0xFE],
                        [0xA1, 0xA7, 0x40, 0xA0],
                    ]
                    const codes = new Uint16Array(23940);
                    let i = 0

                    for (const [b1Begin, b1End, b2Begin, b2End] of ranges) {
                        for (let b2 = b2Begin; b2 <= b2End; b2++) {
                            if (b2 !== 0x7F) {
                                for (let b1 = b1Begin; b1 <= b1End; b1++) {
                                    codes[i++] = b2 << 8 | b1
                                }
                            }
                        }
                    }
                    const str = new TextDecoder('gbk').decode(codes);
                    const table = new Uint16Array(65536);
                    for (let i = 0; i < str.length; i++) {
                        table[str.charCodeAt(i)] = codes[i];
                    }
                    function stringToGbk(str='') {
                        const buf = new Uint8Array(str.length * 2)
                        let n = 0
                        let no=[],wrong=[];
                        for (let i = 0; i < str.length; i++) {
                            if(str[i]==' '){
                                wrong.push(n,n+1);
                            }
                            if(str[i].match(/[0-9a-zA-Z()!*]/)){
                                buf[n++] = 255;
                                no.push(str[i]);
                                continue;
                            }
                            if(str[i]=='€'){
                                buf[n++] = 0x80;
                                continue;
                            }
                            const code = str.charCodeAt(i)
                            if (code < 0x80) {
                                buf[n++] = code
                            } else {
                                const gbk = table[code];
                                buf[n++] = gbk & 0xFF
                                buf[n++] = gbk >> 8
                            }
                        }
                        return [buf.subarray(0, n),no,wrong]
                    }
                    function glabled_code_repair(t=''){
                        var [u8arr,uc,wrong]= stringToGbk(t);
                        var x = [''],q=0,ret=[''],q2=0,wait=false,ans='';
                        u8arr.forEach((e,i) => {
                            if(wrong.includes(i)){
                                if(!wait){
                                    ret.push('');
                                    x.push('');
                                    x[q2]+='?';
                                    q2++;
                                    wait=true;
                                }else{
                                    x[q2-1]+='?';
                                }
                            }else {
                                wait=false;
                                if(e==255){
                                    x[q2]+=uc[q++];
                                }else{
                                    var p=e.toString(16);
                                    if(p.length<2)p='0'+p;
                                    x[q2] += '%' + p;
                                }
                                try{
                                    ret[q2]=decodeURIComponent(x[q2]);
                                }catch(e){
                                    ret[q2]+='?';
                                }
                            }
                        });
                        ret.forEach(e=>{ans+=e});
                        return ans;
                    }
                    async function creat(hash, size) {
                        axios({
                            method: 'post',
                            url: 'https://backend.box3.fun/container/create-game-edit',
                            data: JSON.parse(`{"image":"Qmdkqjkx8YXCEzQuNrZhEr75dpRGHcWY7oiCxg5oQqfzox.png","name":"空白的地图(${size}) (未激活)","describe":"${size}","hash":"${hash}","resourceId":0}`),
                            withCredentials: true
                        })
                            .then(({
                            request
                        }) => {
                            console.log(JSON.parse(request.responseText)['data']['value'].slice(5));
                        });
                        location.reload();
                    }
                    function getGameplayCore() {
                        return document.querySelector(".desktop")._reactRootContainer._internalRoot
                            .current.updateQueue.baseState.element.props.children.props.children
                            .props;
                    }
                    var datas = {
                        "发送长消息":()=>{
                            var dialogs = addwindow("发送长消息","确保你没有被禁言,然后在下方输入消息,回车换行,Shift+回车发送。\n如果按某些按键时无法键入内容而导致人物移动,请自行在其他可以输入文本的网站或输入框等地方输入,复制后再粘贴过来\n另外,发送的内容请自行打开“聊天区”查看",500);
                            var div1 = addhtml(dialogs.dialog,"div",{class:"div"},"");
                            var div2 = addhtml(dialogs.dialog,"div",{class:"div"},"");
                            var input = addhtml(div2,"textarea",{style:"width:100%;height:250px;background:#0000;color:#fff;outline: none;resize: none;padding:10px;margin-top:10px"},"")
                            var fjcg=()=>{var a = addhtml(dialogs.dialog,"div",{class:"div"},"发送成功!");setTimeout(()=>{a.remove()},2000)}
                            var send = ()=>{
                                if(m=='Play'){
                                    toolfunc.state.box3.chat.sendMessage(input.value);
                                }else{
                                    toolfunc3.state.box3.chat.sendMessage(input.value);
                                }
                                setTimeout(()=>{input.value=""},100);fjcg()
                            }
                            addhtml(div1,"button",{},"粘贴文本").onclick=async()=>{input.value=await navigator.clipboard.readText();}
                            addhtml(div1,"button",{},"一键发送").onclick=send
                            input.onkeydown=(e)=>{if(e.key=="Enter"&&e.shiftKey){send()}}
                        },
                        "地图信息":()=>{
                            var dialogs = addwindow(toolfunc2.containerName,toolfunc2.containerDesc,500,"https://static.box3.codemao.cn/block/"+toolfunc2.image);
                            var div1 = addhtml(dialogs.dialog,"div",{class:"div"},"");
                            var fjcg=()=>{var a = addhtml(dialogs.dialog,"div",{class:"div"},"复制成功!");setTimeout(()=>{a.remove()},2000)}
                            addhtml(div1,"button",{},"复制地图名").onclick=()=>{navigator.clipboard.writeText(toolfunc2.containerName);fjcg()}
                            addhtml(div1,"button",{},"复制简介").onclick=()=>{navigator.clipboard.writeText(toolfunc2.containerDesc);fjcg()}
                            addhtml(div1,"button",{},"复制封面链接").onclick=()=>{navigator.clipboard.writeText("https://static.box3.codemao.cn/block/"+toolfunc2.image);fjcg()}
                            addhtml(div1,"button",{},"在新标签页中打开封面").onclick=()=>{window.open("https://static.box3.codemao.cn/block/"+toolfunc2.image)}
                        },
                        "未开放":()=>{
                            addwindow("敬请期待!","",300);
                        },
                        "更新说明":()=>{
                            addwindow("更新说明",`
3.10.11
🐞1.改了些bug
3.10.10
🌟1.控制台输入输出点击即可复制
🐞2.世界广播可选中应用到游玩端
3.10.9
🌟1.增加世界广播可复制
3.10.8
🌟1.增加服务条款
3.10.7
🐞1.改了些bug
3.10.6
🐞1.规范化社区功能
3.10.5
🐞1.改了些bug
3.10.4
🐞1.去除了萌新大佬整活加的劣质暗色模式()()
3.10.3
🌟1.新增社区代码框显示语言
🌟2.社区代码框添加了个复制按钮
3.10.2
🌟1.新增高级用户自定义功能(画质、音效、后期处理等自定义)
🐞2.修改自定义地图建造时使用的代码hash
🌟3.新增加入交流群通道
3.10.1
🌟1.新增保存设置功能
3.9.4
🌟1.受官方要求去除hash建造等功能
3.9.3
🌟1.修改自定义地图取值范围
3.9.2
🐞1.修改hash上传的UI显示逻辑
3.9.1
🌟1.新增hash上传功能(把hash上传至神岛服务器存储)
🌟2.新增使用hash建造功能(使用服务器中已经存储的hash建造地图)
3.3.4
🌟1.完善社区与神岛之间的判断
🌟2.改了个ico
3.3.3
🌟1.删除赘余无用或已失效功能代码
🌟2.pg数据库使用说明点击后直接跳转至网页,不弹出文本框
3.3.2
🐞1.修复了UI消失的bug
🐞2.修复了网页加速器的某个bug
3.3.1
🌟1.内置【油小猴】网页加速器(仅支持社区以及神岛加速),网页跳转速度预计增速至原来的150%
3.2.4
🌟1.优化uid显示UI
3.2.2
🐞1.修复uid显示bug
3.2.1
🐞1.修复任意大小地图制造功能bug
3.1.3
🌟1.新增GBK乱码修复
3.1.2
🌟1.同步更新论坛发帖防屏蔽防吃格式
3.1.1
🐞1.修复任意大小地图制造功能
2.9.1
🌟1.更新api
🐞2.因神岛新增加密,任意大小地图制造功能可能暂时已经无法使用
2.1.4
🌟1.同步更新论坛发帖防屏蔽防吃格式
2.1.3
🐞1.论坛发帖防屏蔽防吃格式bug修复
2.1.2
🌟1.论坛发帖防屏蔽防吃格式
2.1.1
🌟1.脚本范围升级覆盖全猫站
🌟2.完善了自定义地图
🌟3.新增社区作品跳转到创作星空树功能
1.1.4
🐞1.修复了自定义地图的部分bug
1.1.3
🌟1.新增年度百大创作之星个人主页提示
1.1.2
🌟1.新增自定义世界大小的数值要求(不遵守要求会导致建造失败)
1.1.1
🌟1.新增自定义世界大小以及数据库类型
1.0.2
🐞1.修复了bug
1.0.1
🌟1.大改脚本框架
🐞2.修复已知所有bug
🌟3.许可证更换为GNU GPL-3.0(仍然开源免费使用,但是修改必须使用GNU GPL-3.0许可证)
0.1.8
🌟1.协议更换为MIT
0.1.7
🌟1.协议更换为GPL
0.1.6
🌟1.新增创建pg数据库地图的功能
0.1.5
🌟1.新增创建704以及1024地图的功能
0.1.3
🌟1.优化代码结构,增加一点没用的功能
0.1.2
🐞1.修复若干bug,优化代码结构,去除无用功能
0.1.0
🌟1.上线
                        `,300);
                        },
                        "作者":()=>{
                            window.open("https://box3.codemao.cn/u/hxyxeg666666")
                        },
                        "Q群":()=>{
                            window.open("https://jq.qq.com/?_wv=1027&k=QEBGgH5r")
                        },
                        "服务条款":()=>{
                            window.open("https://paste.liumingye.cn/9657")
                        },
                        "建造256256704地图":async()=>{
                            if (confirm('确认创建256*256*704地图?')) {
                                creat('QmTuELNrZixUHYytsqJAUCw8R22868ePtkNCQ4DMUd8wCg', '256*256*704');
                            }
                            reload();
                        },
                        "建造1024641024地图":async()=>{
                            if (confirm('确认创建1024*64*1024地图?')) {
                                creat('QmNorKXGb2RwP3KRQBpkH2vfJJ4ziva5qMc1cU6SJyBSTa', '1024*64*1024');
                            }
                            reload();
                        },
                        "创作星空树":()=>{
                            var shequWorkId = window.location.pathname;
                            shequWorkId = shequWorkId.substring(shequWorkId.lastIndexOf('/') + 1, shequWorkId.length);
                            window.open(`https://shequ.codemao.cn/tree/${shequWorkId}`)
                        },
                        "pg数据库使用教程":async()=>{
                            window.open(`https://demo.hedgedoc.org/s/AHrRtpgBv`)
                        },
                        "无功能":()=>{},"回到原版神岛首页":()=>{location.href="https://box3.codemao.cn/"},
                        "清空聊天区":()=>{
                            if(nowmode=="Play"){
                                document.func.state.box3.state.chat.log=[]
                            }else if(nowmode="Edit"){
                                toolfunc3.state.box3.state.chat.log=[]
                            }
                        },
                        "GBK":()=>{
                            try{
                                var pre=document.querySelector('pre');
                                var rep=confirm('即将修复,显示“?”的地方为信息丢失处,以永久损失无法恢复');
                                if(!rep)return;
                                pre.innerText=glabled_code_repair(pre.innerText);
                            }catch(e){
                                alert('修复失败,报错:'+e.message);
                                console.error('Repair Error:'+e);
                            }
                        },
                        "GBK?":()=>{
                            alert('在box3 static中,文字是用GBK编码储存的,而信息上传时却通常使用UTF-8。两种编码对一个汉字使用的编码数量不同,因此当解析出现误差时就会显示乱码');
                        },
                    }
                    //plus
                    var custom = {
                        'x': 64,
                        'y': 64,
                        'z': 64,
                        'pg': false,
                        create: function () {
                            async function fetchVoxels(x, y, z) {
                                var ret;
                                if (x * y * z < 32768 || x * y * z > 67108864 || (x * y * z % 32768 != 0)) {
                                    alert('数值错误!');
                                    return null;
                                }
                                var chunks = [], xx = x / 32, yy = y / 32, zz = z / 32;
                                for (let i = 1; i < zz; i++) {
                                    chunks = chunks.concat(new Array(xx - 1).fill('"QmY4M7B58dARVAJyYf7aonuGjNnaUFUusCQXq9tmifLEKY"'));
                                    chunks.push('"Qmcoad9FnMdKGbxn5ifLdCaivVi6T7E2bmDVAdJbwuRD2a"');
                                    chunks = chunks.concat(new Array((yy - 1) * xx).fill('"QmYUffAgALxiUQonbhAVXjknTq3dNf3AfHQGQ8P5xny7TU"'));
                                    console.log(chunks);
                                }
                                chunks = chunks.concat(new Array(xx - 1).fill('"QmaCUNCe7XDEnXJqprgikquGk6H5nkMegxi77h2aaRyc2b"'));
                                chunks.push('"QmX49DZMGEY9ANyzfbrWhiEKk1hkz9SRpFn2NTKMRUjQzj"');
                                chunks = chunks.concat(new Array((yy - 1) * xx).fill('"QmYUffAgALxiUQonbhAVXjknTq3dNf3AfHQGQ8P5xny7TU"'));
                                var voxels = `{"chunks": [${chunks}],"shape": {"x": ${x},"y": ${y},"z": ${z}}}`;
                                console.log('chunk=' + chunks.length);
                                //voxels='{"chunks": ["QmYUffAgALxiUQonbhAVXjknTq3dNf3AfHQGQ8P5xny7TU"],"shape": {"x": 2,"y": 2,"z": 2}}'
                                return fetch('https://static.box3.codemao.cn/block/', { method: 'POST', body: voxels });
                            }
                            var { x, y, z, pg } = custom;
                            fetchVoxels(x, y, z)
                                .then(response => {
                                var res = response.json();
                                return res;
                            })
                                .then(result => result.Key)
                                .then(async function (voxelsHash) {
                                console.log('voxelhash=' + voxelsHash);
                                if (voxelsHash == null) return;
                                if (!confirm("提示:确认创建?")) return;
                                var hash;
                                var sql;
                                var date = new Date();
                                var time = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${date.getHours()}:${date.getMinutes()}:00.000Z`;
                                if (pg) {
                                    sql = 'pg';
                                } else {
                                    sql = 'sqlite';
                                }
                                var playerHash;
                                var plbody = `{"allowAction0":true,"allowAction1":true,"allowDoubleJump":true,"allowFlight":false,"allowJump":true,"allowMove":true,"cameraType":"follow","color":[1,1,1],"colorLUT":"","crouchAcceleration":0.09,"crouchSpeed":0.1,"damage":{"enabled":false,"hp":100,"maxHp":100,"showDamage":true,"showHealth":true},"doubleJumpPower":0.9,"emissive":0,"flyAcceleration":2,"flySpeed":2,"friction":0,"initialPosition":{"x":${(x-1)/2},"y":${y+Math.round(y/128*25)-1},"z":${(z-1)/2}},"initialYaw":0,"invisible":false,"jumpAccelerationFactor":0.55,"jumpPower":0.96,"jumpSpeedFactor":0.85,"mass":1,"metalness":0,"movementBounds":{"hi":{"x":${x + 49},"y":${y + 49},"z":${z + 49}},"lo":{"x":-50,"y":-50,"z":-50}},"noClip":false,"playerSounds":{"action0":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":""},"action1":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":""},"crouch":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":""},"doubleJump":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/double_jump.mp3"},"endFly":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":""},"enterWater":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/dive.mp3"},"jump":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/jump.mp3"},"land":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/land.mp3"},"leaveWater":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/splash.mp3"},"music":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":0,"sample":""},"spawn":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/spawn.mp3"},"startFly":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":""},"step":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0.2,"radius":32,"sample":"audio/step.mp3"},"swim":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/swim.mp3"}},"restitution":0,"runAcceleration":0.35,"runSpeed":0.4,"scale":1,"shininess":0,"showName":true,"sounds":{"chat":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/chat.mp3"},"die":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/die.mp3"},"hurt":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":"audio/hurt.mp3"},"interact":{"gain":1,"gainRange":0,"pitch":1,"pitchRange":0,"radius":32,"sample":""}},"swimAcceleration":0.1,"swimSpeed":0.4,"walkAcceleration":0.19,"walkSpeed":0.22}`
                                await fetch('https://static.box3.codemao.cn/block/', { method: 'POST', body: plbody }).then(async (response) => { var k = await response.json(); playerHash = k.Key; console.log(playerHash) }).catch(() => console.log('catch'));
                                var mpbody = `{"ambientSound":"QmcNbLSSQfVcDpH9jSX38RSVrL1SZK3vNMZwaP7cMkKqvY","assets":"QmdEyTaW4uENRCGu9cSUPFNDH5vJRX8n4BxtJYuzVs2kn1","collisionFilter":[],"committerId":0,"deleteAssets":"QmTgK2uYPscacJ9KaBS8tryXRF5mvjuRbubF7h9bG2GgoN","editRoot":"QmTgK2uYPscacJ9KaBS8tryXRF5mvjuRbubF7h9bG2GgoN","entities":"QmSvPd3sHK7iWgZuW47fyLy4CaZQe2DwxvRhrJ39VpBVMK","environment":"QmRC98696VxEVsScYsChTzU2uDguFBboruxKYhwtFnAPK7","features":{"enableTriggerAPI":true},"folders":"QmSvPd3sHK7iWgZuW47fyLy4CaZQe2DwxvRhrJ39VpBVMK","info":"QmXNsFZxmhdfyMbdc6BaoDgkfWAjgbPGrps3UNk3tJLNiR","physics":"QmTzt6Z6Mm11NQjTeXspDMJtddzDadzwhgwfWUtNG5XCrD","player":"${playerHash}","prevHash":"QmP2c7LxFD2j2EBk6inaDhhBE2DuuQ2TLtJRNpKXLyvbuL","scriptAssets":"QmRXNPBs1KsqFMFfqi5noDfFnzLdFVQwxMGtA5aAg8hjbd","scriptIndex":"index.js","storageMode":"${sql}","timestamp":"${time}","type":"project","version":"0.3.11","voxels":"${voxelsHash}","zones":"QmTgK2uYPscacJ9KaBS8tryXRF5mvjuRbubF7h9bG2GgoN"}`;
                                await fetch('https://static.box3.codemao.cn/block/', { method: 'POST', body: mpbody }).then(async function (response) {
                                    var k = await response.json();
                                    hash = k.Key;
                                    console.log(hash);
                                }).catch(function () {
                                    console.log('catch')
                                });
                                console.log(hash)
                                creat(hash, `${x}*${y}*${z}的地图`)
                            });
                        }
                    };
                    var shijiao = {
                        '1':()=>{
                            document.func.state.box3.state.secret.replica.camera.mode = 2
                        },
                        '2':()=>{
                            document.func.state.box3.state.secret.replica.camera.mode = 0
                        },
                        '3':()=>{
                            document.func.state.box3.state.secret.replica.camera.mode = 1
                        },
                        '4':()=>{
                            document.func.state.box3.state.secret.replica.camera.mode = 3
                        },
                        '5':()=>{
                            document.func.state.box3.state.secret.replica.camera.mode = 4
                        },
                    }
                    if(window["codemaopromaxDiv"]){window["codemaopromaxDiv"].destroy();window["codemaopromaxDiv"]=undefined}
                    tool = new lil.GUI({ title: `🧰 CodemaoProMax${/Play|Edit/.test(md)?("("+md+"Mode)"):""}` });
                    tool.domElement.style.top = 'unset';
                    tool.domElement.style.bottom = '0';
                    tool.domElement.style.userSelect = 'none';
                    window["codemaopromaxDiv"]=tool;
                    var p25 = tool.addFolder('CodemaoProMax设置(Settings)').close();
                    p25.add(codemaopromaxsettings, 'width', 200, document.documentElement.clientWidth-200, 1).name('工具栏长度').onFinishChange((e)=>{
                        tool.domElement.style.width=e+"px";
                        if(codemaopromaxsettings.autoSave)codemaopromaxsettings.save();
                    })
                    p25.add(codemaopromaxsettings, 'showmonitor').name('显示监视器').onChange((e)=>{
                        statsDiv.domElement.style.display = e?"block":"none";
                        if(codemaopromaxsettings.autoSave)codemaopromaxsettings.save();
                    });
                    p25.add(codemaopromaxsettings, 'monitorposition',{"左上角":0,"右上角":1,"右下角":2,"左下角":3}).name('监视器位置').onChange((e)=>{
                        var data =[
                            [0,null,0,null],
                            [0,null,null,0],
                            [null,0,null,0],
                            [null,0,0,null]
                        ]
                        statsDiv.domElement.style.top=typeof data[e][0]=="number"?data[e][0]+"px":"unset";
                        statsDiv.domElement.style.bottom=typeof data[e][1]=="number"?data[e][1]+"px":"unset";
                        statsDiv.domElement.style.right=typeof data[e][3]=="number"?data[e][3]+"px":"unset";
                        statsDiv.domElement.style.left=typeof data[e][2]=="number"?data[e][2]+"px":"unset";
                        if(codemaopromaxsettings.autoSave)codemaopromaxsettings.save();
                    });
                    p25.add(codemaopromaxsettings, 'monitortm',10,100,1).name('监视器不透明度').onChange((e)=>{
                        statsDiv.domElement.style.opacity = e/100;
                        if(codemaopromaxsettings.autoSave)codemaopromaxsettings.save();
                    });
                    p25.add(codemaopromaxsettings, 'autoSave').name('自动保存').onChange((e)=>{
                        if(codemaopromaxsettings.autoSave)codemaopromaxsettings.save();
                    });
                    p25.add(codemaopromaxsettings, 'manualSave').name('手动保存');
                    p25.add(codemaopromaxsettings, 'del').name('删除保存的设置');
                    p25.add(codemaopromaxsettings, 'reset').name('重置设置');
                    codemaopromaxsettings.updateSettings();
                    var p1 = tool.addFolder('常用功能(Tools)');
                    if(/Play|Edit/.test(m)){
                        p25.close()
                        var p11 = p1.addFolder('✨ 地图(Map)');
                        var p111 = p11;
                        p111.add(datas, '地图信息').name('✨ 地图信息');
                        var p12 = p1.addFolder('✉ 聊天(Chat)');
                        p12.add(datas, '发送长消息').name('✉ 发送长消息');
                        p12.add(datas, '清空聊天区').name('✖ 清空聊天区');
                        var interval = setInterval(()=>{
                            var jianceduixiang =
                                (
                                    m=="Play"?
                                    document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props.eventBackendURL:
                                    document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props.language
                                );
                            if(!jianceduixiang){
                                if(window["codemaopromaxDiv"]){window["codemaopromaxDiv"].destroy();window["codemaopromaxDiv"]=undefined}
                                clearInterval(interval);
                            }
                        },100);
                    }
                    var p2 = tool.addFolder('关于 当前版本:'+banben).close();
                    p2.add(datas, '服务条款').name('❗️ 服务条款');
                    p2.add(datas, '作者').name('✨ 作者主页');
                    p2.add(datas, '更新说明').name('🆕 更新说明');
                    p2.add(datas, 'Q群').name('✉ 联系我们');
                    function returnTime(t) {
                        var nowTime = new Date(t)
                        return {
                            "年": nowTime.getFullYear(),
                            "月": nowTime.getMonth() + 1,
                            "日": nowTime.getDate(),
                            "周": '星期' + ['日', '一', '二', '三', '四', '五', '六'][Number(nowTime.getDay())],
                            "时": nowTime.getHours(),
                            "分": nowTime.getMinutes(),
                            "秒": nowTime.getSeconds()
                        }
                    }
                    if(/MapRead|MusicRead|ModelRead/.test(m)){
                        window["workcontent"] = await document.func.rpc.content.api.get({
                            type: "id",
                            data: {
                                contentId: Number(location.pathname.replace(location.pathname.substring(0,3), "")),
                                isPublic: true,
                                meshHash: location.pathname.substring(1,2)=="v"?true:false,
                                type: {g:1,v:2,m:3}[location.pathname.substring(1,2)],
                                userId: 0,
                            },
                        })
                        logs(workcontent)
                        var datas2 = {
                            "获取建造时间":()=>{
                                var t = returnTime(workcontent.created_at.valueOf())
                                addwindow("开始制作时间",`${t.年}月${t.月}月${t.日}日 ${t.周} ${(String(t.时).length==1?'0'+t.时:t.时)}:${(String(t.分).length==1?'0'+t.分:t.分)}:${(String(t.秒).length==1?'0'+t.秒:t.秒)}`)
                            },
                            "查看全面展示图":()=>{
                                var dialog = addwindow("查看展示图",`请选择一张:`).dialog
                                for(var a in workcontent.banner){
                                    var b = addhtml(dialog,"div",{class:"div",style:"font-size:13px"},"")
                                    var c = Number(a)+1
                                    addhtml(b,"span",{style:"margin-right:5px"},"第"+c+"张:")
                                    addhtml(b,"a",{href:"https://static.box3.codemao.cn/block/"+workcontent.banner[a],target:"_blank",style:"color:#fff;text-decoration: underline;"},workcontent.banner[a])
                                }
                            },
                            "查看高清封面":()=>{
                                window.open(`https://static.box3.codemao.cn/block/${workcontent.image}_cover_1024_1024.png`)
                            },
                        };
                    }
                    console.log('m:'+m)
                    console.log('md:'+md)
                    console.log(m=='shequCommunity')
                    if(md == 'Play'){
                        tool.close()
                        userhuanchun=null
                        var p14 = p1.addFolder('🆕 🔥 🎮 游玩辅助工具').close();
                        var p145 = p14.addFolder('⚙ 高级用户设置(User Settings)').close();
                        var p1441 = p145.addFolder('📈 视觉&性能').close();
                        var p1444 = p145.addFolder('💻 渲染后期处理').close();
                        var p1442 = p145.addFolder('♫ 音量合成器').close();
                        var p1443 = p145.addFolder('✨ 实体粒子数量').close();
                        ;[//数据来源于box3++
                            p1441.add(document.func.state.uiState.settings, "resolutionScale", 0.1, 2, 0.01).name("清晰度(重进生效)"),
                            p1441.add(document.func.state.uiState.settings, "animationQuality", 0, 200, 1).name("动画质量(0为无)"),
                            p1441.add(document.func.state.uiState.settings, "drawDistance", 1, 1024, 0.01).name("视野距离"),
                            p1441.add(document.func.state.uiState.settings, "cameraSensitivity",0.01, 3, 0.01).name("视角灵敏度"),
                            p1441.add(document.func.state.uiState.settings, "safeShaders").name("安全光影"),
                            p1441.add(document.func.state.uiState.settings, "shadowResolution", 0, 16384, 1).name("阴影质量(0为关)"),
                            p1441.add(document.func.state.uiState.settings, "gamma", 0, 2, 0.1).name("伽马"),
                            p1441.add(document.func.state.uiState.settings, "lowQualityTextures").name("低质量贴图"),
                            p1441.add(document.func.state.uiState.settings, "hdSky").name("高清天空"),
                            p1441.add(document.func.state.uiState.settings, "reflections").name("反射模式"),
                            p1441.add(document.func.state.uiState.settings, "parallaxMap").name("视差贴图"),
                            p1441.add(document.func.state.uiState.settings, "parallaxDistance", 1, 128, 0.1).name("视差距离"),
                            p1444.add(document.func.state.uiState.settings, "postprocess").name("开启 ☛"),
                            p1444.add(document.func.state.uiState.settings, "depthOfField", 0, 100, 1).name("景深强度(0为关)"),
                            p1444.add(document.func.state.uiState.settings, "volumetricScattering").name("体积散射"),
                            p1444.add(document.func.state.uiState.settings, "bloom").name("荧光特效"),
                            p1444.add(document.func.state.uiState.settings, "fxaa").name("抗锯齿特效"),
                            p1442.add(document.func.state.uiState.settings, "masterMute").name("主音量静音"),
                            p1442.add(document.func.state.uiState.settings, "masterVolume", 0, 1, 0.01).name("主音量大小"),
                            p1442.add(document.func.state.uiState.settings, "effectsMute").name("音效静音"),
                            p1442.add(document.func.state.uiState.settings, "effectsVolume", 0, 1).name("音效音量"),
                            p1442.add(document.func.state.uiState.settings, "maxSoundEffects", 0, 100, 1).name("最大音效数量"),
                            p1442.add(document.func.state.uiState.settings, "uiMute").name("界面音效静音"),
                            p1442.add(document.func.state.uiState.settings, "uiVolume", 0, 1, 0.01).name("界面音效音量"),
                            p1442.add(document.func.state.uiState.settings, "musicMute").name("背景音乐静音"),
                            p1442.add(document.func.state.uiState.settings, "musicVolume", 0, 1, 0.01).name("背景音乐音量"),
                            p1443.add(document.func.state.uiState.settings, "maxParticles", 0, 131052, 1).name("最大粒子数量"),
                            p1443.add(document.func.state.uiState.settings, "maxParticleGroups", 0, 1024, 1).name("最大粒子组数量"),
                        ].forEach((i) => i.onChange(()=>{getGameplayCore().setGameSettings(document.func.state.uiState.settings);}));
                        setInterval(()=>{
                            var a=document.querySelectorAll('._2x0RglLpha6lx9vdRMkP5r');
                            if(!a.length)return;
                            a.forEach(e=>{
                                if(e.children.length)return;
                                var k=e.innerText;
                                e.innerHTML=`<p style="user-select: text"></p>`;
                                e.children[0].innerText=k;
                            });
                        },100);
                        ;var boxIddddd=document.func.state.uiState.userId;logs(boxIddddd);var admins=[2526,3514199];if(admins.includes(boxIddddd)){logs("it's admin");document.func.brpc.skin.api.getAll().then((e)=>{document.func.state.box3.state.secret.availableSkin=e.map((e)=>{return e.name})})};
                    }else if(md=="Edit"){
                        tool.close()
                        userhuanchun=null
                        var p115 = p1.addFolder('界面显示');
                        p115.add(toolfunc3.state.box3.state, "hideUI").name("👁隐藏界面");
                        setInterval(()=>{
                            var a=document.querySelectorAll('.ewiWP7xeQi2lL41Slo6EY');
                            if(!a.length)return;
                            for(const i of a[0].children){
                                i.onclick=()=>{
                                    navigator.clipboard.writeText(i.innerText).then(()=>{
                                        alert('复制成功!');
                                    }).catch((err)=>{
                                        alert('复制失败!\n'+err);
                                    });
                                }
                            }
                        },100);
                        setInterval(()=>{
                            var a=document.querySelectorAll('._2x0RglLpha6lx9vdRMkP5r');
                            if(!a.length)return;
                            a.forEach(e=>{
                                if(e.children.length)return;
                                var k=e.innerText;
                                e.innerHTML=`<p style="user-select: text"></p>`;
                                e.children[0].innerText=k;
                            });
                        },100);
                    }
                    else if(md=="Works"){
                        userhuanchun=null
                        var p11111 = p1.addFolder('建造地图(Create Map)');
                        var p111111 = p11111.addFolder('巨大地图');
                        //var p231111 = p11111.addFolder('pg数据库地图地图');
                        p111111.add(datas, '建造256256704地图').name('建造一个 256x256x704 巨大地图');
                        p111111.add(datas, '建造1024641024地图').name('建造一个 1024x64x1024 贼大地图');
                        //p111111.add(datas, '建造任意大小地图').name('建造 任意大小+自定义数据库 地图');
                        var p231111 = p11111.addFolder('自定义地图');
                        p231111.add(custom, 'x', 1, 65536, 1).name('x');
                        p231111.add(custom, 'y', 1, 65536, 1).name('y');
                        p231111.add(custom, 'z', 1, 65536, 1).name('z');
                        p231111.add(custom, 'pg').name('使用pg数据库?');
                        p231111.add(custom, 'create').name('创建');
                        p11111.add(datas, 'pg数据库使用教程').name('pg数据库使用教程');
                    }
                    else if(md=="Maas"){
                        userhuanchun=null
                        p1.add(datas, '回到原版神岛首页').name('回到原版神岛首页');
                        if(confirm("检测到当前为首页为商业版,\n是否跳转到原版神岛首页?")){datas['回到原版神岛首页']()}
                    }
                    else if(md=="HomePage"){
                        userhuanchun=null
                        var datas3 = {
                            仅显示非官方的首页作品:async()=>{
                                var uctsyv = document.querySelector("#main > ._9m6A3-68k5itHRQwRNTQr > ._3IbS6Ew1CROpnsaTbrniXH > .pHRRH-pJlcoCY3qP0gcFI > div > div > ._2X5BYLn0E98PdZ5lEkhpVc > ._2p590X3xza5oTJJZ3ToFcx")
                                var allP =  uctsyv.querySelectorAll("._1yZ6NeMjfGScb4F10xmspg")
                                allP.forEach(async(e)=>{
                                    var root = null
                                    for(var p in e){
                                        if(p.startsWith("__reactEventHandlers")){
                                            root=e[p].children.props
                                            break
                                        }
                                    }
                                    var aid = root.data.authorId
                                    var aidata = await document.func.rpc.user.api.get({publishedContentsCount:true,condition:"id",value:String(aid)})
                                    console.log(root.data.name,aidata.displayname,root,aidata)
                                    if(aidata.tag==1||aidata.id==1927){
                                        e.remove()
                                    }
                                })
                            }
                        };
                        if(mode114514=='box')p1.add(datas3, '仅显示非官方的首页作品').name('仅显示非官方的首页作品');
                    }
                    else if(md=="User"){
                        var ssv = location.pathname.replace(location.pathname.substring(0,3), "")
                        if(isNaN(Number(ssv))){
                            window["usercontent"] = await document.func.rpc.user.api.get({publishedContentsCount:true,condition:"username",value:ssv})
                        }else{
                            window["usercontent"] = await document.func.rpc.user.api.get({publishedContentsCount:true,condition:"id",value:ssv})
                        }
                        console.log(usercontent)
                        setTimeout(()=>{
                            if(userhuanchun=="/u/")return
                            userhuanchun = location.pathname.substring(0,3)
                            var normalUsers=`<div class="_3ad7RnKp0WvPrytuJgHNZC">`;
                            var official=`<div class="O_1bkQ86ZNwsQID9yt2-5 IWXvKdLYkyQRIR-bhYjk1 _1lys4tbynXnfWH-M3WNvLL"><picture><source type="image/avif" srcset="https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_16_16_cover.avif 1x, https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_32_32_cover.avif 2x"><source type="image/webp" srcset="https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_16_16_cover.webp 1x, https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_32_32_cover.webp 2x"><source type="image/jpeg" srcset="https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_16_16_cover.jpg 1x, https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_32_32_cover.jpg 2x"><source type="image/png" srcset="https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_16_16_cover.png 1x, https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_32_32_cover.png 2x"><img alt="" width="16" height="16" class="_3vfmbi4TlRDt_HCAsy45gl web-img" crossorigin="anonymous" src="https://static.box3.codemao.cn/img/QmPAKA9JfXiBXVDYGRe4B1x8e4abA2p5kDcpcZUrwNFMzh_16_16_cover.png" style="border: none; margin-right: 4px;"></picture><span class="_2IjTwrns7m6QeUouRJZaJK">`;
                            var vvvip=`<div class="O_1bkQ86ZNwsQID9yt2-5 IWXvKdLYkyQRIR-bhYjk1 _2CIZkiR5Tk_te3xyfL1QWJ"><picture><source type="image/avif" srcset="https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_16_16_cover.avif 1x, https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_32_32_cover.avif 2x"><source type="image/webp" srcset="https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_16_16_cover.webp 1x, https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_32_32_cover.webp 2x"><source type="image/jpeg" srcset="https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_16_16_cover.jpg 1x, https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_32_32_cover.jpg 2x"><source type="image/png" srcset="https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_16_16_cover.png 1x, https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_32_32_cover.png 2x"><img alt="" width="16" height="16" class="_3vfmbi4TlRDt_HCAsy45gl web-img" crossorigin="anonymous" src="https://static.box3.codemao.cn/img/QmfBiBYTz4KY9SuGJvvhZLL52b852a5CsS1ipzzciTuGnM_16_16_cover.png" style="border: none; margin-right: 4px;"></picture><span class="mj5Q_r1tWrcjg7W7QLjHI">`
                            var uctsyv = document.querySelector("#main > main._2jTAXSb-GRY2o25tiqdq_z > ._1j6CQ8Mao1X47ufWW0UfI5 > .eQ4WOXbFnE2kwanAO8YNj > ._16IUw3NEvNlyHAOuWKbRMb > .flex > .flex")
                            var devId = [2526,3514199,4075204];
                            if(devId.includes(usercontent.id)){
                                addhtml(uctsyv,"div",{},official+`CodemaoProMax开发者</div>`)
                            }
                            if(usercontent.id=="106081"){
                                addhtml(uctsyv,"div",{},official+`幻想一笑而过小号</div>`)
                            }
                            if(usercontent.id=="8"){
                                addhtml(uctsyv,"div",{},vvvip+`shyfcka</div>`)
                            }
                            addhtml(uctsyv,"div",{},normalUsers+`UID:${usercontent.id}</div>`)
                        },1000)
                        p1.add({
                            "查看高清头像":()=>{
                                window.open(`https://static.box3.codemao.cn/block/${usercontent.avatar_hash}_cover_1024_1024.png`)
                            },
                        }, '查看高清头像').name('查看1024×1024高清头像');
                    }
                    else if(m=='shequWork'){
                        userhuanchun=null
                        p1.add(datas, '创作星空树').name('跳转到创作星空树');
                    }
                    else if(m=='shequCommunity'){
                        userhuanchun=null
                        logs('success shequCommunity')
                        //onload = async () => {
                        'use strict';
                        let link = document.createElement("link");
                        link.rel = "stylesheet";
                        link.type = "text/css";
                        link.href = "https://unpkg.com/[email protected]/dist/css/mdui.min.css";
                        document.head.appendChild(link);
                        var doNotShield = {
                            width: 640,
                            height: 480,
                            run: async () => {
                                const content = document.querySelector(textarea).contentDocument.body;
                                const data = encodeURI(`<link href="https://static.codemao.cn/community/prism/prism.min.css" rel="stylesheet" type="text/css" />${content.innerHTML}`);
                                GM_xmlhttpRequest({
                                    method: "post",
                                    url: "https://static.box3.codemao.cn/block",
                                    data: data,
                                    binary: true,
                                    async onload({ response }) {
                                        document.querySelector(textarea).contentDocument.body.innerHTML = `<iframe src="//box3statichelper.pythonanywhere.com/hash.html?hash=${JSON.parse(response).Key}" style="width: ${doNotShield.width}px; height: ${doNotShield.height}px; display: block; margin: 40px auto; max-width: 100%;"></iframe>`;
                                    },
                                });
                            }
                        };
                        const textarea = "#react-tinymce-0_ifr";
                        //document.querySelector("#root > div > div.r-index--main_cont > div > div.r-community--right_search_container > div > div.r-community--search_header > a.r-community--send_btn").addEventListener("click", () => {
                        p1.add(doNotShield, "width", 10, 1500, 10).name("宽度(px)");
                        p1.add(doNotShield, "height", 10, 3000, 10).name("高度(px)");
                        p1.add(doNotShield, "run").name("使用防屏蔽功能");
                        //});
                        //document.querySelector("#root > div > div.r-index--main_cont > div > div:nth-child(4) > div > div.c-model_box--content_wrap > div > a").addEventListener("click", () => {
                        //
                        //});
                        //};
                    }else if(m=="shequCommunityRead"){
                        const CODES={
                            'javascript':'JavaScript',
                            'python':'Python',
                            'cpp':'C++',
                            'c':'C'
                        }
                        console.log(CODES);
                        setInterval(()=>{
                            document.querySelectorAll('code').forEach((c)=>{
                                if(c.className.trim().startsWith('language')&&c.parentElement.children.length<=1){
                                    var f=c.parentElement;
                                    var d=document.createElement('div');
                                    d.innerHTML=`<span id="_mce_caret" data-mce-bogus="1" data-mce-type="format-caret"><strong><span style="font-size: x-large;" data-mce-style="font-size: x-large;">&#65279;源代码-${CODES[c.className.trim().slice(9)]} </span></strong></span><br data-mce-bogus="1">`;
                                    f.insertBefore(d,c);
                                    var b=document.createElement('button');
                                    b.innerHTML='<img src="https://static.box3.codemao.cn/block/QmRjcKZT7hsCPLqufrb4q6CGpiakqqEze8DnTLDQLAAzE7.png" width="20">';
                                    b.onclick=()=>{
                                        navigator.clipboard.writeText(c.innerText).then(()=>{
                                            alert('复制成功!');
                                        }).catch((err)=>{
                                            alert('复制失败!\n'+err);
                                        });
                                    }
                                    d.appendChild(b);
                                    d.style.display='flex';
                                    d.style.backgroundColor='#e2ddd9';
                                }
                            });
                        },1000);
                        p1.add(datas, '未开放').name('本页面暂无其他扩展工具');
                    }
                    else if(m=="MapRead"){
                        userhuanchun=null
                        p1.add(datas2, '获取建造时间').name('获取开始制作时间');
                        p1.add(datas2, '查看高清封面').name('查看1024×1024高清封面');
                        p1.add(datas2, '查看全面展示图').name('查看全面+高清展示图');
                    }
                    else if(m=="ModelRead"){
                        userhuanchun=null
                        p1.add(datas2, '获取建造时间').name('获取开始制作时间');
                    }
                    else if(m=="MusicRead"){
                        userhuanchun=null
                        p1.add(datas, '未开放').name('本页面暂无其他扩展工具');
                    }
                    else if(m=="BoxStatic"){
                        userhuanchun=null;
                        p1.add(datas,'GBK').name('GBK乱码修复');
                        p1.add(datas,'GBK?').name('❔ 什么是GBK乱码');
                    }
                    else{
                        userhuanchun=null
                        p1.add(datas, '无功能').name('本页面暂无其他扩展工具')
                    }
                }
                if(/Play|Edit/.test(m)){
                    logs("地图模式:"+m)
                    document.func = document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props;
                    toolfunc=document.func
                    logs(document.func);
                    if(m=="Play"){
                        var nowDH= new Date().getHours()
                        logs(nowDH)
                        var admins=[2526];
                    }else if(m=="Edit"){}
                    var interval = setInterval(()=>{
                        var jianceduixiang =
                            (
                                m=="Play"?
                                document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props.eventBackendURL:
                                document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props.language
                            )
                        if(jianceduixiang){
                            init(m);
                            clearInterval(interval);
                        }else{
                            toolfunc2 = document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props;
                        }
                    },100);
                }else{
                    logs("其他模式:"+m)
                    if(mode114514=='box'&&m!="BoxStatic"){
                        document.func = document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.website;
                        toolfunc=document.func;
                        logs(document.func);
                        var interval = setInterval(()=>{
                            var jianceduixiang =document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.website.intl.locale;
                            if(jianceduixiang){
                                init(m);
                                clearInterval(interval);
                            }else{
                                toolfunc2 = document.querySelector(".desktop")._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.website;
                            }
                        },100);
                    }else{
                        init(m);
                        clearInterval(interval);
                    }
                }
            }
            // 网页提速
            // https://greasyfork.org/zh-CN/scripts/436453
            let util = {
                getValue(name) {
                    return GM_getValue(name);
                },

                setValue(name, value) {
                    GM_setValue(name, value);
                },

                include(str, arr) {
                    str = str.replace(/[-_]/ig, '');
                    for (let i = 0, l = arr.length; i < l; i++) {
                        let val = arr[i];
                        if (val !== '' && str.toLowerCase().indexOf(val.toLowerCase()) > -1) {
                            return true;
                        }
                    }
                    return false;
                },

                addStyle(id, tag, css) {
                    tag = tag || 'style';
                    let doc = document, styleDom = doc.getElementById(id);
                    if (styleDom) return;
                    let style = doc.createElement(tag);
                    style.rel = 'stylesheet';
                    style.id = id;
                    tag === 'style' ? style.innerHTML = css : style.href = css;
                    doc.head.appendChild(style);
                },

                reg: {
                    chrome: /^https?:\/\/chrome.google.com\/webstore\/.+?\/([a-z]{32})(?=[\/#?]|$)/,
                    edge: /^https?:\/\/microsoftedge.microsoft.com\/addons\/.+?\/([a-z]{32})(?=[\/#?]|$)/,
                    firefox: /^https?:\/\/(reviewers\.)?(addons\.mozilla\.org|addons(?:-dev)?\.allizom\.org)\/.*?(?:addon|review)\/([^/<>"'?#]+)/,
                    microsoft: /^https?:\/\/(?:apps|www).microsoft.com\/(?:store|p)\/.+?\/([a-zA-Z\d]{10,})(?=[\/#?]|$)/,
                }
            };

            let main = {
                initValue() {
                    let value = [{
                        name: 'setting_success_times',
                        value: 0
                    }, {
                        name: 'allow_external_links',
                        value: true
                    }, {
                        name: 'allow_query_links',
                        value: true
                    }, {
                        name: 'enable_store_link',
                        value: true
                    }, {
                        name: 'enable_target_self',
                        value: false
                    }, {
                        name: 'enable_animation',
                        value: false
                    }, {
                        name: 'delay_on_hover',
                        value: 65
                    }, {
                        name: 'exclude_list',
                        value: ''
                    }, {
                        name: 'exclude_keyword',
                        value: 'login\nlogout\nregister\nsignin\nsignup\nsignout\npay\ncreate\nedit\ndownload\ndel\nreset\nsubmit\ndoubleclick\ngoogleads\nexit'
                    }];

                    value.forEach((v) => {
                        util.getValue(v.name) === undefined && util.setValue(v.name, v.value);
                    });
                },

                registerMenuCommand() {
                    GM_registerMenuCommand('🚀 已加速:' + util.getValue('setting_success_times') + '次', () => {
                        Swal.fire({
                            showCancelButton: true,
                            title: '确定要重置加速次数吗?',
                            icon: 'warning',
                            confirmButtonText: '确定',
                            cancelButtonText: '取消',
                            customClass: {
                                popup: 'instant-popup',
                            },
                        }).then((res) => {
                            if (res.isConfirmed) {
                                util.setValue('setting_success_times', 0);
                                history.go(0);
                            }
                        });
                    });
                    GM_registerMenuCommand('⚙️ 设置', () => {
                        let dom = `<div style="font-size: 1em;">
                              <label class="instant-setting-label">加速外部链接<input type="checkbox" id="S-External" ${util.getValue('allow_external_links') ? 'checked' : ''} class="instant-setting-checkbox"></label>
                              <label class="instant-setting-label"><span>加速含参数链接 <a href="https://www.youxiaohou.com/tool/install-instantpage.html#%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E">详见</a></span><input type="checkbox" id="S-Query" ${util.getValue('allow_query_links') ? 'checked' : ''}
                              class="instant-setting-checkbox"></label>
                              <label class="instant-setting-label">加速扩展/应用商店链接<input type="checkbox" id="S-Store" ${util.getValue('enable_store_link') ? 'checked' : ''} class="instant-setting-checkbox"></label>
                              <label class="instant-setting-label">加速链接在当前页打开<input type="checkbox" id="S-Target" ${util.getValue('enable_target_self') ? 'checked' : ''} class="instant-setting-checkbox"></label>
                              <label class="instant-setting-label">加速动画效果<input type="checkbox" id="S-Animate" ${util.getValue('enable_animation') ? 'checked' : ''}
                              class="instant-setting-checkbox"></label>
                              <label class="instant-setting-label">链接预读延时(毫秒)<input type="number" min="65" id="S-Delay" value="${util.getValue('delay_on_hover')}"
                              class="instant-setting-input"></label>
                              <label class="instant-setting-label-col">排除下列网址 <textarea placeholder="列表中的域名将不开启加速器,一行一个,例如:www.baidu.com" id="S-Exclude" class="instant-setting-textarea">${util.getValue('exclude_list')}</textarea></label>
                              <label class="instant-setting-label-col">排除下列关键词 <textarea placeholder="链接中含关键词将不开启加速器,一行一个,例如:logout" id="S-Exclude-Word" class="instant-setting-textarea">${util.getValue('exclude_keyword')}</textarea></label>
                            </div>`;
                        Swal.fire({
                            title: '加速器配置',
                            html: dom,
                            showCloseButton: true,
                            confirmButtonText: '保存',
                            footer: '<div style="text-align: center;font-size: 1em;">点击查看 <a href="https://www.youxiaohou.com/tool/install-instantpage.html" target="_blank">使用说明</a>,助手免费开源,Powered by <a href="https://www.youxiaohou.com">油小猴</a></div>',
                            customClass: {
                                popup: 'instant-popup',
                            },
                        }).then((res) => {
                            if (res.isConfirmed) {
                                history.go(0);
                            }
                        });

                        document.getElementById('S-External').addEventListener('change', (e) => {
                            util.setValue('allow_external_links', e.currentTarget.checked);
                        });
                        document.getElementById('S-Query').addEventListener('change', (e) => {
                            util.setValue('allow_query_links', e.currentTarget.checked);
                        });
                        document.getElementById('S-Store').addEventListener('change', (e) => {
                            util.setValue('enable_store_link', e.currentTarget.checked);
                        });
                        document.getElementById('S-Target').addEventListener('change', (e) => {
                            util.setValue('enable_target_self', e.currentTarget.checked);
                        });
                        document.getElementById('S-Animate').addEventListener('change', (e) => {
                            util.setValue('enable_animation', e.currentTarget.checked);
                        });
                        document.getElementById('S-Delay').addEventListener('change', (e) => {
                            util.setValue('delay_on_hover', e.currentTarget.value);
                        });
                        document.getElementById('S-Exclude').addEventListener('change', (e) => {
                            util.setValue('exclude_list', e.currentTarget.value);
                        });
                        document.getElementById('S-Exclude-Word').addEventListener('change', (e) => {
                            util.setValue('exclude_keyword', e.currentTarget.value);
                        });
                    });
                },

                //在排除名单里
                inExcludeList() {
                    let exclude = util.getValue('exclude_list').split('\n');
                    let host = location.host;
                    return exclude.includes(host);
                },

                //加速主代码
                instantPage() {
                    if (window.instantLoaded) return;
                    let mouseoverTimer;
                    let lastTouchTimestamp;
                    const prefetches = new Set();
                    const prefetchElement = document.createElement('link');
                    const isSupported = prefetchElement.relList && prefetchElement.relList.supports && prefetchElement.relList.supports('prefetch')
                    && window.IntersectionObserver && 'isIntersecting' in IntersectionObserverEntry.prototype;
                    const isOnline = () => window.navigator.onLine;
                    const allowQueryString = 'instantAllowQueryString' in document.body.dataset || util.getValue('allow_query_links');
                    const allowExternalLinks = 'instantAllowExternalLinks' in document.body.dataset || util.getValue('allow_external_links');
                    const useWhitelist = 'instantWhitelist' in document.body.dataset;
                    const mousedownShortcut = 'instantMousedownShortcut' in document.body.dataset;
                    const DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION = 1111;
                    const enableAnimation = util.getValue('enable_animation');
                    const enableTargetSelf = util.getValue('enable_target_self');
                    const enableStoreLink = util.getValue('enable_store_link');
                    window.instantLoaded = true;
                    const excludeKeyword = util.getValue('exclude_keyword').split('\n');

                    let delayOnHover = util.getValue('delay_on_hover');
                    let useMousedown = false;
                    let useMousedownOnly = false;
                    let useViewport = false;

                    if ('instantIntensity' in document.body.dataset) {
                        const intensity = document.body.dataset.instantIntensity;

                        if (intensity.substr(0, 'mousedown'.length) === 'mousedown') {
                            useMousedown = true;
                            if (intensity === 'mousedown-only') {
                                useMousedownOnly = true;
                            }
                        } else if (intensity.substr(0, 'viewport'.length) === 'viewport') {
                            if (!(navigator.connection && (navigator.connection.saveData || (navigator.connection.effectiveType && navigator.connection.effectiveType.includes('2g'))))) {
                                if (intensity === "viewport") {
                                    if (document.documentElement.clientWidth * document.documentElement.clientHeight < 450000) {
                                        useViewport = true;
                                    }
                                } else if (intensity === "viewport-all") {
                                    useViewport = true;
                                }
                            }
                        } else {
                            const milliseconds = parseInt(intensity);
                            if (!Number.isNaN(milliseconds)) {
                                delayOnHover = milliseconds;
                            }
                        }
                    }

                    if (isSupported) {
                        const eventListenersOptions = {
                            capture: true,
                            passive: true,
                        };

                        if (!useMousedownOnly) {
                            document.addEventListener('touchstart', touchstartListener, eventListenersOptions);
                        }

                        if (!useMousedown) {
                            document.addEventListener('mouseover', mouseoverListener, eventListenersOptions);
                        } else if (!mousedownShortcut) {
                            document.addEventListener('mousedown', mousedownListener, eventListenersOptions);
                        }

                        if (mousedownShortcut) {
                            document.addEventListener('mousedown', mousedownShortcutListener, eventListenersOptions);
                        }


                        if (useViewport) {
                            let triggeringFunction;
                            if (window.requestIdleCallback) {
                                triggeringFunction = (callback) => {
                                    requestIdleCallback(callback, {
                                        timeout: 1500,
                                    });
                                };
                            } else {
                                triggeringFunction = (callback) => {
                                    callback();
                                };
                            }

                            triggeringFunction(() => {
                                const intersectionObserver = new IntersectionObserver((entries) => {
                                    entries.forEach((entry) => {
                                        if (entry.isIntersecting) {
                                            const linkElement = entry.target;
                                            intersectionObserver.unobserve(linkElement);
                                            preload(linkElement);
                                        }
                                    });
                                });

                                document.querySelectorAll('a').forEach((linkElement) => {
                                    if (isPreloadable(linkElement)) {
                                        intersectionObserver.observe(linkElement);
                                    }
                                });
                            });
                        }
                    }

                    function touchstartListener(event) {
                        /* Chrome on Android calls mouseover before touchcancel so `lastTouchTimestamp`
                 * must be assigned on touchstart to be measured on mouseover. */
                        lastTouchTimestamp = performance.now();

                        const linkElement = event.target.closest('a');

                        if (!isPreloadable(linkElement)) {
                            return;
                        }

                        preload(linkElement);
                    }

                    function mouseoverListener(event) {
                        if (performance.now() - lastTouchTimestamp < DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION) {
                            return;
                        }

                        if (!('closest' in event.target)) {
                            // Without this check sometimes an error “event.target.closest is not a function” is thrown, for unknown reasons
                            // That error denotes that `event.target` isn’t undefined. My best guess is that it’s the Document.

                            // Details could be gleaned from throwing such an error:
                            //throw new TypeError(`instant.page non-element event target: timeStamp=${~~event.timeStamp}, type=${event.type}, typeof=${typeof event.target}, nodeType=${event.target.nodeType}, nodeName=${event.target.nodeName}, viewport=${innerWidth}x${innerHeight}, coords=${event.clientX}x${event.clientY}, scroll=${scrollX}x${scrollY}`)
                            return
                        }

                        const linkElement = event.target.closest('a');

                        if (!isPreloadable(linkElement)) {
                            return;
                        }

                        linkElement.addEventListener('mouseout', mouseoutListener, {passive: true});

                        mouseoverTimer = setTimeout(() => {
                            preload(linkElement);
                            mouseoverTimer = undefined;
                        }, delayOnHover);
                    }

                    function mousedownListener(event) {
                        const linkElement = event.target.closest('a');

                        if (!isPreloadable(linkElement)) {
                            return;
                        }

                        preload(linkElement);
                    }

                    function mouseoutListener(event) {
                        if (event.relatedTarget && event.target.closest('a') === event.relatedTarget.closest('a')) {
                            return;
                        }

                        if (mouseoverTimer) {
                            clearTimeout(mouseoverTimer);
                            mouseoverTimer = undefined;
                        }
                    }

                    function mousedownShortcutListener(event) {
                        if (performance.now() - lastTouchTimestamp < DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION) {
                            return;
                        }

                        const linkElement = event.target.closest('a');

                        if (event.which > 1 || event.metaKey || event.ctrlKey) {
                            return;
                        }

                        if (!linkElement) {
                            return;
                        }

                        linkElement.addEventListener('click', function (event) {
                            if (event.detail === 1337) {
                                return;
                            }
                            event.preventDefault();
                        }, {capture: true, passive: false, once: true});
                        const customEvent = new MouseEvent('click', {
                            view: window,
                            bubbles: true,
                            cancelable: true,
                            detail: 1337
                        });
                        linkElement.dispatchEvent(customEvent);
                    }
                    function isPreloadable(linkElement) {
                        if (!linkElement || !linkElement.href) {
                            return;
                        }
                        if (util.include(linkElement.href, excludeKeyword)) {
                            if (!util.reg.chrome.test(linkElement.href) &&
                                !util.reg.edge.test(linkElement.href) &&
                                !util.reg.edge.test(linkElement.href) &&
                                !util.reg.microsoft.test(linkElement.href)) {
                                return;
                            }
                        }
                        if (useWhitelist && !('instant' in linkElement.dataset)) {
                            return;
                        }
                        if (!allowExternalLinks && linkElement.origin !== location.origin && !('instant' in linkElement.dataset)) {
                            return;
                        }
                        if (!['http:', 'https:'].includes(linkElement.protocol)) {
                            return;
                        }
                        if (linkElement.protocol === 'http:' && location.protocol === 'https:') {
                            if (linkElement.href.indexOf('http://www.baidu.com/link?url') === 0) {
                                linkElement.href = linkElement.href.replace('http', 'https');
                            } else {
                                return;
                            }
                        }
                        //下载文件不加速
                        if (/\.[a-zA-Z0-9]{0,5}$/i.test(linkElement.href)) {
                            //排除域名,网站扩展名
                            if (!/(com|cn|top|ltd|net|tech|shop|vip|xyz|wang|cloud|online|site|love|art|xin|store|fun|cc|website|press|space|beer|luxe|video|ren|group|fit|yoga|org|pro|ink|biz|info|design|link|work|mobi|kim|pub|name|tv|co|asia|red|live|wiki|gov|life|world|run|show|city|gold|today|plus|cool|icu|company|chat|zone|fans|law|host|center|club|email|fund|social|team|guru|htm|html|php|asp|jsp)$/i.test(linkElement.href)) {
                                return;
                            }
                        }
                        if (!allowQueryString && linkElement.search && !('instant' in linkElement.dataset)) {
                            return;
                        }
                        if (linkElement.hash && linkElement.pathname + linkElement.search === location.pathname + location.search) {
                            return;
                        }
                        if (linkElement.dataset.filename || linkElement.dataset.noInstant) {
                            return;
                        }
                        return true;
                    }
                    function preload(linkElement) {
                        let url = linkElement.href;
                        if (!isOnline()) {
                            return;
                        }
                        if (prefetches.has(url)) {
                            return;
                        }
                        if (enableStoreLink) {
                            if (util.reg.chrome.test(url)) {
                                linkElement.href = url.replace("chrome.google.com", "chrome.crxsoso.com");
                            }
                            if (util.reg.edge.test(url)) {
                                linkElement.href = url.replace("microsoftedge.microsoft.com", "microsoftedge.crxsoso.com");
                            }
                            if (util.reg.firefox.test(url)) {
                                linkElement.href = url.replace("addons.mozilla.org", "addons.crxsoso.com");
                            }
                            if (util.reg.microsoft.test(url)) {
                                linkElement.href = url.replace(/(www|apps)\.microsoft\.com/, "apps.crxsoso.com");
                            }
                        }
                        const prefetcher = document.createElement('link');
                        prefetcher.rel = 'prefetch';
                        prefetcher.href = url;
                        document.head.appendChild(prefetcher);
                        prefetches.add(url);
                        if (enableAnimation) {
                            linkElement.classList.add("link-instanted");
                        }
                        if (enableTargetSelf) {
                            linkElement.target = '_self';
                        }
                        util.setValue('setting_success_times', util.getValue('setting_success_times') + 1);
                    }
                },
                addPluginStyle() {
                    let style = `
                .instant-popup { font-size: 14px !important; }
                .instant-setting-label { display: flex;align-items: center;justify-content: space-between;padding-top: 15px; }
                .instant-setting-label-col { display: flex;align-items: flex-start;;padding-top: 15px;flex-direction:column }
                .instant-setting-checkbox { width: 16px;height: 16px; }
                .instant-setting-textarea { width: 100%; margin: 14px 0 0; height: 60px; resize: none; border: 1px solid #bbb; box-sizing: border-box; padding: 5px 10px; border-radius: 5px; color: #666; line-height: 1.2; }
                .instant-setting-input { border: 1px solid #bbb; box-sizing: border-box; padding: 5px 10px; border-radius: 5px; width: 100px}
                 @keyframes instantAnminate { from { opacity: 1; } 50% { opacity: 0.4 } to { opacity: 0.9; }}
                .link-instanted { animation: instantAnminate 0.6s 1; animation-fill-mode:forwards }
                .link-instanted * { animation: instantAnminate 0.6s 1; animation-fill-mode:forwards }
            `;
                    if (document.head) {
                        util.addStyle('swal-pub-style', 'style', GM_getResourceText('swalStyle'));
                        util.addStyle('instant-style', 'style', style);
                    }
                    const headObserver = new MutationObserver(() => {
                        util.addStyle('swal-pub-style', 'style', GM_getResourceText('swalStyle'));
                        util.addStyle('instant-style', 'style', style);
                    });
                    headObserver.observe(document.head, {childList: true, subtree: true});
                },
                init() {
                    this.initValue();
                    this.addPluginStyle();
                    this.registerMenuCommand();
                    if (this.inExcludeList()) return;
                    this.instantPage();
                }
            };
            main.init();
            //css样式
            addhtml(document.body,"style",{type:"text/css"},`
.box3edittooldiv {
    position: fixed;
    background: #383838;
    color: #fff;
    padding: 20px;
    right: 0px;
    bottom: 0px;
    box-shadow: 0px 0px 30px -10px #000;
    margin: 8px 20px;
    z-index:999999;
    display: flex;
    flex-direction: column;
    border-radius: 10px;
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
}
.box3edittooldiv .div{
    display: flex;
    align-items: center;
    align-content: center;
    flex-direction: row;
    margin-top: 5px;
}
.box3edittooldiv[show=false] {
    display: none
}
.box3edittooldivycxx {
    position: fixed;
    right: 0px;
    bottom: -16.75px;
    box-shadow: 0px 0px 30px -10px #000;
    z-index:999999;
    transition: .5s;
}
.box3edittooldivycxx:hover {
    bottom: 0px;
}
.box3edittooldivycxx[show=false] {
    display: none
}
.box3edittooldiv .db{
    color: #fff;
    margin-bottom: 10px;
    width: 100%;
    display: flex;
    align-items: center;
    align-content: center;
    flex-direction: row;
}
.box3edittooldiv .db div{
    margin-right: 20px;
}
.box3edittooldiv .div button{margin-right: 5px;}
.box3edittooldiv button[zdy]{background:#0000;color:#fff;position: absolute;top: 0;right: 0;z-index:99999999999999999999999999999999999999999999999999999999999999999}
.box3edittooldiv .ahref{color:currentColor}
.box3edittooldiv .ahref:hover{text-decoration: underline;color:#fff}
.box3edittooldiv .ahref:active{color:#f44747}
.box3edittooldiv .db button{
    font-size:30px;
    padding: 0px 10px;
    border-top-right-radius: 10px;
    transition: .1s;
}
.box3edittooldiv .db button:hover{
    background:#a00a
}
.box3tooldialog {
    top: inherit;
    left: inherit;
    bottom: inherit;
    right: inherit;
    margin: 0;
}
.box3tooldialog .db button[jy=true] {
    opacity: .5;
    cursor: no-drop;
}
.box3tooldialog .ydtzd {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 40px;
    cursor: all-scroll;
}
.box3edittooldiv .db div font{
    max-height: 100px;
    overflow: auto;
    padding:5px 5px 0px 0px
}
.box3edittooldiv .db div font::-webkit-scrollbar {
    height: 5px;
    width: 5px;
}
.box3edittooldiv .db div font::-webkit-scrollbar-thumb {
    background: #aaa5;
    border-radius: 50px
}
.box3edittooldiv .db div font::-webkit-scrollbar-thumb:hover {
    background: #aaa;
}
.box3edittooldiv .db div font::-webkit-scrollbar-thumb:active {
    background: #aaa3;
}
.box3edittooldiv .db div font::-webkit-scrollbar-track {
    background: #0000;
    border-radius: 50px
}

.box3edittooldiv .div textarea::-webkit-scrollbar {
    height: 5px;
    width: 5px;
}
.box3edittooldiv .div textarea::-webkit-scrollbar-thumb {
    background: #aaa5;
    border-radius: 50px
}
.box3edittooldiv .div textarea::-webkit-scrollbar-thumb:hover {
    background: #aaa;
}
.box3edittooldiv .div textarea::-webkit-scrollbar-thumb:active {
    background: #aaa3;
}
.box3edittooldiv .div textarea::-webkit-scrollbar-track {
    background: #0000;
    border-radius: 50px
}

.box3tooldialog.dongtai{
    transition: .25s cubic-bezier(0, 0, 0, 0.9);
}
.box3tooldialog.kaishizhuangtai{
    transform: scale(0.75);
    opacity: 0;
}
._3ad7RnKp0WvPrytuJgHNZC {
    width: auto;
    padding: 0px 8px;
    height: 20px;
    font-size: 12px;
    margin-right: 5px;
    user-select: text !important;;
}
._3ad7RnKp0WvPrytuJgHNZC::selection{
    background:#ff952b50;color:#fff
}
._2p590X3xza5oTJJZ3ToFcx ._1yZ6NeMjfGScb4F10xmspg {
  width: calc(25% - 120px);
}


`);

        }catch (error) {
            if(/_reactRootContainer|_internalRoot|current|updateQueue|baseState|element|props|children/.test(error.message)){setTimeout(()=>{run()},100);return}
            console.error("CodemaoProMax运行失败!");
            console.error(error);
            alert("CodemaoProMax运行失败!");
            alert(error)
        }
    }
    setTimeout(()=>{run()},100)//加载时需要等待
})();