MediaWiki:SlayerPointsCalc.js: Difference between revisions

From Roat Pkz
Jump to navigation Jump to search
No edit summary
No edit summary
Line 40: Line 40:
         '</table>' +
         '</table>' +


         '<div id="pointsPerHour" style="margin-top:10px; font-weight:bold;"></div>' +
         '<div id="pointsPerHour" style="margin-top:10px; font-weight:bold;"></div>' ;
 
        '<div style="margin-top:10px; font-size:90%; color:#ccc;">' +
        'Note: The Max Cape perk gives a 20% chance to double Slayer Points. This calculator does not include it in the totals.' +
        '</div>';


     var basePoints = 25;
     var basePoints = 25;

Revision as of 01:19, 7 March 2026

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

    // Only run on the correct page
    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 (+50% points per task)</label>' +
        '</div>' +

        '<div style="margin-bottom:10px;">' +
        'Avg 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:5px;text-align:left;">Task</th>' +
        '<th style="padding:5px;text-align:center;">Points</th>' +
        '</tr>' +
        '</thead>' +
        '<tbody></tbody>' +
        '</table>' +

        '<div id="pointsPerHour" style="margin-top:10px; font-weight:bold;"></div>' ;

    var basePoints = 25;

    // Milestones: higher ones override lower if task hits multiple
    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";

        var cell1 = row.insertCell();
        cell1.textContent = milestone.name;
        cell1.style.padding = "5px";

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

    function calculateAveragePointsPerTask() {
        // Count occurrences in 1,000 tasks using “higher overrides lower”
        var totalTasks = 1000;
        var taskCounts = {
            "1000":1,
            "250":3,
            "100":8,
            "50":8,
            "10":80,
            "normal": 1000 - (1+3+8+8+80) // =900
        };

        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 / totalTasks; // average points per task without bonuses
    }

    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);

        // Update table points (simple display: just base points × multiplier × bonuses for each milestone)
        milestones.forEach(function(milestone, index){
            var points = basePoints * milestone.multiplier * multiplierBoost * (1 + gatherer);
            document.getElementById("points_" + index).textContent = Math.floor(points);
        });

        // Update points per hour
        var minutes = parseFloat(document.getElementById("taskMinutes").value) || 1;
        var pph = averagePoints * (60 / minutes);
        document.getElementById("pointsPerHour").textContent = "Average Points per Hour: " + Math.floor(pph);
    }

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

    updatePoints();
});