qweqrtrtw

asdfsdf

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         qweqrtrtw
// @namespace    http://tampermonkey.net/
// @version      8.0
// @description  asdfsdf
// @author       f
// @match        https://www.geoguessr.com/*
// @grant        GM_addStyle
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // --- AYARLAR ---
    // Klasik Kırmızı Konum İğnesi (Görsel Yardımcı)
    const MARKER_SVG = `
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
            <filter id="shadow" x="-50%" y="-50%" width="200%" height="200%">
                <feDropShadow dx="0" dy="2" stdDeviation="2" flood-color="rgba(0,0,0,0.5)"/>
            </filter>
            <path fill="#EA4335" stroke="#FFFFFF" stroke-width="1.5" filter="url(#shadow)" d="M12 0C7.58 0 4 3.58 4 8c0 5.25 8 16 8 16s8-10.75 8-16c0-4.42-3.58-8-8-8zm0 11c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/>
        </svg>
    `;
    const MARKER_ICON_URL = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(MARKER_SVG);

    // --- Değişkenler ---
    let latestDetectedCoordinates = { lat: null, lng: null };
    let lockedCoordinates = { lat: null, lng: null };
    let lastUrl = window.location.href;
    let mapInstance = null;
    let customOverlay = null;
    let isMarkerVisible = false;

    // --- CSS Stilleri ---
    GM_addStyle(`
        .custom-marker {
            position: absolute;
            width: 50px;
            height: 50px;
            margin-left: -25px;
            margin-top: -50px;
            z-index: 1000;
            pointer-events: none;
            background-image: url('${MARKER_ICON_URL}');
            background-size: contain;
            background-repeat: no-repeat;
            background-position: bottom center;
        }
        /* Mobil Kontrol Paneli */
        #mobile-cheat-controls {
            position: fixed;
            top: 20%;
            right: 10px;
            display: flex;
            flex-direction: column;
            gap: 12px;
            z-index: 999999;
        }
        .cheat-btn {
            width: 45px;
            height: 45px;
            background-color: rgba(0, 0, 0, 0.6);
            border: 2px solid rgba(255, 255, 255, 0.5);
            border-radius: 50%;
            color: white;
            font-size: 20px;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            user-select: none;
            transition: transform 0.1s;
            box-shadow: 0 2px 5px rgba(0,0,0,0.3);
        }
        .cheat-btn:active {
            transform: scale(0.9);
            background-color: rgba(0, 0, 0, 0.9);
            border-color: #fff;
        }
        /* Özel Renkler */
        .btn-place { background-color: rgba(234, 67, 53, 0.7); } /* Kırmızımsı */
    `);

    // --- AĞI DİNLEME (Koordinat Yakalama) ---
    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(",");
                        latestDetectedCoordinates.lat = Number.parseFloat(coords[0]);
                        latestDetectedCoordinates.lng = Number.parseFloat(coords[1]);
                    }
                } catch(e) {}
            });
        }
        return originalOpen.apply(this, arguments);
    };

    // --- YENİ TUR ALGILAMA ---
    new MutationObserver(() => {
        const currentUrl = window.location.href;
        if (currentUrl !== lastUrl) {
            lastUrl = currentUrl;
            if (currentUrl.includes("/game/")) {
                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 (Görsel) 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;
        } 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.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);
    }

    // --- OTOMATİK GUESS (Resolver Kodundan Entegre Edildi) ---
    function autoPlaceMarkerOnGameMap() {
        // En son tespit edilen koordinatları kullan
        let lat = latestDetectedCoordinates.lat;
        let lng = latestDetectedCoordinates.lng;

        if (!lat || !lng) {
            // Eğer anlık koordinat yoksa kilitlenmiş olana bak
            if (lockedCoordinates.lat) {
                lat = lockedCoordinates.lat;
                lng = lockedCoordinates.lng;
            } else {
                alert("Koordinat bulunamadı! Biraz hareket edin.");
                return;
            }
        }

        let element = document.querySelectorAll('[class^="guess-map_canvas__"]')[0];
        if(!element){
            alert("Harita elementi bulunamadı. Haritanın açık olduğundan emin olun.");
            return;
        }

        const latLngFns = {
            latLng:{
                lat: () => lat,
                lng: () => lng,
            }
        };

        try {
            // React Fiber üzerinden harita tıklama fonksiyonunu bul ve çalıştır
            const reactKeys = Object.keys(element);
            const reactKey = reactKeys.find(key => key.startsWith("__reactFiber$"));
            const elementProps = element[reactKey];
            const mapElementClick = elementProps.return.return.memoizedProps.map.__e3_.click;
            const mapElementPropKeys = Object.keys(mapElementClick);
            const mapElementPropKey = mapElementPropKeys[mapElementPropKeys.length - 1];
            const mapClickProps = mapElementClick[mapElementPropKey];
            const mapClickPropKeys = Object.keys(mapClickProps);

            for(let i = 0; i < mapClickPropKeys.length ;i++){
                if(typeof mapClickProps[mapClickPropKeys[i]] === "function"){
                    mapClickProps[mapClickPropKeys[i]](latLngFns);
                }
            }
            // Başarılı olursa görsel geri bildirim (Titreme efekti vs. eklenebilir ama basit tutuyoruz)
        } catch (err) {
            console.error("Auto place hatası:", err);
            alert("Otomatik yerleştirme başarısız oldu. Geoguessr kodu değiştirmiş olabilir.");
        }
    }

    // --- ORTAK FONKSİYONLAR ---

    function actionToggle() {
        if (isMarkerVisible) {
            if(customOverlay) customOverlay.setVisible(false);
            isMarkerVisible = false;
        } else {
            if (lockedCoordinates.lat === null) {
                if (latestDetectedCoordinates.lat === null) {
                    alert('Koordinat bulunamadı.');
                    return;
                }
                lockedCoordinates.lat = latestDetectedCoordinates.lat;
                lockedCoordinates.lng = latestDetectedCoordinates.lng;
            }
            createOrUpdateOnMapMarker();
            if(customOverlay) customOverlay.setVisible(true);
            isMarkerVisible = true;
        }
    }

    function actionLockAndShow() {
        if (latestDetectedCoordinates.lat === null) {
            alert('Henüz koordinat verisi yakalanmadı!');
            return;
        }
        lockedCoordinates.lat = latestDetectedCoordinates.lat;
        lockedCoordinates.lng = latestDetectedCoordinates.lng;
        createOrUpdateOnMapMarker();
        if(customOverlay) customOverlay.setVisible(true);
        isMarkerVisible = true;
    }

    // --- KLAVYE KONTROLLERİ (Sadece PC için eskiler) ---
    document.addEventListener('keydown', e => {
        if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return;
        if (e.key === 'Insert') actionToggle();
        if (e.key.toLowerCase() === 'q') actionLockAndShow();
        // İsteğin üzerine: Bu fonksiyona klavye kısayolu eklemedim.
    });

    // --- MOBİL ARAYÜZ ---
    function createMobileControls() {
        if (document.getElementById('mobile-cheat-controls')) return;

        const container = document.createElement('div');
        container.id = 'mobile-cheat-controls';

        // 1. Buton: Lock (Q Tuşu Görevi)
        const btnLock = document.createElement('div');
        btnLock.className = 'cheat-btn';
        btnLock.innerHTML = '📍';
        btnLock.title = "Görsel İşaretle (Q)";
        btnLock.addEventListener('click', (e) => {
            e.preventDefault(); e.stopPropagation();
            actionLockAndShow();
        });

        // 2. Buton: Toggle (Insert Tuşu Görevi)
        const btnToggle = document.createElement('div');
        btnToggle.className = 'cheat-btn';
        btnToggle.innerHTML = '👁️';
        btnToggle.title = "Görseli Gizle/Aç";
        btnToggle.addEventListener('click', (e) => {
            e.preventDefault(); e.stopPropagation();
            actionToggle();
        });

        // 3. YENİ BUTON: Auto Place 
        const btnPlace = document.createElement('div');
        btnPlace.className = 'cheat-btn btn-place'; // Buna özel renk verdik
        btnPlace.innerHTML = '🎯'; // Hedef ikonu
        btnPlace.title = "Haritaya Otomatik İşaretle (Guess Hazırla)";
        btnPlace.addEventListener('click', (e) => {
            e.preventDefault(); e.stopPropagation();
            // Bu fonksiyon direkt haritaya tıklama simülasyonu yapar
            autoPlaceMarkerOnGameMap();
        });

        container.appendChild(btnLock);
        container.appendChild(btnToggle);
        container.appendChild(btnPlace); // En alta ekledik
        document.body.appendChild(container);
    }

    // Yükleme
    window.addEventListener('load', createMobileControls);
    setTimeout(createMobileControls, 2000);

})();