Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 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. expenses.wood = 0;
  27. expenses.stone = 0;
  28. expenses.iron = 0;
  29. for (var unit in recruiting_active) {
  30. if (recruiting_active[unit]) { // Rekrutierung am Laufen
  31. var time_factor = (60*60) / units[unit].time;
  32. expenses.wood = expenses.wood + Math.round(units[unit].wood * time_factor);
  33. expenses.stone = expenses.stone + Math.round(units[unit].stone * time_factor);
  34. expenses.iron = expenses.iron + Math.round(units[unit].iron * time_factor);
  35. }
  36. }
  37.  
  38. setData("recruiting_wood", expenses.wood);
  39. setData("recruiting_stone", expenses.stone);
  40. setData("recruiting_iron", expenses.iron);
  41. }
  42.  
  43. function prepareRecruiting() {
  44. var min_queue_length = 99999;
  45. for (var unit in recruiting_active) {
  46. if (recruiting_active[unit]) { // Rekrutierung am Laufen
  47. min_queue_length = Math.min(min_queue_length, (countUnitsInQueue(unit) - 1) * units[unit].time);
  48. }
  49. }
  50. min_queue_length = Math.floor(min_queue_length / 60);
  51. var delay = Math.max(randomValue(Math.round(min_queue_length / 2), Math.round(min_queue_length)), 1);
  52. setTimeout(function() { startRecruiting(); }, 1000 * 60 * delay);
  53. console.log(getTime() + ": Erste Rekrutierung startet in " + delay + " Minuten");
  54. }
  55.  
  56. // Überprüft, ob in den aktiven Queues Einheiten produziert werden müssen
  57. function startRecruiting() {
  58. expenses.wood = $("span#wood").html();
  59. expenses.stone = $("span#stone").html();
  60. expenses.iron = $("span#iron").html();
  61.  
  62. var units_recruited = "";
  63. for (var unit in recruiting_active) {
  64. if (recruiting_active[unit]) { // Rekrutierung am Laufen
  65. var units_needed = Math.ceil((60*60) / units[unit].time) + randomValue(0, 2);
  66. var units_in_queue = countUnitsInQueue(unit);
  67. var units_to_produce = units_needed - units_in_queue;
  68.  
  69. // Berechne Menge der zu produzierenden Einheiten
  70. var max = Math.floor(Math.min(expenses.wood / units[unit].wood, expenses.stone / units[unit].stone, expenses.iron / units[unit].iron));
  71. units_to_produce = units_to_produce > max ? max : units_to_produce;
  72.  
  73. $("input[name=" + unit + "]").val(units_to_produce);
  74. expenses.wood -= units_to_produce * units[unit].wood;
  75. expenses.stone -= units_to_produce * units[unit].wood;
  76. expenses.iron -= units_to_produce * units[unit].wood;
  77. units_recruited += ", " + units_to_produce + " " + unit;
  78. }
  79. }
  80.  
  81. if (units_recruited.length > 0) {
  82. setTimeout(function() { clickElement("input.btn-recruit"); }, 1000);
  83. console.log("Rekrutierung gestartet: " + units_recruited);
  84. } else {
  85. console.log("Keine Rekrutierung notwendig");
  86. }
  87. var delay = randomValue(10, 30);
  88. console.log(getTime() + ": Nächste Rekrutierung startet in " + delay + " Minuten");
  89. }
  90.  
  91. // Zählt alle Einheiten einer Einheit in der Warteschlange
  92. function countUnitsInQueue(unit) {
  93. var count = 0;
  94. $("div." + unit).each(function() {
  95. count += parseInt($(this).parent().html().match(/\d+/)[0]);
  96. });
  97. return count;
  98. }
  99.  
  100. // Fügt Knöpfe in die Rekrutierungsübersicht zum Starten der automatischen Rekrutierung ein
  101. function alterTable() {
  102. // Entfernt zuvor hinzugefügt Knöpfe
  103. $("input.js_added_button").remove();
  104.  
  105. // Lädt die Tabelle mit allen Einheiten
  106. var table = $("#train_form").children("table.vis").children("tbody");
  107.  
  108. var rowNumber;
  109. for (rowNumber = 1; rowNumber < table.children("tr").length - 1; rowNumber++) {
  110. var row = table.children("tr:eq(" + rowNumber + ")");
  111. var unit = row.children("td:eq(0)").children("a.unit_link").attr("data-unit");
  112.  
  113. $("a#" + unit + "_0_a").attr('data-unit', unit);
  114.  
  115. var wood = $("span#" + unit + "_0_cost_wood").html();
  116. var stone = $("span#" + unit + "_0_cost_stone").html();
  117. var iron = $("span#" + unit + "_0_cost_iron").html();
  118. var time = $("span#" + unit + "_0_cost_time").html().split(":");
  119. time = parseInt(time[0]) * (60*60) + parseInt(time[1]) * 60 + parseInt(time[2]);
  120.  
  121. units[unit] = {unit: unit, wood: wood, stone: stone, iron: iron, time: time};
  122.  
  123. 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) {
  124.  
  125. var unit = $(this).attr('data-unit');
  126. if (recruiting_active[unit]) { // Already active
  127. recruiting_active[unit] = false;
  128. setData("recruiting_active_" + unit, false);
  129. $(this).css("background", "red");
  130. $(this).val("Off");
  131. } else {
  132. recruiting_active[unit] = true;
  133. setData("recruiting_active_" + unit, true);
  134. $(this).css("background", "green");
  135. $(this).val("On");
  136. prepareRecruiting();
  137. }
  138. updateTotalExpense();
  139.  
  140. }).appendTo(row.children("td:eq(0)"));
  141.  
  142. }
  143. }
  144.  
  145. // Lädt Daten aus der Datenbank und initialisiert das UI
  146. var ready = -8;
  147.  
  148. getData('recruiting_active_spear', function(val) { recruiting_active.spear = val == "true" ? true : false; ready++; });
  149. getData('recruiting_active_sword', function(val) { recruiting_active.sword = val == "true" ? true : false; ready++; });
  150. getData('recruiting_active_axe', function(val) { recruiting_active.axe = val == "true" ? true : false; ready++; });
  151. getData('recruiting_active_archer', function(val) { recruiting_active.archer = val == "true" ? true : false; ready++; });
  152. getData('recruiting_active_spy', function(val) { recruiting_active.spy = val == "true" ? true : false; ready++; });
  153. getData('recruiting_active_light', function(val) { recruiting_active.light = val == "true" ? true : false; ready++; });
  154. getData('recruiting_active_marcher', function(val) { recruiting_active.marcher = val == "true" ? true : false; ready++; });
  155. getData('recruiting_active_heavy', function(val) { recruiting_active.heavy = val == "true" ? true : false; ready++; });
  156.  
  157. function initializeUI() {
  158. if (ready == 0) {
  159. alterTable();
  160. updateTotalExpense();
  161. prepareRecruiting();
  162. } else {
  163. setTimeout(function() { initializeUI(); }, 200);
  164. }
  165. }
  166.  
  167. setTimeout(function() { initializeUI(); }, 200);
  168.  
  169. // Listener auf Produktionscountdowns zur Aktualisierung der Tabelle
  170. $("body").on('DOMSubtreeModified', "span", function () {
  171. if ($(this).html() == "0:00:00")
  172. setTimeout(function() { alterTable(); }, 1000);
  173. });
  174.  
  175. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement