DF Ammo Boxer

Calculate ammo box price for you

// ==UserScript==
// @name         DF Ammo Boxer
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Calculate ammo box price for you
// @author       IYNH
// @match        https://fairview.deadfrontier.com/onlinezombiemmo/index.php?page=35
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @require      https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @resource     IMPORTED_CSS https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css
// @grant        GM_getResourceText
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function() {

    var finalValue = 9999;
    var cbPerBoxValue = GM_getValue('cbPerBoxValue');
    if(typeof cbPerBoxValue !== "boolean") {
        cbPerBoxValue = false;
    }

    var pricePerBox = GM_getValue('pricePerBox');
    if(!pricePerBox) {
        pricePerBox = {};
    }
    var pricePerBullet = GM_getValue('pricePerBullet');
    if(!pricePerBullet) {
        pricePerBullet = {};
    }

    'use strict';

    // CSS stuff
    const my_css = GM_getResourceText("IMPORTED_CSS");
    GM_addStyle(my_css);
    GM_addStyle(`.ammo-boxer-input {
                 width: 63px;
                 color: #ffff00
               }`);
    GM_addStyle(`.ammo-boxer-label, .ammo-boxer-label-2 {
                 color: black
                }`);

    // Main UI
    $("body").append ( `
    <div id="ammoBoxerDraggable" style="position: absolute; top: 300px; right: 0px; width: 220px;">
      <input type="checkbox" id="cbPerBox" value="cbPerBox">
      <label for="cbPerBox">Use Cost per Standard Box</label><br/>
      <input type="checkbox" id="cbAutoFill" value="cbAutoFill" checked>
      <label for="cbAutoFill">Auto Fill Price</label>
      <div id="ammoBoxerTabs">
         <ul>
           <li><a href="#tabs-1Handgun">Handgun</a></li>
           <li><a href="#tabs-2Rifle">Rifle</a></li>
           <li><a href="#tabs-3Shotgun">Shotgun</a></li>
           <li><a href="#tabs-4Explosive">Explosive</a></li>
           <li><a href="#tabs-5Gas">Fuel</a></li>
         </ul>
         <div id="tabs-1Handgun" style="padding: 1px">
           <table>
             <tr>
               <td class="ammo-boxer-label" style="width: 50px;">.32</td>
               <td><input id="input32ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">9mm</td>
               <td><input id="input35ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">.357</td>
               <td><input id="input357ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">.38</td>
               <td><input id="input38ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">.40</td>
               <td><input id="input40ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">.45</td>
               <td><input id="input45ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">.50</td>
               <td><input id="input50ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">.55</td>
               <td><input id="input55ammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
           </table>
         </div>
         <div id="tabs-2Rifle" style="padding: 1px">
           <table>
             <tr>
               <td class="ammo-boxer-label" style="width: 50px;">5.5mm</td>
               <td><input id="input55rifleammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">7.5mm</td>
               <td><input id="input75rifleammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">9mm</td>
               <td><input id="input9rifleammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">12.7mm</td>
               <td><input id="input127rifleammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">14mm</td>
               <td><input id="input14rifleammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
           </table>
         </div>
         <div id="tabs-3Shotgun" style="padding: 1px">
           <table>
             <tr>
               <td class="ammo-boxer-label" style="width: 50px;">20 G</td>
               <td><input id="input20gaugeammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">16 G</td>
               <td><input id="input16gaugeammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">12 G</td>
               <td><input id="input12gaugeammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">10 G</td>
               <td><input id="input10gaugeammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
           </table>
         </div>
         <div id="tabs-4Explosive" style="padding: 1px">
           <table>
             <tr>
               <td class="ammo-boxer-label" style="width: 50px;">Light</td>
               <td><input id="inputgrenadeammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
             <tr>
               <td class="ammo-boxer-label">Heavy</td>
               <td><input id="inputheavygrenadeammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
           </table>
         </div>
         <div id="tabs-5Gas" style="padding: 1px">
           <table>
             <tr>
               <td class="ammo-boxer-label" style="width: 50px;">Gasoline</td>
               <td><input id="inputfuelammo" class="ammo-boxer-input" type="number" min="0" max="999999999" />
               <td class="ammo-boxer-label-2">per bullet</td>
             </tr>
           </table>
         </div>
      </div>
    </div>
    <script type="javascript">

    </script>`);

    $("#ammoBoxerDraggable").draggable();
    $("#ammoBoxerTabs").tabs();
    $("#cbPerBox").attr("checked", cbPerBoxValue);
    loadAmmo(cbPerBoxValue);

    // Load ammo type
    function loadAmmo(perBox) {
        let priceSource;
        if(perBox) {
            //load value per box
            priceSource = pricePerBox;
            $("#tabs-1Handgun td.ammo-boxer-label-2").html("per 1600");
            $("#tabs-2Rifle td.ammo-boxer-label-2").html("per 1200");
            $("#tabs-3Shotgun td.ammo-boxer-label-2").html("per 800");
            $("#tabs-4Explosive td.ammo-boxer-label-2").html("per 400");
            $("#tabs-5Gas td.ammo-boxer-label-2").html("per 4546");
        } else {
            //load value per bullet
            priceSource = pricePerBullet;
            $("td.ammo-boxer-label-2").html("per bullet");
        }
        $("input.ammo-boxer-input").each(function() {
            var inputValue = priceSource[$(this).attr("id")];
            inputValue = inputValue ? inputValue : "";
            $(this).val(inputValue);
        });
    }

    // Change input type with cbPerBox
    $("#cbPerBox").change(function() {
        cbPerBoxValue = $("#cbPerBox").prop("checked");
        GM_setValue("cbPerBoxValue", cbPerBoxValue);
        loadAmmo(cbPerBoxValue);
    });

    // Save ammo value
    $("input.ammo-boxer-input").keyup(function(e) {
        var inputId = e.target.id;
        var inputValue = e.target.value;
        if(inputValue && !isNaN(inputValue)) {
            if(cbPerBoxValue) {
                //Save value per box
                pricePerBox[inputId] = inputValue;
                GM_setValue("pricePerBox", pricePerBox);
            } else {
                //Save value per bullet
                pricePerBullet[inputId] = inputValue;
                GM_setValue("pricePerBullet", pricePerBullet);
            }
        }
    });

    // Display recommended price on infobox display
    var infoBox2 = $("#infoBox");
    function calculateRecommendedPrice(itemSource) {
        var boxType = itemSource.getAttribute("data-type");
        var boxQuantity = itemSource.getAttribute("data-quantity");
        if(cbPerBoxValue) {
            //Save value per box
            let maxQuantity;
            switch (boxType) {
                case "32ammo":
                case "35ammo":
                case "357ammo":
                case "38ammo":
                case "40ammo":
                case "45ammo":
                case "50ammo":
                case "55ammo":
                    maxQuantity = 1600;
                    break;
                case "55rifleammo":
                case "75rifleammo":
                case "9rifleammo":
                case "127rifleammo":
                case "14rifleammo":
                    maxQuantity = 1200;
                    break;
                case "20gaugeammo":
                case "16gaugeammo":
                case "12gaugeammo":
                case "10gaugeammo":
                    maxQuantity = 800;
                    break;
                case "grenadeammo":
                case "heavygrenadeammo":
                    maxQuantity = 400;
                    break;
                case "fuelammo":
                    maxQuantity = 4546;
                    break;
                default:
                    maxQuantity = 1000;
                    break;
            }
            var boxValue = pricePerBox["input".concat(boxType)];
            boxValue = boxValue ? boxValue : 0;
            return Math.round(boxValue / maxQuantity * boxQuantity);
        } else {
            //Save value per bullet
            var bulletValue = pricePerBullet["input".concat(boxType)];
            return Math.round(bulletValue * boxQuantity);
        }
    }

    function displayRecommendedPrice() {
        if(infoBox2.css('visibility') === 'visible' && $("#infoBox div.ammoBoxerTooltip").length == 0 && curInfoItem && curInfoItem.getAttribute("data-itemtype") === "ammo") {
            finalValue = calculateRecommendedPrice(curInfoItem);
            infoBox2.append(`<div class="itemData ammoBoxerTooltip" style="color: yellow;">Calculated Price: $` + finalValue + `</div>`);
        }
    }

    $("#inventoryholder").on("mousemove", function(){
        displayRecommendedPrice();
    });

    // Auto insert price
    var promptObserver = new MutationObserver(function(mutationList) {
       mutationList.forEach(function(mutation) {
           if( $("#cbAutoFill").prop("checked") && mutation.oldValue == "display: none;" && document.querySelector('input.moneyField') != null && curInfoItem && curInfoItem.getAttribute("data-itemtype") === "ammo") {
               $("input.moneyField").val(finalValue);
               $("input.moneyField").trigger("input");
           }
       });
    });

    var target = document.querySelector('#prompt');
    promptObserver.observe(target, {
        attributeFilter: ["style"],
        attributeOldValue: true
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址