Diep.IO 3D (No Watermark)

Enables Zertalious' Diep.IO 3D without any watermark text.

目前為 2025-07-06 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Diep.IO 3D (No Watermark)
// @namespace    http://tampermonkey.net/
// @version      0.0.8-nw
// @description  Enables Zertalious' Diep.IO 3D without any watermark text.
// @author       Zertalious (mod by n9qa)
// @match        *://diep.io/*
// @icon         https://www.google.com/s2/favicons?domain=diep.io
// @grant        none
// @require      https://unpkg.com/[email protected]/build/three.min.js
// @require      https://unpkg.com/[email protected]/examples/js/controls/OrbitControls.js
// @require      https://update.greasyfork.org/scripts/432833/DiepIO%203D.user.js
// @run-at       document-start
// @license idi-nahui
// ==/UserScript==

// Abort early if user did not enable 3D via menu flag
if(localStorage.getItem("mm_enable_3d")!="true"){
    console.log("[Diep3D NoWM] Flag disabled; skipping 3D init");
    return;
}

(function(){
    'use strict';
    // Remove watermark texts drawn by original script
    const patchCanvasText=()=>{
        const proto = CanvasRenderingContext2D.prototype;
        if(proto.__diep3dNowm) return;

        const filter=(text)=> typeof text==='string' && (/diep3d|hornex\.pro|triep\.io/i).test(text);

        const wrap=(orig)=>function(text, ...args){
            if(filter(text)) return;
            return orig.call(this, text, ...args);
        };

        proto.fillText = wrap(proto.fillText);
        proto.strokeText = wrap(proto.strokeText);

        proto.__diep3dNowm = true;
        console.log('[Diep3D NoWM] Watermark suppression active');
    };

    // Canvas context might not exist yet; patch as soon as possible
    const ensurePatch=()=>{try{patchCanvasText();}catch(e){}}
    if(document.readyState==='loading'){
        document.addEventListener('DOMContentLoaded', ensurePatch);
    }
    // run immediately and also retry few times in case scripts override later
    ensurePatch();
    for(let i=1;i<=5;i++) setTimeout(ensurePatch, i*1000);
})();