Greasy Fork is available in English.
tr: gartic chat alanını geri getirir / büyük chat | en: brings back gartic chat area / bigger chat
当前为
// ==UserScript==
// @name Gartic chat - FIXED
// @description tr: gartic chat alanını geri getirir / büyük chat | en: brings back gartic chat area / bigger chat
// @author Enes Yıldız
// @icon https://i.ibb.co/s9Qv6JNW/107653-thumb.jpg
// @match https://gartic.io/*
// @run-at document-start
// @grant unsafeWindow
// @grant GM_addStyle
// @version 0.1
// @namespace http://greasyfork.icu/users/1424758
// ==/UserScript==
(function() {
'use strict';
const window = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
window.kullanicilar = {}; window.mesajlar = []; window.ben = null; window.socket = null; window.id = null;
GM_addStyle(`#screenRoom .history, #screenRoom .scrollElements { overflow-y: auto !important; display: block !important; scroll-behavior: auto; } #screenRoom #chat .history::-webkit-scrollbar { width: 7px !important; display: block !important; } #screenRoom #chat .history::-webkit-scrollbar-thumb { background-color: rgba(120, 155, 176, 0.5) !important; border-radius: 10px; } .buton { background: #ffcc00; color: #001b4d; border-radius: 4px; padding: 2px 8px; font-size: 11px; cursor: pointer; margin-left: 10px; font-family: 'NunitoBlack'; text-transform: uppercase; display: inline-block; border: 1px solid #000; } body.aktif #canvas, body.aktif #answer, body.aktif #interaction > .bar { display: none !important; } body.aktif #screenRoom .ctt { display: flex !important; flex-direction: row !important; grid-template-areas: none !important; grid-template-columns: none !important; height: 100% !important; } body.aktif #interaction { flex: 1 !important; margin: 0 !important; height: 100% !important; } body.aktif #chat { height: 100% !important; } .mesaj.you strong { color: #7b00ff !important; } @media screen and (min-width: 641px) { #interaction { display: flex !important; } #answer, #chat { flex: 1 !important; width: 50% !important; min-width: 0 !important; } .mesaj { margin: 3px 0 3px 10px !important; display: block !important; color: #868d96 !important; font-size: 16px !important; line-height: 1.4 !important; } .mesaj span { background: none !important; box-shadow: none !important; padding: 0 !important; } .mesaj strong { margin-right: 6px !important; cursor: pointer; font-weight: bold; } #chat .history { height: calc(100% - 60px) !important; } #chat .history .scrollElements > div.msg:not(.mesaj):not(.system):not(.alert) { display: none !important; } .sohbet { margin-bottom: 15px; padding: 0 10px; } } @media screen and (max-width: 640px) { .mesaj { display: flex !important; margin: 7px 20px !important; align-items: flex-end; } .mesaj > div:not(.avatar) { display: flex; flex-direction: column; align-items: flex-start; margin-left: 7px; } .mesaj span { background-color: #fff !important; border-radius: 10px !important; border-bottom-left-radius: 0 !important; padding: 10px !important; color: #707b92 !important; box-shadow: 0 1px 2px rgba(0,0,0,0.1) !important; } .mesaj .avatar { width: 45px; height: 45px; position: relative; border-radius: 50%; background-size: cover; background-position: 50%; display: block !important; background-repeat: no-repeat; } .mesaj .avatar .av { width: 45px; height: 57px; position: absolute; bottom: 0; background-size: 100%; background-repeat: no-repeat; } .mesaj.you { flex-direction: row-reverse !important; } .mesaj.you > div:not(.avatar) { align-items: flex-end !important; margin-left: 0; margin-right: 7px; } .mesaj.you span { border-bottom-left-radius: 10px !important; border-bottom-right-radius: 0 !important; } .sohbet { padding: 5px 20px; } } #screenRoom .scrollBar, #screenRoom .scroll:before, #screenRoom .scroll:after { display: none !important; }`);
function print(user, text, my) {
const hedef = document.querySelector('#chat .history .scrollElements'); if (!hedef) return;
const satir = document.createElement('div'); satir.className = `msg mesaj ${my ? 'you' : ''}`;
const image = user.foto ? `<div class="avatar" style="background-image: url('${user.foto}')"></div>` : `<div class="avatar"><div class="av avt${user.avatar}"></div></div>`;
satir.innerHTML = `${image}<div><strong>${user.nick}</strong><span>${text}</span></div>`;
hedef.appendChild(satir);
satir.scrollIntoView({ block: "end" }); }
const bridge = window.WebSocket;
window.WebSocket = function(...args) {
const socket = new bridge(...args); window.socket = socket;
socket.addEventListener('message', (event) => {
if (!event.data.startsWith('42[')) return;
const paket = JSON.parse(event.data.slice(2));
const sync = (data) => window.kullanicilar[data.id] = { nick: data.nick, avatar: data.avatar, foto: data.foto };
if (paket[0] == 5) { window.ben = paket[1]; window.id = paket[2]; paket[5].forEach(sync); }
if (paket[0] == 23) sync(paket[1]);
if (paket[0] == 11) {
const data = window.kullanicilar[paket[1]] || { nick: paket[1], avatar: 0, foto: null };
window.mesajlar.push(`${data.nick} ${paket[2]}`);
print(data, paket[2], paket[1].toString() === window.ben?.toString()); } });
return socket; };
window.WebSocket.prototype = bridge.prototype;
setInterval(() => {
const chat = document.querySelector('#chat');
if (chat && !document.querySelector('.sohbet')) {
const sohbet = document.createElement('form'); sohbet.className = 'sohbet';
sohbet.innerHTML = `<div class="textGame"><input type="text" class="mousetrap" placeholder="text" maxlength="100"><span></span></div>`;
sohbet.onsubmit = (event) => { event.preventDefault(); const input = sohbet.querySelector('input');
if (input.value.trim() && window.socket && window.id) {
window.socket.send(`42["11","${window.id}","${input.value}"]`); input.value = ''; } };
chat.appendChild(sohbet); }
const head = document.querySelector('#chat h5');
if (head && !document.querySelector('.buton')) {
const buton = document.createElement('div'); buton.className = 'buton';
buton.innerText = document.body.classList.contains('aktif') ? 'DOWN' : 'UP';
buton.onclick = () => buton.innerText = document.body.classList.toggle('aktif') ? 'DOWN' : 'UP';
head.appendChild(buton); } }, 1000);
})();