MediaWiki:SlayerPointsCalc.js: Difference between revisions

From Roat Pkz
Jump to navigation Jump to search
No edit summary
No edit summary
 
(31 intermediate revisions by the same user not shown)
Line 1: Line 1:
mw.hook('wikipage.content').add(function () {
mw.hook('wikipage.content').add(function () {


    if (mw.config.get('wgPageName') !== "Slayer_points_calculator") return;
     var container = document.getElementById("slayerCalcContainer");
     var container = document.getElementById("slayerCalcContainer");
     if (!container) return;
     if (!container) return;


    // Build UI
     container.innerHTML =
     container.innerHTML =
         '<div style="margin-bottom:10px;">' +
         '<div style="margin-bottom:10px;">' +
        'Task streak: <input type="number" id="taskStreak" value="1" min="1" style="width:80px;"> ' +
         'Donator Boost: ' +
         'Donator Boost: ' +
         '<select id="donatorBoost">' +
         '<select id="donatorBoost">' +
         '<option value="0">None</option>' +
         '<option value="0">None</option>' +
         '<option value="75">Divine Donator (75%)</option>' +
        '<option value="5">Donator (+5%)</option>' +
        '<option value="10">Super Donator (+10%)</option>' +
        '<option value="15">Extreme Donator (+15%)</option>' +
        '<option value="25">Legendary Donator (+25%)</option>' +
        '<option value="50">Royal Donator (+50%)</option>' +
         '<option value="75">Divine Donator (+75%)</option>' +
         '</select>' +
         '</select>' +
         '</div>' +
         '</div>' +


         '<table id="slayerTable" style="border-collapse: collapse; width: 400px;">' +
        '<div style="margin-bottom:10px;">' +
        '<label><input type="checkbox" id="slayerGatherer"> Slayer gatherer clan chat perk (+50% points per task)</label>' +
        '</div>' +
 
        '<div style="margin-bottom:10px;">' +
        'Average task duration: <input type="number" id="taskMinutes" value="5" min="1" style="width:60px;"> minutes' +
        '</div>' +
 
         '<table id="slayerTable" style="border-collapse:collapse; width:400px;">' +
         '<thead>' +
         '<thead>' +
         '<tr style="background:#222e45;color:white;">' +
         '<tr style="background:#222e45;color:#fff;">' +
         '<th style="padding:5px;">Task Type</th>' +
         '<th style="padding:8px;text-align:left; border-right:1px solid #596e96;">Task</th>' +
         '<th style="padding:5px;">Base Points</th>' +
         '<th style="padding:8px;text-align:center;">Points</th>' +
        '<th style="padding:5px;">Final Points</th>' +
         '</tr>' +
         '</tr>' +
         '</thead>' +
         '</thead>' +
         '<tbody>' +
         '<tbody></tbody>' +
        '<tr><td style="padding:5px;">Normal Task</td><td id="baseNormal">5</td><td id="finalNormal">5</td></tr>' +
        '<tr><td style="padding:5px;">10th Task</td><td id="base10">15</td><td id="final10">15</td></tr>' +
        '<tr><td style="padding:5px;">50th Task</td><td id="base50">75</td><td id="final50">75</td></tr>' +
        '<tr><td style="padding:5px;">100th Task</td><td id="base100">150</td><td id="final100">150</td></tr>' +
        '</tbody>' +
         '</table>';
         '</table>';


     function calculatePoints() {
     // Table border styling
    var table = document.getElementById("slayerTable");
    table.style.border = "1px solid #596e96"; // your border color
    table.style.borderCollapse = "collapse";
    table.style.borderRadius = "8px";
 
    var basePoints = 25;
 
    var milestones = [
        {name:"Normal task", multiplier:1},
        {name:"10th task", multiplier:5},
        {name:"50th task", multiplier:15},
        {name:"100th task", multiplier:25},
        {name:"250th task", multiplier:35},
        {name:"1,000th task", multiplier:50}
    ];


        var streak = parseInt(document.getElementById("taskStreak").value) || 1;
    var tbody = document.querySelector("#slayerTable tbody");
         var boost = parseFloat(document.getElementById("donatorBoost").value) || 0;
 
    milestones.forEach(function(milestone, index){
        var row = tbody.insertRow();
        row.style.background = index % 2 ? "#222e45" : "#313e59";
        row.style.color = "#fff";
         row.style.transition = "background 0.2s";
 
        row.addEventListener("mouseover", function(){ row.style.background = "#3a4b6d"; });
        row.addEventListener("mouseout", function(){ row.style.background = index % 2 ? "#222e45" : "#313e59"; });
 
        var cell1 = row.insertCell();
        cell1.textContent = milestone.name;
        cell1.style.padding = "8px";
        cell1.style.borderRight = "1px solid #596e96";


         var normal = 5;
         var cell2 = row.insertCell();
         var tenth = 15;
         cell2.id = "points_" + index;
         var fiftieth = 75;
         cell2.style.textAlign = "center";
         var hundredth = 150;
         cell2.style.padding = "8px 0 8px 10px";
    });


        if (streak % 100 === 0) {
    // Bottom row for Average Points per Hour
            normal = hundredth;
    var pphRow = tbody.insertRow();
        } else if (streak % 50 === 0) {
    pphRow.style.background = "#313e59";
            normal = fiftieth;
    pphRow.style.color = "#fff";
        } else if (streak % 10 === 0) {
            normal = tenth;
        }


        var multiplier = 1 + (boost / 100);
    var cell = pphRow.insertCell();
    cell.colSpan = 2;
    cell.style.padding = "8px";
    cell.style.textAlign = "center";
    cell.style.borderTop = "1px solid #596e96";
    cell.id = "pointsPerHourCell";


         document.getElementById("finalNormal").textContent = Math.floor(5 * multiplier);
    function calculateAveragePointsPerTask() {
         document.getElementById("final10").textContent = Math.floor(15 * multiplier);
         var taskCounts = {
         document.getElementById("final50").textContent = Math.floor(75 * multiplier);
            "1000":1,
         document.getElementById("final100").textContent = Math.floor(150 * multiplier);
            "250":3,
            "100":8,
            "50":8,
            "10":80,
            "normal": 1000 - (1+3+8+8+80)
        };
        var sum = 0;
        sum += taskCounts.normal * basePoints * 1;
         sum += taskCounts["10"] * basePoints * 5;
        sum += taskCounts["50"] * basePoints * 15;
        sum += taskCounts["100"] * basePoints * 25;
         sum += taskCounts["250"] * basePoints * 35;
         sum += taskCounts["1000"] * basePoints * 50;
        return sum / 1000;
     }
     }


     document.getElementById("taskStreak").addEventListener("input", calculatePoints);
     function updatePoints() {
    document.getElementById("donatorBoost").addEventListener("change", calculatePoints);
        var boost = parseFloat(document.getElementById("donatorBoost").value) || 0;
        var multiplierBoost = 1 + boost/100;
        var gatherer = document.getElementById("slayerGatherer").checked ? 0.5 : 0;
 
        var averagePoints = calculateAveragePointsPerTask() * multiplierBoost * (1 + gatherer);
 
        milestones.forEach(function(milestone, index){
            var points = basePoints * milestone.multiplier * multiplierBoost * (1 + gatherer);
            document.getElementById("points_" + index).textContent = Math.floor(points);
        });
 
        // Bold only the number in bottom cell
        var minutes = parseFloat(document.getElementById("taskMinutes").value) || 1;
        var pph = averagePoints * (60 / minutes);
        document.getElementById("pointsPerHourCell").innerHTML =
            'Average Points per Hour: <strong>' + Math.floor(pph) + '</strong>';
    }


     calculatePoints();
     // Event listeners
    document.getElementById("donatorBoost").addEventListener("change", updatePoints);
    document.getElementById("slayerGatherer").addEventListener("change", updatePoints);
    document.getElementById("taskMinutes").addEventListener("input", updatePoints);


    updatePoints();
});
});

