TW Auto Farm Assistant

auto farm script for tribalwars.

// ==UserScript==
// @name TW Auto Farm Assistant
// @author ismail.yankayis
// @version 2.0.1
// @grant Public
// @description auto farm script for tribalwars.
// @include        http*://*.tribalwars.net/*screen=am_farm*
// @include        https*://*.klanlar.org/*screen=am_farm*
// @namespace https://greasyfork.org/users/1019070
// @license MIT
// ==/UserScript==

var botProtect = $('body').data('bot-protect');
if (document.URL.indexOf('screen=am_farm') == -1)
    console.log('Você deve executar o script no assistente de farm!');
else if (botProtect !== undefined) {
    alert('Alerta Captcha!');
}
else {
    var // menu = $('#am_widget_Farm a.farm_icon_a'),
        menu = '#plunder_list a.farm_icon_a',
        menu_a = '#plunder_list a.farm_icon_a',
        menu_b = '#plunder_list a.farm_icon_b',
        attackInterval = 300,
        minhaVar = "",
        changeVillage = true,
        changeVillageInterval = 360000,
        refreshPage = false,
        refreshPageInterval = 25000,
        lootAssistantPageSize = 100,
        minUnitNumber = 6,
        boxCaptcha = $("#bot_check");

    var randomTime = function (superior, inferior) {
        var numPosibilidades = superior - inferior,
            aleat = Math.random() * numPosibilidades;

        return Math.round(parseInt(inferior) + aleat);
    };

    if (attackInterval === "random") {
        attackInterval = randomTime(5000, 10000);
    }
    if (refreshPageInterval === "random") {
        refreshPageInterval = randomTime(700000, 800000);
    }

    $('img').each(function () {
        var tempStr = $(this).attr('src');
        if (tempStr.indexOf('attack') != -1)
            $(this).addClass('tooltip');
    });

    if (refreshPage === true) {
        setInterval(function () {
            window.location.reload();
        }, refreshPageInterval);
    }


    if (changeVillageInterval !== false) {
        if (changeVillageInterval === true)
            if ($('#light').text() >= 1)
                changeVillageInterval = randomTime(100000, 150000);
            else
                changeVillageInterval = randomTime(3000, 5000);
        else
            changeVillageInterval = parseInt(changeVillageInterval) + parseInt(randomTime(500, 1000));
    }

    showAllBarbs();
    if (parseInt($('#light').text()) < parseInt($('#heavy').text())) {
        menu = menu_b;
    }
    console.log("menu: ", menu);
}

startFarming();

if (changeVillage === true) {
    var altVillage = setInterval(function () {
        $('.arrowRight, .groupRight').click();

        clearInterval(altVillage);
    }, changeVillageInterval);
}


var checkCaptcha = setInterval(function () {
    if (boxCaptcha.length) {
        alert('Captcha found!');
        clearInterval(checkCaptcha);
        clearInterval(altVillage);
    }
}, 100);

function startFarming() {
    var count = 1;
    for (i = 0; i < lootAssistantPageSize; i++) {
        if(checkWall(10)) {
            $(menu).eq(i).each(function () {
                var intervalOfNexAttack = attackInterval * count;
                setTimeout(function (minhaVar) {
                    if (menu === menu_a && $('#light').text() >= minUnitNumber) {
                        $(minhaVar).click();
                    } else if (menu === menu_b && $('#heavy').text() >= minUnitNumber) {
                        $(minhaVar).click();
                    }
                }, intervalOfNexAttack, this);
                ++count;
            });
        }
    }
}

function checkWall(maxWallLv) {
    return parseInt($('#plunder_list tr:not(:first)').eq(i + 1).find('td').eq(6).text()) < maxWallLv || isNaN($('#plunder_list tr:not(:first)').eq(i + 1).find('td').eq(6).text()) == true;
}

function showAllBarbs() {
    if (game_data.screen == 'am_farm') {
        function modify_table(data) {
            var result = $('<div>').html(data).contents();
            var rows = result.find('#plunder_list tr:not(:first-child)');
            $('#plunder_list').append(rows);
        }

        $('.paged-nav-item:not(:first-child)').each(function () {
            $.ajax({
                url: $(this).attr('href'), type: "get", async: false, success: function (data) {
                    modify_table(data);
                }, error: function () {
                    UI.ErrorMessage('An error occurred while downloading data. Refresh the page to try again', 5000);
                    throw new Error('interrupted script');
                }
            });
            $(this).remove();
        });
        window.scrollTo(0, 0);
    } else {
        UI.InfoMessage('The script should be used from the farm assistant view.', 2000, 'error');
    }
    lootAssistantPageSize = document.querySelectorAll("#plunder_list a.farm_icon_a").length;
    console.log("lootAssistantPageSize: ", lootAssistantPageSize);
}