fixed merge conflicts
This commit is contained in:
commit
f4aa0b212b
10 changed files with 3825 additions and 150 deletions
2
build.js
2
build.js
|
@ -213,7 +213,7 @@ class Build{
|
|||
defenseStats.push(totalHpr);
|
||||
//EHPR
|
||||
let ehpr = totalHpr;
|
||||
ehp /= ((1-def_pct)*(1-agi_pct)*(2-defMult));
|
||||
ehpr /= ((1-def_pct)*(1-agi_pct)*(2-defMult));
|
||||
defenseStats.push(ehpr);
|
||||
//skp stats
|
||||
defenseStats.push([def_pct*100, agi_pct*100]);
|
||||
|
|
3545
clean.json
3545
clean.json
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -105,7 +105,7 @@ translate_mappings = {
|
|||
"spellCostRaw4": "spRaw4",
|
||||
|
||||
"rainbowSpellDamageRaw": "rainbowRaw",
|
||||
"sprint": "sprint",
|
||||
#"sprint": "sprint",
|
||||
"sprintRegen": "sprintReg",
|
||||
"jumpHeight": "jh",
|
||||
"lootQuality": "lq",
|
||||
|
|
|
@ -92,84 +92,86 @@ const spell_table = {
|
|||
{ title: "Heal", cost: 6, parts: [
|
||||
{ subtitle: "First Pulse", type: "heal", strength: 0.2 },
|
||||
{ subtitle: "Second and Third Pulses", type: "heal", strength: 0.05 },
|
||||
{ subtitle: "Total Heal", type: "heal", strength: 0.3 }
|
||||
{ subtitle: "Total Heal", type: "heal", strength: 0.3, summary: true }
|
||||
] },
|
||||
{ title: "Teleport", cost: 4, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 100, conversion: [60, 0, 40, 0, 0, 0] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 100, conversion: [60, 0, 40, 0, 0, 0], summary: true },
|
||||
] },
|
||||
{ title: "Meteor", cost: 8, parts: [
|
||||
{ subtitle: "Blast Damage", type: "damage", multiplier: 500, conversion: [40, 30, 0, 0, 30, 0] },
|
||||
{ subtitle: "Blast Damage", type: "damage", multiplier: 500, conversion: [40, 30, 0, 0, 30, 0], summary: true },
|
||||
{ subtitle: "Burn Damage", type: "damage", multiplier: 125, conversion: [100, 0, 0, 0, 0, 0] },
|
||||
] },
|
||||
{ title: "Ice Snake", cost: 4, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 70, conversion: [50, 0, 0, 50, 0, 0] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 70, conversion: [50, 0, 0, 50, 0, 0], summary: true },
|
||||
] },
|
||||
],
|
||||
"spear": [
|
||||
{ title: "Bash", cost: 6, parts: [
|
||||
{ subtitle: "First Damage", type: "damage", multiplier: 130, conversion: [60, 40, 0, 0, 0, 0]},
|
||||
{ subtitle: "Explosion Damage", type: "damage", multiplier: 130, conversion: [100, 0, 0, 0, 0, 0]},
|
||||
{ subtitle: "Total Damage", type: "total", factors: [1, 1], summary: true },
|
||||
] },
|
||||
{ title: "Charge", cost: 4, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 150, conversion: [60, 0, 0, 0, 40, 0] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 150, conversion: [60, 0, 0, 0, 40, 0], summary: true },
|
||||
] },
|
||||
{ title: "Uppercut", cost: 10, parts: [
|
||||
{ subtitle: "First Damage", type: "damage", multiplier: 300, conversion: [70, 20, 10, 0, 0, 0] },
|
||||
{ subtitle: "Fireworks Damage", type: "damage", multiplier: 50, conversion: [60, 0, 40, 0, 0, 0] },
|
||||
{ subtitle: "Crash Damage", type: "damage", multiplier: 50, conversion: [80, 0, 20, 0, 0, 0] },
|
||||
{ subtitle: "Total Damage", type: "total", factors: [1, 1, 1], summary: true },
|
||||
] },
|
||||
{ title: "War Scream", cost: 6, parts: [
|
||||
{ subtitle: "Area Damage", type: "damage", multiplier: 50, conversion: [0, 0, 0, 0, 75, 25] },
|
||||
{ subtitle: "Area Damage", type: "damage", multiplier: 50, conversion: [0, 0, 0, 0, 75, 25], summary: true },
|
||||
{ subtitle: "Air Shout (Per Hit)", type: "damage", multiplier: 30, conversion: [0, 0, 0, 0, 75, 25] },
|
||||
] },
|
||||
],
|
||||
"bow": [
|
||||
{ title: "Arrow Storm", cost: 6, parts: [
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 600, conversion: [60, 0, 25, 0, 15, 0]},
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 600, conversion: [60, 0, 25, 0, 15, 0], summary: true },
|
||||
{ subtitle: "Per Arrow", type: "damage", multiplier: 10, conversion: [60, 0, 25, 0, 15, 0]},
|
||||
] },
|
||||
{ title: "Escape", cost: 3, parts: [
|
||||
{ subtitle: "Landing Damage", type: "damage", multiplier: 100, conversion: [50, 0, 0, 0, 0, 50] },
|
||||
{ subtitle: "Landing Damage", type: "damage", multiplier: 100, conversion: [50, 0, 0, 0, 0, 50], summary: true },
|
||||
] },
|
||||
{ title: "Bomb Arrow", cost: 8, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 250, conversion: [60, 25, 0, 0, 15, 0] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 250, conversion: [60, 25, 0, 0, 15, 0], summary: true },
|
||||
] },
|
||||
{ title: "Arrow Shield", cost: 10, parts: [
|
||||
{ subtitle: "Shield Damage", type: "damage", multiplier: 100, conversion: [70, 0, 0, 0, 0, 30] },
|
||||
{ subtitle: "Shield Damage", type: "damage", multiplier: 100, conversion: [70, 0, 0, 0, 0, 30], summary: true },
|
||||
{ subtitle: "Arrow Rain Damage", type: "damage", multiplier: 200, conversion: [70, 0, 0, 0, 0, 30] },
|
||||
] },
|
||||
],
|
||||
"dagger": [
|
||||
{ title: "Spin Attack", cost: 6, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 150, conversion: [70, 0, 30, 0, 0, 0]},
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 150, conversion: [70, 0, 30, 0, 0, 0], summary: true},
|
||||
] },
|
||||
{ title: "Vanish", cost: 1, parts: [
|
||||
{ subtitle: "No Damage", type: "none" }
|
||||
{ subtitle: "No Damage", type: "none", summary: true }
|
||||
] },
|
||||
{ title: "Multihit", cost: 8, parts: [
|
||||
{ subtitle: "1st to 10th Hit", type: "damage", multiplier: 27, conversion: [100, 0, 0, 0, 0, 0] },
|
||||
{ subtitle: "Fatality", type: "damage", multiplier: 120, conversion: [20, 0, 30, 50, 0, 0] },
|
||||
{ subtitle: "Total Damage", type: "total", factors: [10, 1] },
|
||||
{ subtitle: "Total Damage", type: "total", factors: [10, 1], summary: true },
|
||||
] },
|
||||
{ title: "Smoke Bomb", cost: 8, parts: [
|
||||
{ subtitle: "Tick Damage", type: "damage", multiplier: 60, conversion: [45, 25, 0, 0, 0, 30] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 600, conversion: [45, 25, 0, 0, 0, 30] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 600, conversion: [45, 25, 0, 0, 0, 30], summary: true },
|
||||
] },
|
||||
],
|
||||
"relik": [
|
||||
{ title: "Totem", cost: 4, parts: [
|
||||
{ subtitle: "Smash Damage", type: "damage", multiplier: 100, conversion: [80, 0, 0, 0, 20, 0]},
|
||||
{ subtitle: "Damage Tick", type: "damage", multiplier: 20, conversion: [80, 0, 0, 0, 0, 20]},
|
||||
{ subtitle: "Heal Tick", type: "heal", strength: 0.04 },
|
||||
{ subtitle: "Heal Tick", type: "heal", strength: 0.04, summary: true },
|
||||
] },
|
||||
{ title: "Haul", cost: 1, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 100, conversion: [80, 0, 20, 0, 0, 0] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 100, conversion: [80, 0, 20, 0, 0, 0], summary: true },
|
||||
] },
|
||||
{ title: "Aura", cost: 8, parts: [
|
||||
{ subtitle: "One Wave", type: "damage", multiplier: 200, conversion: [70, 0, 0, 30, 0, 0] },
|
||||
{ subtitle: "One Wave", type: "damage", multiplier: 200, conversion: [70, 0, 0, 30, 0, 0], summary: true },
|
||||
] },
|
||||
{ title: "Uproot", cost: 6, parts: [
|
||||
{ subtitle: "", type: "damage", multiplier: 50, conversion: [70, 30, 0, 0, 0, 0] },
|
||||
{ subtitle: "Total Damage", type: "damage", multiplier: 50, conversion: [70, 30, 0, 0, 0, 0], summary: true },
|
||||
] },
|
||||
]
|
||||
};
|
||||
|
|
73
display.js
73
display.js
|
@ -60,7 +60,7 @@ function idRound(id){
|
|||
}
|
||||
}
|
||||
|
||||
let idPrefixes = {"displayName": "", "lvl":"Combat Level Min: ", "classReq":"Class Req: ","strReq":"Strength Min: ","dexReq":"Dexterity Min: ","intReq":"Intelligence Min: ","defReq":"Defense Min: ","agiReq":"Agility Min: ", "nDam_":"Neutral Damage: ", "eDam_":"Earth Damage: ", "tDam_":"Thunder Damage: ", "wDam_":"Water Damage: ", "fDam_":"Fire Damage: ", "aDam_":"Air Damage: ", "atkSpd":"Attack Speed: ", "hp":"Health : ", "eDef":"Earth Defense: ", "tDef":"Thunder Defense: ", "wDef":"Water Defense: ", "fDef":"Fire Defense: ", "aDef":"Air Defense: ", "str":"Strength: ", "dex":"Dexterity: ", "int":"Intelligence: ", "def":"Defense: ","agi":"Agility: ", "hpBonus":"Health Bonus: ", "hprRaw":"Health Regen Raw: ", "hprPct":"Health Regen %: ", "sdRaw":"Raw Spell Damage: ", "sdPct":"Spell Damage %: ", "mdRaw":"Main Attack Neutral Damage: ", "mdPct":"Main Attack Damage %: ", "mr":"Mana Regen: ", "ms":"Mana Steal: ", "ref":"Reflection: ", "ls":"Life Steal: ", "poison":"Poison: ", "thorns":"Thorns: ", "expd":"Exploding: ", "spd":"Walk Speed Bonus: ", "atkTier":"Attack Speed Bonus: ", "eDamPct":"Earth Damage %: ", "tDamPct":"Thunder Damage %: ", "wDamPct":"Water Damage %: ", "fDamPct":"Fire Damage %: ", "aDamPct":"Air Damage %: ", "eDefPct":"Earth Defense %: ", "tDefPct":"Thunder Defense %: ", "wDefPct":"Water Defense %: ", "fDefPct":"Fire Defense %: ", "aDefPct":"Air Defense %: ", "spPct1":"1st Spell Cost %: ", "spRaw1":"1st Spell Cost Raw: ", "spPct2":"2nd Spell Cost %: ", "spRaw2":"2nd Spell Cost Raw: ", "spPct3":"3rd Spell Cost %: ", "spRaw3":"3rd Spell Cost Raw: ", "spPct4":"4th Spell Cost %: ", "spRaw4":"4th Spell Cost Raw: ", "rainbowRaw":"Rainbow Spell Damage Raw: ", "sprint":"Sprint Bonus: ", "sprintReg":"Sprint Regen Bonus: ", "jh":"Jump Height: ", "xpb":"Combat XP Bonus: ", "lb":"Loot Bonus: ", "lq":"Loot Quality: ", "spRegen":"Soul Point Regen: ", "eSteal":"Stealing: ", "gXp":"Gathering XP Bonus: ", "gSpd":"Gathering Speed Bonus: ", "slots":"Powder Slots: ", "set":"Set: ", "quest":"Quest Req: ", "restrict":""};
|
||||
let idPrefixes = {"displayName": "", "lvl":"Combat Level Min: ", "classReq":"Class Req: ","strReq":"Strength Min: ","dexReq":"Dexterity Min: ","intReq":"Intelligence Min: ","defReq":"Defense Min: ","agiReq":"Agility Min: ", "nDam_":"Neutral Damage: ", "eDam_":"Earth Damage: ", "tDam_":"Thunder Damage: ", "wDam_":"Water Damage: ", "fDam_":"Fire Damage: ", "aDam_":"Air Damage: ", "atkSpd":"Attack Speed: ", "hp":"Health : ", "eDef":"Earth Defense: ", "tDef":"Thunder Defense: ", "wDef":"Water Defense: ", "fDef":"Fire Defense: ", "aDef":"Air Defense: ", "str":"Strength: ", "dex":"Dexterity: ", "int":"Intelligence: ", "def":"Defense: ","agi":"Agility: ", "hpBonus":"Health Bonus: ", "hprRaw":"Health Regen Raw: ", "hprPct":"Health Regen %: ", "sdRaw":"Raw Spell Damage: ", "sdPct":"Spell Damage %: ", "mdRaw":"Raw Melee Damage: ", "mdPct":"Melee Damage %: ", "mr":"Mana Regen: ", "ms":"Mana Steal: ", "ref":"Reflection: ", "ls":"Life Steal: ", "poison":"Poison: ", "thorns":"Thorns: ", "expd":"Exploding: ", "spd":"Walk Speed Bonus: ", "atkTier":"Attack Speed Bonus: ", "eDamPct":"Earth Damage %: ", "tDamPct":"Thunder Damage %: ", "wDamPct":"Water Damage %: ", "fDamPct":"Fire Damage %: ", "aDamPct":"Air Damage %: ", "eDefPct":"Earth Defense %: ", "tDefPct":"Thunder Defense %: ", "wDefPct":"Water Defense %: ", "fDefPct":"Fire Defense %: ", "aDefPct":"Air Defense %: ", "spPct1":"1st Spell Cost %: ", "spRaw1":"1st Spell Cost Raw: ", "spPct2":"2nd Spell Cost %: ", "spRaw2":"2nd Spell Cost Raw: ", "spPct3":"3rd Spell Cost %: ", "spRaw3":"3rd Spell Cost Raw: ", "spPct4":"4th Spell Cost %: ", "spRaw4":"4th Spell Cost Raw: ", "rainbowRaw":"Rainbow Spell Damage Raw: ", "sprint":"Sprint Bonus: ", "sprintReg":"Sprint Regen Bonus: ", "jh":"Jump Height: ", "xpb":"Combat XP Bonus: ", "lb":"Loot Bonus: ", "lq":"Loot Quality: ", "spRegen":"Soul Point Regen: ", "eSteal":"Stealing: ", "gXp":"Gathering XP Bonus: ", "gSpd":"Gathering Speed Bonus: ", "slots":"Powder Slots: ", "set":"Set: ", "quest":"Quest Req: ", "restrict":""};
|
||||
let idSuffixes = {"displayName": "", "lvl":"", "classReq":"","strReq":"","dexReq":"","intReq":"","defReq":"","agiReq":"", "nDam_":"", "eDam_":"", "tDam_":"", "wDam_":"", "fDam_":"", "aDam_":"", "atkSpd":"", "hp":"", "eDef":"", "tDef":"", "wDef":"", "fDef":"", "aDef":"", "str":"", "dex":"", "int":"", "def":"","agi":"", "hpBonus":"", "hprRaw":"", "hprPct":"%", "sdRaw":"", "sdPct":"%", "mdRaw":"", "mdPct":"%", "mr":"/4s", "ms":"/4s", "ref":"%", "ls":"/4s", "poison":"/3s", "thorns":"%", "expd":"%", "spd":"%", "atkTier":" tier", "eDamPct":"%", "tDamPct":"%", "wDamPct":"%", "fDamPct":"%", "aDamPct":"%", "eDefPct":"%", "tDefPct":"%", "wDefPct":"%", "fDefPct":"%", "aDefPct":"%", "spPct1":"%", "spRaw1":"", "spPct2":"%", "spRaw2":"", "spPct3":"%", "spRaw3":"", "spPct4":"%", "spRaw4":"", "rainbowRaw":"", "sprint":"%", "sprintReg":"%", "jh":"", "xpb":"%", "lb":"%", "lq":"%", "spRegen":"%", "eSteal":"%", "gXp":"%", "gSpd":"%", "slots":"", "set":" set.", "quest":"", "restrict":""};
|
||||
|
||||
function apply_elemental_format(p_elem, id, suffix) {
|
||||
|
@ -499,10 +499,12 @@ function displayEquipOrder(parent_elem,buildOrder){
|
|||
parent_elem.append(p_elem);
|
||||
}
|
||||
}
|
||||
function displayMeleeDamage(parent_elem, meleeStats){
|
||||
|
||||
function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats){
|
||||
let attackSpeeds = ["Super Slow", "Very Slow", "Slow", "Normal", "Fast", "Very Fast", "Super Fast"];
|
||||
//let damagePrefixes = ["Neutral Damage: ","Earth Damage: ","Thunder Damage: ","Water Damage: ","Fire Damage: ","Air Damage: "];
|
||||
parent_elem.textContent = "";
|
||||
overallparent_elem.textContent = "";
|
||||
const stats = meleeStats.slice();
|
||||
|
||||
for (let i = 0; i < 6; ++i) {
|
||||
|
@ -527,6 +529,13 @@ function displayMeleeDamage(parent_elem, meleeStats){
|
|||
title_elem.textContent = "Melee Stats";
|
||||
parent_elem.append(title_elem);
|
||||
parent_elem.append(document.createElement("br"));
|
||||
|
||||
//overall title
|
||||
let title_elemavg = document.createElement("p");
|
||||
title_elemavg.classList.add("title");
|
||||
title_elemavg.classList.add("Normal");
|
||||
title_elemavg.textContent = "Melee Stats";
|
||||
overallparent_elem.append(title_elemavg);
|
||||
|
||||
//average DPS
|
||||
let averageDamage = document.createElement("p");
|
||||
|
@ -535,6 +544,13 @@ function displayMeleeDamage(parent_elem, meleeStats){
|
|||
averageDamage.textContent = "Average DPS: " + stats[10];
|
||||
parent_elem.append(averageDamage);
|
||||
|
||||
//overall average DPS
|
||||
let overallaverageDamage = document.createElement("p");
|
||||
overallaverageDamage.classList.add("itemp");
|
||||
overallaverageDamage.textContent = "Average DPS: " + stats[10];
|
||||
overallparent_elem.append(overallaverageDamage);
|
||||
overallparent_elem.append(document.createElement("br"));
|
||||
|
||||
//attack speed
|
||||
let atkSpd = document.createElement("p");
|
||||
atkSpd.classList.add("left");
|
||||
|
@ -543,6 +559,14 @@ function displayMeleeDamage(parent_elem, meleeStats){
|
|||
parent_elem.append(atkSpd);
|
||||
parent_elem.append(document.createElement("br"));
|
||||
|
||||
//overall attack speed
|
||||
let overallatkSpd = document.createElement("p");
|
||||
overallatkSpd.classList.add("center");
|
||||
overallatkSpd.classList.add("itemp");
|
||||
overallatkSpd.textContent = "Attack Speed: " + attackSpeeds[stats[11]];
|
||||
overallparent_elem.append(overallatkSpd);
|
||||
overallparent_elem.append(document.createElement("br"));
|
||||
|
||||
//Non-Crit: n->elem, total dmg, DPS
|
||||
let nonCritStats = document.createElement("p");
|
||||
nonCritStats.classList.add("left");
|
||||
|
@ -658,9 +682,9 @@ function displayDefenseStats(parent_elem,defenseStats){
|
|||
hpr.classList.add("left");
|
||||
hpr.textContent = "HP Regen:";
|
||||
boost = document.createElement("td");
|
||||
boost.textContent =stats[2];
|
||||
boost.textContent = stats[2];
|
||||
boost.classList.add("right");
|
||||
|
||||
|
||||
hprRow.appendChild(hpr);
|
||||
hprRow.appendChild(boost);
|
||||
statsTable.appendChild(hprRow);
|
||||
|
@ -706,7 +730,6 @@ function displayDefenseStats(parent_elem,defenseStats){
|
|||
row.appendChild(boost);
|
||||
statsTable.appendChild(row);
|
||||
}
|
||||
|
||||
//skp
|
||||
let defRow = document.createElement("tr");
|
||||
let defElem = document.createElement("td");
|
||||
|
@ -732,21 +755,31 @@ function displayDefenseStats(parent_elem,defenseStats){
|
|||
|
||||
parent_elem.append(statsTable);
|
||||
}
|
||||
function displaySpellDamage(parent_elem, build, spell, spellIdx) {
|
||||
function displaySpellDamage(parent_elem, overallparent_elem, build, spell, spellIdx) {
|
||||
parent_elem.textContent = "";
|
||||
|
||||
const stats = build.statMap;
|
||||
let title_elem = document.createElement("p");
|
||||
title_elem.classList.add("title");
|
||||
title_elem.classList.add("Normal");
|
||||
|
||||
overallparent_elem.textContent = "";
|
||||
let title_elemavg = document.createElement("p");
|
||||
title_elemavg.classList.add('title');
|
||||
title_elemavg.classList.add('Normal');
|
||||
|
||||
if (spellIdx != 0) {
|
||||
title_elem.textContent = spell.title + " (" + build.getSpellCost(spellIdx, spell.cost) + ")";
|
||||
title_elemavg.textContent = spell.title + " (" + build.getSpellCost(spellIdx, spell.cost) + ")";
|
||||
}
|
||||
else {
|
||||
title_elem.textContent = spell.title;
|
||||
title_elemavg.textContent = spell.title;
|
||||
}
|
||||
|
||||
parent_elem.append(title_elem);
|
||||
overallparent_elem.append(title_elemavg);
|
||||
|
||||
let critChance = skillPointsToPercentage(build.total_skillpoints[1]);
|
||||
|
||||
let save_damages = [];
|
||||
|
@ -756,9 +789,18 @@ function displaySpellDamage(parent_elem, build, spell, spellIdx) {
|
|||
let part_div = document.createElement("p");
|
||||
parent_elem.append(part_div);
|
||||
|
||||
let part_divavg = document.createElement("p");
|
||||
overallparent_elem.append(part_divavg);
|
||||
|
||||
let subtitle_elem = document.createElement("p");
|
||||
subtitle_elem.textContent = part.subtitle;
|
||||
part_div.append(subtitle_elem);
|
||||
|
||||
if (part.summary == true) {
|
||||
let subtitle_elemavg = document.createElement("p");
|
||||
subtitle_elemavg.textContent = part.subtitle;
|
||||
part_divavg.append(subtitle_elemavg);
|
||||
}
|
||||
if (part.type === "damage") {
|
||||
|
||||
let _results = calculateSpellDamage(stats, part.conversion,
|
||||
|
@ -781,11 +823,17 @@ function displaySpellDamage(parent_elem, build, spell, spellIdx) {
|
|||
averageLabel.classList.add("damageSubtitle");
|
||||
part_div.append(averageLabel);
|
||||
|
||||
if (part.summary == true) {
|
||||
let overallaverageLabel = document.createElement("p");
|
||||
overallaverageLabel.textContent = "Average: "+averageDamage.toFixed(2);
|
||||
overallaverageLabel.classList.add("damageSubtitle");
|
||||
part_divavg.append(overallaverageLabel);
|
||||
}
|
||||
|
||||
let nonCritLabel = document.createElement("p");
|
||||
nonCritLabel.textContent = "Non-Crit Average: "+nonCritAverage.toFixed(2);
|
||||
nonCritLabel.classList.add("damageSubtitle");
|
||||
part_div.append(nonCritLabel);
|
||||
|
||||
|
||||
for (let i = 0; i < 6; i++){
|
||||
if (results[i][1] > 0){
|
||||
|
@ -819,6 +867,12 @@ function displaySpellDamage(parent_elem, build, spell, spellIdx) {
|
|||
healLabel.textContent = heal_amount;
|
||||
healLabel.classList.add("damagep");
|
||||
part_div.append(healLabel);
|
||||
if (part.summary == true) {
|
||||
let overallhealLabel = document.createElement("p");
|
||||
overallhealLabel.textContent = heal_amount;
|
||||
overallhealLabel.classList.add("damagep")
|
||||
part_divavg.append(overallhealLabel);
|
||||
}
|
||||
}
|
||||
else if (part.type === "total") {
|
||||
let total_damage = 0;
|
||||
|
@ -829,6 +883,11 @@ function displaySpellDamage(parent_elem, build, spell, spellIdx) {
|
|||
averageLabel.textContent = "Average: "+total_damage.toFixed(2);
|
||||
averageLabel.classList.add("damageSubtitle");
|
||||
part_div.append(averageLabel);
|
||||
|
||||
let overallaverageLabel = document.createElement("p");
|
||||
overallaverageLabel.textContent = "Average: "+total_damage.toFixed(2);
|
||||
overallaverageLabel.classList.add("damageSubtitle");
|
||||
part_divavg.append(overallaverageLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
291
index.html
291
index.html
|
@ -22,127 +22,184 @@
|
|||
<a href="credits.txt" class="link">Additional credits</a>
|
||||
</div>
|
||||
<div class="equipment">
|
||||
<div class="right" style="grid-column:1;grid-row:1">
|
||||
<label>Equipments</label>
|
||||
<br>
|
||||
<br>
|
||||
<div>
|
||||
<label for="helmet-choice">Helmet:</label>
|
||||
<input list="helmet-items" id="helmet-choice" name="helmet-choice" placeholder="No Helmet"/>
|
||||
<datalist id="helmet-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="chestplate-choice">Chestplate:</label>
|
||||
<input list="chestplate-items" id="chestplate-choice" name="chestplate-choice" placeholder="No Chestplate" />
|
||||
<datalist id="chestplate-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="leggings-choice">Leggings:</label>
|
||||
<input list="leggings-items" id="leggings-choice" name="leggings-choice" placeholder="No Leggings" />
|
||||
<datalist id="leggings-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div id="boots">
|
||||
<label for="boots-choice">Boots:</label>
|
||||
<input list="boots-items" id="boots-choice" name="boots-choice" placeholder="No Boots" />
|
||||
<datalist id="boots-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="ring1-choice">Ring 1:</label>
|
||||
<input list="ring1-items" id="ring1-choice" name="ring1-choice" placeholder="No Ring 1"/>
|
||||
<datalist id="ring1-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="ring2-choice">Ring 2:</label>
|
||||
<input list="ring2-items" id="ring2-choice" name="ring2-choice" placeholder="No Ring 2" />
|
||||
<datalist id="ring2-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="bracelet-choice">Bracelet:</label>
|
||||
<input list="bracelet-items" id="bracelet-choice" name="bracelet-choice" placeholder="No Bracelet" />
|
||||
<datalist id="bracelet-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="necklace-choice">Necklace:</label>
|
||||
<input list="necklace-items" id="necklace-choice" name="necklace-choice" placeholder="No Necklace"/>
|
||||
<datalist id="necklace-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="weapon-choice">Weapon:</label>
|
||||
<input list="weapon-items" id="weapon-choice" name="weapon-choice" placeholder="No Weapon" value=""/>
|
||||
<datalist id="weapon-items">
|
||||
</datalist>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<label for="level-choice">Level:</label>
|
||||
<input id="level-choice" name="level-choice" placeholder="106" value=""/>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<button class = "button" id = "calc-button" onclick = "calculateBuild()">
|
||||
Update Items (Resets stats)
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="left" style="grid-column:2;grid-row:1">
|
||||
<label>Powdering:</label>
|
||||
<div id="helmet-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="helmet-powder" name="helmet-powder"/>
|
||||
</div>
|
||||
<div id="chestplate-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="chestplate-powder" name="chestplate-powder" />
|
||||
</div>
|
||||
<div id="leggings-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="leggings-powder" name="leggings-powder" />
|
||||
</div>
|
||||
<div id="boots-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div style="grid-column:1;grid-row:4">
|
||||
<input type="text" id="boots-powder" name="boots-powder"/>
|
||||
</div>
|
||||
<br/><br/><br/><br/><br/><br/><br/><br/>
|
||||
<div id="weapon-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="weapon-powder" name="weapon-powder" />
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<button class = "reset" id = "reset-button" onclick = "resetFields()">
|
||||
Reset
|
||||
</button>
|
||||
</div>
|
||||
<div class="left" style="grid-column:1/span 2;grid-row:1">
|
||||
<table>
|
||||
<tr>
|
||||
<th class="center title">
|
||||
<label>Equipments</label>
|
||||
</th>
|
||||
<th class="center title">
|
||||
<label>Powdering</label>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="helmet-choice">Helmet:</label>
|
||||
<input list="helmet-items" id="helmet-choice" name="helmet-choice" placeholder="No Helmet"/>
|
||||
<datalist id="helmet-items">
|
||||
</datalist>
|
||||
</td>
|
||||
<td>
|
||||
<div id="helmet-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="helmet-powder" name="helmet-powder"/>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="chestplate-choice">Chestplate:</label>
|
||||
<input list="chestplate-items" id="chestplate-choice" name="chestplate-choice" placeholder="No Chestplate" />
|
||||
<datalist id="chestplate-items">
|
||||
</datalist>
|
||||
</td>
|
||||
<td>
|
||||
<div id="chestplate-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="chestplate-powder" name="chestplate-powder" />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="leggings-choice">Leggings:</label>
|
||||
<input list="leggings-items" id="leggings-choice" name="leggings-choice" placeholder="No Leggings" />
|
||||
<datalist id="leggings-items">
|
||||
</datalist>
|
||||
</td>
|
||||
<td>
|
||||
<div id="leggings-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="leggings-powder" name="leggings-powder" />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="boots-choice">Boots:</label>
|
||||
<input list="boots-items" id="boots-choice" name="boots-choice" placeholder="No Boots" />
|
||||
<datalist id="boots-items">
|
||||
</datalist>
|
||||
</td>
|
||||
<td>
|
||||
<div id="boots-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div style="grid-column:1;grid-row:4">
|
||||
<input type="text" id="boots-powder" name="boots-powder"/>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="ring1-choice">Ring 1:</label>
|
||||
<input list="ring1-items" id="ring1-choice" name="ring1-choice" placeholder="No Ring 1"/>
|
||||
<datalist id="ring1-items">
|
||||
</datalist>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="ring2-choice">Ring 2:</label>
|
||||
<input list="ring2-items" id="ring2-choice" name="ring2-choice" placeholder="No Ring 2" />
|
||||
<datalist id="ring2-items">
|
||||
</datalist>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="bracelet-choice">Bracelet:</label>
|
||||
<input list="bracelet-items" id="bracelet-choice" name="bracelet-choice" placeholder="No Bracelet" />
|
||||
<datalist id="bracelet-items">
|
||||
</datalist>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="necklace-choice">Necklace:</label>
|
||||
<input list="necklace-items" id="necklace-choice" name="necklace-choice" placeholder="No Necklace"/>
|
||||
<datalist id="necklace-items">
|
||||
</datalist>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="weapon-choice">Weapon:</label>
|
||||
<input list="weapon-items" id="weapon-choice" name="weapon-choice" placeholder="No Weapon" value=""/>
|
||||
<datalist id="weapon-items">
|
||||
</datalist>
|
||||
</td>
|
||||
<td>
|
||||
<div id="weapon-slots">
|
||||
X slots
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="weapon-powder" name="weapon-powder" />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right">
|
||||
<br/>
|
||||
<label for="level-choice">Level:</label>
|
||||
<input id="level-choice" name="level-choice" placeholder="106" value=""/>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<br/>
|
||||
<button class = "button" id = "calc-button" onclick = "calculateBuild()">
|
||||
Update Items (Resets stats)
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<br/>
|
||||
<button class = "reset" id = "reset-button" onclick = "resetFields()">
|
||||
Reset
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="center" style="grid-column:3;grid-row:1">
|
||||
<div class = "center build-overall" id = "build-overall">
|
||||
<br/>
|
||||
<div class = "center" id = "build-overall-stats"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="center" style="grid-column:4;">
|
||||
<div class="spell-info" style="grid-row:1;">
|
||||
<div class="center" id="build-melee-statsAvg">melee</div>
|
||||
</div>
|
||||
<div class="spell-info" style="grid-row:1;">
|
||||
<div class="center" id="spell0-infoAvg">spell1</div>
|
||||
</div>
|
||||
<div class="spell-info" style="grid-row:2">
|
||||
<div class="center" id="spell1-infoAvg">spell2</div>
|
||||
</div>
|
||||
<div class="spell-info" style="grid-row:3">
|
||||
<div class="center" id="spell2-infoAvg">spell3</div>
|
||||
</div>
|
||||
<div class="spell-info" style="grid-row:4">
|
||||
<div class="center" id="spell3-infoAvg">spell4</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
7
load.js
7
load.js
|
@ -1,4 +1,4 @@
|
|||
const DB_VERSION = 11;
|
||||
const DB_VERSION = 12;
|
||||
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.js
|
||||
|
||||
let db;
|
||||
|
@ -60,7 +60,10 @@ function clean_item(item) {
|
|||
* Load item set from remote DB (aka a big json file). Calls init() on success.
|
||||
*/
|
||||
async function load(init_func) {
|
||||
let url = "https://hppeng-wynn.github.io/compress.json";
|
||||
|
||||
let getUrl = window.location;
|
||||
let baseUrl = getUrl.protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
|
||||
let url = baseUrl + "/compress.json";
|
||||
let result = await (await fetch(url)).json();
|
||||
items = result.items;
|
||||
sets = result.sets;
|
||||
|
|
|
@ -8,6 +8,10 @@
|
|||
font-weight: 700;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.equipment {
|
||||
padding: 4%;
|
||||
display: grid;
|
||||
|
@ -71,6 +75,10 @@ a.link{
|
|||
width: 96%;
|
||||
}
|
||||
|
||||
.spell-info {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.itemcenter {
|
||||
text-align: center;
|
||||
margin-bottom: 16px;
|
||||
|
|
7
test.js
7
test.js
|
@ -11,7 +11,7 @@ console.log(url_tag);
|
|||
* END testing section
|
||||
*/
|
||||
|
||||
const BUILD_VERSION = "4.6";
|
||||
const BUILD_VERSION = "5.0";
|
||||
|
||||
document.getElementById("header").textContent = "Wynn build calculator "+BUILD_VERSION+" (db version "+DB_VERSION+")";
|
||||
|
||||
|
@ -480,7 +480,7 @@ function calculateBuildStats() {
|
|||
displaySetBonuses(player_build, "set-info");
|
||||
|
||||
let meleeStats = player_build.getMeleeStats();
|
||||
displayMeleeDamage(document.getElementById("build-melee-stats") ,meleeStats);
|
||||
displayMeleeDamage(document.getElementById("build-melee-stats"), document.getElementById("build-melee-statsAvg"), meleeStats);
|
||||
|
||||
let defenseStats = player_build.getDefenseStats();
|
||||
displayDefenseStats(document.getElementById("build-defense-stats"),defenseStats);
|
||||
|
@ -493,7 +493,8 @@ function calculateBuildStats() {
|
|||
let spells = spell_table[player_build.weapon.get("type")];
|
||||
for (let i = 0; i < 4; ++i) {
|
||||
let parent_elem = document.getElementById("spell"+i+"-info");
|
||||
displaySpellDamage(parent_elem, player_build, spells[i], i+1);
|
||||
let overallparent_elem = document.getElementById("spell"+i+"-infoAvg");
|
||||
displaySpellDamage(parent_elem, overallparent_elem, player_build, spells[i], i+1);
|
||||
}
|
||||
|
||||
location.hash = encodeBuild();
|
||||
|
|
Loading…
Add table
Reference in a new issue