Fixed modifiers and added all the item buffs, bloxy cola does not yet work because it applies 2 buffs.
This commit is contained in:
+53
-32
@@ -101,66 +101,77 @@ function populateModifiers(modifiers) {
|
||||
modifiersContainer.appendChild(createModifierSection('Operative Perks', modifiers.operativePerks));
|
||||
|
||||
// Add Ability Perks
|
||||
modifiersContainer.appendChild(createModifierSection('Ability Perks', modifiers.abilityPerks));
|
||||
modifiersContainer.appendChild(createModifierSection('Abilities', modifiers.abilityPerks));
|
||||
|
||||
// Add event listener to recalculate DPS/DPM when modifiers are toggled
|
||||
modifiersContainer.addEventListener('change', applyModifiers);
|
||||
}
|
||||
|
||||
// Function to apply the modifiers and recalculate DPS and DPM
|
||||
// Function to apply the modifiers and recalculate damage, RPM, and reloadTime
|
||||
// Function to apply the modifiers and recalculate damage, RPM, and reloadTime
|
||||
function applyModifiers() {
|
||||
if (!selectedWeapon) return;
|
||||
|
||||
const damage = selectedWeapon.damage;
|
||||
let rpm = selectedWeapon.rpm;
|
||||
const magSize = selectedWeapon.mag_size;
|
||||
const reloadTime = selectedWeapon.reload_time;
|
||||
// Get the base stats from the selected weapon
|
||||
let baseDamage = selectedWeapon.damage;
|
||||
let baseRpm = selectedWeapon.rpm;
|
||||
let baseReloadTime = selectedWeapon.reload_time;
|
||||
|
||||
let dpsModifier = { additive: 0, multiplicative: 1 };
|
||||
let dpmModifier = { additive: 0, multiplicative: 1 };
|
||||
let rpmModifier = { additive: 0, multiplicative: 1 };
|
||||
// Initialize the modifier objects
|
||||
let damageModifier = {additive: 0, multiplicative: 1, flat: 0};
|
||||
let rpmModifier = {additive: 0, multiplicative: 1};
|
||||
let reloadTimeModifier = {additive: 0, multiplicative: 1};
|
||||
|
||||
// Collect checked modifier values
|
||||
document.querySelectorAll('#modifiers input:checked').forEach(mod => {
|
||||
const modType = mod.dataset.type;
|
||||
const modValue = parseFloat(mod.value);
|
||||
// Apply damage modifiers
|
||||
if (mod.id.includes('damage')) {
|
||||
if (modType === 'multiplicative') damageModifier.multiplicative *= modValue; // Multiplicative
|
||||
else if (modType === 'additive') damageModifier.additive += modValue; // Additive
|
||||
}
|
||||
|
||||
if (mod.id.includes('dps')) {
|
||||
if (modType === 'additive') dpsModifier.additive += modValue;
|
||||
else dpsModifier.multiplicative *= modValue;
|
||||
}
|
||||
if (mod.id.includes('dpm')) {
|
||||
if (modType === 'additive') dpmModifier.additive += modValue;
|
||||
else dpmModifier.multiplicative *= modValue;
|
||||
}
|
||||
// Apply RPM modifiers
|
||||
if (mod.id.includes('rpm')) {
|
||||
if (modType === 'additive') rpmModifier.additive += modValue;
|
||||
else rpmModifier.multiplicative *= modValue;
|
||||
if (modType === 'multiplicative') rpmModifier.multiplicative *= modValue;
|
||||
else if (modType === 'additive') rpmModifier.additive += modValue;
|
||||
}
|
||||
|
||||
// Apply Reload Time modifiers
|
||||
if (mod.id.includes('reloadTime')) {
|
||||
if (modType === 'multiplicative') reloadTimeModifier.multiplicative *= modValue;
|
||||
else if (modType === 'additive') reloadTimeModifier.additive += modValue;
|
||||
}
|
||||
});
|
||||
|
||||
// Apply RPM modifiers
|
||||
rpm = rpm + (rpm * rpmModifier.additive);
|
||||
rpm = rpm * rpmModifier.multiplicative;
|
||||
// Apply the damage modifiers
|
||||
let damage = baseDamage * damageModifier.multiplicative; // First apply multiplicative modifiers// Then apply percentage-based additive modifiers
|
||||
damage += damageModifier.additive; // Finally, add the flat additive modifier (e.g., HE Rounds)
|
||||
|
||||
// Recalculate DPS and DPM with modifiers
|
||||
calculateDPSAndDPM(damage, rpm, magSize, reloadTime, dpsModifier, dpmModifier);
|
||||
// Apply the RPM modifiers
|
||||
let rpm = baseRpm * rpmModifier.multiplicative;
|
||||
rpm = rpm + (rpm * rpmModifier.additive);
|
||||
|
||||
// Apply the reload time modifiers
|
||||
let reloadTime = baseReloadTime * reloadTimeModifier.multiplicative;
|
||||
reloadTime = reloadTime + (reloadTime * reloadTimeModifier.additive);
|
||||
|
||||
// Recalculate DPS and DPM with the modified stats
|
||||
calculateDPSAndDPM(damage, rpm, selectedWeapon.mag_size, reloadTime);
|
||||
|
||||
// Update the displayed weapon stats with the modified values
|
||||
updateModifiedWeaponStats(damage, rpm, reloadTime);
|
||||
}
|
||||
|
||||
// Function to calculate DPS, DPM, and RPS with optional modifiers
|
||||
// Function to calculate DPS and DPM with optional modifiers
|
||||
function calculateDPSAndDPM(damage, rpm, magSize, reloadTime, dpsModifier = { additive: 0, multiplicative: 1 }, dpmModifier = { additive: 0, multiplicative: 1 }) {
|
||||
function calculateDPSAndDPM(damage, rpm, magSize, reloadTime) {
|
||||
const rps = rpm / 60; // Rounds per second
|
||||
let dps = damage * rps;
|
||||
const reloadTimeMin = reloadTime / 60;
|
||||
let dpm = (magSize * damage) / (reloadTimeMin + (magSize / rpm));
|
||||
|
||||
// Apply modifiers
|
||||
dps = dps + (dps * dpsModifier.additive);
|
||||
dps = dps * dpsModifier.multiplicative;
|
||||
dpm = dpm + (dpm * dpmModifier.additive);
|
||||
dpm = dpm * dpmModifier.multiplicative;
|
||||
|
||||
// Display the calculated stats
|
||||
const resultElement = document.getElementById('calculated-stats');
|
||||
resultElement.innerHTML = `
|
||||
@@ -169,7 +180,17 @@ function calculateDPSAndDPM(damage, rpm, magSize, reloadTime, dpsModifier = { ad
|
||||
`;
|
||||
}
|
||||
|
||||
// Function to display the modified weapon's stats in the UI
|
||||
function updateModifiedWeaponStats(damage, rpm, reloadTime) {
|
||||
const statsElement = document.getElementById('weapon-stats');
|
||||
statsElement.innerHTML = `
|
||||
<p>Modified Damage: ${damage.toFixed(2)}</p>
|
||||
<p>Modified RPM: ${rpm.toFixed(2)}</p>
|
||||
<p>Mag Size: ${selectedWeapon.mag_size}</p>
|
||||
<p>Modified Reload Time: ${reloadTime.toFixed(2)} seconds</p>
|
||||
`;
|
||||
}
|
||||
|
||||
// Call the fetch function to load the data and populate the dropdown on page load
|
||||
fetchWeaponsData();
|
||||
fetchModifiers();
|
||||
fetchModifiers();
|
||||
+124
-18
@@ -1,26 +1,132 @@
|
||||
{
|
||||
"itemBuffs": [
|
||||
{ "id": "dps-item-additive", "label": "DPS Additive (10%)", "value": 0.1, "type": "additive" },
|
||||
{ "id": "dps-item-multiplicative", "label": "DPS Multiplicative (20%)", "value": 1.2, "type": "multiplicative" },
|
||||
{ "id": "dpm-item-additive", "label": "DPM Additive (10%)", "value": 0.1, "type": "additive" },
|
||||
{ "id": "dpm-item-multiplicative", "label": "DPM Multiplicative (20%)", "value": 1.2, "type": "multiplicative" },
|
||||
{ "id": "rpm-item-additive", "label": "RPM Additive (5%)", "value": 0.05, "type": "additive" },
|
||||
{ "id": "rpm-item-multiplicative", "label": "RPM Multiplicative (10%)", "value": 1.1, "type": "multiplicative" }
|
||||
{
|
||||
"id": "damage-item-additive",
|
||||
"label": "Elite HE Rounds (+14 damage)",
|
||||
"value": 14,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "damage-item-additive",
|
||||
"label": "HE Rounds (+8 damage)",
|
||||
"value": 8,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "damage-item-multiplicative",
|
||||
"label": "Strength Mixture (+20% damage)",
|
||||
"value": 1.2,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "damage-item-multiplicative",
|
||||
"label": "Fortunos Necklace (+15% damage)",
|
||||
"value": 1.15,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "multiple-buffs",
|
||||
"label": "Bloxy Cola (+25% Firerate, +100% Reload Speed)",
|
||||
"buffs": [
|
||||
{
|
||||
"type": "rpm",
|
||||
"value": 1.25,
|
||||
"buffType": "multiplicative"
|
||||
},
|
||||
{
|
||||
"type": "reloadTime",
|
||||
"value": 0,
|
||||
"buffType": "multiplicative"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "damage-item-multiplicative",
|
||||
"label": "Enhancer (+10% damage)",
|
||||
"value": 1.1,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "damage-item-multiplicative",
|
||||
"label": "Teleport Device (+25% damage)",
|
||||
"value": 1.25,
|
||||
"type": "multiplicative"
|
||||
}
|
||||
],
|
||||
"operativePerks": [
|
||||
{ "id": "dps-perk-additive", "label": "DPS Additive (15%)", "value": 0.15, "type": "additive" },
|
||||
{ "id": "dps-perk-multiplicative", "label": "DPS Multiplicative (30%)", "value": 1.3, "type": "multiplicative" },
|
||||
{ "id": "dpm-perk-additive", "label": "DPM Additive (15%)", "value": 0.15, "type": "additive" },
|
||||
{ "id": "dpm-perk-multiplicative", "label": "DPM Multiplicative (30%)", "value": 1.3, "type": "multiplicative" },
|
||||
{ "id": "rpm-perk-additive", "label": "RPM Additive (10%)", "value": 0.1, "type": "additive" },
|
||||
{ "id": "rpm-perk-multiplicative", "label": "RPM Multiplicative (20%)", "value": 1.2, "type": "multiplicative" }
|
||||
{
|
||||
"id": "damage-perk-additive",
|
||||
"label": "Operative Damage Additive +15%",
|
||||
"value": 0.15,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "damage-perk-multiplicative",
|
||||
"label": "Operative Damage Multiplicative +30%",
|
||||
"value": 1.3,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "rpm-perk-additive",
|
||||
"label": "Operative RPM Additive +10%",
|
||||
"value": 0.1,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "rpm-perk-multiplicative",
|
||||
"label": "Operative RPM Multiplicative +20%",
|
||||
"value": 1.2,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "reloadTime-perk-additive",
|
||||
"label": "Operative Reload Time Additive -10%",
|
||||
"value": -0.1,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "reloadTime-perk-multiplicative",
|
||||
"label": "Operative Reload Time Multiplicative -20%",
|
||||
"value": 0.8,
|
||||
"type": "multiplicative"
|
||||
}
|
||||
],
|
||||
"abilityPerks": [
|
||||
{ "id": "dps-ability-additive", "label": "DPS Additive (20%)", "value": 0.2, "type": "additive" },
|
||||
{ "id": "dps-ability-multiplicative", "label": "DPS Multiplicative (40%)", "value": 1.4, "type": "multiplicative" },
|
||||
{ "id": "dpm-ability-additive", "label": "DPM Additive (20%)", "value": 0.2, "type": "additive" },
|
||||
{ "id": "dpm-ability-multiplicative", "label": "DPM Multiplicative (40%)", "value": 1.4, "type": "multiplicative" },
|
||||
{ "id": "rpm-ability-additive", "label": "RPM Additive (10%)", "value": 0.1, "type": "additive" },
|
||||
{ "id": "rpm-ability-multiplicative", "label": "RPM Multiplicative (30%)", "value": 1.3, "type": "multiplicative" }
|
||||
{
|
||||
"id": "damage-ability-additive",
|
||||
"label": "Ability Damage Additive +20%",
|
||||
"value": 0.2,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "damage-ability-multiplicative",
|
||||
"label": "Ability Damage Multiplicative +40%",
|
||||
"value": 1.4,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "rpm-ability-additive",
|
||||
"label": "Ability RPM Additive +10%",
|
||||
"value": 0.1,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "rpm-ability-multiplicative",
|
||||
"label": "Ability RPM Multiplicative +30%",
|
||||
"value": 1.3,
|
||||
"type": "multiplicative"
|
||||
},
|
||||
{
|
||||
"id": "reloadTime-ability-additive",
|
||||
"label": "Ability Reload Time Additive -5%",
|
||||
"value": -0.05,
|
||||
"type": "additive"
|
||||
},
|
||||
{
|
||||
"id": "reloadTime-ability-multiplicative",
|
||||
"label": "Ability Reload Time Multiplicative -15%",
|
||||
"value": 0.85,
|
||||
"type": "multiplicative"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user