12333

3333

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

ستحتاج إلى تثبيت إضافة مثل Stylus لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتتمكن من تثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

(لدي بالفعل مثبت أنماط للمستخدم، دعني أقم بتثبيته!)

// ==UserScript==
// @name         12333
// @namespace    http://tampermonkey.net/
// @version      6.0
// @description  3333
// @author       You
// @match        https://www.geoguessr.com/*
// @grant        GM_addStyle
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // --- Değişkenler ---
    // Gördüğümüz en son koordinat (sürekli güncellenir)
    let latestDetectedCoordinates = { lat: null, lng: null };
    // Kullanıcının tuşa basarak sabitlediği koordinat
    let lockedCoordinates = { lat: null, lng: null };
    let lastUrl = window.location.href;

    // --- Marker Değişkenleri ---
    let mapInstance = null;
    let customOverlay = null;
    let isMarkerVisible = false;

    // --- CSS Stilleri ---
    GM_addStyle(`
        .custom-marker { position: absolute; width: 40px; height: 40px; margin-left: -20px; margin-top: -20px; z-index: 1000; pointer-events: none; }
        .custom-marker-dot { position: absolute; top: 12px; left: 12px; width: 16px; height: 16px; background: #FF0000; border: 2px solid #FFFFFF; border-radius: 50%; box-shadow: 0 0 5px rgba(0,0,0,0.7); }
        .custom-marker-cross::before, .custom-marker-cross::after { content: ''; position: absolute; background: rgba(255, 255, 255, 0.7); box-shadow: 0 0 3px rgba(0,0,0,0.7); }
        .custom-marker-cross::before { left: 19px; top: 0; width: 2px; height: 40px; }
        .custom-marker-cross::after { left: 0; top: 19px; width: 40px; height: 2px; }
    `);

    // --- AĞI DİNLEME (SADECE KAYDET, KİLİTLEME YOK) ---
    const originalOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url) {
        if (method.toUpperCase() === 'POST' &&
            (url.startsWith('https://maps.googleapis.com/$rpc/google.internal.maps.mapsjs.v1.MapsJsInternalService/GetMetadata') ||
             url.startsWith('https://maps.googleapis.com/$rpc/google.internal.maps.mapsjs.v1.MapsJsInternalService/SingleImageSearch'))) {

            this.addEventListener('load', function () {
                try {
                    const pattern = /-?\d+\.\d{6,},-?\d+\.\d{6,}/g;
                    const match = this.responseText.match(pattern);

                    if (match && match.length > 0) {
                        const coords = match[0].split(",");
                        const lat = Number.parseFloat(coords[0]);
                        const lng = Number.parseFloat(coords[1]);

                        // KİLİTLEME YOK. Sadece en son gördüğümüz koordinatı kaydet.
                        latestDetectedCoordinates.lat = lat;
                        latestDetectedCoordinates.lng = lng;
                    }
                } catch(e) {}
            });
        }
        return originalOpen.apply(this, arguments);
    };

    // --- YENİ TUR ALGILAMA (TAM SIFIRLAMA) ---
    new MutationObserver(() => {
        const currentUrl = window.location.href;
        if (currentUrl !== lastUrl) {
            lastUrl = currentUrl;
            if (currentUrl.includes("/game/")) {
                console.log("Yeni tur algılandı. Tüm koordinatlar ve marker sıfırlanıyor.");
                // Her şeyi temizle
                latestDetectedCoordinates = { lat: null, lng: null };
                lockedCoordinates = { lat: null, lng: null };

                if (customOverlay) {
                    customOverlay.setMap(null);
                    customOverlay = null;
                }
                isMarkerVisible = false;
            }
        }
    }).observe(document.body, { subtree: true, childList: true });


    // --- MARKER YÖNETİM FONKSİYONLARI ---

    function findMapInstance() {
        if (mapInstance) return;
        try {
            let element = document.querySelector('[class^="guess-map_canvas__"]');
            if (!element) return;
            const reactKey = Object.keys(element).find(key => key.startsWith("__reactFiber$"));
            mapInstance = element[reactKey].return.return.memoizedProps.map;
            if (mapInstance) console.log('Oyun haritası bulundu.');
        } catch (e) {}
    }

    function createOrUpdateOnMapMarker() {
        if (!mapInstance) findMapInstance();
        if (!mapInstance || lockedCoordinates.lat === null) return;

        if (customOverlay) customOverlay.setMap(null);

        class MarkerOverlay extends google.maps.OverlayView {
            constructor(position) { super(); this.position = position; this.div = null; }
            onAdd() { this.div = document.createElement('div'); this.div.className = 'custom-marker'; this.div.innerHTML = `<div class="custom-marker-dot"></div><div class="custom-marker-cross"></div>`; this.getPanes().overlayMouseTarget.appendChild(this.div); }
            draw() { if (!this.div) return; const point = this.getProjection().fromLatLngToDivPixel(this.position); if (point) { this.div.style.left = point.x + 'px'; this.div.style.top = point.y + 'px'; } }
            onRemove() { if (this.div) { this.div.parentNode.removeChild(this.div); this.div = null; } }
            setVisible(visible) { if (this.div) this.div.style.display = visible ? 'block' : 'none'; }
        }

        const position = new google.maps.LatLng(lockedCoordinates.lat, lockedCoordinates.lng);
        customOverlay = new MarkerOverlay(position);
        customOverlay.setMap(mapInstance);
        console.log(`Marker, kilitli koordinata göre oluşturuldu: ${lockedCoordinates.lat}, ${lockedCoordinates.lng}`);
    }

    // --- KONTROLLER ---
    document.addEventListener('keydown', e => {
        if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return;

        // --- 'Insert' Tuşu: Göster / Gizle ---
        if (e.key === 'Insert') {
            if (isMarkerVisible) {
                if(customOverlay) customOverlay.setVisible(false);
                isMarkerVisible = false;
            } else {
                // Eğer bu tur için daha önce hiç koordinat kilitlenmemişse, kilitle.
                if (lockedCoordinates.lat === null) {
                    if (latestDetectedCoordinates.lat === null) {
                        alert('Henüz koordinat algılanmadı. Lütfen biraz bekleyin veya haritada gezinin.');
                        return;
                    }
                    lockedCoordinates.lat = latestDetectedCoordinates.lat;
                    lockedCoordinates.lng = latestDetectedCoordinates.lng;
                    console.log(`'Insert' ile ilk koordinat kilitlendi.`);
                }
                // Artık kilitli bir koordinat olduğuna göre marker'ı oluştur/göster.
                createOrUpdateOnMapMarker();
                if(customOverlay) customOverlay.setVisible(true);
                isMarkerVisible = true;
            }
        }

        // --- 'Q' Tuşu: Mevcut Konumu Kilitle ve Göster/Yenile ---
        if (e.key.toLowerCase() === 'q') {
            if (latestDetectedCoordinates.lat === null) {
                alert('Henüz kilitlenecek bir koordinat algılanmadı!');
                return;
            }
            // 'Q' tuşu, o anki en son koordinatı alır ve kilitler.
            lockedCoordinates.lat = latestDetectedCoordinates.lat;
            lockedCoordinates.lng = latestDetectedCoordinates.lng;
            console.log(`'Q' ile koordinat kilitlendi/yenilendi.`);

            // Ve marker'ı bu yeni kilitli konuma göre oluşturup gösterir.
            createOrUpdateOnMapMarker();
            if(customOverlay) customOverlay.setVisible(true);
            isMarkerVisible = true;
        }
    });

})();