CodemaoProMax

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

当前为 2022-12-04 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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

// ==UserScript==
// @name         CodemaoProMax
// @namespace    https://box3.codemao.cn/u/hxyxeg666666
// @version      3.10.3
// @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.3";
(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;
            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")){ // 社区
                        b="shequCommunity"
                    }else{
                        b="ShequOtherMode"
                    }
                }
                return b;
            }
            var nowmode,beiyongnowmode;
            var initinterval = setInterval(()=>{
                nowmode = getMode();
                if(location.href != beiyongnowmode){
                    logs("更换模式 "+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.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")
                        },
                        "建造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":${Math.round(x / 2)},"y":${y+25},"z":${Math.round(z / 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, '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)
                    console.log(md)
                    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);}));
                    }else if(md=="Edit"){
                        tool.close()
                        userhuanchun=null
                        var p115 = p1.addFolder('界面显示');
                        p115.add(toolfunc3.state.box3.state, "hideUI").name("👁隐藏界面");
                    }
                    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
                        //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", () => {
                        //
                        //});
                        //};
                        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);
                    }
                    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()
                        // 防沉迷绕过功能已删
                        }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"},`
@media(prefers-color-scheme: dark){
body {background: #101010}
.desktop {background: #101010}
}
.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)//加载时需要等待
})();