Latest revision as of 01:55, 7 March 2026

mw.hook('wikipage.content').add(function () {

    if (mw.config.get('wgPageName') !== "Slayer_points_calculator") return;
    var container = document.getElementById("slayerCalcContainer");
    if (!container) return;

    // Build UI
    container.innerHTML =
        '<div style="margin-bottom:10px;">' +
        'Donator Boost: ' +
        '<select id="donatorBoost">' +
        '<option value="0">None</option>' +
        '<option value="5">Donator (+5%)</option>' +
        '<option value="10">Super Donator (+10%)</option>' +
        '<option value="15">Extreme Donator (+15%)</option>' +
        '<option value="25">Legendary Donator (+25%)</option>' +
        '<option value="50">Royal Donator (+50%)</option>' +
        '<option value="75">Divine Donator (+75%)</option>' +
        '</select>' +
        '</div>' +

        '<div style="margin-bottom:10px;">' +
        '<label><input type="checkbox" id="slayerGatherer"> Slayer gatherer clan chat perk (+50% points per task)</label>' +
        '</div>' +

        '<div style="margin-bottom:10px;">' +
        'Average task duration: <input type="number" id="taskMinutes" value="5" min="1" style="width:60px;"> minutes' +
        '</div>' +

        '<table id="slayerTable" style="border-collapse:collapse; width:400px;">' +
        '<thead>' +
        '<tr style="background:#222e45;color:#fff;">' +
        '<th style="padding:8px;text-align:left; border-right:1px solid #596e96;">Task</th>' +
        '<th style="padding:8px;text-align:center;">Points</th>' +
        '</tr>' +
        '</thead>' +
        '<tbody></tbody>' +
        '</table>';

    // Table border styling
    var table = document.getElementById("slayerTable");
    table.style.border = "1px solid #596e96"; // your border color
    table.style.borderCollapse = "collapse";
    table.style.borderRadius = "8px";

    var basePoints = 25;

    var milestones = [
        {name:"Normal task", multiplier:1},
        {name:"10th task", multiplier:5},
        {name:"50th task", multiplier:15},
        {name:"100th task", multiplier:25},
        {name:"250th task", multiplier:35},
        {name:"1,000th task", multiplier:50}
    ];

    var tbody = document.querySelector("#slayerTable tbody");

    milestones.forEach(function(milestone, index){
        var row = tbody.insertRow();
        row.style.background = index % 2 ? "#222e45" : "#313e59";
        row.style.color = "#fff";
        row.style.transition = "background 0.2s";

        row.addEventListener("mouseover", function(){ row.style.background = "#3a4b6d"; });
        row.addEventListener("mouseout", function(){ row.style.background = index % 2 ? "#222e45" : "#313e59"; });

        var cell1 = row.insertCell();
        cell1.textContent = milestone.name;
        cell1.style.padding = "8px";
        cell1.style.borderRight = "1px solid #596e96";

        var cell2 = row.insertCell();
        cell2.id = "points_" + index;
        cell2.style.textAlign = "center";
        cell2.style.padding = "8px 0 8px 10px";
    });

    // Bottom row for Average Points per Hour
    var pphRow = tbody.insertRow();
    pphRow.style.background = "#313e59";
    pphRow.style.color = "#fff";

    var cell = pphRow.insertCell();
    cell.colSpan = 2;
    cell.style.padding = "8px";
    cell.style.textAlign = "center";
    cell.style.borderTop = "1px solid #596e96";
    cell.id = "pointsPerHourCell";

    function calculateAveragePointsPerTask() {
        var taskCounts = {
            "1000":1,
            "250":3,
            "100":8,
            "50":8,
            "10":80,
            "normal": 1000 - (1+3+8+8+80)
        };
        var sum = 0;
        sum += taskCounts.normal * basePoints * 1;
        sum += taskCounts["10"] * basePoints * 5;
        sum += taskCounts["50"] * basePoints * 15;
        sum += taskCounts["100"] * basePoints * 25;
        sum += taskCounts["250"] * basePoints * 35;
        sum += taskCounts["1000"] * basePoints * 50;
        return sum / 1000;
    }

    function updatePoints() {
        var boost = parseFloat(document.getElementById("donatorBoost").value) || 0;
        var multiplierBoost = 1 + boost/100;
        var gatherer = document.getElementById("slayerGatherer").checked ? 0.5 : 0;

        var averagePoints = calculateAveragePointsPerTask() * multiplierBoost * (1 + gatherer);

        milestones.forEach(function(milestone, index){
            var points = basePoints * milestone.multiplier * multiplierBoost * (1 + gatherer);
            document.getElementById("points_" + index).textContent = Math.floor(points);
        });

        // Bold only the number in bottom cell
        var minutes = parseFloat(document.getElementById("taskMinutes").value) || 1;
        var pph = averagePoints * (60 / minutes);
        document.getElementById("pointsPerHourCell").innerHTML = 
            'Average Points per Hour: <strong>' + Math.floor(pph) + '</strong>';
    }

    // Event listeners
    document.getElementById("donatorBoost").addEventListener("change", updatePoints);
    document.getElementById("slayerGatherer").addEventListener("change", updatePoints);
    document.getElementById("taskMinutes").addEventListener("input", updatePoints);

    updatePoints();
});