Advertisement
Guest User

Untitled

a guest
Feb 16th, 2020
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.07 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Melvor Super Control Panel
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3.5
  5. // @description Have fun with the power of automation!
  6. // @author Strutty
  7. // @match https://*.melvoridle.com/*
  8. // ==/UserScript==
  9.  
  10. //TODO:
  11. //1. Add in switching gloves for mining & smithing
  12. //2. Add level checking for mining in case ores in mineArray are unavailable
  13.  
  14. //Important Settings
  15. //AutoMine
  16. const copper = 0;
  17. const tin = 1;
  18. const iron = 2;
  19. const coal = 3;
  20. const silver = 4;
  21. const gold = 5;
  22. const mithril = 6;
  23. const addy = 7;
  24. const runite = 8;
  25. const dragonite = 9;
  26. const runeEssence = 10;
  27. var mineArray = ([coal, mithril, gold, addy]);
  28. //AutoSellGems
  29. var targetStack = 20;
  30. var gemIdList = [128, 129, 130, 131, 132];
  31. //AutoSmith
  32. var smithIdList = [0, 12, 24, 35, 41, 53, 54, 63];
  33.  
  34. //General Functions
  35. function getBankQty(id) {
  36. for (let i = 0; i < bank.length; i++) {
  37. if (bank[i].id === id) {
  38. return bank[i].qty;
  39. }
  40. }
  41. return 0;
  42. }
  43.  
  44.  
  45. //AutoReplant: Will harvest & replant seeds in your successful farm patches while applying compost
  46. var autoReplantEnabled = false;
  47. var updateAutoReplantButtonText = function () {
  48. $('#auto-replant-button-status').text((autoReplantEnabled) ? 'Enabled' : 'Disabled');
  49. }
  50. var toggleAutoReplant = function () {
  51. autoReplantEnabled = !autoReplantEnabled;
  52. updateAutoReplantButtonText();
  53. setTimeout(function() {
  54. if (!autoReplantEnabled) {
  55. console.log("Auto Replant Disabled!");
  56. }else{
  57. changePage(15);
  58. }
  59. }, 100);
  60. }
  61. var setupAutoReplant = function() {
  62. if ($("#auto-replant-button").length) return;
  63. var containerRef = $(".content-side ul.nav-main li.nav-main-heading:last");
  64. var li = $('<li class="nav-main-item"></li>');
  65. containerRef.before(li);
  66. var button = $([
  67. '<a id="auto-replant-button" class="nav-main-link" href="javascript:void(0);">',
  68. '<img class="nav-img" src="assets/media/skills/farming/farming.svg">',
  69. '<span class="nav-main-link-name">AutoReplant</span>',
  70. '<small id="auto-replant-button-status"></small>',
  71. '</a>'
  72. ].join(""));
  73. li.append(button);
  74. button.on("click", toggleAutoReplant);
  75. updateAutoReplantButtonText();
  76. }
  77. var autoReplant = function() {
  78. if (!autoReplantEnabled) {
  79. return;
  80. }
  81. for (let i = 0; i < farmingAreas.length; i++) {
  82. for (let j = 0; j < farmingAreas[i].patches.length; j++) {
  83. if(farmingAreas[i].patches[j].hasGrown) {
  84. let lastSeed = farmingAreas[i].patches[j].seedID
  85. let grownID = items[farmingAreas[i].patches[j].seedID].grownItemID
  86. harvestSeed(i,j)
  87. if(checkBankForItem(lastSeed)) {
  88. if(farmingMastery[items[lastSeed].masteryID].mastery < 50) {
  89. if(checkBankForItem(CONSTANTS.item.Compost)) {
  90. if(bank[getBankId(CONSTANTS.item.Compost)].qty < 5) {
  91. buyQty = 5 - bank[getBankId(CONSTANTS.item.Compost)].qty
  92. buyCompost()
  93. }
  94. } else {
  95. buyQty = 5
  96. buyCompost()
  97. }
  98. addCompost(i,j,5)
  99. }
  100. selectedPatch = [i,j]
  101. selectedSeed = lastSeed
  102. plantSeed()
  103. }
  104. if (equippedFood.find(food => food.itemID === grownID) && checkBankForItem(grownID))
  105. equipFood(getBankId(grownID),grownID,bank[getBankId(grownID)].qty)
  106. }
  107. }
  108. }
  109. }
  110. var autoReplantTimer = setInterval(function(){autoReplant();}, 100);
  111.  
  112. //AutoSmith: Will smith items in order until materials are exhausted
  113. var autoSmithEnabled = false;
  114. var updateAutoSmithButtonText = function () {
  115. $('#auto-smith-button-status').text((autoSmithEnabled) ? 'Enabled' : 'Disabled');
  116. }
  117. var toggleAutoSmith = function () {
  118. if(autoMineEnabled == true){toggleAutoMine();}
  119. autoSmithEnabled = !autoSmithEnabled;
  120. updateAutoSmithButtonText();
  121. setTimeout(function() {
  122. if (!autoSmithEnabled) {
  123. clearTimeout(smithingTimeout);
  124. isSmithing = false;
  125. currentSmith = null;
  126. console.log("Auto Smith Disabled!");
  127. }else{
  128. changePage(11);
  129. }
  130. }, 100);
  131. }
  132. var setupAutoSmith = function() {
  133. if ($("#auto-smith-button").length) return;
  134. var containerRef = $(".content-side ul.nav-main li.nav-main-heading:last");
  135. var li = $('<li class="nav-main-item"></li>');
  136. containerRef.before(li);
  137. var button = $([
  138. '<a id="auto-smith-button" class="nav-main-link" href="javascript:void(0);">',
  139. '<img class="nav-img" src="assets/media/skills/smithing/smithing.svg">',
  140. '<span class="nav-main-link-name">AutoSmith</span>',
  141. '<small id="auto-smith-button-status"></small>',
  142. '</a>'
  143. ].join(""));
  144. li.append(button);
  145. button.on("click", toggleAutoSmith);
  146. updateAutoSmithButtonText();
  147. }
  148. var autoSmith = function() {
  149. if (!autoSmithEnabled) {
  150. return;
  151. }
  152.  
  153. for(const smithId of smithIdList){
  154. var item = smithingItems[smithId].itemID;
  155. var itemName = smithingItems[smithId].name;
  156. if(isSmithing == false){
  157. if(checkSmithingReq(item)){
  158. selectSmith(smithId);
  159. startSmithing(true);
  160. }else{
  161. console.log("You don't have the right materials to smith "+itemName);
  162. }
  163. }
  164. }
  165.  
  166. var xpLeft = exp.level_to_xp(skillLevel[5] + 1) - skillXP[5];
  167. var smithItemXP = items[smithingItems[selectedSmith].itemID].smithingXP;
  168. var itemsLeft = Math.ceil(xpLeft / smithItemXP);
  169. var oldText = numberWithCommas(Math.floor(skillXP[5])) + " / " + numberWithCommas(exp.level_to_xp(skillLevel[5] + 1));
  170. $("#skill-progress-xp-5").text(oldText + " - " + numberWithCommas(xpLeft) + " - " + numberWithCommas(itemsLeft));
  171. }
  172. var autoSmithTimer = setInterval(function(){autoSmith();}, 100);
  173.  
  174. //AutoSellGems: Will sell gems when they reach the stack amount specified
  175. var autoSellGemsEnabled = true;
  176. var updateAutoSellGemsButtonText = function () {
  177. $('#auto-sellgems-button-status').text((autoSellGemsEnabled) ? 'Enabled' : 'Disabled');
  178. }
  179. var toggleAutoSellGems = function () {
  180. autoSellGemsEnabled = !autoSellGemsEnabled;
  181. updateAutoSellGemsButtonText();
  182. setTimeout(function() {
  183. if (!autoSellGemsEnabled) {
  184. console.log("Auto Sell Gems Disabled!");
  185. }
  186. }, 100);
  187. }
  188. var setupAutoSellGems = function() {
  189. if ($("#auto-sellgems-button").length) return;
  190. var containerRef = $(".content-side ul.nav-main li.nav-main-heading:last");
  191. var li = $('<li class="nav-main-item"></li>');
  192. containerRef.before(li);
  193. var button = $([
  194. '<a id="auto-sellgems-button" class="nav-main-link" href="javascript:void(0);">',
  195. '<img class="nav-img" src="assets/media/bank/diamond.svg">',
  196. '<span class="nav-main-link-name">AutoSell Gems</span>',
  197. '<small id="auto-sellgems-button-status"></small>',
  198. '</a>'
  199. ].join(""));
  200. li.append(button);
  201. button.on("click", toggleAutoSellGems);
  202. updateAutoSellGemsButtonText();
  203. }
  204. var autoSellGems = function() {
  205. if (!autoSellGemsEnabled) {
  206. return;
  207. }
  208. for(const gemId of gemIdList){
  209. const curQty = getBankQty(gemId);
  210. //console.log('GEM ID '+gemId+' you have '+curQty);
  211. if(curQty > targetStack){
  212. sellItem(getBankId(gemId), targetStack);
  213. }
  214. }
  215. }
  216. var autoSellGemsTimer = setInterval(function(){autoSellGems();}, 10000);
  217.  
  218.  
  219. //AutoEat: Will automatically eat food items equipped if enemy damage would kill you
  220. var autoEatEnabled = false
  221. var updateAutoEatButtonText = function () {
  222. $('#auto-eat-button-status').text((autoEatEnabled) ? 'Enabled' : 'Disabled');
  223. }
  224. var toggleAutoEat = function () {
  225. autoEatEnabled = !autoEatEnabled;
  226. updateAutoEatButtonText();
  227. setTimeout(function() {
  228. if (!autoEatEnabled) {
  229. console.log("Auto Eat Disabled!");
  230. }
  231. }, 100);
  232. }
  233. var setupAutoEat = function() {
  234. if ($("#auto-eat-button").length) return;
  235. var containerRef = $(".content-side ul.nav-main li.nav-main-heading:last");
  236. var li = $('<li class="nav-main-item"></li>');
  237. containerRef.before(li);
  238. var button = $([
  239. '<a id="auto-eat-button" class="nav-main-link" href="javascript:void(0);">',
  240. '<img class="nav-img" src="assets/media/skills/cooking/cooking.svg">',
  241. '<span class="nav-main-link-name">AutoEat</span>',
  242. '<small id="auto-eat-button-status"></small>',
  243. '</a>'
  244. ].join(""));
  245. li.append(button);
  246. button.on("click", toggleAutoEat);
  247. updateAutoEatButtonText();
  248. }
  249. var autoEat = function() {
  250. if (!autoEatEnabled) {
  251. return;
  252. }
  253. while ((isInCombat && combatData.player.hitpoints <= Math.ceil((1 - damageReduction / 100) * combatData.enemy.maximumStrengthRoll)) || (isThieving && combatData.player.hitpoints <= Math.ceil((1 - damageReduction / 100) * thievingNPC[npcID].maxHit * numberMultiplier))) {
  254. if(combatData.player.hitpoints == skillLevel[CONSTANTS.skill.Hitpoints] * numberMultiplier) {
  255. stopCombat(false, true);
  256. break;
  257. }
  258. if(equippedFood[currentCombatFood].qty == 0) {
  259. let dungeonToResume = -1
  260. if(isDungeon) {
  261. dungeonToResume = selectedDungeon
  262. stopCombat(false, true);
  263. }
  264. if (equippedFood.some(food=>food.qty))
  265. selectEquippedFood(equippedFood.findIndex(food=>food.qty));
  266. else {
  267. let found = false
  268. for (let i = 0; i < bank.length; i++) {
  269. if(typeof(items[bank[i].id].healsFor) !== "undefined") {
  270. equipFood(i,bank[i].id,bank[i].qty);
  271. selectEquippedFood(0);
  272. found = true
  273. break;
  274. }
  275. }
  276. if(!found) break;
  277. }
  278. if(dungeonToResume !== -1) {
  279. selectDungeon(dungeonToResume);
  280. findEnemy();
  281. }
  282. }
  283. eatFood();
  284. }
  285. }
  286. var autoEatTimer = setInterval(function(){autoEat();}, 100);
  287.  
  288. //AutoLoot: Will automatically loot items as enemies are killed
  289. var autoLootEnabled = false
  290. var updateAutoLootButtonText = function () {
  291. $('#auto-loot-button-status').text((autoLootEnabled) ? 'Enabled' : 'Disabled');
  292. }
  293. var toggleAutoLoot = function () {
  294. autoLootEnabled = !autoLootEnabled;
  295. updateAutoLootButtonText();
  296. setTimeout(function() {
  297. if (!autoLootEnabled) {
  298. console.log("Auto Loot Disabled!");
  299. }
  300. }, 100);
  301. }
  302. var setupAutoLoot = function() {
  303. if ($("#auto-loot-button").length) return;
  304. var containerRef = $(".content-side ul.nav-main li.nav-main-heading:last");
  305. var li = $('<li class="nav-main-item"></li>');
  306. containerRef.before(li);
  307. var button = $([
  308. '<a id="auto-loot-button" class="nav-main-link" href="javascript:void(0);">',
  309. '<img class="nav-img" src="assets/media/bank/necklace_of_looting.svg">',
  310. '<span class="nav-main-link-name">AutoLoot</span>',
  311. '<small id="auto-loot-button-status"></small>',
  312. '</a>'
  313. ].join(""));
  314. li.append(button);
  315. button.on("click", toggleAutoLoot);
  316. updateAutoLootButtonText();
  317. }
  318. var autoLoot = function() {
  319. if (!autoLootEnabled) {
  320. return;
  321. }
  322. if($("#loot-0").length){
  323. $("#loot-0").click();
  324. }
  325. }
  326. var autoLootTimer = setInterval(function(){autoLoot();}, 100);
  327.  
  328. //AutoMine: Will mine based on your or priorities set in mineArray
  329. var autoMineEnabled = false;
  330. var updateAutoMineButtonText = function () {
  331. $('#auto-mine-button-status').text((autoMineEnabled) ? 'Enabled' : 'Disabled');
  332. }
  333. var toggleAutoMine = function () {
  334. if(autoSmithEnabled == true){toggleAutoSmith();}
  335. autoMineEnabled = !autoMineEnabled;
  336. updateAutoMineButtonText();
  337. setTimeout(function() {
  338. if (!autoMineEnabled) {
  339. mineRock(currentRock, true);
  340. console.log("Auto Mine Disabled!");
  341. }else{
  342. changePage(10);
  343. if(!glovesTracker[CONSTANTS.shop.gloves.Mining].isActive){
  344. //equipItem(34, 399);
  345. }
  346. }
  347. }, 100);
  348. }
  349. var setupAutoMine = function() {
  350. if ($("#auto-mine-button").length) return;
  351. var containerRef = $(".content-side ul.nav-main li.nav-main-heading:last");
  352. var li = $('<li class="nav-main-item"></li>');
  353. containerRef.before(li);
  354. var button = $([
  355. '<a id="auto-mine-button" class="nav-main-link" href="javascript:void(0);">',
  356. '<img class="nav-img" src="assets/media/skills/mining/mining.svg">',
  357. '<span class="nav-main-link-name">AutoMine</span>',
  358. '<small id="auto-mine-button-status"></small>',
  359. '</a>'
  360. ].join(""));
  361. li.append(button);
  362. button.on("click", toggleAutoMine);
  363. updateAutoMineButtonText();
  364. }
  365. var autoMine = function(rocks) {
  366. if (!autoMineEnabled) {
  367. return;
  368. }
  369. for(const rock of rocks) {
  370. if(!rockData[rock].depleted) {
  371. if(currentRock !== rock) {
  372. mineRock(rock);
  373. }
  374. return;
  375. }
  376. }
  377. }
  378. var autoMineTimer = setInterval(function(){autoMine(mineArray);}, 100);
  379.  
  380. //Super Control Panel Builder
  381. setTimeout(function() {
  382. setupAutoMine();
  383. setupAutoLoot();
  384. setupAutoEat();
  385. setupAutoSellGems();
  386. setupAutoSmith();
  387. setupAutoReplant();
  388. },100);
  389.  
  390. //setTimeout(function() {
  391. //toggleAutoMine();
  392. //},500);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement