Autofill Buy/Sell with Shortcuts

Autofill Buy/Sell Market with shortcuts for setting target price

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Autofill Buy/Sell with Shortcuts
// @version      1.8
// @description  Autofill Buy/Sell Market with shortcuts for setting target price
// @include      https://*/game.php*screen=market&mode=exchange*
// @grant        none
// @namespace    https://greasyfork.org/users/1388863
// ==/UserScript==

(function() {
    'use strict';

    const coefStock = 0.0041;
    const coefCapacity = -0.0037;
    const intercept = 411.86;

    // Create a popup for autofill options
    const popup = document.createElement('div');
    popup.style.position = 'fixed';
    popup.style.bottom = '20px';
    popup.style.left = '20px';
    popup.style.backgroundColor = '#f9f9f9';
    popup.style.padding = '20px';
    popup.style.border = '1px solid #ddd';
    popup.style.borderRadius = '8px';
    popup.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.1)';
    popup.style.zIndex = '10000';
    popup.innerHTML =
        '<label>Target Buy:</label><br>' +
        '<input type="number" id="targetPrice" />' +
        '<button id="shortcut490Btn">500</button>' +
        '<button id="shortcut545Btn">550</button>' +
        '<button id="shortcut580Btn">625</button>' +
        '<button id="shortcut635Btn">700</button><br><br>' +
        '<button id="saveBtn">Save</button>' +
        '<button id="autoFillWoodBtn" style="background-color: brown; color: white;">Wood</button>' +
        '<button id="autoFillStoneBtn" style="background-color: orange; color: white;">Clay</button>' +
        '<button id="autoFillIronBtn" style="background-color: gray; color: white;">Iron</button>' +
        '<button id="buyBtn">Offer</button>' +
        '<button id="resetBtn">Reset</button>' +
        '<div id="results"></div>';
    document.body.appendChild(popup);


    // Set default target price or load from localStorage
    const defaultTargetPrice = 300;
    const savedTargetPrice = localStorage.getItem('targetPrice');
    document.getElementById('targetPrice').value = savedTargetPrice !== null ? savedTargetPrice : defaultTargetPrice;

    // Save target price to localStorage
    document.getElementById('targetPrice').addEventListener('change', function() {
        localStorage.setItem('targetPrice', this.value);
    });

    // Function for shortcut buttons
    function setTargetPrice(price) {
        const targetPriceInput = document.getElementById('targetPrice');
        targetPriceInput.value = price;
        localStorage.setItem('targetPrice', price);
    }

    // Helper function to get stock and capacity
    function getStockAndCapacity(idStock, idCapacity) {
        const stock = parseFloat(document.getElementById(idStock).innerText);
        const capacity = parseFloat(document.getElementById(idCapacity).innerText);
        return { stock, capacity };
    }

    // Auto Fill function for materials
    function autoFillMaterial(stockId, capacityId, buyInputName, sellInputName) {
        const targetPrice = parseFloat(document.getElementById('targetPrice').value);
        if (isNaN(targetPrice)) {
            alert("Harap masukkan harga target yang valid.");
            return;
        }

        const { stock, capacity } = getStockAndCapacity(stockId, capacityId);
        const requiredStock = (targetPrice - intercept - coefCapacity * capacity) / coefStock;
        const stockDifference = stock - requiredStock;

        if (stockDifference > 0) {
            document.getElementsByName(buyInputName)[0].value = Math.abs(Math.round(stockDifference));
            document.getElementsByName(sellInputName)[0].value = "";
        } else {
            document.getElementsByName(sellInputName)[0].value = Math.abs(Math.round(stockDifference));
            document.getElementsByName(buyInputName)[0].value = "";
        }
    }

    // Reset all inputs
    function resetInputs() {
        const inputs = ['buy_wood', 'sell_wood', 'buy_stone', 'sell_stone', 'buy_iron', 'sell_iron'];
        inputs.forEach(name => {
            document.getElementsByName(name)[0].value = "";
        });
    }

    // Event listeners for buttons
    // Event listener for the "Save" button without alert
    document.getElementById('saveBtn').addEventListener('click', () => { const targetPriceInput = document.getElementById('targetPrice'); localStorage.setItem('targetPrice', targetPriceInput.value);});
    document.getElementById('shortcut490Btn').addEventListener('click', () => setTargetPrice(435));
    document.getElementById('shortcut545Btn').addEventListener('click', () => setTargetPrice(465));
    document.getElementById('shortcut580Btn').addEventListener('click', () => setTargetPrice(510));
    document.getElementById('shortcut635Btn').addEventListener('click', () => setTargetPrice(535));
    document.getElementById('autoFillWoodBtn').addEventListener('click', () => autoFillMaterial(
        "premium_exchange_stock_wood",
        "premium_exchange_capacity_wood",
        "buy_wood",
        "sell_wood"
    ));
    document.getElementById('autoFillStoneBtn').addEventListener('click', () => autoFillMaterial(
        "premium_exchange_stock_stone",
        "premium_exchange_capacity_stone",
        "buy_stone",
        "sell_stone"
    ));
    document.getElementById('autoFillIronBtn').addEventListener('click', () => autoFillMaterial(
        "premium_exchange_stock_iron",
        "premium_exchange_capacity_iron",
        "buy_iron",
        "sell_iron"
    ));
    function buyMaterials() {
        const buyButton = document.querySelector('input[type="submit"][class="btn float_right btn-premium-exchange-buy"]');
        if (buyButton) {
            buyButton.click(); // Klik tombol Buy
        } else {
            alert("Tombol Buy tidak ditemukan.");
        }
    }

    // Fungsi untuk mereset input
    function resetInputs() {
        document.getElementsByName("buy_wood")[0].value = "";
        document.getElementsByName("sell_wood")[0].value = "";
        document.getElementsByName("buy_stone")[0].value = "";
        document.getElementsByName("sell_stone")[0].value = "";
        document.getElementsByName("buy_iron")[0].value = "";
        document.getElementsByName("sell_iron")[0].value = "";
    }

    // Event listeners for buttons
    document.getElementById('buyBtn').addEventListener('click', buyMaterials);
    document.getElementById('resetBtn').addEventListener('click', resetInputs);

})();