Greasy Fork

Greasy Fork is available in English.

Grepolis Attack Detector and Troop Evacuator

Detecta ataque inimigo e desvia tropas 5 segundos antes do impacto, retornando-as depois (apenas para fins educacionais)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Grepolis Attack Detector and Troop Evacuator
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Detecta ataque inimigo e desvia tropas 5 segundos antes do impacto, retornando-as depois (apenas para fins educacionais)
// @author       li-mousin
// @match        https://*.grepolis.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // ID da cidade de destino para desviar as tropas
    const targetCityId = '67890';  // Substitua pelo ID real da cidade de destino

    // Função para criar e adicionar o botão na interface do Grepolis
    function createButton() {
        let btn = document.createElement("button");
        btn.innerHTML = "Iniciar Detecção de Ataques";
        btn.style.position = "fixed";
        btn.style.bottom = "10px";
        btn.style.left = "10px";
        btn.style.zIndex = 1000;
        document.body.appendChild(btn);

        btn.addEventListener("click", function() {
            monitorAttacks();
        });
    }

    // Função para obter o ID da cidade atual a partir da URL
    function getCurrentCityId() {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get('town_id');
    }

    // Função para monitorar ataques
    function monitorAttacks() {
        setInterval(() => {
            const incomingAttacks = document.querySelectorAll('.incoming_attack');  // Substitua com o seletor correto

            incomingAttacks.forEach(attack => {
                const arrivalTime = new Date(attack.dataset.arrivalTime);  // Substitua com a forma correta de obter o horário de chegada
                const currentTime = new Date();
                const timeToImpact = arrivalTime - currentTime;

                if (timeToImpact > 0 && timeToImpact <= 5000) {
                    evacuateTroops();
                }
            });
        }, 1000);  // Verifica a cada segundo
    }

    // Função para desviar tropas
    function evacuateTroops() {
        const currentCityId = getCurrentCityId();
        if (!currentCityId) {
            alert("ID da cidade atual não encontrado!");
            return;
        }

        console.log(`Desviando tropas da cidade ${currentCityId} para a cidade ${targetCityId}`);

        // Obtendo todas as tropas disponíveis
        const troops = document.querySelectorAll('.unit_input');

        // Selecionando todas as tropas
        troops.forEach(troop => {
            troop.value = troop.max;
        });

        // Simulando o envio de tropas como apoio (essa parte precisa ser ajustada de acordo com a API real do Grepolis)
        document.querySelector('#send_command .btn_send').click();

        console.log(`Tropas enviadas de ${currentCityId} para ${targetCityId}`);

        // Esperar um tempo antes de cancelar o apoio (substitua '10000' com o tempo apropriado em milissegundos para retorno)
        setTimeout(() => {
            // Cancelar o apoio e retornar tropas
            cancelSupportAndReturnTroops();
        }, 10000);
    }

    // Função para cancelar o apoio e retornar as tropas
    function cancelSupportAndReturnTroops() {
        const supportCommands = document.querySelectorAll('.support_command_cancel .btn_cancel'); // Substitua com o seletor correto para cancelar apoios

        supportCommands.forEach(btn => {
            btn.click();
        });

        console.log('Apoio cancelado e tropas retornando.');
    }

    // Esperar até que a página esteja completamente carregada
    window.addEventListener('load', function() {
        createButton();
    });

})();