Gartic IO Node Mode Menu

Tries to cheat by changing the codes of the game

Per 05-03-2025. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         Gartic IO Node Mode Menu
// @namespace    http://tampermonkey.net/
// @version      2025-03-05
// @description  Tries to cheat by changing the codes of the game
// @author       anonimbiri
// @license MIT
// @match        https://gartic.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gartic.io
// @run-at       document-start
// @grant        none
// ==/UserScript==

Node.prototype.appendChild = new Proxy(Node.prototype.appendChild, {
    apply: function(target, thisArg, argumentsList) {
        const node = argumentsList[0];
        console.log('Modified script injected:', node.src);

        // Eğer eklenen bir script elementi ise kontrol et
        if (node.nodeName.toLowerCase() === 'script' && node.src && node.src.includes('room')) {
            console.log('Hedef script algılandı:', node.src);

            fetch(node.src)
                .then(response => response.text())
                .then(scriptContent => {
                    // Script içeriğini değiştir
                    let modifiedContent = scriptContent
                        // 1. Sohbet alanını login olmayanlar için açma
                        .replace(
                            'r.created||c?Rt("input",{type:"text",name:"chat",className:"mousetrap",autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",value:i,placeholder:this._lang.chatHere,maxLength:100,enterKeyHint:"send",onChange:this.handleText,ref:this._ref}):Rt("input",{type:"text",name:"chat",className:"mousetrap",autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",value:this._lang.loginChat,maxLength:100,ref:this._ref,disabled:!0})',
                            'Rt("input",{type:"text",name:"chat",className:"mousetrap",autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",value:i,placeholder:this._lang.chatHere,maxLength:100,enterKeyHint:"send",onChange:this.handleText,ref:this._ref})'
                        )
                        // 2. Anti-AFK zamanlayıcıda popup yerine socket sinyali gönderme
                        .replace(
                            'this._timerAtivo=setInterval((function(){Date.now()-e._ativo>15e4&&(O(Object(f.a)(n.prototype),"emit",e).call(e,"avisoInativo"),e._ativo=Date.now())}),1e3)',
                            'this._timerAtivo=setInterval((function(){Date.now()-e._ativo>15e4&&e.active()}),1e3)'
                        )
                        // 3. Tüm eklemeleri (window.game ve otomatik geri votekick) tek bir replace ile birleştirme
                        .replace(
                            'e.unlock()}',
                            'e.unlock();window.game={state:e.state,users:e.users,turn:e.turn,word:e.word,room:e.room,me:e.me,limit:e.limit,goal:e.goal,subject:e.subject,language:e.language,time:e.time,timeWasted:e.timeWasted,interval:e.interval,lobby:e.lobby,official:e.official,photo:e.photo,viewer:e.viewer,roomId:e.roomId};setInterval(()=>{window.game={state:e.state,users:e.users,turn:e.turn,word:e.word,room:e.room,me:e.me,limit:e.limit,goal:e.goal,subject:e.subject,language:e.language,time:e.time,timeWasted:e.timeWasted,interval:e.interval,lobby:e.lobby,official:e.official,photo:e.photo,viewer:e.viewer,roomId:e.roomId}},1000);e.on("votekick",(t,i,o)=>{if(i.id===e.me.id){e.votekick(t.id,true);}});}'
                        );

                    // Değiştirilen script için Blob oluştur
                    let blob = new Blob([modifiedContent], { type: 'application/javascript' });
                    let blobUrl = URL.createObjectURL(blob);

                    // Orijinal node'un src'sini blobUrl ile güncelle
                    node.src = blobUrl;
                    node.textContent = '';

                    // Değiştirilmiş node'u ekle
                    return target.apply(thisArg, [node]);
                })
                .catch(error => {
                    console.error('Failed to fetch/modify script:', error);
                    // Hata durumunda orijinal script'i ekle
                    return target.apply(thisArg, argumentsList);
                });

            // Orijinal script'in hemen eklenmesini engelle (fetch tamamlanana kadar)
            return node;
        }

        // Script değilse veya 'room' içermiyorsa orijinal davranışı koru
        return target.apply(thisArg, argumentsList);
    }
});