MediaWiki:Gadget-calc-skillingparty.js: Difference between revisions

From Idle Clans wiki
m (attempt 1)
Tag: Reverted
m (attempt 2)
Tag: Reverted
Line 1: Line 1:
mw.loader.using(["jquery"], function () {
mw.loader.using(["jquery"], function () {
   $(document).ready(function () {
   $(document).ready(function () {
    // Select the existing slider
    var slider = $("#time-slider");
    // Ensure the slider exists before proceeding
    if (slider.length === 0) {
      console.error("Slider element not found!");
      return;
    }
     // Create the Gatherers Upgrade Checkbox
     // Create the Gatherers Upgrade Checkbox
     var gatherersCheckbox = $('<input type="checkbox" id="gatherers-upgrade">');
     var gatherersCheckbox = $('<input type="checkbox" id="gatherers-upgrade">');
     var gatherersLabel = $(
     var gatherersLabel = $('<label for="gatherers-upgrade"> Gatherers Upgrade</label><br>');
      '<label for="gatherers-upgrade"> Gatherers Upgrade</label><br>'
    );


     // Create the slider
     // Append checkbox below the existing slider
     var slider = $(
     $("<br>").insertAfter(slider);
      '<input type="range" min="0" max="80" value="0" id="time-slider">'
     gatherersCheckbox.insertAfter(slider);
    );
     gatherersLabel.insertAfter(gatherersCheckbox);
     var sliderLabel = $(
      '<p>Adjust skilling speed: <span id="slider-value">0</span>%</p>'
     );


     // Ticket chancing formula calculation
     // Ticket chancing formula calculation
Line 56: Line 60:
         }
         }
         var averageActionsPerTicket = 1 / decimalChance;
         var averageActionsPerTicket = 1 / decimalChance;
         var averageTimeSpentPerTicket =
         var averageTimeSpentPerTicket = averageActionsPerTicket * actionTimeWithSkillSpeed;
          averageActionsPerTicket * actionTimeWithSkillSpeed;
         var averageHours = averageTimeSpentPerTicket / 3600;
         var averageHours = averageTimeSpentPerTicket / 3600;
         $(this).text(averageHours.toFixed(2));
         $(this).text(averageHours.toFixed(2));
Line 69: Line 72:
         var decimalChance = calculateChancePerAction(levelRequirement);
         var decimalChance = calculateChancePerAction(levelRequirement);
         var averageActionsPerTicket = 1 / decimalChance;
         var averageActionsPerTicket = 1 / decimalChance;
         var textChance =
         var textChance = "1 in " + Math.ceil(averageActionsPerTicket).toLocaleString();
          "1 in " + Math.ceil(averageActionsPerTicket).toLocaleString();
         $(this).text(textChance);
         $(this).text(textChance);
       });
       });
Line 97: Line 99:
       });
       });
     }
     }
    // Append checkbox below the existing slider
    $("#time-slider").after("<br>").after(gatherersLabel).after(gatherersCheckbox);


     // Initial calculation after load
     // Initial calculation after load
