Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Tribal wars
- // @version 1.0
- // @description Tribal wars bot
- // @match https://*.die-staemme.de/*
- // @grant none
- // @require https://smtpjs.com/v3/smtp.js
- // ==/UserScript==
- //*************************** SETUP ***************************//
- // Choose Minimum and maximum wait time between actions (in milliseconds)
- const MIN_WAIT_TIME = 20000;
- const MAX_WAIT_TIME = 40000;
- //Enter The Start/End of the Night Bonus of your World (0-24). To disable set both values to 0.
- const NIGHT_BONUS_START = 22;
- const NIGHT_BONUS_END = 8;
- const OWN_VILLAGE_ID = 4488;
- const MAIL_ADDRESS = "";
- const USERNAME = "Legoslav";
- const PASSWORD = "k4ntholz";
- const WORLD = "de164";
- const RECRUIT_TROOPS = false;
- const SPEAR_PER_DAY = 5;
- const SWORD_PER_DAY = 0;
- const AXE_PER_DAY = 0;
- const RECRUIT_KAV = false;
- const SPY_PER_DAY = 0;
- const LIGHT_PER_DAY = 0;
- const HEAVY_PER_DAY = 0;
- const DO_NOT_FARM = true;
- const DO_NOT_BUILD = false;
- // Farms definieren
- const FARM_1 = {
- coordinate: "592|657",
- spear: 2,
- sword: 2,
- axe: 0,
- spy: 0,
- light: 0,
- heavy: 0,
- ram: 0,
- catapult: 0,
- snob: 0
- }
- // Array der Farms
- const FARMS = [
- FARM_1
- ];
- //******************End of Setup**************************//
- ////*************Do not touch this***********************//
- if(localStorage.lastView==undefined){
- localStorage.lastView = "place";
- }
- if (localStorage.troops == undefined) {
- localStorage.troops = RECRUIT_TROOPS;
- localStorage.spear = SPEAR_PER_DAY;
- localStorage.sword = SWORD_PER_DAY;
- localStorage.axe = AXE_PER_DAY;
- }
- if (localStorage.kav == undefined) {
- localStorage.kav = RECRUIT_KAV;
- localStorage.spy = SPY_PER_DAY;
- localStorage.light = LIGHT_PER_DAY;
- localStorage.heavy = HEAVY_PER_DAY;
- }
- const TIMESTAMP = new Date();
- const NOW = TIMESTAMP.getHours();
- var counter = 0;
- var nightbonus = false;
- (function() {
- 'use strict';
- console.log("-- Tribal Wars script enabled --");
- getCurrentView();
- })();
- // aktuelles Browserfenster wird ermittelt.
- function getCurrentView() {
- // Sollte ein Recaptcha entdeckt werden bleibt der Bot stehen
- //if(document.getElementsByClassName("g-recaptcha")){
- //console.log("Recaptcha detected");
- //sendRecaptchaMail();
- //}
- let currentUrl = window.location.href;
- if (currentUrl.endsWith("overview")) {
- console.log("CurrentView is overview");
- if (localStorage.lastView == "place") {
- goToMain();
- } else if (localStorage.lastView == "main") {
- if (localStorage.troops == "true") {
- goToBarracks();
- } else {
- localStorage.lastView = "barracks";
- goToOverview();
- }
- } else if (localStorage.lastView == "barracks") {
- if (localStorage.kav == "true") {
- goToStable();
- } else {
- localStorage.lastView = "stable";
- goToOverview();
- }
- } else {
- if (DO_NOT_FARM == false) {
- goToPlace();
- } else {
- localStorage.lastView = "place";
- goToOverview();
- }
- }
- } else if (currentUrl.endsWith(OWN_VILLAGE_ID)) {
- console.log("CurrentView is place after Attack");
- nextattack();
- } else if (currentUrl.endsWith("place")) {
- localStorage.lastView = "place";
- console.log("CurrentView is place");
- nextattack();
- } else if (currentUrl.endsWith("confirm")) {
- setTimeout(function() {
- console.log("CurrentView is confirm attack");
- }, 5000);
- document.getElementById("troop_confirm_go").click();
- } else if (currentUrl.endsWith("main")) {
- localStorage.lastView = "main";
- console.log("CurrentView is Mainbuilding");
- buildNextBuilding();
- } else if (currentUrl.endsWith("barracks")) {
- localStorage.lastView = "barracks";
- console.log("CurrentView is Barracks");
- recruitTroops();
- } else if (currentUrl.endsWith("stable")) {
- localStorage.lastView = "stable";
- console.log("CurrentView is Stable");
- recruitKAV();
- } else if (currentUrl.endsWith("logout-successful")) {
- goToMainPage();
- } else if (currentUrl.endsWith("/")) {
- console.log("CurrentView is login");
- login();
- } else {
- goToOverview();
- }
- }
- // alle aktuellen Angriffe werden aufgelistet
- function getCurrentlyAttackingCoordinates() {
- let currentlyAttackingElements = document.getElementsByClassName("quickedit-label");
- let currentlyAttackingCoordinates = [];
- for (var i = 0, len = currentlyAttackingElements.length; i < len; i++) {
- let coordinatesString =
- currentlyAttackingElements[i].innerHTML.split(")")[0].split("(")[1];
- currentlyAttackingCoordinates.push(coordinatesString);
- }
- return currentlyAttackingCoordinates;
- }
- // Wenn das Skript nicht weißt wo du bist geht es zurück zur Dorfübersicht
- function goToOverview() {
- if(document.getElementsByClassName("btn-confirm-yes")[0]!=undefined){
- document.getElementsByClassName("btn-confirm-yes")[0].click();
- }
- setTimeout(function() {
- document.getElementById("menu_row").children[1].children[0].click()
- }, getDelay());
- }
- // Klickt auf den Link um zum Versammlungsplatz zu kommen
- function goToPlace() {
- setTimeout(function() {
- if (DO_NOT_FARM == false) {
- document.getElementsByClassName("visual-label-place")[0].children[0].click();
- } else {
- goToOverview();
- }
- }, getDelay());
- }
- // Klickt auf den Link zum Hauptgebäude
- function goToMain() {
- setTimeout(function() {
- if (DO_NOT_BUILD == false) {
- document.getElementsByClassName("visual-label-main")[0].children[0].click();
- } else {
- goToOverview();
- }
- }, getDelay());
- }
- function goToBarracks() {
- setTimeout(function() {
- document.getElementsByClassName("visual-label-barracks")[0].children[0].click()
- }, getDelay());
- }
- function goToStable() {
- setTimeout(function() {
- document.getElementsByClassName("visual-label-stable")[0].children[0].click()
- }, getDelay());
- }
- //Wenn sich der Bot abmeldet wechselt er zurück zur Start Seite
- function goToMainPage() {
- if (NIGHT_BONUS_START < NOW || NIGHT_BONUS_END > NOW) {
- setTimeout(function(){
- nightbonus = false;
- window.location.href = "https://die-staemme.de"
- }, getNightDelay());
- } else {
- nightbonus = false;
- window.location.href = "https://die-staemme.de"
- }
- }
- // Der Bot logt sich ein bzw. wählt die Welt aus
- function login() {
- if (document.getElementById("login_form")) {
- document.getElementById("user").value = USERNAME;
- document.getElementById("password").valie = PASSWORD;
- if (document.getElementById("remember-me").checked == false) {
- document.getElementById("remember-me").checked = true;
- }
- document.getElementsByClassName("btn-login")[0].click();
- } else {
- var links = document.getElementsByClassName("world-select");
- for (let i = 0; links.length - 1; i++) {
- if (links[i].href == "https://www.die-staemme.de/page/play/" + WORLD) {
- links[i].click();
- }
- }
- }
- }
- // Checkt ob genug Truppen im Dorf sind
- function checktroops(farm) {
- //spear
- if (farm.spear > document.getElementById("units_entry_all_spear").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //sword
- if (farm.sword > document.getElementById("units_entry_all_sword").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //axe
- if (farm.axe > document.getElementById("units_entry_all_axe").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //spy
- if (farm.spy > document.getElementById("units_entry_all_spy").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //light
- if (farm.light > document.getElementById("units_entry_all_light").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //heavy
- if (farm.heavy > document.getElementById("units_entry_all_heavy").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //ram
- if (farm.ram > document.getElementById("units_entry_all_ram").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //catapult
- if (farm.catapult > document.getElementById("units_entry_all_catapult").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- //snob
- if (farm.snob > document.getElementById("units_entry_all_snob").innerText.split(")")[0].split("(")[1]) {
- return false;
- }
- return true;
- }
- // Sendet den Antriff los
- function sendattack(farm) {
- //spear
- document.getElementById("unit_input_spear").value = farm.spear;
- //sword
- document.getElementById("unit_input_sword").value = farm.sword;
- //axe
- document.getElementById("unit_input_axe").value = farm.axe;
- //spy
- document.getElementById("unit_input_spy").value = farm.spy;
- //light
- document.getElementById("unit_input_light").value = farm.light;
- //heavy
- document.getElementById("unit_input_heavy").value = farm.heavy;
- //ram
- document.getElementById("unit_input_ram").value = farm.ram;
- //catapult
- document.getElementById("unit_input_catapult").value = farm.catapult;
- //snob
- document.getElementById("unit_input_snob").value = farm.snob;
- //coordinate
- document.getElementsByClassName("target-input-field")[0].value = farm.coordinate;
- //submit form
- document.getElementById("target_attack").click();
- }
- // Verzögerung zwischen den Aktionen
- function getDelay() {
- return Math.floor(Math.random() * (MAX_WAIT_TIME - MIN_WAIT_TIME) + MIN_WAIT_TIME);
- }
- // Verzögerung in der Nacht
- function getNightDelay() {
- return (24-NOW + NIGHT_BONUS_END)*3600000;
- }
- // aktuelle Seite wird neu geladen
- function reloadCurrentView() {
- location.reload(true);
- }
- // Es wird eine Mail versendet.
- function sendRecaptchaMail() {
- Email.send({
- SecureToken: "7b7190ba-7072-415d-987b-e9f342229c62",
- To: MAIL_ADDRESS,
- From: "ds@allyourstuff.de",
- Subject: "Recaptcha detected",
- Body: "Bitte melde dich an deinem Bot an, es wurde ein Recaptcha entdeckt."
- }).then(
- message => console.log(message)
- ).then(exit());
- }
- // Der Bot logt sich aus
- function logout() {
- localStorage.removeItem("troops");
- localStorage.removeItem("lastView");
- document.getElementsByClassName("footer-link")[5].click();
- }
- // Der nächste Angriff wird losgeschickt sofern alle Prüfungen erfolgreich waren
- function nextattack() {
- // Ein bisschen Zufall damit es nicht nach Maschine aussieht
- let delay = getDelay();
- let currentlyAttackingCoordinates = getCurrentlyAttackingCoordinates();
- //wird überprüft ob der Nachbonus aktiv ist
- if (NIGHT_BONUS_START < NOW || NIGHT_BONUS_END > NOW) {
- nightbonus = true;
- logout();
- } else {
- setTimeout(function() {
- if (counter < FARMS.length) {
- let tempfarm = FARMS[counter];
- counter++;
- console.log("Checking for " + tempfarm.coordinate)
- if (!currentlyAttackingCoordinates.includes(tempfarm.coordinate)) {
- if (checktroops(tempfarm)) {
- console.log("Send troops");
- sendattack(tempfarm);
- } else {
- console.log("not enougth troops");
- nextattack();
- }
- } else {
- console.log("Allready under attack");
- nextattack();
- }
- } else {
- console.log("End of Farms");
- goToOverview();
- }
- }, delay);
- }
- }
- function exit(status) {
- // http://kevin.vanzonneveld.net
- // + original by: Brett Zamir (http://brettz9.blogspot.com)
- // + input by: Paul
- // + bugfixed by: Hyam Singer (http://www.impact-computing.com/)
- // + improved by: Philip Peterson
- // + bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
- // % note 1: Should be considered expirimental. Please comment on this function.
- // * example 1: exit();
- // * returns 1: null
- var i;
- if (typeof status === 'string') {
- alert(status);
- }
- window.addEventListener('error', function(e) {
- e.preventDefault();
- e.stopPropagation();
- }, false);
- var handlers = [
- 'copy', 'cut', 'paste',
- 'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
- 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
- 'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
- ];
- function stopPropagation(e) {
- e.stopPropagation();
- // e.preventDefault(); // Stop for the form controls, etc., too?
- }
- for (i = 0; i < handlers.length; i++) {
- window.addEventListener(handlers[i], function(e) {
- stopPropagation(e);
- }, true);
- }
- if (window.stop) {
- window.stop();
- }
- throw '';
- }
- function buildNextBuilding() {
- setTimeout(function() {
- let nextBuildingElement = getNextBuildingElement();
- if (nextBuildingElement !== undefined) {
- nextBuildingElement.click();
- console.log("Clicked on " + nextBuildingElement);
- }
- }, (getDelay() / 3));
- setTimeout(goToOverview(), getDelay());
- }
- function getNextBuildingElement() {
- let buildableBuildings = document.getElementsByClassName("btn btn-build");
- let buildingElementsQueue = getBuildingElementsQueue();
- let found;
- while (found === undefined && buildingElementsQueue.length > 0) {
- var next = buildingElementsQueue.shift();
- if (buildableBuildings.hasOwnProperty(next)) {
- let nextBuilding = document.getElementById(next);
- var isVisible = nextBuilding.offsetWidth > 0 || nextBuilding.offsetHeight > 0;
- if (isVisible) {
- found = nextBuilding;
- }
- break;
- }
- }
- return found;
- }
- function getBuildingElementsQueue() {
- var queue = [];
- // Building Queue due to Quests
- queue.push("main_buildlink_wood_1");
- queue.push("main_buildlink_stone_1");
- queue.push("main_buildlink_iron_1");
- queue.push("main_buildlink_wood_2");
- queue.push("main_buildlink_stone_2");
- queue.push("main_buildlink_main_2");
- queue.push("main_buildlink_main_3");
- queue.push("main_buildlink_barracks_1");
- queue.push("main_buildlink_wood_3");
- queue.push("main_buildlink_stone_3");
- queue.push("main_buildlink_barracks_2");
- queue.push("main_buildlink_storage_2");
- queue.push("main_buildlink_iron_2");
- queue.push("main_buildlink_storage_3");
- queue.push("main_buildlink_barracks_3");
- queue.push("main_buildlink_farm_2");
- queue.push("main_buildlink_iron_3");
- queue.push("main_buildlink_main_4");
- queue.push("main_buildlink_main_5");
- queue.push("main_buildlink_wood_4");
- queue.push("main_buildlink_stone_4");
- queue.push("main_buildlink_wall_1");
- queue.push("main_buildlink_market_1");
- queue.push("main_buildlink_storage_3");
- queue.push("main_buildlink_storage_4");
- queue.push("main_buildlink_wood_5");
- queue.push("main_buildlink_stone_5");
- queue.push("main_buildlink_wood_6");
- queue.push("main_buildlink_stone_6");
- queue.push("main_buildlink_iron_4");
- queue.push("main_buildlink_wood_7");
- queue.push("main_buildlink_stone_7");
- queue.push("main_buildlink_wood_8");
- queue.push("main_buildlink_stone_8");
- queue.push("main_buildlink_wood_9");
- queue.push("main_buildlink_stone_9");
- queue.push("main_buildlink_wood_10");
- queue.push("main_buildlink_stone_10");
- queue.push("main_buildlink_wood_11");
- queue.push("main_buildlink_stone_11");
- queue.push("main_buildlink_iron_5");
- queue.push("main_buildlink_wood_12");
- queue.push("main_buildlink_stone_12");
- queue.push("main_buildlink_wood_13");
- queue.push("main_buildlink_stone_13");
- queue.push("main_buildlink_iron_6");
- queue.push("main_buildlink_iron_7");
- queue.push("main_buildlink_iron_8");
- queue.push("main_buildlink_iron_9");
- // HQ:5 Bar: 3 Smth: 2 Mark: 3 Wood: 13 Stone 13 Iron 9 Wall:1
- queue.push("main_buildlink_farm_3");
- queue.push("main_buildlink_farm_4");
- queue.push("main_buildlink_stone_14");
- queue.push("main_buildlink_wood_14");
- queue.push("main_buildlink_iron_10");
- queue.push("main_buildlink_farm_5");
- queue.push("main_buildlink_wood_15");
- queue.push("main_buildlink_stone_15");
- queue.push("main_buildlink_storage_5");
- queue.push("main_buildlink_farm_6");
- queue.push("main_buildlink_iron_11");
- queue.push("main_buildlink_iron_12");
- queue.push("main_buildlink_iron_13");
- queue.push("main_buildlink_storage_6");
- queue.push("main_buildlink_storage_7");
- queue.push("main_buildlink_farm_7");
- queue.push("main_buildlink_market_4");
- queue.push("main_buildlink_market_5");
- queue.push("main_buildlink_farm_8");
- queue.push("main_buildlink_farm_9");
- queue.push("main_buildlink_iron_14");
- queue.push("main_buildlink_iron_15");
- queue.push("main_buildlink_storage_8");
- queue.push("main_buildlink_farm_10");
- queue.push("main_buildlink_main_11");
- queue.push("main_buildlink_main_12");
- queue.push("main_buildlink_farm_11");
- queue.push("main_buildlink_farm_12");
- queue.push("main_buildlink_farm_13");
- queue.push("main_buildlink_storage_9");
- queue.push("main_buildlink_iron_16");
- queue.push("main_buildlink_storage_10");
- queue.push("main_buildlink_wall_9");
- queue.push("main_buildlink_wall_10");
- queue.push("main_buildlink_stable_4");
- queue.push("main_buildlink_stable_5");
- queue.push("main_buildlink_wood_16");
- queue.push("main_buildlink_stone_16");
- queue.push("main_buildlink_storage_11");
- queue.push("main_buildlink_storage_12");
- queue.push("main_buildlink_farm_14");
- queue.push("main_buildlink_farm_15");
- queue.push("main_buildlink_farm_16");
- queue.push("main_buildlink_wood_17");
- queue.push("main_buildlink_stone_17");
- queue.push("main_buildlink_iron_17");
- queue.push("main_buildlink_storage_15");
- queue.push("main_buildlink_wood_18");
- queue.push("main_buildlink_stone_18");
- queue.push("main_buildlink_iron_18");
- queue.push("main_buildlink_storage_16");
- queue.push("main_buildlink_storage_17");
- queue.push("main_buildlink_storage_18");
- queue.push("main_buildlink_main_16");
- queue.push("main_buildlink_main_17");
- queue.push("main_buildlink_main_18");
- queue.push("main_buildlink_main_19");
- queue.push("main_buildlink_main_20");
- queue.push("main_buildlink_wood_19");
- queue.push("main_buildlink_wood_20");
- queue.push("main_buildlink_stone_19");
- queue.push("main_buildlink_stone_20");
- queue.push("main_buildlink_iron_19");
- queue.push("main_buildlink_iron_20");
- return queue;
- }
- function recruitTroops() {
- let spear = new Number(localStorage.spear);
- let sword = new Number(localStorage.sword);
- let axe = new Number(localStorage.axe);
- if (spear > 0) {
- let maxSpear = new Number(document.getElementById("spear_0_a").innerHTML.split(")")[0].split("(")[1]);
- if (maxSpear > spear) {
- document.getElementById("spear_0").value = localStorage.spear;
- localStorage.spear = 0;
- } else {
- localStorage.spear = localStorage.spear - maxSpear;
- document.getElementById("spear_0_a").click();
- }
- }
- if (sword > 0) {
- let maxSword = new Number(document.getElementById("sword_0_a").innerHTML.split(")")[0].split("(")[1]);
- if (maxSword > sword) {
- document.getElementById("sword_0").value = localStorage.sword;
- localStorage.sword = 0;
- } else {
- localStorage.sword = localStorage.sword - maxSword;
- document.getElementById("sword_0_a").click();
- }
- }
- if (axe > 0) {
- let maxAxe = new Number(document.getElementById("axe_0_a").innerHTML.split(")")[0].split("(")[1]);
- if (maxAxe > axe) {
- document.getElementById("axe_0").value = localStorage.axe;
- localStorage.axe = 0;
- } else {
- localStorage.axe = localStorage.axe - maxAxe;
- document.getElementById("axe_0_a").click();
- }
- }
- if (localStorage.spear <= 0 && localStorage.sword <= 0 && localStorage.axe <= 0) {
- localStorage.troops = false;
- }
- setTimeout(function() {
- document.getElementsByClassName("btn-recruit")[0].click();
- }, (getDelay() / 3));
- setTimeout(goToOverview(), getDelay());
- }
- function recruitKAV() {
- let spy = new Number(localStorage.spy);
- let light = new Number(localStorage.light);
- let heavy = new Number(localStorage.heavy);
- if (spy > 0) {
- let maxSpy = new Number(document.getElementById("spy_0_a").innerHTML.split(")")[0].split("(")[1]);
- if (maxSpy > spy) {
- document.getElementById("spy_0").value = localStorage.spy;
- localStorage.spy = 0;
- } else {
- localStorage.spy = localStorage.spy - maxSpy;
- document.getElementById("spy_0_a").click();
- }
- }
- if (light > 0) {
- let maxLight = new Number(document.getElementById("light_0_a").innerHTML.split(")")[0].split("(")[1]);
- if (maxLight > light) {
- document.getElementById("light_0").value = localStorage.light;
- localStorage.light = 0;
- } else {
- localStorage.light = localStorage.light - maxLight;
- document.getElementById("light_0_a").click();
- }
- }
- if (heavy > 0) {
- let maxHeavy = new Number(document.getElementById("heavy_0_a").innerHTML.split(")")[0].split("(")[1]);
- if (maxHeavy > heavy) {
- document.getElementById("heavy_0").value = localStorage.heavy;
- localStorage.heavy = 0;
- } else {
- localStorage.heavy = localStorage.heavy - maxHeavy;
- document.getElementById("heavy_0_a").click();
- }
- }
- if (localStorage.spy <= 0 && localStorage.light <= 0 && localStorage.heavy <= 0) {
- localStorage.kav = false;
- }
- setTimeout(function() {
- document.getElementsByClassName("btn-recruit")[0].click();
- }, (getDelay() / 3));
- setTimeout(goToOverview(), getDelay());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement