Grepolis Attack Detector and Troop Evacuator

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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();
    });

})();