MediaWiki:Gadget-calc-skillingparty.js: Difference between revisions
From Idle Clans wiki
mNo edit summary Tag: Reverted |
m (add checkbox for gatherers upgrade) Tag: Reverted |
||
Line 1: | Line 1: | ||
mw.loader.using([ | mw.loader.using(["jquery"], function () { | ||
$(document).ready(function () { | |||
// Create the Gatherers Upgrade Checkbox | |||
var gatherersCheckbox = $('<input type="checkbox" id="gatherers-upgrade">'); | |||
var gatherersLabel = $('<label for="gatherers-upgrade"> Gatherers Upgrade</label><br>'); | |||
// Create the slider | |||
var slider = $( | |||
'<input type="range" min="0" max="80" value="0" id="time-slider">' | |||
); | |||
var sliderLabel = $( | |||
'<p>Adjust skilling speed: <span id="slider-value">0</span>%</p>' | |||
); | |||
// 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 + "%"); | |||
}); | |||
} | |||
// Append elements above the table | |||
$(".mw-slider-md").before(gatherersCheckbox).before(gatherersLabel); | |||
// Append slider to the page | |||
$(".mw-slider-md").append(sliderLabel).append(slider); | |||
// Initial calculation after load | |||
getTaskTimeWithBoost(); | |||
applyChancePerActionChanges(); | |||
applyChancePerDayChanges(); | |||
applyAverageHoursChanges(); | |||
// Update the table values when the slider or checkbox changes | |||
$("#gatherers-upgrade").on("change", function () { | |||
getTaskTimeWithBoost(); | getTaskTimeWithBoost(); | ||
applyChancePerDayChanges(); | applyChancePerDayChanges(); | ||
applyAverageHoursChanges(); | applyAverageHoursChanges(); | ||
}); | |||
// Update the table values when the slider is moved | |||
slider.on("input", function () { | |||
var sliderValue = $(this).val(); | |||
$("#slider-value").text(sliderValue); | |||
getTaskTimeWithBoost(); | |||
applyChancePerDayChanges(); | |||
applyAverageHoursChanges(); | |||
}); | }); | ||
}); | |||
}); | }); |
Revision as of 08:10, 21 February 2025
mw.loader.using(["jquery"], function () { $(document).ready(function () { // Create the Gatherers Upgrade Checkbox var gatherersCheckbox = $('<input type="checkbox" id="gatherers-upgrade">'); var gatherersLabel = $('<label for="gatherers-upgrade"> Gatherers Upgrade</label><br>'); // Create the slider var slider = $( '<input type="range" min="0" max="80" value="0" id="time-slider">' ); var sliderLabel = $( '<p>Adjust skilling speed: <span id="slider-value">0</span>%</p>' ); // 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 + "%"); }); } // Append elements above the table $(".mw-slider-md").before(gatherersCheckbox).before(gatherersLabel); // Append slider to the page $(".mw-slider-md").append(sliderLabel).append(slider); // Initial calculation after load getTaskTimeWithBoost(); applyChancePerActionChanges(); applyChancePerDayChanges(); applyAverageHoursChanges(); // Update the table values when the slider or checkbox changes $("#gatherers-upgrade").on("change", function () { getTaskTimeWithBoost(); applyChancePerDayChanges(); applyAverageHoursChanges(); }); // Update the table values when the slider is moved slider.on("input", function () { var sliderValue = $(this).val(); $("#slider-value").text(sliderValue); getTaskTimeWithBoost(); applyChancePerDayChanges(); applyAverageHoursChanges(); }); }); });