Greasy Fork

Gladiatus

Auto-play for Gladiatus game. This script will help in expeditions, dungeons, training and working automatically for you.

目前为 2020-08-13 提交的版本。查看 最新版本

// ==UserScript==
// @name         Gladiatus
// @namespace    https://s39-br.gladiatus.gameforge.com/game/index.php
// @version      0.1
// @description  Auto-play for Gladiatus game. This script will help in expeditions, dungeons, training and working automatically for you.
// @author       MrLeonix
// @match        https://s39-br.gladiatus.gameforge.com/game/index.php*
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

(function () {
    'use strict';

    const HOST = "https://s39-br.gladiatus.gameforge.com/game/index.php?";

    const QUERY_PARAMETER_TOKEN = getQueryParameterValue("sh");

    // Constants
    const DEFAULT_REQUEST_DELAY_IN_MILLISECONDS = 1000 + (Math.random() * 100);
    const STATS = ["STR", "DEX", "AGI", "CON", "CHA", "INT"];


    // Script storage keys
    const KEY_CHARACTER = 'character';
    const KEY_COOLDOWNS = 'cooldowns';

    // Define character object
    const CHARACTER = GM_getValue(KEY_CHARACTER, {
        dungeonPoints: 0,
        expeditionPoints: 0,
        fragments: 0,
        gold: 0,
        health: 0,
        hellStones: 0,
        stats: {
            STR: 0, DEX: 0, AGI: 0, CON: 0, CHA: 0, INT: 0,
        },
        canTrain: true,
        isWorking: false
    });

    // Define character object
    const COOLDOWNS = GM_getValue(KEY_COOLDOWNS, {
        arena: 0,
        circus: 0,
        dungeon: 0,
        expedition: 0,
    });

    CHARACTER.dungeonPoints = formatNumber(document.getElementById("dungeonpoints_value_point").innerText);
    CHARACTER.expeditionPoints = formatNumber(document.getElementById("expeditionpoints_value_point").innerText);
    CHARACTER.gold = formatNumber(document.getElementById("sstat_gold_val").innerText);
    CHARACTER.health = formatNumber(document.getElementById("header_values_hp_bar").dataset.value);

    setTimeout(() => {
        if (isDungeonOnCooldown()) {
            COOLDOWNS.dungeon = getTimeLeftForDungeon();
        }
        if (isExpeditionOnCooldown()) {
            COOLDOWNS.expedition = getTimeLeftForExpedition();
        }
        updateCooldowns();
    }, 750)

    updateCharacter();

    setTimeout(() => {
        switch (getQueryParameterValue("mod")) {
            case "training":
                var auxCost = Math.min();
                var chosenTraining = -1;
                var cost = 0;
                var chosenTrainingCost = 0;
                var trainingOptions = [];
                var divs = document.getElementById("training_box").children;
                for (let i = 0; i < divs.length; i++) {
                    trainingOptions.push(divs[i]);
                }

                // Remove details
                trainingOptions.shift();
                trainingOptions.pop();
                trainingOptions.pop();

                for (let i = 0; i < trainingOptions.length; i++) {
                    CHARACTER.stats[STATS[i]] = formatNumber(trainingOptions[i].querySelector(`span#char_f${i} div`).innerText);
                    cost = formatNumber(trainingOptions[i].querySelector("div div.training_costs").innerText);
                    if (cost < auxCost) {
                        chosenTraining = i;
                        auxCost = chosenTrainingCost = cost;
                    }
                }
                updateCharacter();
                if (chosenTraining > -1 && CHARACTER.gold >= chosenTrainingCost) {
                    CHARACTER.stats[STATS[chosenTraining]] += 1;
                    updateCharacter();
                    trainingOptions[chosenTraining].querySelector("div a.training_button").click();
                } else {
                    CHARACTER.canTrain = false;
                    updateCharacter();
                    goToExpedition();
                }
                break;
            case "location":
                if (!isExpeditionOnCooldown()) {
                    attack(null, '0', 3, 1, '');
                } else if (CHARACTER.dungeonPoints > 0 && COOLDOWNS.dungeon < 1) {
                    goToDungeon();
                } else if (CHARACTER.dungeonPoints < 1 && CHARACTER.expeditionPoints < 1) {
                    goToWork();
                } else {
                    setTimeout(() => {
                        COOLDOWNS.dungeon > COOLDOWNS.expedition ?
                            goToExpedition() :
                            goToDungeon();
                    }, Math.min(COOLDOWNS.dungeon, COOLDOWNS.expedition) * 1000);
                }
                break;
            case "dungeon":
                if (!isDungeonOnCooldown()) {
                    document.querySelector("div.map_label").click();
                } else {
                    COOLDOWNS.dungeon = getTimeLeftForDungeon();
                    GM_setValue(KEY_COOLDOWNS, COOLDOWNS);
                }

                if (CHARACTER.expeditionPoints > 0 && COOLDOWNS.expedition < 1) {
                    goToExpedition();
                } else if (CHARACTER.dungeonPoints < 1 && CHARACTER.expeditionPoints < 1) {
                    goToWork();
                } else {
                    setTimeout(() => {
                        COOLDOWNS.dungeon > COOLDOWNS.expedition ?
                            goToExpedition() :
                            goToDungeon();
                    }, Math.min(COOLDOWNS.dungeon, COOLDOWNS.expedition) * 1000);
                }
                break;
            case "reports":
                goToExpedition();
                if (document.getElementById("menue_packages").querySelector("div.menue_new_count") !== null) {
                    //document.getElementById("menue_packages").click();
                }
                break;
            case "work":
                if (document.getElementById("content").innerHTML.indexOf("Ainda não terminou seu trabalho") < 0 && CHARACTER.expeditionPoints < 1) {
                    CHARACTER.canTrain = true;
                    CHARACTER.isWorking = true;
                    updateCharacter();
                    setWorkTime(2, 1, 8, 'Hora', 'Horas', 'Trabalhar no estábulo', 1);
                    document.getElementById("workTime").value = document.getElementById("workTime").children[document.getElementById("workTime").childElementCount - 1].value;
                    document.getElementById("doWork").click();
                } else {
                    CHARACTER.isWorking = false;
                    updateCharacter();
                    goTraining();
                }
                break;
            default: break;
        }
    }, DEFAULT_REQUEST_DELAY_IN_MILLISECONDS);

    // Format texts to return as numbers (no thousand separators)
    function formatNumber(value) {
        while (value.indexOf(".") > 0) value = value.replace(".", "");
        return parseInt(value);
    }

    function getQueryParameterValue(param) {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get(param);
    }

    function goToDungeon() {
        CHARACTER.dungeonPoints > 0 && !CHARACTER.isWorking ?
            goTo("dungeon") :
            goTo("work");
    }

    function goToExpedition() {
        CHARACTER.expeditionPoints > 0 && !CHARACTER.isWorking ?
            goTo("location&loc=0") :
            goTo("work");
    }

    function goToWork() {
        goTo("work");
    }

    function goTraining() {
        if (!CHARACTER.canTrain) return;
        goTo("training");
    }

    function goTo(loc) {
        location = `${HOST}mod=${loc}&sh=${QUERY_PARAMETER_TOKEN}`;
    }

    // Gets the basic value for a skill in given table cell.
    function getSkillValue(cell) {
        return parseInt(cell.querySelector("table > tbody > tr:nth-child(5n) > td:nth-child(2n)").textContent);
    }

    function getTimeLeftForDungeon() {
        var time = document.getElementById("cooldown_bar_text_dungeon").innerText;
        time = (parseInt(time.substr(0, 2)) * 3600) + (parseInt(time.substr(3, 2)) * 60) + parseInt(time.substr(5, 2));
        return time;
    }

    function getTimeLeftForExpedition() {
        var time = document.getElementById("cooldown_bar_text_expedition").innerText;
        time = (parseInt(time.substr(0, 2)) * 3600) + (parseInt(time.substr(3, 2)) * 60) + parseInt(time.substr(5, 2));
        return time;
    }

    function isDungeonOnCooldown() {
        return document.getElementById("cooldown_bar_text_dungeon").innerText !== "Ir para a Masmorra";
    }

    function isExpeditionOnCooldown() {
        return document.getElementById("cooldown_bar_text_expedition").innerText !== "Ir em Expedição";
    }

    // Update character in local storage
    function updateCharacter() {
        GM_setValue(KEY_CHARACTER, CHARACTER);
    }

    function updateCooldowns() {
        GM_setValue(KEY_COOLDOWNS, COOLDOWNS);
    }
})();