Line 107: Line 106:
     applyAverageHoursChanges();
     applyAverageHoursChanges();


     // Update the table values when the slider or checkbox changes
     // Update the table values when the checkbox changes
     $(document).on("change", "#gatherers-upgrade", function () {
     $(document).on("change", "#gatherers-upgrade", function () {
       getTaskTimeWithBoost();
       getTaskTimeWithBoost();
Line 116: Line 115:
     // Update the table values when the slider is moved
     // Update the table values when the slider is moved
     slider.on("input", function () {
     slider.on("input", function () {
      var sliderValue = $(this).val();
       $("#slider-value").text($(this).val());
       $("#slider-value").text(sliderValue);
 
       getTaskTimeWithBoost();
       getTaskTimeWithBoost();
       applyChancePerDayChanges();
       applyChancePerDayChanges();

Revision as of 04:20, 23 February 2025

mw.loader.using(["jquery"], function () {
  $(document).ready(function () {
    // Select the existing slider
    var slider = $("#time-slider");

    // Ensure the slider exists before proceeding
    if (slider.length === 0) {
      console.error("Slider element not found!");
      return;
    }

    // Create the Gatherers Upgrade Checkbox
    var gatherersCheckbox = $('<input type="checkbox" id="gatherers-upgrade">');
    var gatherersLabel = $('<label for="gatherers-upgrade"> Gatherers Upgrade</label><br>');

    // Append checkbox below the existing slider
    $("<br>").insertAfter(slider);
    gatherersCheckbox.insertAfter(slider);
    gatherersLabel.insertAfter(gatherersCheckbox);

    // Ticket chancing formula calculation
    function calculateChancePerAction(levelRequirement) {
      return 1.2 * 0.000005 * ((levelRequirement / 10) * 1.033);
    }

    // Function to determine if the skill qualifies for the Gatherers boost
    function isGatherersSkill(skill) {
      return ["Fishing", "Mining", "Woodcutting", "Foraging"].includes(skill);
    }

    // Task time with boost column
    function getTaskTimeWithBoost() {
      $(".modified-time").each(function () {
        var time = $(this).data("time") / 100;
        var sliderValue = slider.val() / 100;
        var actionTimeWithSkillSpeed = time * (1 - sliderValue);

        // Apply 5% faster time if Gatherers is checked and skill qualifies
        var skill = $(this).closest("tr").find("td:first").text().trim();
        if ($("#gatherers-upgrade").is(":checked") && isGatherersSkill(skill)) {
          actionTimeWithSkillSpeed *= 0.95;
        }
        $(this).text(actionTimeWithSkillSpeed.toFixed(2));
      });
    }

    // Average hours Column
    function applyAverageHoursChanges() {
      $(".average-hours").each(function () {
        var levelRequirement = $(this).data("level");
        var time = $(this).data("time") / 100;
        var decimalChance = calculateChancePerAction(levelRequirement);
        var sliderValue = slider.val() / 100;
        var actionTimeWithSkillSpeed = time * (1 - sliderValue);

        // Apply 5% faster time if Gatherers is checked and skill qualifies
        var skill = $(this).closest("tr").find("td:first").text().trim();
        if ($("#gatherers-upgrade").is(":checked") && isGatherersSkill(skill)) {
          actionTimeWithSkillSpeed *= 0.95;
        }
        var averageActionsPerTicket = 1 / decimalChance;
        var averageTimeSpentPerTicket = averageActionsPerTicket * actionTimeWithSkillSpeed;
        var averageHours = averageTimeSpentPerTicket / 3600;
        $(this).text(averageHours.toFixed(2));
      });
    }

    // Chance per action Column
    function applyChancePerActionChanges() {
      $(".chance-per-action").each(function () {
        var levelRequirement = $(this).data("level");
        var decimalChance = calculateChancePerAction(levelRequirement);
        var averageActionsPerTicket = 1 / decimalChance;
        var textChance = "1 in " + Math.ceil(averageActionsPerTicket).toLocaleString();
        $(this).text(textChance);
      });
    }

    // Chance for at least 1 ticket per day Column
    function applyChancePerDayChanges() {
      $(".chance-per-day").each(function () {
        var levelRequirement = $(this).data("level");
        var time = $(this).data("time") / 100;
        var decimalChance = calculateChancePerAction(levelRequirement);
        var sliderValue = slider.val() / 100;
        var actionTimeWithSkillSpeed = time * (1 - sliderValue);

        // Apply 5% faster time if Gatherers is checked and skill qualifies
        var skill = $(this).closest("tr").find("td:first").text().trim();
        if ($("#gatherers-upgrade").is(":checked") && isGatherersSkill(skill)) {
          actionTimeWithSkillSpeed *= 0.95;
        }
        var actionsPerDay = (24 * 3600) / actionTimeWithSkillSpeed;
        var failureChance = 1 - decimalChance;
        var consecutiveFailureChance = Math.pow(failureChance, actionsPerDay);
        var successChance = 1 - consecutiveFailureChance;
        var successPercentage = (successChance * 100).toFixed(2);
        $(this).text(successPercentage + "%");
      });
    }

    // Initial calculation after load
    getTaskTimeWithBoost();
    applyChancePerActionChanges();
    applyChancePerDayChanges();
    applyAverageHoursChanges();

    // Update the table values when the checkbox changes
    $(document).on("change", "#gatherers-upgrade", function () {
      getTaskTimeWithBoost();
      applyChancePerDayChanges();
      applyAverageHoursChanges();
    });

    // Update the table values when the slider is moved
    slider.on("input", function () {
      $("#slider-value").text($(this).val());
      getTaskTimeWithBoost();
      applyChancePerDayChanges();
      applyAverageHoursChanges();
    });
  });
});