"use strict"; class CultureUI { constructor(mainDiv) { this.mainDiv = mainDiv; } createHeading() { const heading = document.createElement("h3"); heading.textContent = "AutoCulture"; heading.style.color = "Yellow"; return heading; } createDropDown(optionValues, name) { const dropDown = document.createElement("select"); dropDown.setAttribute("name", name); for (let i = 0; i < optionValues.length; i++) { const option = document.createElement("option"); option.text = optionValues[i]; dropDown.appendChild(option); } return dropDown; } createButton() { const button = document.createElement("button"); button.textContent = "Start"; button.addEventListener("click", function () { let ac = new AutoCulture(); const dropDown = document.querySelector( "select[name='culture-drop-down']" ); const optDropDown = document.querySelector( "select[name='option-drop-down']" ); const selectedValue = dropDown.value; const selectedOption = optDropDown.value; console.log(selectedOption); ac.run(selectedOption, selectedValue); }); return button; } createAutoCultureDiv(name) { const autoFarmDiv = document.createElement("div"); autoFarmDiv.className = name; return autoFarmDiv; } createCultureUI() { const optionValues = [ "Mestský festival", "Olympijské hry", "Víťazná procesia", "Divadelné hry", ]; const optionValues1 = [ "02:00:00", "04:00:00", "08:00:00", "10:00:00", "11:00:00", "12:00:00", ]; const heading = this.createHeading(); const dropDown = this.createDropDown(optionValues, "option-drop-down"); const dropDown1 = this.createDropDown(optionValues1, "culture-drop-down"); const button = this.createButton(); const autoCultureDiv = this.createAutoCultureDiv("auto-culture-options"); const autoCultureDiv1 = this.createAutoCultureDiv("auto-culture-timer"); autoCultureDiv.appendChild(dropDown); autoCultureDiv1.appendChild(dropDown1); autoCultureDiv1.appendChild(button); this.mainDiv.appendChild(heading); this.mainDiv.appendChild(autoCultureDiv); this.mainDiv.appendChild(autoCultureDiv1); } } "use strict"; class FarmUI { constructor(mainDiv) { this.mainDiv = mainDiv; } createHeading() { const heading = document.createElement("h3"); heading.textContent = "AutoFarm"; heading.style.color = "green"; return heading; } createDropDown() { const dropDown = document.createElement("select"); dropDown.setAttribute("name", "farm-drop-down"); const optionValues = [ "00:05:00", "00:10:00", "00:20:00", "00:40:00", "01:30:00", "03:00:00", "04:00:00", "08:00:00", ]; for (let i = 0; i < optionValues.length; i++) { const option = document.createElement("option"); option.text = optionValues[i]; dropDown.appendChild(option); } return dropDown; } createButton() { const button = document.createElement("button"); button.textContent = "Start"; button.addEventListener("click", function () { let af = new AutoFarm(); const dropDown = document.querySelector("select[name='farm-drop-down']"); const selectedValue = dropDown.value; af.run(selectedValue); }); return button; } createAutoFarmDiv() { const autoFarmDiv = document.createElement("div"); autoFarmDiv.className = "auto-farm"; return autoFarmDiv; } createFarmUI() { const heading = this.createHeading(); const dropDown = this.createDropDown(); const button = this.createButton(); const autoFarmDiv = this.createAutoFarmDiv(); autoFarmDiv.appendChild(dropDown); autoFarmDiv.appendChild(button); this.mainDiv.appendChild(heading); this.mainDiv.appendChild(autoFarmDiv); } } "use strict"; class MainUI { constructor() { this.panel = document.getElementsByClassName( "ui_construction_queue instant_buy" )[0]; this.createMainDiv(); this.addDragFunctionality(); this.createAutoFarmUI(); } createMainDiv() { this.mainDiv = document.createElement("div"); this.mainDiv.setAttribute("name", "bot-main-div"); this.mainDiv.style.position = "absolute"; this.mainDiv.style.left = "0px"; this.mainDiv.style.top = "0px"; this.mainDiv.style.width = "300px"; this.mainDiv.style.height = "500px"; this.mainDiv.style.backgroundColor = "rgba(0, 0, 10, 0.5)"; this.mainDiv.style.zIndex = "1000"; this.mainDiv.style.borderRadius = "10px"; let parentDiv = this.panel.parentNode; parentDiv.insertBefore(this.mainDiv, this.panel); } addDragFunctionality() { let isDragging = false; let dragOffsetX = 0; let dragOffsetY = 0; const startDrag = (event) => { isDragging = true; dragOffsetX = event.clientX - this.mainDiv.offsetLeft; dragOffsetY = event.clientY - this.mainDiv.offsetTop; }; const endDrag = () => { isDragging = false; }; const drag = (event) => { if (isDragging) { this.mainDiv.style.left = event.clientX - dragOffsetX + "px"; this.mainDiv.style.top = event.clientY - dragOffsetY + "px"; } }; this.mainDiv.addEventListener("mousedown", startDrag); this.mainDiv.addEventListener("mouseup", endDrag); this.mainDiv.addEventListener("mousemove", drag); } createAutoFarmUI() { let farm = new FarmUI(this.mainDiv); farm.createFarmUI(); let culture = new CultureUI(this.mainDiv); culture.createCultureUI(); } } "use strict"; class AutoFarm { constructor() { this.utils = new Utils(); } async selectVillages() { const linkElement = document.querySelector( "#overviews_link_hover_menu > div.box.middle.left > div > div > ul > li.subsection.captain.enabled > ul > li.farm_town_overview > a" ); function triggerClickEvent(target) { const clickEvent = new MouseEvent("click", { view: window, bubbles: true, cancelable: true, }); target.dispatchEvent(clickEvent); } triggerClickEvent(linkElement); await this.utils.timeout(889 + this.utils.generateDelay()); } async selectAll() { this.utils.waitForElementToAppear( "#fto_town_wrapper > div > div.game_header.bold > span.checkbox_wrapper > a", (element) => { element.click(); } ); await this.utils.timeout(798 + this.utils.generateDelay()); } async checkTime(seconds) { if ( seconds === 300 || seconds === 1200 || seconds === 5400 || seconds === 14400 ) { this.utils.waitForElementToAppear( "#time_options_wrapper > div.time_options_default > div.fto_time_checkbox.fto_" + seconds + "> a", (element) => { element.click(); } ); } else { this.utils.waitForElementToAppear( "#time_options_wrapper > div.time_options_loyalty > div.fto_time_checkbox.fto_" + seconds + " > a", (element) => { element.click(); } ); } await this.utils.timeout(805 + this.utils.generateDelay()); } async collect() { this.utils.waitForElementToAppear( "#fto_claim_button > div.caption.js-caption", (element) => { element.click(); } ); await this.utils.timeout(985); } async confirm() { this.utils.waitForElementToAppear( ".window_content.js-window-content > div > div.buttons > div.btn_confirm.button_new > div.caption.js-caption", (element) => { element.click(); } ); await this.utils.timeout(1188 + this.utils.generateDelay()); } async close() { this.utils.waitForElementToAppear( "body > div.ui-dialog.ui-corner-all.ui-widget.ui-widget-content.ui-front.ui-draggable.js-window-main-container > div.ui-dialog-titlebar.ui-corner-all.ui-widget-header.ui-helper-clearfix.ui-draggable-handle > button", (element) => { element.click(); } ); await this.utils.timeout(1205 + this.utils.generateDelay()); } async repeatFarm() { await this.selectVillages(); await this.selectAll(); await this.checkTime(this.seconds); await this.collect(); await this.confirm(); await this.close(); console.log("Collecting is finished"); } async run(time) { console.log(time); const seconds = this.utils.convertToSeconds(time); console.log(seconds); this.seconds = seconds; while (true) { await this.repeatFarm(); let delay = this.seconds * 1000 + Math.floor(Math.random() * (30000 - 5000) + 5000); console.log(delay); await this.utils.timeout(delay); } //await this.repeatFarm(); //setInterval(this.myFunction, 1000); } } "use strict"; class AutoCulture { constructor() { this.utils = new Utils(); } async selectOverview() { this.utils.waitForElementToAppear( "#overviews_link_hover_menu > div.box.middle.left > div > div > ul > li.subsection.curator.enabled > ul > li.culture_overview > a", (element) => { element.click(); } ); await this.utils.timeout(658 + this.utils.generateDelay()); } async confirm() { this.utils.waitForElementToAppear("#start_all_celebrations", (element) => { element.click(); }); await this.utils.timeout(1001 + this.utils.generateDelay()); } async close() { this.utils.waitForElementToAppear( "body > div.ui-dialog.ui-corner-all.ui-widget.ui-widget-content.ui-front.ui-draggable.js-window-main-container > div.ui-dialog-titlebar.ui-corner-all.ui-widget-header.ui-helper-clearfix.ui-draggable-handle > button", (element) => { element.click(); } ); await this.utils.timeout(1488 + this.utils.generateDelay()); } async selectOption(opt) { let num = 1; switch (opt) { case "Mestský festival": num = 1; break; case "Olympijské hry": num = 2; break; case "Víťazná procesia": num = 3; break; case "Divadelné hry": num = 4; break; } this.utils.waitForElementToAppear( "#place_celebration_select", (element) => { element.click(); } ); await this.utils.timeout(1488 + this.utils.generateDelay()); this.utils.waitForElementToAppear( "#place_celebration_select_list > div > div:nth-child(" + num + ")", (element) => { element.click(); } ); await this.utils.timeout(1488 + this.utils.generateDelay()); } async repeatCulture(opt) { await this.selectOverview(); await this.selectOption(opt); await this.confirm(); await this.close(); console.log("Culture is being runned."); } async run(opt, time) { console.log(time); const seconds = this.utils.convertToSeconds(time); console.log(seconds); this.seconds = seconds; await this.repeatCulture(opt); let delay = this.seconds * 1000 + Math.floor(Math.random() * (900000 - 180000) + 120000); console.log(delay); } } "use strict"; class Utils { timeout(delay) { return new Promise((r) => setTimeout(r, delay)); } generateDelay() { return Math.floor(Math.random() * (601 - 300) + 300); } convertToSeconds(timeString) { const [hours, minutes, seconds] = timeString.split(":"); const totalSeconds = parseInt(hours) * 3600 + parseInt(minutes) * 60 + parseInt(seconds); return totalSeconds; } waitForElementToAppear(selector, callback, interval = 100, maxAttempts = 10) { var attempts = 0; var timer = setInterval(function () { attempts++; var element = document.querySelector(selector); if (element || attempts >= maxAttempts) { clearInterval(timer); if (element) { callback(element); } else { console.log("Element not found within the specified time."); } } }, interval); } } "use strict"; (function () { window.addEventListener("load", function () { setTimeout(function () { new MainUI(); }, 2000); // 2000 milliseconds = 2 seconds delay }); })(); // ==UserScript== // @name Grepolisbot // @namespace http://tampermonkey.net/ // @version 0.2 // @description Skrašlenie dizajnu tejto peknej prehliadačovej hry // @author You // @match https://*.grepolis.com/game/* // @icon https://www.google.com/s2/favicons?sz=64&domain=grepolis.com // @grant none // @license MIT // @downloadURL none // ==/UserScript==