SpaceNinjaServer/static/webui/RivenParser.js

1178 lines
30 KiB
JavaScript
Raw Normal View History

2024-05-29 12:28:43 +02:00
// Use the collapse feature in your editor :)
const riven_tags = {
"LotusArchgunRandomModRare": [
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.01,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.0111,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.0089,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.0133,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.0133,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFireRateMod",
"value": 0.00667,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.0133,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.01,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.01,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.0067,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.0133,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponAmmoMaxMod",
"value": 0.0111,
"prefix": "ampi",
"suffix": "bin"
},
{
"tag": "WeaponClipMaxMod",
"value": 0.0067,
"prefix": "arma",
"suffix": "tin"
},
{
"tag": "WeaponDamageAmountMod",
"value": 0.0111,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponFireIterationsMod",
"value": 0.0067,
"prefix": "sati",
"suffix": "can"
},
{
"tag": "WeaponPunctureDepthMod",
"value": 0.03,
"prefix": "lexi",
"suffix": "nok"
},
{
"tag": "WeaponRecoilReductionMod",
"value": -0.01,
"prefix": "zeti",
"suffix": "mag"
},
{
"tag": "WeaponReloadSpeedMod",
"value": 0.0111,
"prefix": "feva",
"suffix": "tak"
},
{
"tag": "WeaponFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponZoomFovMod",
"value": 0.006666,
"prefix": "hera",
"suffix": "lis"
}
],
"LotusModularMeleeRandomModRare": [
{
"tag": "WeaponMeleeDamageMod",
"value": 0.0183,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.0133,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.0133,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.0133,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.02,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.01,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.01,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.01,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.01,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.01,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponMeleeFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponMeleeFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponMeleeFactionDamageInfested",
"value": 0.005,
"prefix": "pura",
"suffix": "ada"
},
{
"tag": "WeaponFireRateMod",
"value": 0.0061,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.01,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "ComboDurationMod",
"value": 0.09,
"prefix": "tempi",
"suffix": "nem"
},
{
"tag": "SlideAttackCritChanceMod",
"value": 0.013334,
"prefix": "pleci",
"suffix": "nent"
},
{
"tag": "WeaponMeleeRangeIncMod",
"value": 0.02158,
"prefix": "locti",
"suffix": "tor"
},
{
"tag": "WeaponMeleeFinisherDamageMod",
"value": 0.0133,
"prefix": "exi",
"suffix": "cta"
},
{
"tag": "WeaponMeleeComboEfficiencyMod",
"value": 0.00816,
"prefix": "forti",
"suffix": "us"
},
{
"tag": "WeaponMeleeComboInitialBonusMod",
"value": 0.27224,
"prefix": "para",
"suffix": "um"
},
{
"tag": "WeaponMeleeComboPointsOnHitMod",
"value": -0.01165
},
{
"tag": "WeaponMeleeComboBonusOnHitMod",
"value": 0.00653,
"prefix": "laci",
"suffix": "nus"
}
],
"LotusModularPistolRandomModRare": [
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.01333,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.016666,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.01,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.01,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.01,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFireRateMod",
"value": 0.0083,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.01,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.013333,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.013333,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.01,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.01,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponAmmoMaxMod",
"value": 0.01,
"prefix": "ampi",
"suffix": "bin"
},
{
"tag": "WeaponClipMaxMod",
"value": 0.005555,
"prefix": "arma",
"suffix": "tin"
},
{
"tag": "WeaponDamageAmountMod",
"value": 0.0244,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponFireIterationsMod",
"value": 0.0133,
"prefix": "sati",
"suffix": "can"
},
{
"tag": "WeaponProjectileSpeedMod",
"value": 0.01,
"prefix": "conci",
"suffix": "nak"
},
{
"tag": "WeaponPunctureDepthMod",
"value": 0.03,
"prefix": "lexi",
"suffix": "nok"
},
{
"tag": "WeaponRecoilReductionMod",
"value": -0.01,
"prefix": "zeti",
"suffix": "mag"
},
{
"tag": "WeaponReloadSpeedMod",
"value": 0.005555,
"prefix": "feva",
"suffix": "tak"
},
{
"tag": "WeaponFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponFactionDamageInfested",
"value": 0.005,
"prefix": "pura",
"suffix": "ada"
},
{
"tag": "WeaponZoomFovMod",
"value": 0.0089,
"prefix": "hera",
"suffix": "lis"
}
],
"LotusPistolRandomModRare": [
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.01333,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.016666,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.01,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.01,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.01,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFireRateMod",
"value": 0.0083,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.01,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.013333,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.013333,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.01,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.01,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponAmmoMaxMod",
"value": 0.01,
"prefix": "ampi",
"suffix": "bin"
},
{
"tag": "WeaponClipMaxMod",
"value": 0.005555,
"prefix": "arma",
"suffix": "tin"
},
{
"tag": "WeaponDamageAmountMod",
"value": 0.0244,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponFireIterationsMod",
"value": 0.0133,
"prefix": "sati",
"suffix": "can"
},
{
"tag": "WeaponProjectileSpeedMod",
"value": 0.01,
"prefix": "conci",
"suffix": "nak"
},
{
"tag": "WeaponPunctureDepthMod",
"value": 0.03,
"prefix": "lexi",
"suffix": "nok"
},
{
"tag": "WeaponRecoilReductionMod",
"value": -0.01,
"prefix": "zeti",
"suffix": "mag"
},
{
"tag": "WeaponReloadSpeedMod",
"value": 0.005555,
"prefix": "feva",
"suffix": "tak"
},
{
"tag": "WeaponFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponFactionDamageInfested",
"value": 0.005,
"prefix": "pura",
"suffix": "ada"
},
{
"tag": "WeaponZoomFovMod",
"value": 0.0089,
"prefix": "hera",
"suffix": "lis"
}
],
"LotusRifleRandomModRare": [
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.01333,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.016666,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.013333,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.01,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.01,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFireRateMod",
"value": 0.00667,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.01,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.013333,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.013333,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.01,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.01,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponAmmoMaxMod",
"value": 0.00555,
"prefix": "ampi",
"suffix": "bin"
},
{
"tag": "WeaponClipMaxMod",
"value": 0.005555,
"prefix": "arma",
"suffix": "tin"
},
{
"tag": "WeaponDamageAmountMod",
"value": 0.018333,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponFireIterationsMod",
"value": 0.01,
"prefix": "sati",
"suffix": "can"
},
{
"tag": "WeaponProjectileSpeedMod",
"value": 0.01,
"prefix": "conci",
"suffix": "nak"
},
{
"tag": "WeaponPunctureDepthMod",
"value": 0.03,
"prefix": "lexi",
"suffix": "nok"
},
{
"tag": "WeaponRecoilReductionMod",
"value": -0.01,
"prefix": "zeti",
"suffix": "mag"
},
{
"tag": "WeaponReloadSpeedMod",
"value": 0.005555,
"prefix": "feva",
"suffix": "tak"
},
{
"tag": "WeaponFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponFactionDamageInfested",
"value": 0.005,
"prefix": "pura",
"suffix": "ada"
},
{
"tag": "WeaponZoomFovMod",
"value": 0.006666,
"prefix": "hera",
"suffix": "lis"
}
],
"LotusShotgunRandomModRare": [
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.01333,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.01,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.01,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.01,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.01,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFireRateMod",
"value": 0.01,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.01,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.013333,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.013333,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.01,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.01,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponAmmoMaxMod",
"value": 0.01,
"prefix": "ampi",
"suffix": "bin"
},
{
"tag": "WeaponClipMaxMod",
"value": 0.005555,
"prefix": "arma",
"suffix": "tin"
},
{
"tag": "WeaponDamageAmountMod",
"value": 0.0183,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponFireIterationsMod",
"value": 0.0133,
"prefix": "sati",
"suffix": "can"
},
{
"tag": "WeaponProjectileSpeedMod",
"value": 0.01,
"prefix": "conci",
"suffix": "nak"
},
{
"tag": "WeaponPunctureDepthMod",
"value": 0.03,
"prefix": "lexi",
"suffix": "nok"
},
{
"tag": "WeaponRecoilReductionMod",
"value": -0.01,
"prefix": "zeti",
"suffix": "mag"
},
{
"tag": "WeaponReloadSpeedMod",
"value": 0.005555,
"prefix": "feva",
"suffix": "tak"
},
{
"tag": "WeaponFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponFactionDamageInfested",
"value": 0.005,
"prefix": "pura",
"suffix": "ada"
}
],
"PlayerMeleeWeaponRandomModRare": [
{
"tag": "WeaponMeleeDamageMod",
"value": 0.0183,
"prefix": "visi",
"suffix": "ata"
},
{
"tag": "WeaponArmorPiercingDamageMod",
"value": 0.0133,
"prefix": "insi",
"suffix": "cak"
},
{
"tag": "WeaponImpactDamageMod",
"value": 0.0133,
"prefix": "magna",
"suffix": "ton"
},
{
"tag": "WeaponSlashDamageMod",
"value": 0.0133,
"prefix": "sci",
"suffix": "sus"
},
{
"tag": "WeaponCritChanceMod",
"value": 0.02,
"prefix": "crita",
"suffix": "cron"
},
{
"tag": "WeaponCritDamageMod",
"value": 0.01,
"prefix": "acri",
"suffix": "tis"
},
{
"tag": "WeaponElectricityDamageMod",
"value": 0.01,
"prefix": "vexi",
"suffix": "tio"
},
{
"tag": "WeaponFireDamageMod",
"value": 0.01,
"prefix": "igni",
"suffix": "pha"
},
{
"tag": "WeaponFreezeDamageMod",
"value": 0.01,
"prefix": "geli",
"suffix": "do"
},
{
"tag": "WeaponToxinDamageMod",
"value": 0.01,
"prefix": "toxi",
"suffix": "tox"
},
{
"tag": "WeaponProcTimeMod",
"value": 0.01111,
"prefix": "deci",
"suffix": "des"
},
{
"tag": "WeaponMeleeFactionDamageCorpus",
"value": 0.005,
"prefix": "manti",
"suffix": "tron"
},
{
"tag": "WeaponMeleeFactionDamageGrineer",
"value": 0.005,
"prefix": "argi",
"suffix": "con"
},
{
"tag": "WeaponMeleeFactionDamageInfested",
"value": 0.005,
"prefix": "pura",
"suffix": "ada"
},
{
"tag": "WeaponFireRateMod",
"value": 0.0061,
"prefix": "croni",
"suffix": "dra"
},
{
"tag": "WeaponStunChanceMod",
"value": 0.01,
"prefix": "hexa",
"suffix": "dex"
},
{
"tag": "ComboDurationMod",
"value": 0.09,
"prefix": "tempi",
"suffix": "nem"
},
{
"tag": "SlideAttackCritChanceMod",
"value": 0.013334,
"prefix": "pleci",
"suffix": "nent"
},
{
"tag": "WeaponMeleeRangeIncMod",
"value": 0.02158,
"prefix": "locti",
"suffix": "tor"
},
{
"tag": "WeaponMeleeFinisherDamageMod",
"value": 0.0133,
"prefix": "exi",
"suffix": "cta"
},
{
"tag": "WeaponMeleeComboEfficiencyMod",
"value": 0.00816,
"prefix": "forti",
"suffix": "us"
},
{
"tag": "WeaponMeleeComboInitialBonusMod",
"value": 0.27224,
"prefix": "para",
"suffix": "um"
},
{
"tag": "WeaponMeleeComboPointsOnHitMod",
"value": -0.01165
},
{
"tag": "WeaponMeleeComboBonusOnHitMod",
"value": 0.00653,
"prefix": "laci",
"suffix": "nus"
}
]
};
function rivenIntToFloat(i) {
const f = i / 0x3FFFFFFF; // 1073741823
if (f >= 0.0 && f <= 1.0) {
return f;
}
return 0.0;
}
function floatToRivenInt(f) {
return Math.round(f * 0x3FFFFFFF);
}
function lerp(a, b, t) {
return (a + (b - a) * t);
}
const numBuffsAtten = [0, 1, .66000003, .5, .40000001, .34999999];
const numBuffsCurseAtten = [0, 1, .33000001, .5, 1.25, 1.5];
function valueToDisplayValue(tag, value) {
if (tag == "WeaponMeleeComboInitialBonusMod") {
return Math.round(value * 10) / 10;
}
return Math.round(value * 1000) / 10;
}
function displayValueToValue(tag, displayValue) {
if (tag == "WeaponMeleeComboInitialBonusMod") {
return displayValue;
}
return displayValue / 100;
}
function toTitleCase(word) {
return word.charAt(0).toUpperCase() + word.substr(1);
}
function parseRiven(
rivenType, // the part after /Lotus/Upgrades/Mods/Randomized/
fingerprint,
omegaAttenuation // the weapon's riven disposition
) {
const curseAtten = Math.pow(1.25, fingerprint.curses.length);
let stats = [];
let attenuation = 1;
attenuation *= 1.5; // SPECIFIC_FIT_ATTENUATION
attenuation *= omegaAttenuation;
attenuation *= 10; // getBaseDrain(RIVEN_BASE_DRAIN)
for (const buff of fingerprint.buffs) {
let upgradeValue = riven_tags[rivenType].find(x => x.tag == buff.Tag).value;
upgradeValue *= attenuation;
upgradeValue *= curseAtten;
upgradeValue *= lerp(0.9, 1.1, rivenIntToFloat(buff.Value));
upgradeValue *= numBuffsAtten[Math.min(fingerprint.buffs.length, numBuffsAtten.length - 1)];
upgradeValue *= fingerprint.lvl + 1;
stats.push({
tag: buff.Tag,
value: upgradeValue,
displayValue: valueToDisplayValue(buff.Tag, upgradeValue)
});
}
for (const curse of fingerprint.curses) {
let upgradeValue = riven_tags[rivenType].find(x => x.tag == curse.Tag).value * -1.0;
upgradeValue *= attenuation;
upgradeValue *= lerp(0.9, 1.1, rivenIntToFloat(curse.Value));
upgradeValue *= numBuffsCurseAtten[Math.min(fingerprint.buffs.length, numBuffsCurseAtten.length - 1)];
upgradeValue *= numBuffsAtten[Math.min(fingerprint.curses.length, numBuffsAtten.length - 1)];
upgradeValue *= fingerprint.lvl + 1;
stats.push({
tag: curse.Tag,
value: upgradeValue,
displayValue: valueToDisplayValue(curse.Tag, upgradeValue)
});
}
let name = "";
const sortedBuffs = structuredClone(fingerprint.buffs).sort((a, b) => {
if (a.Value == b.Value) {
return riven_tags[rivenType].find(x => x.tag == b.Tag).value - riven_tags[rivenType].find(x => x.tag == a.Tag).value;
}
return b.Value - a.Value;
});
for (const buff of sortedBuffs) {
if (buff.Tag == sortedBuffs[sortedBuffs.length - 1].Tag) {
name += riven_tags[rivenType].find(x => x.tag == buff.Tag).suffix;
}
else if (buff.Tag == sortedBuffs[0].Tag) {
name += toTitleCase(riven_tags[rivenType].find(x => x.tag == buff.Tag).prefix);
}
else {
name += "-";
name += riven_tags[rivenType].find(x => x.tag == buff.Tag).prefix;
}
}
return { stats, name };
}
function unparseBuff(rivenType, omegaAttenuation, lvl, numBuffs, numCurses, tag, value) {
const curseAtten = Math.pow(1.25, numCurses);
let attenuation = 1;
attenuation *= 1.5; // SPECIFIC_FIT_ATTENUATION
attenuation *= omegaAttenuation;
attenuation *= 10; // getBaseDrain(RIVEN_BASE_DRAIN)
value /= lvl + 1;
value /= numBuffsAtten[Math.min(numBuffs, numBuffsAtten.length - 1)];
value /= curseAtten;
value /= attenuation;
value /= riven_tags[rivenType].find(x => x.tag == tag).value;
value -= 0.9; // 0.9..1.1 -> 0.0..0.2
value /= 0.2; // 0.0..0.2 -> 0.0..1.0
return value;
}
function unparseCurse(rivenType, omegaAttenuation, lvl, numBuffs, numCurses, tag, value) {
let attenuation = 1;
attenuation *= 1.5; // SPECIFIC_FIT_ATTENUATION
attenuation *= omegaAttenuation;
attenuation *= 10; // getBaseDrain(RIVEN_BASE_DRAIN)
value /= lvl + 1;
value /= numBuffsAtten[Math.min(numCurses, numBuffsAtten.length - 1)];
value /= numBuffsCurseAtten[Math.min(numBuffs, numBuffsCurseAtten.length - 1)];
value /= attenuation;
value /= riven_tags[rivenType].find(x => x.tag == tag).value;
value /= -1.0;
value -= 0.9; // 0.9..1.1 -> 0.0..0.2
value /= 0.2; // 0.0..0.2 -> 0.0..1.0
return value;
}
function floatToGrade(value) {
value = lerp(-10, +10, value);
if (value >= +9.5) return "S";
if (value >= +7.5) return "A+";
if (value >= +5.5) return "A";
if (value >= +3.5) return "A-";
if (value >= +1.5) return "B+";
if (value >= -1.5) return "B";
if (value >= -3.5) return "B-";
if (value >= -5.5) return "C+";
if (value >= -7.5) return "C";
if (value >= -9.5) return "C-";
return "F";
}
const RivenParser = {
riven_tags,
rivenIntToFloat,
floatToRivenInt,
valueToDisplayValue,
displayValueToValue,
parseRiven,
unparseBuff,
unparseCurse,
floatToGrade,
};
if (typeof module != "undefined") {
module.exports = RivenParser;
}
if (typeof window != "undefined") {
window.RivenParser = RivenParser;
}