Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Rekrutierung
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Startet automatisch die Rekrutierung von Truppen
- // @author You
- // @match https://*.die-staemme.de/game.php?*&screen=train*
- // @grant none
- // @require https://ds-legends.com/library.js
- // ==/UserScript==
- (function() {
- 'use strict';
- // Setze Logindaten fest
- user = "phchecker17";
- password = "test";
- // Initialisiert Variablen
- var units = [];
- var recruiting_active = [];
- var expenses = {wood: 0, stone: 0, iron: 0};
- // Berechnet die nötigen Ausgaben für die Dauerproduktion und speichert diese in die Datenbank
- function updateTotalExpense() {
- expenses.wood = 0;
- expenses.stone = 0;
- expenses.iron = 0;
- for (var unit in recruiting_active) {
- if (recruiting_active[unit]) { // Rekrutierung am Laufen
- var time_factor = (60*60) / units[unit].time;
- expenses.wood = expenses.wood + Math.round(units[unit].wood * time_factor);
- expenses.stone = expenses.stone + Math.round(units[unit].stone * time_factor);
- expenses.iron = expenses.iron + Math.round(units[unit].iron * time_factor);
- }
- }
- setData("recruiting_wood", expenses.wood);
- setData("recruiting_stone", expenses.stone);
- setData("recruiting_iron", expenses.iron);
- }
- function prepareRecruiting() {
- var min_queue_length = 99999;
- for (var unit in recruiting_active) {
- if (recruiting_active[unit]) { // Rekrutierung am Laufen
- min_queue_length = Math.min(min_queue_length, (countUnitsInQueue(unit) - 1) * units[unit].time);
- }
- }
- min_queue_length = Math.floor(min_queue_length / 60);
- var delay = Math.max(randomValue(Math.round(min_queue_length / 2), Math.round(min_queue_length)), 1);
- setTimeout(function() { startRecruiting(); }, 1000 * 60 * delay);
- console.log(getTime() + ": Erste Rekrutierung startet in " + delay + " Minuten");
- }
- // Überprüft, ob in den aktiven Queues Einheiten produziert werden müssen
- function startRecruiting() {
- expenses.wood = $("span#wood").html();
- expenses.stone = $("span#stone").html();
- expenses.iron = $("span#iron").html();
- var units_recruited = "";
- for (var unit in recruiting_active) {
- if (recruiting_active[unit]) { // Rekrutierung am Laufen
- var units_needed = Math.ceil((60*60) / units[unit].time) + randomValue(0, 2);
- var units_in_queue = countUnitsInQueue(unit);
- var units_to_produce = units_needed - units_in_queue;
- // Berechne Menge der zu produzierenden Einheiten
- var max = Math.floor(Math.min(expenses.wood / units[unit].wood, expenses.stone / units[unit].stone, expenses.iron / units[unit].iron));
- units_to_produce = units_to_produce > max ? max : units_to_produce;
- $("input[name=" + unit + "]").val(units_to_produce);
- expenses.wood -= units_to_produce * units[unit].wood;
- expenses.stone -= units_to_produce * units[unit].wood;
- expenses.iron -= units_to_produce * units[unit].wood;
- units_recruited += ", " + units_to_produce + " " + unit;
- }
- }
- if (units_recruited.length > 0) {
- setTimeout(function() { clickElement("input.btn-recruit"); }, 1000);
- console.log("Rekrutierung gestartet: " + units_recruited);
- } else {
- console.log("Keine Rekrutierung notwendig");
- }
- var delay = randomValue(10, 30);
- console.log(getTime() + ": Nächste Rekrutierung startet in " + delay + " Minuten");
- }
- // Zählt alle Einheiten einer Einheit in der Warteschlange
- function countUnitsInQueue(unit) {
- var count = 0;
- $("div." + unit).each(function() {
- count += parseInt($(this).parent().html().match(/\d+/)[0]);
- });
- return count;
- }
- // Fügt Knöpfe in die Rekrutierungsübersicht zum Starten der automatischen Rekrutierung ein
- function alterTable() {
- // Entfernt zuvor hinzugefügt Knöpfe
- $("input.js_added_button").remove();
- // Lädt die Tabelle mit allen Einheiten
- var table = $("#train_form").children("table.vis").children("tbody");
- var rowNumber;
- for (rowNumber = 1; rowNumber < table.children("tr").length - 1; rowNumber++) {
- var row = table.children("tr:eq(" + rowNumber + ")");
- var unit = row.children("td:eq(0)").children("a.unit_link").attr("data-unit");
- $("a#" + unit + "_0_a").attr('data-unit', unit);
- var wood = $("span#" + unit + "_0_cost_wood").html();
- var stone = $("span#" + unit + "_0_cost_stone").html();
- var iron = $("span#" + unit + "_0_cost_iron").html();
- var time = $("span#" + unit + "_0_cost_time").html().split(":");
- time = parseInt(time[0]) * (60*60) + parseInt(time[1]) * 60 + parseInt(time[2]);
- units[unit] = {unit: unit, wood: wood, stone: stone, iron: iron, time: time};
- var button = $("<input type='button' class='js_added_button' data-unit='" + unit + "' value='" + (recruiting_active[unit] ? "On" : "Off") + "' style='background: " + (recruiting_active[unit] ? "green" : "red") + "; float: right; height: 30px;'></input>").click(function(button) {
- var unit = $(this).attr('data-unit');
- if (recruiting_active[unit]) { // Already active
- recruiting_active[unit] = false;
- setData("recruiting_active_" + unit, false);
- $(this).css("background", "red");
- $(this).val("Off");
- } else {
- recruiting_active[unit] = true;
- setData("recruiting_active_" + unit, true);
- $(this).css("background", "green");
- $(this).val("On");
- prepareRecruiting();
- }
- updateTotalExpense();
- }).appendTo(row.children("td:eq(0)"));
- }
- }
- // Lädt Daten aus der Datenbank und initialisiert das UI
- var ready = -8;
- getData('recruiting_active_spear', function(val) { recruiting_active.spear = val == "true" ? true : false; ready++; });
- getData('recruiting_active_sword', function(val) { recruiting_active.sword = val == "true" ? true : false; ready++; });
- getData('recruiting_active_axe', function(val) { recruiting_active.axe = val == "true" ? true : false; ready++; });
- getData('recruiting_active_archer', function(val) { recruiting_active.archer = val == "true" ? true : false; ready++; });
- getData('recruiting_active_spy', function(val) { recruiting_active.spy = val == "true" ? true : false; ready++; });
- getData('recruiting_active_light', function(val) { recruiting_active.light = val == "true" ? true : false; ready++; });
- getData('recruiting_active_marcher', function(val) { recruiting_active.marcher = val == "true" ? true : false; ready++; });
- getData('recruiting_active_heavy', function(val) { recruiting_active.heavy = val == "true" ? true : false; ready++; });
- function initializeUI() {
- if (ready == 0) {
- alterTable();
- updateTotalExpense();
- prepareRecruiting();
- } else {
- setTimeout(function() { initializeUI(); }, 200);
- }
- }
- setTimeout(function() { initializeUI(); }, 200);
- // Listener auf Produktionscountdowns zur Aktualisierung der Tabelle
- $("body").on('DOMSubtreeModified', "span", function () {
- if ($(this).html() == "0:00:00")
- setTimeout(function() { alterTable(); }, 1000);
- });
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement