DH3 Master Script

lolinfinity

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         DH3 Master Script
// @namespace    FileFace
// @version      0.1.2
// @description  lolinfinity
// @author       shtos
// @match        dh3.diamondhunt.co
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
(function start() {
    if (window.var_username) {
        Program.init();
    }
    else {
        setTimeout(start, 500);
    }
})();
var Program = {
    settings: {
        oilfix: false,
        heatandfish: false,
        hitchance: false,
        timers: false,
        marginfix: false
    },
    hitchanceInfo: {
        monsterAccuracy: '',
        monsterDefence: '',
        monsterAttack: '',
        heroAccuracy: '',
        heroDefence: ''
    },
    notifInfo: {
        furnaceNotif: 'notification-furnace',
        foundryNotif: 'notification-charcoalFoundry',
        rocketNotif: 'notification-rocket'
    },
    handleStorage: function (key) {
        if (key === 'load') {
            if (localStorage.getItem('master-script')) {
                Program.settings = JSON.parse(localStorage.getItem('master-script'));
            }
            else {
                Program.settings = {
                    oilfix: false,
                    heatandfish: false,
                    hitchance: false,
                    timers: false,
                    marginfix: false
                };
            }
        }
        else {
            localStorage.setItem('master-script', JSON.stringify(Program.settings));
        }
    },
    init: function () {
        Program.handleStorage('load');
        Helpers.addStyles();
        Helpers.createNavigation();
        Helpers.changeButtonColors('load');
        Helpers.oldOilHTML = document.querySelectorAll('.not-table-top-main-skills-keyitem')[2].innerHTML;
        Helpers.oilFixHTML();
        Helpers.heatandfishHTML();
        Helpers.heatandfishShow();
        Program.handleMarginFix();
        Helpers.hitChanceHTML();
        Helpers.hitChanceShow();
        Helpers.timersHTML();
        Helpers.timersShow();
        var oldSmelt = window.smelt;
        window.smelt = function () {
            oldSmelt.apply(this, arguments);
            Helpers.changeFurnaceIcon(arguments[0]);
        };
        var oldSetItems = window.setItems;
        window.setItems = function (data) {
            oldSetItems.apply(this, arguments);
            if (Program.settings.oilfix) {
                Program.handleOilFix();
            }
            if (Program.settings.heatandfish) {
                Program.handleHeatandfish();
            }
            if (Program.settings.hitchance && document.querySelector('#master-script-player-hitchance')) {
                Program.handleHitchance();
            }
            if (Program.settings.timers) {
                Program.handleTimers();
            }
        };
    },
    changeSettings: function (key) {
        Program.settings[key] = !Program.settings[key];
        Program.handleStorage('save');
        Program.handleActive(key);
        Helpers.changeButtonColors(key);
    },
    handleActive: function (key) {
        switch (key) {
            case 'oilfix':
                Helpers.oilFixHTML();
                break;
            case 'heatandfish':
                Helpers.heatandfishShow();
                break;
            case 'hitchance':
                Helpers.hitChanceShow();
                break;
            case 'timers':
                Helpers.timersShow();
                break;
            case 'marginfix':
                Program.handleMarginFix();
                break;
        }
    },
    handleOilFix: function () {
        var MAXOIL = window.var_maxOil;
        var oilTimer = document.querySelector('#oil-timer');
        if (window.var_oil != MAXOIL && window.var_oilIn != window.var_oilOut) {
            if (+window.var_oilIn > +window.var_oilOut) {
                oilTimer.style.color = 'green';
                var oilGain = +window.var_oilIn - +window.var_oilOut;
                var timer = window.formatTime((+MAXOIL - +window.var_oil) / oilGain);
                oilTimer.textContent = timer;
            }
            else if (+window.var_oilIn < +window.var_oilOut) {
                oilTimer.style.color = 'red';
                var oilLost = +window.var_oilOut - +window.var_oilIn;
                var timer = window.formatTime(+window.var_oil / oilLost);
                oilTimer.textContent = timer;
            }
        }
        else {
            oilTimer.style.color = 'white';
            oilTimer.textContent = '--:--:--';
        }
    },
    handleHeatandfish: function () {
        var heat = window.global_foodMap
            .filter(function (e) { return e.rawFoodName !== 'none' && window["var_" + e.rawFoodName]; })
            .map(function (e) { return window["var_" + e.rawFoodName] * e.heat; })
            .reduce(function (acc, cur) { return acc + cur; });
        var energy = window.global_foodMap
            .filter(function (e) { return e.rawFoodName !== 'none' && window["var_" + e.rawFoodName]; })
            .map(function (e) { return window["var_" + e.rawFoodName] * e.energy; })
            .reduce(function (acc, cur) { return acc + cur; });
        document.getElementById('current-heat-bar').textContent =
            'Available heat: ' + window.formatNumber(Helpers.getHeat());
        document.getElementById('heat-bar').textContent = 'Heat needed: ' + window.formatNumber(heat);
        document.getElementById('energy-bar').textContent = 'Raw energy: ' + window.formatNumber(energy);
    },
    handleHitchance: function () {
        if (Program.hitchanceInfo.heroAccuracy != window.var_accuracy ||
            Program.hitchanceInfo.heroDefence != window.var_defence ||
            Program.hitchanceInfo.monsterAccuracy != window.var_monsterAccuracy ||
            Program.hitchanceInfo.monsterDefence != window.var_defence ||
            Program.hitchanceInfo.monsterAttack != window.var_monsterAttack) {
            var monsterHitChance = void 0, playerHitChance = void 0;
            var playerHitChanceElement = document.querySelector('#hitchance-span');
            var monsterHitChanceElement = document.querySelector('#hitchance-monster-span');
            if (+window.var_monsterAttack == 0) {
                monsterHitChance = '100%';
            }
            else {
                monsterHitChance =
                    (Helpers.hitChance(parseInt(window.var_monsterAccuracy), parseInt(window.var_defence)) *
                        100).toFixed(0) + '%';
            }
            playerHitChance =
                (Helpers.hitChance(parseInt(window.var_accuracy), parseInt(window.var_monsterDefence)) * 100).toFixed(0) + '%';
            playerHitChance == '100%'
                ? (playerHitChanceElement.style.color = 'green')
                : (playerHitChanceElement.style.color = 'red');
            monsterHitChance == '100%'
                ? (monsterHitChanceElement.style.color = 'red')
                : (monsterHitChanceElement.style.color = 'green');
            playerHitChanceElement.textContent = playerHitChance;
            monsterHitChanceElement.textContent = monsterHitChance;
            Program.hitchanceInfo.heroAccuracy = window.var_accuracy;
            Program.hitchanceInfo.heroDefence = window.var_defence;
            Program.hitchanceInfo.monsterAccuracy = window.var_monsterAccuracy;
            Program.hitchanceInfo.monsterDefence = window.var_defence;
            Program.hitchanceInfo.monsterAttack = window.var_monsterAttack;
        }
    },
    handleTimers: function () {
        if (window.var_smeltingNeededTimer > 0) {
            document.querySelector("#" + Program.notifInfo.furnaceNotif + "-timer").textContent = Helpers.updateTimer('furnace');
            document.querySelector("#" + Program.notifInfo.furnaceNotif + "-bars-needed").textContent = (window.var_smeltingRequestedAmount - window.var_smeltingCurrentAmount).toString();
        }
        if (typeof window.var_charcoalFoundry != 'undefined') {
            window.var_charcoalFoundryNeededTimer > 0
                ? (document.querySelector("#" + Program.notifInfo.foundryNotif + "-timer").textContent = Helpers.updateTimer('foundry'))
                : null;
        }
        if (typeof window.var_rocket != 'undefined') {
            window.var_rocketStatus == 1 || window.var_rocketStatus == 3
                ? (document.querySelector("#" + Program.notifInfo.rocketNotif + "-timer").textContent = Helpers.updateTimer('rocket'))
                : null;
        }
    },
    handleMarginFix: function () {
        var itemBoxes = document.querySelectorAll('.item-box');
        if (Program.settings.marginfix) {
            itemBoxes.forEach(function (e) { return (e.style.margin = '10px'); });
        }
        else {
            itemBoxes.forEach(function (e) { return (e.style.margin = '20px'); });
        }
    }
};
var Helpers = {
    oilHTML: function () {
        var newHTML = "<table width=\"100%\">\n            <tbody>\n                <tr>\n                    <td style=\"text-align:right;\">\n                        <img src=\"images/oil_lighter.png\" class=\"img-50\">\n                    </td>\n                    <td style=\"font-size:16pt;color:rgb(42,200,200);text-align:left;width:185px;\">\n                        <item-oil type=\"number\">" + window.formatNumber(window.var_oil) + "</item-oil>/<item-maxoil type=\"number\">" + window.formatNumber(window.var_maxOil) + "</item-maxoil>\n                        <span style=\"display: flex; justify-content: center;\" class=\"span-oil-in-out-label\" id=\"span-oil-in-out-label\">\n                            <br>\n                            <span style=\"font-size: 18; color:green\" id=\"oil-timer\">--:--:--</span>\n                        </span>\n                    </td>\n                    <td>\n                        <span style=\"display: flex;flex-direction: column;\" class=\"span-oil-in-out-label\" id=\"span-oil-in-out-label\">\n                            <span style=\"color:green\">(+<item-oilin>" + window.var_oilIn + "</item-oilin>/s)</span>\n                            <span style=\"color:red\">(-<item-oilout>" + window.var_oilOut + "</item-oilout>/s)</span>\n                        </span>\n                    </td>\n                </tr>\n            </tbody>\n        </table>";
        return newHTML;
    },
    oldOilHTML: '',
    heatandfishHTML: function () {
        $('#navigation-right-fishing').prepend("<div id=\"heat-energy-bar-wrapper\" style=\"display:flex;justify-content:center;margin-top:10px\">\n\t\t\t\t<div id=\"heat-energy-bar\" style=\"height:30px;width:650px;background:#393e46;border:1px solid orange;border-radius:5px;display:flex;flex-direction:row;\">\n\t\t\t\t\t  <div id=\"current-heat-bar\" class=\"master-script-heatandfish-cell\"></div>\n\t\t\t\t\t  <div id=\"heat-bar\" class=\"master-script-heatandfish-cell\"></div>\n\t\t\t\t\t  <div id=\"energy-bar\" class=\"master-script-heatandfish-cell\"></div>\n   \t\t\t\t</div>\n   \t\t\t</div>");
    },
    heatandfishShow: function () {
        var bar = document.querySelector('#heat-energy-bar-wrapper');
        if (Program.settings.heatandfish) {
            bar.style.display = 'flex';
        }
        else {
            bar.style.display = 'none';
        }
    },
    oilFixHTML: function () {
        var oilElement = document.querySelectorAll('.not-table-top-main-skills-keyitem')[2];
        oilElement.innerHTML = '';
        if (Program.settings.oilfix) {
            oilElement.innerHTML = Helpers.oilHTML();
        }
        else {
            oilElement.innerHTML = Helpers.oldOilHTML;
        }
    },
    hitChanceHTML: function () {
        var combatTables = document.querySelectorAll('.fighting-section-stats-and-hp-area');
        var accHeroElement = combatTables[0].children[0].children[0].children[1];
        var accMonsterElement = combatTables[1].children[0].children[0].children[1];
        var td = document.createElement('td');
        td.id = 'master-script-player-hitchance';
        td.innerHTML = "<img src=\"images/accuracy.png\" class=\"img-30\"> <span id=\"hitchance-span\">0</span>";
        $(accHeroElement).after(td);
        td = document.createElement('td');
        td.innerHTML = "<img src=\"images/accuracy.png\" class=\"img-30\"> <span id=\"hitchance-monster-span\">0</span>";
        td.id = 'master-script-monster-hitchance';
        $(accMonsterElement).after(td);
    },
    hitChanceShow: function () {
        var combatTables = document.querySelectorAll('.fighting-section-stats-and-hp-area');
        var accHeroElement = combatTables[0].children[0].children[0].children[1];
        var accMonsterElement = combatTables[1].children[0].children[0].children[1];
        var masterHeroElement = document.querySelector('#master-script-player-hitchance');
        var masterMonsterElement = document.querySelector('#master-script-monster-hitchance');
        if (Program.settings.hitchance) {
            accHeroElement.style.display = 'none';
            accMonsterElement.style.display = 'none';
            masterHeroElement.style.display = '';
            masterMonsterElement.style.display = '';
        }
        else {
            accHeroElement.style.display = '';
            accMonsterElement.style.display = '';
            masterHeroElement.style.display = 'none';
            masterMonsterElement.style.display = 'none';
        }
    },
    hitChance: function (accuracy, defence) {
        if (defence % 2 == 0) {
            return 1 / Math.max(1, defence / 2 - accuracy + 1);
        }
        else {
            return (Helpers.hitChance(accuracy, defence - 1) + Helpers.hitChance(accuracy, defence + 1)) / 2;
        }
    },
    timersHTML: function () {
        $("#" + Program.notifInfo.furnaceNotif)[0].style.position = 'relative';
        $("#" + Program.notifInfo.furnaceNotif).append("<img id=\"notification-furnace-img-new\" class=\"img-50\" src=\"/images/" + window.getBestFurnace() + ".png\"><span id=" + Program
            .notifInfo.furnaceNotif + "-timer></span><span id=\"" + Program.notifInfo
            .furnaceNotif + "-bars-needed\" style=\"position: absolute; left: 30px; bottom: 5px;text-shadow:-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\"></span>");
        $("#" + Program.notifInfo.foundryNotif).append("<span id=" + Program.notifInfo.foundryNotif + "-timer></span>");
        $("#" + Program.notifInfo.rocketNotif).append("<span id=" + Program.notifInfo.rocketNotif + "-timer></span>");
        Helpers.changeFurnaceIcon(window.var_smeltingOreType);
    },
    timersShow: function () {
        if (Program.settings.timers) {
            $('#notification-furnace-img-new').show();
            $("#" + Program.notifInfo.foundryNotif + "-timer").show();
            $("#" + Program.notifInfo.furnaceNotif + "-timer").show();
            $("#" + Program.notifInfo.rocketNotif + "-timer").show();
            $("#" + Program.notifInfo.furnaceNotif + "-value").hide();
            $("#" + Program.notifInfo.furnaceNotif + "-img").hide();
            $("#" + Program.notifInfo.foundryNotif + "-value").hide();
            $("#" + Program.notifInfo.rocketNotif + "-value").hide();
        }
        else {
            $('#notification-furnace-img-new').hide();
            $("#" + Program.notifInfo.foundryNotif + "-timer").hide();
            $("#" + Program.notifInfo.furnaceNotif + "-timer").hide();
            $("#" + Program.notifInfo.rocketNotif + "-timer").hide();
            $("#" + Program.notifInfo.furnaceNotif + "-value").show();
            $("#" + Program.notifInfo.furnaceNotif + "-img").show();
            $("#" + Program.notifInfo.foundryNotif + "-value").show();
            $("#" + Program.notifInfo.rocketNotif + "-value").show();
        }
    },
    changeFurnaceIcon: function (key) {
        var bar;
        switch (key) {
            case 'copper':
                bar = 'bronzeBars';
                break;
            case 'sand':
                bar = 'glass';
                break;
            case 'none':
                bar = window.getBestFurnace();
                break;
            default:
                bar = key + 'Bars';
                break;
        }
        document.querySelector("#" + Program.notifInfo.furnaceNotif + "-img-new").src = "/images/" + bar + ".png";
    },
    addStyles: function () {
        var styles = document.createElement('style');
        styles.textContent = "\n\t\t\t.master-script-button{\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tmargin-left: 5px;\n\t\t\t}\n\t\t\t.master-script-button-enabled{\n\t\t\t\tbackground-color: green;\n\t\t\t}\n\t\t\t.master-script-button-disabled{\n\t\t\t\tbackground-color: red;\n\t\t\t}\n\t\t\t.master-script-option-wrapper{\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\tflex-direction: column;\n\t\t\t}\n\t\t\t.master-script-button-wrapper{\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tflex-direction: row;\n\t\t\t\twidth: 200px;\t\t\n\t\t\t}\n\t\t\t.master-script-heatandfish-cell{\n\t\t\t\twidth:210px;\n\t\t\t\tdisplay:flex;\n\t\t\t\talign-items:center;\n\t\t\t\tjustify-content: center;\n\t\t\t}\n\t\t";
        $('head').append(styles);
    },
    createNavigation: function () {
        $('#navigation-area-buttons')
            .append("<div onclick=\"navigate('dh3-master-script')\" id=\"navigation-dh3-master-script-button\" class=\"navigate-button\" style=\"color: white;\">\n\t\t\t<img src=\"images/crownIcon.png\" class=\"img-50\">\n\t\t\t<br>\n\t\t\t<div style=\"font-size: 10pt; text-align: center;\">Master</div>\n\t\t  </div>");
        $('#right-panel').append("<div id=\"navigation-dh3-master-script\" style=\"display: none; padding: 1em;\">\n\t\t\t<span class=\"master-script-option-wrapper\">\n\t\t\t\t<span class=\"master-script-button-wrapper\">\n\t\t\t\t\t<span>Oil fix</span>\n\t\t\t\t\t<button id=\"master-script-oilfix-button\" class=\"master-script-button\" ></button>\n\t\t\t\t</span>\n\t\t\t\t<p>Adds a timer to oil element that display how long it will take to fill your oil storage or deplete it.</p>\n\t\t\t</span>\n\t\t\t<span class=\"master-script-option-wrapper\">\n\t\t\t\t<span class=\"master-script-button-wrapper\">\n\t\t\t\t\t<span>Heat and energy bar</span>\n\t\t\t\t\t<button id=\"master-script-heatandfish-button\" class=\"master-script-button\"></button>\n\t\t\t\t</span>\n\t\t\t\t<p>Adds a bar in fishing tab displaying your raw energy and heat needed to cook all of it.</p>\n\t\t\t</span>\n\t\t\t<span class=\"master-script-option-wrapper\">\n\t\t\t\t<span class=\"master-script-button-wrapper\">\n\t\t\t\t\t<span>Hit chance in combat</span>\n\t\t\t\t\t<button id=\"master-script-hitchance-button\" class=\"master-script-button\"></button>\n\t\t\t\t</span>\n\t\t\t\t<p>Replaces accuracy with your chance for a succesful hit.</p>\n\t\t\t</span>\n\t\t\t<span class=\"master-script-option-wrapper\">\n\t\t\t\t<span class=\"master-script-button-wrapper\">\n\t\t\t\t\t<span>Timers on notifications</span>\n\t\t\t\t\t<button id=\"master-script-timers-button\" class=\"master-script-button\"></button>\n\t\t\t\t</span>\n\t\t\t\t<p>Replaces numbers with a timer on furnace, rocket and charcoal foundry notifications.</p>\n\t\t\t</span>\n\t\t\t<span class=\"master-script-option-wrapper\">\n\t\t\t\t<span class=\"master-script-button-wrapper\">\n\t\t\t\t\t<span>Margin fix</span>\n\t\t\t\t\t<button id=\"master-script-marginfix-button\" class=\"master-script-button\"></button>\n\t\t\t\t</span>\n\t\t\t\t<p>Changes margin (space) between itemboxes from 20px to 10px.</p>\n\t\t\t</span>\n\t\t  </div>");
        var originalNavigate = window.navigate;
        window.navigate = function (a) {
            originalNavigate.apply(this, arguments);
            if (a == 'dh3-master-script') {
                //
            }
            else {
                $('#navigation-dh3-master-script').hide();
            }
        };
        setTimeout(Helpers.addEventsToButtons, 500);
    },
    addEventsToButtons: function () {
        document.querySelector('#master-script-oilfix-button').onclick = function () {
            return Program.changeSettings('oilfix');
        };
        document.querySelector('#master-script-heatandfish-button').onclick = function () {
            return Program.changeSettings('heatandfish');
        };
        document.querySelector('#master-script-hitchance-button').onclick = function () {
            return Program.changeSettings('hitchance');
        };
        document.querySelector('#master-script-timers-button').onclick = function () {
            return Program.changeSettings('timers');
        };
        document.querySelector('#master-script-marginfix-button').onclick = function () {
            return Program.changeSettings('marginfix');
        };
    },
    changeButtonColors: function (key) {
        var button = document.querySelector("#master-script-" + key + "-button");
        if (key == 'load') {
            for (var item in Program.settings) {
                Helpers.changeButtonColors(item);
            }
        }
        else {
            if (Program.settings[key]) {
                button.classList.add('master-script-button-enabled');
                button.classList.remove('master-script-button-disabled');
            }
            else {
                button.classList.add('master-script-button-disabled');
                button.classList.remove('master-script-button-enabled');
            }
        }
    },
    getHeat: function () {
        return ((+window.var_heat || 0) +
            (window.var_logs * 1 || 0) +
            (window.var_oakLogs * 2 || 0) +
            (window.var_willowLogs * 3 || 0) +
            (window.var_bambooLogs * 4 || 0) +
            (window.var_mapleLogs * 5 || 0) +
            (window.var_lavaLogs * 6 || 0) +
            (window.var_pineLogs * 7 || 0) +
            (window.var_stardustLogs * 8 || 0));
    },
    updateTimer: function (key) {
        var average, dest, potion;
        switch (key) {
            case 'furnace':
                potion =
                    typeof window.var_largeRocketSpeedPotionTimer != 'undefined' &&
                        window.var_largeFurnacePotionTimer > 0
                        ? 3
                        : 1;
                return window.formatTime(((window.var_smeltingRequestedAmount - window.var_smeltingCurrentAmount) *
                    window.var_smeltingNeededTimer -
                    window.var_smeltingCurrentTimer) /
                    potion);
            case 'foundry':
                return window.formatTime((window.var_charcoalFoundryRequestedAmount - window.var_charcoalFoundryCurrentAmount) *
                    window.var_charcoalFoundryNeededTimer -
                    window.var_charcoalFoundryCurrentTimer);
            case 'rocket':
                potion =
                    typeof window.var_largeRocketSpeedPotionTimer != 'undefined' &&
                        window.var_largeRocketSpeedPotionTimer > 0
                        ? 2
                        : 1;
                if (window.var_rocketDestination == 'moon') {
                    average = 2;
                    dest = 384000;
                }
                else {
                    average = 140;
                    dest = 54000000;
                }
                return window.var_rocketStatus == 1
                    ? window.formatTime((dest - window.var_rocketKm) / average / potion)
                    : window.var_rocketStatus == 3 ? window.formatTime(window.var_rocketKm / average / potion) : null;
        }
    }
};

})();