fixed some stuff
This commit is contained in:
parent
29b2f7b435
commit
3d2e620af8
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"no-chestpiece": {
|
"no-chestpiece": {
|
||||||
"id": "no-chestpieces",
|
"id": "no-chestpieces",
|
||||||
"name": "None",
|
"name": "No chestpiece",
|
||||||
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
"resistances": [0, 0, 0, 0],
|
"resistances": [0, 0, 0, 0],
|
||||||
"poise": 0,
|
"poise": 0,
|
||||||
@ -439,6 +439,14 @@
|
|||||||
"poise": 16,
|
"poise": 16,
|
||||||
"weight": 10.6
|
"weight": 10.6
|
||||||
},
|
},
|
||||||
|
"deathbed-dress": {
|
||||||
|
"id": "deathbed-dress",
|
||||||
|
"name": "Deathbed Dress",
|
||||||
|
"defenses": [0.6, 2.7, 0.6, 0.6, 11.9, 11.4, 11.9, 12.4],
|
||||||
|
"resistances": [38, 11, 63, 107],
|
||||||
|
"poise": 1,
|
||||||
|
"weight": 3.2
|
||||||
|
},
|
||||||
"depraved-perfumer-robe": {
|
"depraved-perfumer-robe": {
|
||||||
"id": "depraved-perfumer-robe",
|
"id": "depraved-perfumer-robe",
|
||||||
"name": "Depraved Perfumer Robe",
|
"name": "Depraved Perfumer Robe",
|
||||||
|
@ -1,21 +1,9 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"id": "vagabond",
|
"id": "wretch",
|
||||||
"name": "Vagabond",
|
"name": "Wretch",
|
||||||
"level": 9,
|
"level": 1,
|
||||||
"stats": [15, 10, 11, 14, 13, 9, 9, 7]
|
"stats": [10, 10, 10, 10, 10, 10, 10, 10]
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "warrior",
|
|
||||||
"name": "Warrior",
|
|
||||||
"level": 8,
|
|
||||||
"stats": [11, 12, 11, 10, 16, 10, 8, 9]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "hero",
|
|
||||||
"name": "Hero",
|
|
||||||
"level": 7,
|
|
||||||
"stats": [14, 9, 12, 16, 9, 7, 8, 11]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "bandit",
|
"id": "bandit",
|
||||||
@ -29,12 +17,30 @@
|
|||||||
"level": 6,
|
"level": 6,
|
||||||
"stats": [9, 15, 9, 8, 12, 16, 7, 9]
|
"stats": [9, 15, 9, 8, 12, 16, 7, 9]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "hero",
|
||||||
|
"name": "Hero",
|
||||||
|
"level": 7,
|
||||||
|
"stats": [14, 9, 12, 16, 9, 7, 8, 11]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "prophet",
|
"id": "prophet",
|
||||||
"name": "Prophet",
|
"name": "Prophet",
|
||||||
"level": 7,
|
"level": 7,
|
||||||
"stats": [10, 14, 8, 11, 10, 7, 16, 10]
|
"stats": [10, 14, 8, 11, 10, 7, 16, 10]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "warrior",
|
||||||
|
"name": "Warrior",
|
||||||
|
"level": 8,
|
||||||
|
"stats": [11, 12, 11, 10, 16, 10, 8, 9]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vagabond",
|
||||||
|
"name": "Vagabond",
|
||||||
|
"level": 9,
|
||||||
|
"stats": [15, 10, 11, 14, 13, 9, 9, 7]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "samurai",
|
"id": "samurai",
|
||||||
"name": "Samurai",
|
"name": "Samurai",
|
||||||
@ -52,11 +58,5 @@
|
|||||||
"name": "Confessor",
|
"name": "Confessor",
|
||||||
"level": 10,
|
"level": 10,
|
||||||
"stats": [10, 13, 10, 12, 12, 9, 14, 9]
|
"stats": [10, 13, 10, 12, 12, 9, 14, 9]
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "wretch",
|
|
||||||
"name": "Wretch",
|
|
||||||
"level": 1,
|
|
||||||
"stats": [10, 10, 10, 10, 10, 10, 10, 10]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"no-gauntlets": {
|
"no-gauntlets": {
|
||||||
"id": "no-gauntlets",
|
"id": "no-gauntlets",
|
||||||
"name": "None",
|
"name": "No gauntlets",
|
||||||
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
"resistances": [0, 0, 0, 0],
|
"resistances": [0, 0, 0, 0],
|
||||||
"poise": 0,
|
"poise": 0,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"no-helmet": {
|
"no-helmet": {
|
||||||
"id": "no-helmet",
|
"id": "no-helmet",
|
||||||
"name": "None",
|
"name": "No helmet",
|
||||||
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
"resistances": [0, 0, 0, 0],
|
"resistances": [0, 0, 0, 0],
|
||||||
"poise": 0,
|
"poise": 0,
|
||||||
@ -344,22 +344,6 @@
|
|||||||
"poise": 6,
|
"poise": 6,
|
||||||
"weight": 5.1
|
"weight": 5.1
|
||||||
},
|
},
|
||||||
"deathbed-dress": {
|
|
||||||
"id": "deathbed-dress",
|
|
||||||
"name": "Deathbed Dress",
|
|
||||||
"defenses": [0.6, 2.7, 0.6, 0.6, 11.9, 11.4, 11.9, 12.4],
|
|
||||||
"resistances": [38, 11, 63, 107],
|
|
||||||
"poise": 1,
|
|
||||||
"weight": 3.2
|
|
||||||
},
|
|
||||||
"deathbed-smalls": {
|
|
||||||
"id": "deathbed-smalls",
|
|
||||||
"name": "Deathbed Smalls",
|
|
||||||
"defenses": [1.5, 2.3, 1.5, 1.5, 6.8, 6.5, 6.8, 7.2],
|
|
||||||
"resistances": [24, 7, 39, 66],
|
|
||||||
"poise": 1,
|
|
||||||
"weight": 2.0
|
|
||||||
},
|
|
||||||
"depraved-perfumer-headscarf": {
|
"depraved-perfumer-headscarf": {
|
||||||
"id": "depraved-perfumer-headscarf",
|
"id": "depraved-perfumer-headscarf",
|
||||||
"name": "Depraved Perfumer Headscarf",
|
"name": "Depraved Perfumer Headscarf",
|
||||||
@ -1167,14 +1151,6 @@
|
|||||||
"poise": 6,
|
"poise": 6,
|
||||||
"weight": 5.1
|
"weight": 5.1
|
||||||
},
|
},
|
||||||
"rotten-duelist-greaves": {
|
|
||||||
"id": "rotten-duelist-greaves",
|
|
||||||
"name": "Rotten Duelist Greaves",
|
|
||||||
"defenses": [7.4, 6.2, 7.7, 7.1, 6.2, 6.5, 5.8, 6.2],
|
|
||||||
"resistances": [35, 35, 15, 15],
|
|
||||||
"poise": 10,
|
|
||||||
"weight": 7.3
|
|
||||||
},
|
|
||||||
"rotten-duelist-helm": {
|
"rotten-duelist-helm": {
|
||||||
"id": "rotten-duelist-helm",
|
"id": "rotten-duelist-helm",
|
||||||
"name": "Rotten Duelist Helm",
|
"name": "Rotten Duelist Helm",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"no-leggings": {
|
"no-leggings": {
|
||||||
"id": "no-leggings",
|
"id": "no-leggings",
|
||||||
"name": "None",
|
"name": "No leggings",
|
||||||
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
"defenses": [0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
"resistances": [0, 0, 0, 0],
|
"resistances": [0, 0, 0, 0],
|
||||||
"poise": 0,
|
"poise": 0,
|
||||||
@ -662,6 +662,14 @@
|
|||||||
"poise": 5,
|
"poise": 5,
|
||||||
"weight": 5.7
|
"weight": 5.7
|
||||||
},
|
},
|
||||||
|
"rotten-duelist-greaves": {
|
||||||
|
"id": "rotten-duelist-greaves",
|
||||||
|
"name": "Rotten Duelist Greaves",
|
||||||
|
"defenses": [7.4, 6.2, 7.7, 7.1, 6.2, 6.5, 5.8, 6.2],
|
||||||
|
"resistances": [35, 35, 15, 15],
|
||||||
|
"poise": 10,
|
||||||
|
"weight": 7.3
|
||||||
|
},
|
||||||
"royal-knight-greaves": {
|
"royal-knight-greaves": {
|
||||||
"id": "royal-knight-greaves",
|
"id": "royal-knight-greaves",
|
||||||
"name": "Royal Knight Greaves",
|
"name": "Royal Knight Greaves",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"no-talisman": { "id": "no-talismans", "name": "None" },
|
"no-talisman": { "id": "no-talismans", "name": "No talisman" },
|
||||||
"crimson-amber-medallion": {
|
"crimson-amber-medallion": {
|
||||||
"id": "crimson-amber-medallion",
|
"id": "crimson-amber-medallion",
|
||||||
"name": "Crimson Amber Medallion",
|
"name": "Crimson Amber Medallion",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"no-weapon": {
|
"no-weapon": {
|
||||||
"id": "no-weapons",
|
"id": "no-weapons",
|
||||||
"name": "None",
|
"name": "No weapon",
|
||||||
"requirements": [0, 0, 0, 0, 0],
|
"requirements": [0, 0, 0, 0, 0],
|
||||||
"infusions": {
|
"infusions": {
|
||||||
"standard": {
|
"standard": {
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
const HELMETS = fetch("/data/helmets.json")
|
const HELMETS = fetch("/data/helmets.json")
|
||||||
.then(response => response.json())
|
.then((response) => response.json())
|
||||||
.catch(error => console.log(error));
|
.catch((error) => console.log(error));
|
||||||
const CHESTPIECES = fetch("/data/chestpieces.json")
|
const CHESTPIECES = fetch("/data/chestpieces.json")
|
||||||
.then(response => response.json())
|
.then((response) => response.json())
|
||||||
.catch(error => console.log(error));
|
.catch((error) => console.log(error));
|
||||||
const GAUNTLETS = fetch("/data/gauntlets.json")
|
const GAUNTLETS = fetch("/data/gauntlets.json")
|
||||||
.then(response => response.json())
|
.then((response) => response.json())
|
||||||
.catch(error => console.log(error));
|
.catch((error) => console.log(error));
|
||||||
const LEGGINGS = fetch("/data/leggings.json")
|
const LEGGINGS = fetch("/data/leggings.json")
|
||||||
.then(response => response.json())
|
.then((response) => response.json())
|
||||||
.catch(error => console.log(error));
|
.catch((error) => console.log(error));
|
||||||
|
|
||||||
var helmets;
|
var helmets;
|
||||||
var chestpieces;
|
var chestpieces;
|
||||||
@ -28,7 +28,7 @@ async function init() {
|
|||||||
|
|
||||||
async function update() {
|
async function update() {
|
||||||
// remove any previous results
|
// remove any previous results
|
||||||
Array.from(document.getElementsByClassName("sort-result")).forEach(elem => elem.parentNode.removeChild(elem));
|
Array.from(document.getElementsByClassName("sort-result")).forEach((elem) => elem.parentNode.removeChild(elem));
|
||||||
|
|
||||||
// clamp equip load values to reasonable values
|
// clamp equip load values to reasonable values
|
||||||
// [...document.getElementsByName("equip-load")].forEach(el => el.value = Math.max(el.value, 0.0));
|
// [...document.getElementsByName("equip-load")].forEach(el => el.value = Math.max(el.value, 0.0));
|
||||||
@ -36,15 +36,14 @@ async function update() {
|
|||||||
// update budget
|
// update budget
|
||||||
let budget = equipLoadBudget();
|
let budget = equipLoadBudget();
|
||||||
document.getElementById("equip-load-budget").value = budget.toFixed(1);
|
document.getElementById("equip-load-budget").value = budget.toFixed(1);
|
||||||
let sortBy = [...document.getElementsByName("sorting-order")].find(elem => elem.checked).id;
|
let sortBy = [...document.getElementsByName("sorting-order")].find((elem) => elem.checked).id;
|
||||||
|
|
||||||
// get locked items
|
// get locked items
|
||||||
let lockedItems = await Promise.all([HELMETS, CHESTPIECES, GAUNTLETS, LEGGINGS])
|
let lockedItems = await Promise.all([HELMETS, CHESTPIECES, GAUNTLETS, LEGGINGS]).then((allItems) => {
|
||||||
.then(allItems => {
|
return [...document.getElementsByName("locked-items")]
|
||||||
return [...document.getElementsByName("locked-items")]
|
.map((select, i) => Object.values(allItems[i])[select.selectedIndex])
|
||||||
.map((select, i) => Object.values(allItems[i])[select.selectedIndex])
|
.filter((item) => !item.id.startsWith("no-"));
|
||||||
.filter(item => !item.id.startsWith("no-"));
|
});
|
||||||
});
|
|
||||||
|
|
||||||
// pre-sort and eliminate some equipment
|
// pre-sort and eliminate some equipment
|
||||||
helmets = eliminate(Object.values(await HELMETS), sortBy, lockedItems);
|
helmets = eliminate(Object.values(await HELMETS), sortBy, lockedItems);
|
||||||
@ -61,22 +60,22 @@ async function update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function reset() {
|
function reset() {
|
||||||
[...document.getElementsByName("locked-items")].forEach(select => select.selectedIndex = 0);
|
[...document.getElementsByName("locked-items")].forEach((select) => (select.selectedIndex = 0));
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
function eliminate(list, sortBy, lockedItems) {
|
function eliminate(list, sortBy, lockedItems) {
|
||||||
if (lockedItems.some(item => list.includes(item))) {
|
if (lockedItems.some((item) => list.includes(item))) {
|
||||||
return [list.find(item => lockedItems.includes(item))];
|
return [list.find((item) => lockedItems.includes(item))];
|
||||||
}
|
}
|
||||||
|
|
||||||
let sorted = [...list];
|
let sorted = [...list];
|
||||||
sorted.sort((a, b) => a.weight - b.weight);
|
sorted.sort((a, b) => a.weight - b.weight);
|
||||||
|
|
||||||
let approved = []
|
let approved = [];
|
||||||
sorted.forEach(item => {
|
sorted.forEach((item) => {
|
||||||
if (!approved.some(other => fitness(item, sortBy) <= fitness(other, sortBy))) {
|
if (!approved.some((other) => fitness(item, sortBy) <= fitness(other, sortBy))) {
|
||||||
approved.push(item)
|
approved.push(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -84,48 +83,50 @@ function eliminate(list, sortBy, lockedItems) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function permutations(budget, lockedItems) {
|
function permutations(budget, lockedItems) {
|
||||||
return helmets.flatMap(h => {
|
return helmets.flatMap((h) => {
|
||||||
return chestpieces.flatMap(c => {
|
return chestpieces.flatMap((c) => {
|
||||||
return gauntlets.flatMap(g => {
|
return gauntlets.flatMap((g) => {
|
||||||
return leggings
|
return leggings
|
||||||
.filter(l => isAllowedSet([h, c, g, l], lockedItems))
|
.filter((l) => isAllowedSet([h, c, g, l], lockedItems))
|
||||||
.filter(l => budget > setWeight([h, c, g, l]))
|
.filter((l) => budget > setWeight([h, c, g, l]))
|
||||||
.map(l => [h, c, g, l]);
|
.map((l) => [h, c, g, l]);
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function knapSack(selection, sortBy) {
|
function knapSack(selection, sortBy) {
|
||||||
return selection.reduce((best, set) => {
|
return selection
|
||||||
best.push(set);
|
.reduce((best, set) => {
|
||||||
best.sort((a, b) => setFitness(b, sortBy) - setFitness(a, sortBy));
|
best.push(set);
|
||||||
best.pop();
|
best.sort((a, b) => setFitness(b, sortBy) - setFitness(a, sortBy));
|
||||||
return best;
|
best.pop();
|
||||||
}, selection.slice(0, 3)).sort((a, b) => setFitness(b, sortBy) - setFitness(a, sortBy));
|
return best;
|
||||||
|
}, selection.slice(0, 3))
|
||||||
|
.sort((a, b) => setFitness(b, sortBy) - setFitness(a, sortBy));
|
||||||
}
|
}
|
||||||
|
|
||||||
function fitness(item, sortBy) {
|
function fitness(item, sortBy) {
|
||||||
switch (sortBy) {
|
switch (sortBy) {
|
||||||
case "sort-average":
|
case "sort-average":
|
||||||
return item.average ??= (item.defenses.reduce((total, n) => total + n, 0) ?? 0);
|
return item.defenses.reduce((total, n) => total + n, 0) ?? 0;
|
||||||
case "sort-physical":
|
case "sort-physical":
|
||||||
return item.physical ??= (item.defenses.slice(0, 4).reduce((total, n) => total + n, 0) ?? 0);
|
return item.defenses.slice(0, 4).reduce((total, n) => total + n, 0) ?? 0;
|
||||||
case "sort-elemental":
|
case "sort-elemental":
|
||||||
return item.elemental ??= (item.defenses.slice(4, 8).reduce((total, n) => total + n, 0) ?? 0);
|
return item.defenses.slice(4, 8).reduce((total, n) => total + n, 0) ?? 0;
|
||||||
case "sort-resistances":
|
case "sort-resistances":
|
||||||
return item.resistances ??= (item.resistances.reduce((total, n) => total + n, 0) ?? 0);
|
return item.resistances.reduce((total, n) => total + n, 0) ?? 0;
|
||||||
case "sort-poise":
|
case "sort-poise":
|
||||||
return item.poise ?? 0;
|
return item.poise ?? 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const setWeight = (set) => set.weight ??= set.reduce((total, item) => total + item.weight, 0);
|
const setWeight = (set) => (set.weight ??= set.reduce((total, item) => total + item.weight, 0));
|
||||||
const setFitness = (set, sortBy) => set.fitness ??= set.reduce((total, item) => total + fitness(item, sortBy), 0.0);
|
const setFitness = (set, sortBy) => (set.fitness ??= set.reduce((total, item) => total + fitness(item, sortBy), 0.0));
|
||||||
const isAllowedSet = (set, lockedItems) => lockedItems.every(item => set.includes(item));
|
const isAllowedSet = (set, lockedItems) => lockedItems.every((item) => set.includes(item));
|
||||||
|
|
||||||
function equipLoadBudget() {
|
function equipLoadBudget() {
|
||||||
let rollModifier = parseFloat([...document.getElementsByName("roll-type")].find(elem => elem.checked).value);
|
let rollModifier = parseFloat([...document.getElementsByName("roll-type")].find((elem) => elem.checked).value);
|
||||||
|
|
||||||
let max = document.getElementById("max-equip-load").value || 0;
|
let max = document.getElementById("max-equip-load").value || 0;
|
||||||
let current = document.getElementById("current-equip-load").value || 0;
|
let current = document.getElementById("current-equip-load").value || 0;
|
||||||
@ -136,7 +137,7 @@ function equipLoadBudget() {
|
|||||||
// site rendering functions
|
// site rendering functions
|
||||||
function populateSelect(templateId, destinationId, items) {
|
function populateSelect(templateId, destinationId, items) {
|
||||||
let destination = document.getElementById(destinationId);
|
let destination = document.getElementById(destinationId);
|
||||||
items.forEach(item => {
|
items.forEach((item) => {
|
||||||
destination.options.add(new Option(item.name, item.id));
|
destination.options.add(new Option(item.name, item.id));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -145,7 +146,7 @@ async function populateResults(templateId, destinationId, sets) {
|
|||||||
let template = document.getElementById(templateId);
|
let template = document.getElementById(templateId);
|
||||||
let destination = document.getElementById(destinationId);
|
let destination = document.getElementById(destinationId);
|
||||||
|
|
||||||
(await sets).forEach(set => {
|
(await sets).forEach((set) => {
|
||||||
let clone = template.content.cloneNode(true);
|
let clone = template.content.cloneNode(true);
|
||||||
|
|
||||||
let li = clone.children[0];
|
let li = clone.children[0];
|
||||||
@ -172,11 +173,22 @@ async function populateResults(templateId, destinationId, sets) {
|
|||||||
function itemStatsToString(item) {
|
function itemStatsToString(item) {
|
||||||
let weight = item.weight.toFixed(1) + " wgt., ";
|
let weight = item.weight.toFixed(1) + " wgt., ";
|
||||||
let poise = item.poise + " poise, ";
|
let poise = item.poise + " poise, ";
|
||||||
let physical = item.defenses.slice(0, 4).reduce((total, defense) => total + defense, 0.0).toFixed(1) + " phys. ";
|
let physical =
|
||||||
let elemental = item.defenses.slice(4, 8).reduce((total, defense) => total + defense, 0.0).toFixed(1) + " elem. ";
|
item.defenses
|
||||||
|
.slice(0, 4)
|
||||||
|
.reduce((total, defense) => total + defense, 0.0)
|
||||||
|
.toFixed(1) + " phys. ";
|
||||||
|
let elemental =
|
||||||
|
item.defenses
|
||||||
|
.slice(4, 8)
|
||||||
|
.reduce((total, defense) => total + defense, 0.0)
|
||||||
|
.toFixed(1) + " elem. ";
|
||||||
// let physical = item.defenses.slice(0, 4).reduce((total, defense, i) => total + defense.toFixed(1) + " " + DEFENSE_NAMES[i] + ", ", 0.0);
|
// let physical = item.defenses.slice(0, 4).reduce((total, defense, i) => total + defense.toFixed(1) + " " + DEFENSE_NAMES[i] + ", ", 0.0);
|
||||||
// let elemental = item.defenses.slice(4, 8).reduce((total, defense, i) => total + defense.toFixed(1) + " " + DEFENSE_NAMES[i + 4] + ", ", "");
|
// let elemental = item.defenses.slice(4, 8).reduce((total, defense, i) => total + defense.toFixed(1) + " " + DEFENSE_NAMES[i + 4] + ", ", "");
|
||||||
let resistances = item.resistances.reduce((total, res, i) => total + res + " " + ["immunity", "robustness", "focus", "vitality"][i] + ", ", "");
|
let resistances = item.resistances.reduce(
|
||||||
|
(total, res, i) => total + res + " " + ["immunity", "robustness", "focus", "vitality"][i] + ", ",
|
||||||
|
""
|
||||||
|
);
|
||||||
|
|
||||||
return weight + poise + physical + elemental + "<br>" + resistances;
|
return weight + poise + physical + elemental + "<br>" + resistances;
|
||||||
}
|
}
|
||||||
@ -186,8 +198,10 @@ function setStatsToString(set) {
|
|||||||
weight: set[0].weight + set[1].weight + set[2].weight + set[3].weight,
|
weight: set[0].weight + set[1].weight + set[2].weight + set[3].weight,
|
||||||
poise: set[0].poise + set[1].poise + set[2].poise + set[3].poise,
|
poise: set[0].poise + set[1].poise + set[2].poise + set[3].poise,
|
||||||
defenses: set[0].defenses.map((stat, i) => stat + set[1].defenses[i] + set[2].defenses[i] + set[3].defenses[i]),
|
defenses: set[0].defenses.map((stat, i) => stat + set[1].defenses[i] + set[2].defenses[i] + set[3].defenses[i]),
|
||||||
resistances: set[0].resistances.map((stat, i) => stat + set[1].resistances[i] + set[2].resistances[i] + set[3].resistances[i])
|
resistances: set[0].resistances.map(
|
||||||
}
|
(stat, i) => stat + set[1].resistances[i] + set[2].resistances[i] + set[3].resistances[i]
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
return itemStatsToString(imaginary);
|
return itemStatsToString(imaginary);
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ async function update() {
|
|||||||
elem.value = Math.max(total[i] - items[i], best.stats[i]);
|
elem.value = Math.max(total[i] - items[i], best.stats[i]);
|
||||||
});
|
});
|
||||||
document.getElementsByName("virtual").forEach((elem, i) => {
|
document.getElementsByName("virtual").forEach((elem, i) => {
|
||||||
elem.value = Math.max(total[i], best.stats[i]);
|
elem.value = Math.max(total[i], best.stats[i] + items[i]);
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById("initial-level").value = best.stats.reduce((sum, n) => sum + n) - 79;
|
document.getElementById("initial-level").value = best.stats.reduce((sum, n) => sum + n) - 79;
|
||||||
|
Loading…
Reference in New Issue
Block a user