Greasy Fork 还支持 简体中文。

Automate Arcanum

Plays (mostly) automatically instead of you. Work very much in progress.

目前為 2019-10-24 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Automate Arcanum
  3. // @name:hu Automata Arcanum
  4. // @namespace https://greasyfork.org/users/390287
  5. // @version 0.001
  6. // @description Plays (mostly) automatically instead of you. Work very much in progress.
  7. // @description:hu Automatizáló script az Arcanum játékhoz.
  8. // @author Yoyó
  9. // @icon https://i.ibb.co/Y7W0Zwd/pinkieemote.png
  10. // @match http://www.lerpinglemur.com/arcanum/
  11. // @match https://game312933.konggames.com/gamez/0031/2933/*
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. //user settings
  16. var timeToIdle = 3; //how many ticks should it take for the idle stuff to kick in. default 3
  17. var stamToKeep = 80; // stamina to keep for stuff, in percentage. default 80
  18. var tickTime = 2000; // how many milliseconds should a tick take. default 2000
  19.  
  20. //program starts here
  21.  
  22. var idleTimer = 0;
  23. var idling = 0;
  24. const data = {
  25. "qa": { //for quick action
  26. "Clean Stables":{
  27. "stam":-0.08,
  28. "virtue":0.1,
  29. "gold":0.2
  30. },
  31. "Buy Scroll":{
  32. "gold":-10,
  33. "scrolls":1
  34. }
  35. }
  36. }
  37.  
  38. var repetitionIsTheKeyToSuccess = window.setInterval (function(){
  39. let stamXPath="//div[@class='vitals']//table[@class='bars']//div[@class='stamina']//span[@class='bar-text']";
  40. let stamText = document.evaluate(stamXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  41. let stamValues = stamText.textContent.split("/");
  42. let currentStam = parseFloat(stamValues[0]);
  43. let maxStam = parseFloat(stamValues[1]);
  44. let goldXPath = "//div[@class='resource-list']/tr[@class='item-name']/td[text()='gold']/following-sibling::td[@class='num-align']";
  45. let goldText = document.evaluate(goldXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  46. let goldValues = goldText.textContent.split("/");
  47. let currentGold = parseInt(goldValues[0]);
  48. let maxGold = parseInt(goldValues[1]);
  49. let pumpkinXPath = "//div[@class='resource-list']/tr[contains(@class,'item-name')]/td[text()='pumpkins🎃']/following-sibling::td[@class='num-align']";
  50. let pumpkinText = document.evaluate(pumpkinXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  51. let pumpkinValues = pumpkinText.textContent.split("/");
  52. let currentPump = parseInt(pumpkinValues[0]);
  53. let maxPump = parseInt(pumpkinValues[1]);
  54. let toStam = maxStam*stamToKeep/100;
  55. let jackoXPath = `//div[@class='resource-list']/tr[contains(@class,'item-name')]/td[text()="jack o' lantern🎃"]/following-sibling::td[@class='num-align']`;
  56. let jackoText = document.evaluate(jackoXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  57. let jackoValues = jackoText.textContent.split("/");
  58. let currentJacko = parseInt(jackoValues[0]);
  59. let maxJacko = parseInt(jackoValues[1]);
  60.  
  61. let runningXPath = "//div[@class='vitals']/div[@class='running']/div/span/text()";
  62. let runningText = document.evaluate(runningXPath, document, null, XPathResult.STRING_TYPE, null);
  63.  
  64. let restXPath = "//div[@class='vitals']/div[@class='separate']/button[2]";
  65. let restButton = document.evaluate(restXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  66. let studyXPath = "//span[@class='action-btn runnable']/button[text()='study']";
  67. let studyButton = document.evaluate(studyXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  68. let filchXPath = "//span[@class='action-btn runnable']/button[text()='filch pumpkins🎃']";
  69. let filchButton = document.evaluate(filchXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  70. let carveXPath = "//span[@class='action-btn runnable']/button[text()='carve lantern🎃']";
  71. let carveButton = document.evaluate(carveXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  72.  
  73. let cleanStableXPath = "//span[contains(@class,'action-btn')]/button[text()='Clean Stables']";
  74. let cleanStableButton = document.evaluate(cleanStableXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  75. if (!cleanStableButton.disabled && currentGold < maxGold && currentStam > toStam) {
  76. let needToRun = (maxGold - currentGold)/data.qa["Clean Stables"].gold;
  77. while (needToRun > 0 && !cleanStableButton.disabled && currentStam > toStam) {
  78. cleanStableButton.click();
  79. currentStam = currentStam + data.qa["Clean Stables"].stam;
  80. needToRun = needToRun - 1;
  81. }
  82. }
  83.  
  84. let upgradeXPath = "//div[@class='upgrade-list'][1]/span[@class='action-btn' and not(@class='locked')]/button[@class='wrapped-btn' and not(@disabled)]";
  85. let upgradeButton = document.evaluate(upgradeXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  86. if (upgradeButton != null) {
  87. upgradeButton.click();
  88. }
  89.  
  90. let buyScrollXPath = "//span[@class='action-btn']/button[text()='Buy scroll' and not(@disabled)]";
  91. let buyScrollButton = document.evaluate(buyScrollXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  92. if (buyScrollButton !== null && currentGold == maxGold) {
  93. buyScrollButton.click();
  94. }
  95.  
  96. if (idling === 0) {
  97. idleTimer = idleTimer + 1;
  98. }
  99. if (idleTimer >= timeToIdle) {
  100. idleTimer = 0;
  101. idling = 1;
  102. }
  103. if (idling == 100) {
  104. if (runningText.stringValue != "studying scrolls") {
  105. if(runningText.stringValue != "resting") {
  106. idling = 0;
  107. }
  108. }
  109. }
  110. if (idling == 2) {
  111. if (currentPump == maxPump && runningText.stringValue === "") {
  112. idling = 1;
  113. }
  114. }
  115. if (idling == 3) {
  116. if (currentJacko == maxJacko) {
  117. idling = 2;
  118. filchButton.click();
  119. }
  120. }
  121. if (idling == 1) {
  122. if (currentStam <= maxStam && runningText.stringValue === "") {
  123. restButton.click();
  124. }
  125. if (currentStam == maxStam && runningText.stringValue === "") {
  126. if (filchButton !== null) {
  127. if (!filchButton.disabled) {
  128. filchButton.click();
  129. idling = 2;
  130. } else if (carveButton !== null) {
  131. carveButton.click();
  132. idling = 3;
  133. } else if (studyButton !== null) {
  134. if (!studyButton.disabled) {
  135. studyButton.click();
  136. idling = 100;
  137. }
  138. }
  139. } else if (studyButton !== null) {
  140. if (!studyButton.disabled) {
  141. studyButton.click();
  142. idling = 100;
  143. }
  144. }
  145. }
  146. }
  147. },tickTime);