"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
// ==/UserScript==