Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.53 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Rekrutierung
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Startet automatisch die Rekrutierung von Truppen
  6. // @author You
  7. // @match https://*.die-staemme.de/game.php?*&screen=train*
  8. // @grant none
  9. // @require https://ds-legends.com/library.js
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Setze Logindaten fest
  16. user = "phchecker17";
  17. password = "test";
  18.  
  19. // Initialisiert Variablen
  20. var units = [];
  21. var recruiting_active = [];
  22. var expenses = {wood: 0, stone: 0, iron: 0};
  23.  
  24. // Berechnet die nötigen Ausgaben für die Dauerproduktion und speichert diese in die Datenbank
  25. function updateTotalExpense() {
  26. for (var unit in recruiting_active) {
  27. if (recruiting_active[unit]) { // Rekrutierung am Laufen
  28. var time_factor = (60*60) / units[unit].time;
  29. expenses.wood = expenses.wood + Math.round(units[unit].wood * time_factor);
  30. expenses.stone = expenses.stone + Math.round(units[unit].stone * time_factor);
  31. expenses.iron = expenses.iron + Math.round(units[unit].iron * time_factor);
  32. }
  33. }
  34.  
  35. setData("recruiting_wood", expenses.wood);
  36. setData("recruiting_stone", expenses.stone);
  37. setData("recruiting_iron", expenses.iron);
  38. }
  39.  
  40. // Überprüft, ob in den aktiven Queues Einheiten produziert werden müssen
  41. function startRecruiting() {
  42. var total = 0;
  43. for (var unit in recruiting_active) {
  44. if (recruiting_active[unit]) { // Rekrutierung am Laufen
  45. var units_needed = Math.ceil((60*60) / units[unit].time);
  46. var units_in_queue = countUnitsInQueue(unit);
  47. var units_to_produce = units_needed - units_in_queue;
  48. var max = parseInt($("a#" + unit + "_0_a").html().match(/\d+/)[0]);
  49.  
  50. $("input[name=" + unit + "]").val(units_to_produce > max ? max : units_to_produce);
  51. total += units_to_produce > max ? max : units_to_produce;
  52. }
  53. }
  54.  
  55. if (total > 0) {
  56. setTimeout(function() { clickElement("input.btn-recruit"); }, 1000);
  57. console.log("Rekrutierung von " + total + " Einheiten wurde gestartet");
  58. } else {
  59. console.log("Keine Rekrutierung notwendig");
  60. }
  61. }
  62.  
  63. // Zählt alle Einheiten einer Einheit in der Warteschlange
  64. function countUnitsInQueue(unit) {
  65. var count = 0;
  66. $("div." + unit).each(function() {
  67. count += parseInt($(this).parent().html().match(/\d+/)[0]);
  68. });
  69. return count;
  70. }
  71.  
  72. // Fügt Knöpfe in die Rekrutierungsübersicht zum Starten der automatischen Rekrutierung ein
  73. function alterTable() {
  74. // Entfernt zuvor hinzugefügt Knöpfe
  75. $("input.js_added_button").remove();
  76.  
  77. // Lädt die Tabelle mit allen Einheiten
  78. var table = $("#train_form").children("table.vis").children("tbody");
  79.  
  80. var rowNumber;
  81. for (rowNumber = 1; rowNumber < table.children("tr").length - 1; rowNumber++) {
  82. var row = table.children("tr:eq(" + rowNumber + ")");
  83. var unit = row.children("td:eq(0)").children("a.unit_link").attr("data-unit");
  84.  
  85. $("a#" + unit + "_0_a").attr('data-unit', unit);
  86.  
  87. var wood = $("span#" + unit + "_0_cost_wood").html();
  88. var stone = $("span#" + unit + "_0_cost_stone").html();
  89. var iron = $("span#" + unit + "_0_cost_iron").html();
  90. var time = $("span#" + unit + "_0_cost_time").html().split(":");
  91. time = parseInt(time[0]) * (60*60) + parseInt(time[1]) * 60 + parseInt(time[2]);
  92.  
  93. units[unit] = {unit: unit, wood: wood, stone: stone, iron: iron, time: time};
  94.  
  95. 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) {
  96.  
  97. var unit = $(this).attr('data-unit');
  98. if (recruiting_active[unit]) { // Already active
  99. recruiting_active[unit] = false;
  100. setData("recruiting_active_" + unit, false);
  101. $(this).css("background", "red");
  102. $(this).val("Off");
  103. } else {
  104. recruiting_active[unit] = true;
  105. setData("recruiting_active_" + unit, true);
  106. $(this).css("background", "green");
  107. $(this).val("On");
  108. }
  109. updateTotalExpense();
  110. setTimeout(function() { startRecruiting(); }, 10000);
  111.  
  112. }).appendTo(row.children("td:eq(0)"));
  113.  
  114. }
  115. }
  116.  
  117. // Lädt Daten aus der Datenbank und initialisiert das UI
  118. var ready = -7;
  119.  
  120. getData('recruiting_active_spear', function(val) { recruiting_active.spear = val == "true" ? true : false; ready++; });
  121. getData('recruiting_active_sword', function(val) { recruiting_active.sword = val == "true" ? true : false; ready++; });
  122. getData('recruiting_active_axe', function(val) { recruiting_active.axe = val == "true" ? true : false; ready++; });
  123. getData('recruiting_active_archer', function(val) { recruiting_active.archer = val == "true" ? true : false; ready++; });
  124. getData('recruiting_active_light', function(val) { recruiting_active.light = val == "true" ? true : false; ready++; });
  125. getData('recruiting_active_marcher', function(val) { recruiting_active.marcher = val == "true" ? true : false; ready++; });
  126. getData('recruiting_active_heavy', function(val) { recruiting_active.heavy = val == "true" ? true : false; ready++; });
  127.  
  128. function initializeUI() {
  129. if (ready == 0) {
  130. alterTable();
  131. updateTotalExpense();
  132. } else {
  133. setTimeout(function() { initializeUI(); }, 200);
  134. }
  135. }
  136.  
  137. setTimeout(function() { initializeUI(); }, 200);
  138. var delay = randomDelay(10, 30);
  139. setTimeout(function() { startRecruiting(); }, 1000 * 60 * delay);
  140. console.log("Nächste Rekrutierung startet in " + delay + " Minuten");
  141.  
  142. // Listener auf Produktionscountdowns zur Aktualisierung der Tabelle
  143. $("body").on('DOMSubtreeModified', "span", function () {
  144. if ($(this).html() == "0:00:00")
  145. setTimeout(function() { alterTable(); }, 1000);
  146. });
  147.  
  148. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement