This commit is contained in:
b 2021-01-29 16:13:54 -06:00
commit f91439e9dd
15 changed files with 4952 additions and 2382 deletions

View file

@ -3,7 +3,7 @@ const url_tag = location.hash.slice(1);
console.log(url_base); console.log(url_base);
console.log(url_tag); console.log(url_tag);
const BUILD_VERSION = "6.9.10"; const BUILD_VERSION = "6.9.11";
function setTitle() { function setTitle() {
let text; let text;

116
craft.js
View file

@ -2,6 +2,33 @@ let armorTypes = [ "helmet", "chestplate", "leggings", "boots" ];
let accessoryTypes = [ "ring", "bracelet", "necklace" ]; let accessoryTypes = [ "ring", "bracelet", "necklace" ];
let weaponTypes = [ "wand", "spear", "bow", "dagger", "relik" ]; let weaponTypes = [ "wand", "spear", "bow", "dagger", "relik" ];
let consumableTypes = [ "potion", "scroll", "food"] let consumableTypes = [ "potion", "scroll", "food"]
//constructs a craft from a hash 'CR-qwoefsabaoe' or 'qwoefsaboe'
function createCraft(hash) {
let name = hash;
if (name.slice(0,3) === "CR-") {
name = name.substring(3);
}
this.hash = name;
ingreds = [];
/*for (let i = 0; i < 6; i ++ ) {
ingreds.push( ingIDMap.get(Base64.toInt(name.substring(2*i,2*i+2))) );
}
let recipe = recipeIDMap.get(Base64.toInt(tag.substring(12,14)));
recipesName = recipe.split("-");
setValue("recipe-choice",recipesName[0]);
setValue("level-choice",recipesName[1]+"-"+recipesName[2]);
tierNum = Base64.toInt(tag.substring(14,15));
let mat_tiers = [];
mat_tiers.push(tierNum % 3 == 0 ? 3 : tierNum % 3);
mat_tiers.push(Math.floor((tierNum-0.5) / 3)+1); //Trying to prevent round-off error, don't yell at me
let atkSpd = Base64.toInt(tag.substring(15));
let atkSpds = ["SLOW,NORMAL,FAST"];
let attackSpeed atkSpds[atkSpd];
*/
}
/* Creates a crafted item object. /* Creates a crafted item object.
*/ */
class Craft{ class Craft{
@ -20,11 +47,11 @@ class Craft{
this.initCraftStats(); this.initCraftStats();
} }
setHash(hash) { setHash(hash) {
this.hash = hash; this.hash = hash;
console.log(hash);
this.statMap.set("displayName", "CR-" + this.hash); this.statMap.set("displayName", "CR-" + this.hash);
console.log(this.statMap.get("displayName"));
} }
/* Get all stats for this build. Stores in this.statMap. /* Get all stats for this build. Stores in this.statMap.
@pre The craft itself should be valid. No checking of validity of pieces is done here. @pre The craft itself should be valid. No checking of validity of pieces is done here.
@ -107,12 +134,12 @@ class Craft{
*/ */
let matmult = 1; let matmult = 1;
let sorted = this.mat_tiers.slice().sort(); let sorted = this.mat_tiers.slice().sort(function(a, b){return a - b});
//TODO - MAT MULTIPLIERS ARE SUS FOR NON-MIXING TIERS. //TODO - MAT MULTIPLIERS ARE SUS FOR NON-MIXING TIERS.
if( sorted[0] == 1 && sorted[1] == 1) { if( sorted[0] == 1 && sorted[1] == 1) {
matmult = 1; matmult = 1;
} else if( sorted[0] == 1 && sorted[1] == 2) { } else if( sorted[0] == 1 && sorted[1] == 2) {
matmult = 1.10; matmult = 1.09;
}else if( sorted[0] == 1 && sorted[1] == 3) { }else if( sorted[0] == 1 && sorted[1] == 3) {
matmult = 1.15; matmult = 1.15;
}else if( sorted[0] == 2 && sorted[1] == 2) { }else if( sorted[0] == 2 && sorted[1] == 2) {
@ -145,57 +172,51 @@ class Craft{
} else if (this['atkSpd'] === "FAST") { } else if (this['atkSpd'] === "FAST") {
ratio /= 2.5; ratio /= 2.5;
} }
low = Math.floor(low * matmult); let nDamBaseLow = Math.floor(low * matmult);
high = Math.floor(high * matmult); let nDamBaseHigh = Math.floor(high * matmult);
low = Math.floor(low * ratio); nDamBaseLow = Math.floor(nDamBaseLow * ratio);
high = Math.floor(high * ratio); nDamBaseHigh = Math.floor(nDamBaseHigh * ratio);
let low1 = Math.floor(low * 0.9); let elemDamBaseLow = [0,0,0,0,0];
let low2 = Math.floor(low * 1.1); let elemDamBaseHigh = [0,0,0,0,0];
let high1 = Math.floor(high * 0.9);
let high2 = Math.floor(high * 1.1);
statMap.set("nDamLow", low1 + "-" + low2); //jank
statMap.set("nDam", high1 + "-" + high2);
/* /*
* APPLY POWDERS - MAY NOT BE CORRECT * APPLY POWDERS - MAY NOT BE CORRECT
*/ */
let mockItem = new Map(); let powders = [];
mockItem.set("type",statMap.get("type"));
mockItem.set("atkSpd",statMap.get("atkSpd"));
mockItem.set("nDam", high1 + "-" + high2);
for (const e of skp_elements) {
mockItem.set(e+"Dam","0-0");
}
mockItem.set("powders",[]);
for (let n in this.ingreds) { for (let n in this.ingreds) {
let ingred = this.ingreds[n]; let ingred = this.ingreds[n];
if (ingred.get("isPowder")) { if (ingred.get("isPowder")) {
mockItem.get("powders").push(ingred.get("pid")); powders.push(ingred.get("pid"));
} }
} }
let stats = new Map(); for (const p of powders) {
stats.set("atkSpd", mockItem.get("atkSpd")); /* Powders as ingredients in crafted weapons are different than powders applied to non-crafted weapons. Thanks to nbcss for showing me the math.
stats.set("damageBonus", [0, 0, 0, 0, 0]); */
stats.set("damageRaw", [mockItem.get("nDam"), mockItem.get("eDam"), mockItem.get("tDam"), mockItem.get("wDam"), mockItem.get("fDam"), mockItem.get("aDam")]); let powder = powderStats[p]; //use min, max, and convert
let damage_keys = [ "nDam", "eDam", "tDam", "wDam", "fDam", "aDam" ]; //affects base damage directly. let element = Math.floor((p+0.01)/6); //[0,4], the +0.01 attempts to prevent division error
let results = calculateSpellDamage(stats, [100, 0, 0, 0, 0, 0], 0, 0, 0, mockItem, [0, 0, 0, 0, 0], 1, undefined); let diffLow = Math.floor(nDamBaseLow * powder.convert/100);
let damages = results[2]; nDamBaseLow -= diffLow;
for (const i in damage_keys) { elemDamBaseLow[element] += diffLow + Math.floor( (powder.min + powder.max) / 2 );
statMap.set(damage_keys[i], damages[i][0]+"-"+damages[i][1]); let diffHigh = Math.floor(nDamBaseHigh * powder.convert/100);
} nDamBaseHigh -= diffHigh;
//second go-through: for the low roll. elemDamBaseHigh[element] += diffHigh + Math.floor( (powder.min + powder.max) / 2 );
mockItem.set("nDam", low1 + "-" + low2);
for (const e of skp_elements) {
mockItem.set(e+"Dam","0-0");
}
stats.set("damageRaw", [mockItem.get("nDam"), mockItem.get("eDam"), mockItem.get("tDam"), mockItem.get("wDam"), mockItem.get("fDam"), mockItem.get("aDam")]);
results = calculateSpellDamage(stats, [100, 0, 0, 0, 0, 0], 0, 0, 0, mockItem, [0, 0, 0, 0, 0], 1, undefined);
damages = results[2];
for (const i in damage_keys) {
statMap.set(damage_keys[i]+"Low", damages[i][0]+"-"+damages[i][1]);
} }
/* I create a separate variable for each low damage range because we need one damage range to calculate damage with, and it's custom to use the maximum range of the range range.
*/
let low1 = Math.floor(nDamBaseLow * 0.9);
let low2 = Math.floor(nDamBaseLow * 1.1);
let high1 = Math.floor(nDamBaseHigh * 0.9);
let high2 = Math.floor(nDamBaseHigh * 1.1);
statMap.set("nDamLow", low1+"-"+low2);
statMap.set("nDam", high1+"-"+high2);
for (const e in skp_elements) {
low1 = Math.floor(elemDamBaseLow[e] * 0.9);
low2 = Math.floor(elemDamBaseLow[e] * 1.1);
high1 = Math.floor(elemDamBaseHigh[e] * 0.9);
high2 = Math.floor(elemDamBaseHigh[e] * 1.1);
statMap.set(skp_elements[e]+"DamLow", low1+"-"+low2);
statMap.set(skp_elements[e]+"Dam",high1+"-"+high2);
}
} else if (statMap.get("category") === "armor") { } else if (statMap.get("category") === "armor") {
for (let n in this.ingreds) { for (let n in this.ingreds) {
let ingred = this.ingreds[n]; let ingred = this.ingreds[n];
@ -206,6 +227,9 @@ class Craft{
statMap.set(skp_elements[(skp_elements.indexOf(name.charAt(0)) + 4 )% 5] + "Def", (statMap.get(skp_elements[(skp_elements.indexOf(name.charAt(0)) + 4 )% 5]+"Def") || 0) - powder["defMinus"]); statMap.set(skp_elements[(skp_elements.indexOf(name.charAt(0)) + 4 )% 5] + "Def", (statMap.get(skp_elements[(skp_elements.indexOf(name.charAt(0)) + 4 )% 5]+"Def") || 0) - powder["defMinus"]);
} }
} }
low = Math.floor(low * matmult);
high = Math.floor(high * matmult);
statMap.set("hp",low+"-"+high);
} }
/* END SECTION */ /* END SECTION */
@ -290,7 +314,7 @@ class Craft{
for (const [key,value] of ingred.get("ids").get("minRolls")) { for (const [key,value] of ingred.get("ids").get("minRolls")) {
if (value && value != 0) { if (value && value != 0) {
let rolls = [value,ingred.get("ids").get("maxRolls").get(key)]; let rolls = [value,ingred.get("ids").get("maxRolls").get(key)];
rolls = rolls.map(x => Math.floor(x * eff_mult)).sort(); rolls = rolls.map(x => Math.floor(x * eff_mult)).sort(function(a, b){return a - b});
statMap.get("minRolls").set(key, (statMap.get("minRolls").get(key)) ? statMap.get("minRolls").get(key) + rolls[0] : rolls[0]); statMap.get("minRolls").set(key, (statMap.get("minRolls").get(key)) ? statMap.get("minRolls").get(key) + rolls[0] : rolls[0]);
statMap.get("maxRolls").set(key, (statMap.get("maxRolls").get(key)) ? statMap.get("maxRolls").get(key) + rolls[1] : rolls[1]); statMap.get("maxRolls").set(key, (statMap.get("maxRolls").get(key)) ? statMap.get("maxRolls").get(key) + rolls[1] : rolls[1]);
} }

View file

@ -9,7 +9,7 @@ console.log(url_tag);
const BUILD_VERSION = "6.9.9"; const BUILD_VERSION = "6.9.11";
/* /*
* END testing section * END testing section
*/ */
@ -29,7 +29,7 @@ function setTitle() {
document.getElementById("header").textContent = "WynnCrafter version "+BUILD_VERSION+" (ingredient db version "+ING_DB_VERSION+")"; document.getElementById("header").textContent = "WynnCrafter version "+BUILD_VERSION+" (ingredient db version "+ING_DB_VERSION+")";
document.getElementById("header").classList.add("funnynumber"); document.getElementById("header").classList.add("funnynumber");
let disclaimer = document.createElement("p"); let disclaimer = document.createElement("p");
disclaimer.textContent = "THIS CRAFTER IS INCOMPLETE. The effect of material tiers on crated items is not 100% tested and accurate. If you know how the math behind it works, please contact ferricles on forums, discord, or ingame."; disclaimer.textContent = "THIS CRAFTER IS NEARLY COMPLETE. The effect of material tiers on crafted items is not 100% tested and accurate. If you know how the math behind it works OR if you have a crafted item whose stats contradict this crafter, please contact ferricles on forums, discord, or ingame.";
document.getElementById("header").append(disclaimer); document.getElementById("header").append(disclaimer);
} }
setTitle(); setTitle();
@ -42,6 +42,7 @@ let recipeList = [];
let ingIDMap = new Map(); let ingIDMap = new Map();
let recipeIDMap = new Map(); let recipeIDMap = new Map();
function init() { function init() {
//no ing //no ing
let ing = Object(); let ing = Object();
@ -53,9 +54,10 @@ function init() {
ing.itemIDs = {"dura": 0, "strReq": 0, "dexReq": 0,"intReq": 0,"defReq": 0,"agiReq": 0,}; ing.itemIDs = {"dura": 0, "strReq": 0, "dexReq": 0,"intReq": 0,"defReq": 0,"agiReq": 0,};
ing.consumableIDs = {"dura": 0, "charges": 0}; ing.consumableIDs = {"dura": 0, "charges": 0};
ing.posMods = {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0}; ing.posMods = {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0};
ing.id = 4000;
ingMap.set(ing["name"], ing); ingMap.set(ing["name"], ing);
ingList.push(ing["name"]); ingList.push(ing["name"]);
ingIDMap.set(ingList.length-1, ing["name"]); ingIDMap.set(ing["id"], ing["name"]);
let numerals = new Map([[1, "I"], [2, "II"], [3, "III"], [4, "IV"], [5, "V"], [6, "VI"]]); let numerals = new Map([[1, "I"], [2, "II"], [3, "III"], [4, "IV"], [5, "V"], [6, "VI"]]);
for (let i = 0; i < 5; i ++) { for (let i = 0; i < 5; i ++) {
for (const powderIng of powderIngreds) { for (const powderIng of powderIngreds) {
@ -67,6 +69,7 @@ function init() {
ing.ids = {}; ing.ids = {};
ing.isPowder = true; ing.isPowder = true;
ing.pid = 6*i + powderIngreds.indexOf(powderIng); ing.pid = 6*i + powderIngreds.indexOf(powderIng);
ing.id = 4001 + ing.pid;
ing.itemIDs = {"dura": powderIng["durability"], "strReq": 0, "dexReq": 0,"intReq": 0,"defReq": 0,"agiReq": 0,}; ing.itemIDs = {"dura": powderIng["durability"], "strReq": 0, "dexReq": 0,"intReq": 0,"defReq": 0,"agiReq": 0,};
switch(i) { switch(i) {
case 0: case 0:
@ -89,6 +92,7 @@ function init() {
ing.posMods = {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0}; ing.posMods = {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0};
ingMap.set(ing["name"],ing); ingMap.set(ing["name"],ing);
ingList.push(ing["name"]); ingList.push(ing["name"]);
ingIDMap.set(ing["id"], ing["name"]);
} }
} }
@ -96,10 +100,12 @@ function init() {
for (const ing of ings) { for (const ing of ings) {
ingMap.set(ing["name"], ing); ingMap.set(ing["name"], ing);
ingList.push(ing["name"]); ingList.push(ing["name"]);
ingIDMap.set(ing["id"], ing["name"]);
} }
for (const recipe of recipes) { for (const recipe of recipes) {
recipeMap.set(recipe["id"], recipe); recipeMap.set(recipe["name"], recipe);
recipeList.push(recipe["id"]); recipeList.push(recipe["name"]);
recipeIDMap.set(recipe["id"],recipe["name"]);
} }
console.log("all ingredients"); console.log("all ingredients");
console.log(ings); console.log(ings);
@ -107,6 +113,8 @@ function init() {
console.log(recipes); console.log(recipes);
console.log(ingList); console.log(ingList);
console.log(recipeList); console.log(recipeList);
console.log(ingIDMap);
console.log(recipeIDMap);
document.getElementById("recipe-choice").addEventListener("change", (event) => { document.getElementById("recipe-choice").addEventListener("change", (event) => {
updateMaterials(); updateMaterials();
@ -117,6 +125,7 @@ function init() {
populateFields(); populateFields();
decodeCraft(url_tag); decodeCraft(url_tag);
} }
function updateMaterials() { function updateMaterials() {
let recipeName = getValue("recipe-choice") ? getValue("recipe-choice") : "Potion"; let recipeName = getValue("recipe-choice") ? getValue("recipe-choice") : "Potion";
@ -229,13 +238,13 @@ function encodeCraft() {
if (player_craft) { if (player_craft) {
let atkSpds = ["SLOW","NORMAL","FAST"]; let atkSpds = ["SLOW","NORMAL","FAST"];
let craft_string = "1_" + let craft_string = "1_" +
Base64.fromIntN(ingList.indexOf(player_craft.ingreds[0].get("name")), 2) + Base64.fromIntN(player_craft.ingreds[0].get("id"), 2) +
Base64.fromIntN(ingList.indexOf(player_craft.ingreds[1].get("name")), 2) + Base64.fromIntN(player_craft.ingreds[1].get("id"), 2) +
Base64.fromIntN(ingList.indexOf(player_craft.ingreds[2].get("name")), 2) + Base64.fromIntN(player_craft.ingreds[2].get("id"), 2) +
Base64.fromIntN(ingList.indexOf(player_craft.ingreds[3].get("name")), 2) + Base64.fromIntN(player_craft.ingreds[3].get("id"), 2) +
Base64.fromIntN(ingList.indexOf(player_craft.ingreds[4].get("name")), 2) + Base64.fromIntN(player_craft.ingreds[4].get("id"), 2) +
Base64.fromIntN(ingList.indexOf(player_craft.ingreds[5].get("name")), 2) + Base64.fromIntN(player_craft.ingreds[5].get("id"), 2) +
Base64.fromIntN(recipeList.indexOf(player_craft.recipe.get("id")),2) + Base64.fromIntN(player_craft.recipe.get("id"),2) +
Base64.fromIntN(player_craft.mat_tiers[0] + (player_craft.mat_tiers[1]-1)*3, 1) + //this maps tiers [a,b] to a+3b. Base64.fromIntN(player_craft.mat_tiers[0] + (player_craft.mat_tiers[1]-1)*3, 1) + //this maps tiers [a,b] to a+3b.
Base64.fromIntN(atkSpds.indexOf(player_craft["atkSpd"]),1); Base64.fromIntN(atkSpds.indexOf(player_craft["atkSpd"]),1);
return craft_string; return craft_string;
@ -244,16 +253,17 @@ function encodeCraft() {
} }
function decodeCraft(url_tag) { function decodeCraft(url_tag) {
if (url_tag) { if (url_tag) {
console.log(url_tag);
let info = url_tag.split("_"); let info = url_tag.split("_");
let version = info[0]; let version = info[0];
let tag = info[1]; let tag = info[1];
if (version === "1") { if (version === "1") {
ingreds = []; ingreds = [];
for (let i = 0; i < 6; i ++ ) { for (let i = 0; i < 6; i ++ ) {
setValue("ing-choice-"+(i+1), ingList[Base64.toInt(tag.substring(2*i,2*i+2))]); setValue("ing-choice-"+(i+1), ingIDMap.get(Base64.toInt(tag.substring(2*i,2*i+2))));
console.log(Base64.toInt(tag.substring(2*i,2*i+2)));
} }
recipe = recipeList[Base64.toInt(tag.substring(12,14))]; recipe = recipeIDMap.get(Base64.toInt(tag.substring(12,14)));
console.log(Base64.toInt(tag.substring(12,14)));
recipesName = recipe.split("-"); recipesName = recipe.split("-");
setValue("recipe-choice",recipesName[0]); setValue("recipe-choice",recipesName[0]);
setValue("level-choice",recipesName[1]+"-"+recipesName[2]); setValue("level-choice",recipesName[1]+"-"+recipesName[2]);
@ -264,7 +274,6 @@ function decodeCraft(url_tag) {
toggleMaterial("mat-1-"+mat_tiers[0]); toggleMaterial("mat-1-"+mat_tiers[0]);
toggleMaterial("mat-2-"+mat_tiers[1]); toggleMaterial("mat-2-"+mat_tiers[1]);
atkSpd = Base64.toInt(tag.substring(15)); atkSpd = Base64.toInt(tag.substring(15));
console.log(atkSpd);
let atkSpdButtons = ["slow-atk-button", "normal-atk-button", "fast-atk-button"]; let atkSpdButtons = ["slow-atk-button", "normal-atk-button", "fast-atk-button"];
toggleAtkSpd(atkSpdButtons[atkSpd]); toggleAtkSpd(atkSpdButtons[atkSpd]);
@ -323,11 +332,38 @@ function copyRecipe(){
function shareRecipe(){ function shareRecipe(){
if (player_craft) { if (player_craft) {
let copyString = url_base+location.hash + "\n"; let copyString = url_base+location.hash + "\n";
let name = player_craft.recipe.get("id").split("-"); let name = player_craft.recipe.get("name").split("-");
copyString += " > " + name[0] + " " + "Lv. " + name[1] + "-" + name[2] + " (" + player_craft.mat_tiers[0] + "\u272B, " + player_craft.mat_tiers[1] + "\u272B)\n"; copyString += " > " + name[0] + " " + "Lv. " + name[1] + "-" + name[2] + " (" + player_craft.mat_tiers[0] + "\u272B, " + player_craft.mat_tiers[1] + "\u272B)\n";
copyString += " > [" + player_craft.ingreds[0].get("name") + " | " + player_craft.ingreds[1].get("name") + "\n"; let names = [
copyString += " > " + player_craft.ingreds[2].get("name") + " | " + player_craft.ingreds[3].get("name") + "\n"; player_craft.ingreds[0].get("name"),
copyString += " > " + player_craft.ingreds[4].get("name") + " | " + player_craft.ingreds[5].get("name") + "]"; player_craft.ingreds[1].get("name"),
player_craft.ingreds[2].get("name"),
player_craft.ingreds[3].get("name"),
player_craft.ingreds[4].get("name"),
player_craft.ingreds[5].get("name")
];
//fancy justify code that doesn't work properly b/c most font isn't monospaced
let buffer1 = Math.max(names[0].length,names[2].length,names[4].length);
let buffer2 = Math.max(names[1].length,names[3].length,names[5].length);
for (let i in names) {
let name = names[i];
let spaces;
if (i % 2 == 0) { //buffer 1
spaces = buffer1 - name.length;
} else { //buffer 2
spaces = buffer2 - name.length;
}
for (let j = 0; j < spaces; j ++) {
if (j % 2 == 0) {
names[i]+=" ";
} else {
names[i] = " "+names[i];
}
}
}
copyString += " > [" + names[0] + " | " + names[1] + "\n";
copyString += " > " + names[2] + " | " + names[3] + "\n";
copyString += " > " + names[4] + " | " + names[5] + "]";
copyTextToClipboard(copyString); copyTextToClipboard(copyString);
document.getElementById("share-button").textContent = "Copied!"; document.getElementById("share-button").textContent = "Copied!";
} }

View file

@ -86,7 +86,7 @@ function expandIngredient(ing) {
} }
expandedIng.set(id, idMap); expandedIng.set(id, idMap);
} }
let normIds = ['lvl','name','tier','skills']; let normIds = ['lvl','name','tier','skills','id'];
for (const id of normIds) { for (const id of normIds) {
expandedIng.set(id, ing[id]); expandedIng.set(id, ing[id]);
} }
@ -112,7 +112,7 @@ function expandIngredient(ing) {
*/ */
function expandRecipe(recipe) { function expandRecipe(recipe) {
let expandedRecipe = new Map(); let expandedRecipe = new Map();
let normIDs = ["id", "skill", "type"]; let normIDs = ["name", "skill", "type","id"];
for (const id of normIDs) { for (const id of normIDs) {
expandedRecipe.set(id,recipe[id]); expandedRecipe.set(id,recipe[id]);
} }
@ -577,11 +577,9 @@ function displayExpandedItem(item, parent_id){
if (item.get("tier") !== " ") { if (item.get("tier") !== " ") {
p_elem.classList.add(item.get("tier")); p_elem.classList.add(item.get("tier"));
} }
if (["potion", "scroll", "food"].includes(item.get("type"))){ if(item.get("tier") === "Crafted") {
let b = document.createElement("b"); p_elem.classList.add("smalltitle");
b.textContent = "[" + item.get("charges") + "/" + item.get("charges") + "]"; p_elem.classList.remove("title");
b.classList.add("spaceleft");
p_elem.appendChild(b);
} }
p_elem.append(document.createElement("br")); p_elem.append(document.createElement("br"));
let img = document.createElement("img"); let img = document.createElement("img");
@ -773,6 +771,10 @@ function displayExpandedItem(item, parent_id){
dura = item.get("duration"); dura = item.get("duration");
dura_elem.textContent = "Duration: " dura_elem.textContent = "Duration: "
suffix = " sec." suffix = " sec."
let charges = document.createElement("b");
charges.textContent = "Charges: " + item.get("charges");
charges.classList.add("spaceleft");
active_elem.appendChild(charges);
} }
dura_elem.textContent += dura[0]+"-"+dura[1] + suffix; dura_elem.textContent += dura[0]+"-"+dura[1] + suffix;
active_elem.append(dura_elem); active_elem.append(dura_elem);

View file

@ -1004,8 +1004,11 @@
<script type="text/javascript" src="skillpoints.js"></script> <script type="text/javascript" src="skillpoints.js"></script>
<script type="text/javascript" src="damage_calc.js"></script> <script type="text/javascript" src="damage_calc.js"></script>
<script type="text/javascript" src="display.js"></script> <script type="text/javascript" src="display.js"></script>
<script type="text/javascript" src="build.js"></script>
<script type="text/javascript" src="load.js"></script> <script type="text/javascript" src="load.js"></script>
<!--script type="text/javascript" src="load_ing.js"></script>
<script type="text/javascript" src="craft.js"></script>
<script type="text/javascript" src="crafter.js"></script-->
<script type="text/javascript" src="build.js"></script>
<script type="text/javascript" src="builder.js"></script> <script type="text/javascript" src="builder.js"></script>
</body> </body>
</html> </html>

683
ing_map.json Normal file
View file

@ -0,0 +1,683 @@
{
"Acid Magma": 0,
"Alnamar Meat": 1,
"Altered Ash": 2,
"Ancient Metal": 3,
"Apple": 4,
"Arcane Anomaly": 5,
"Bamboo": 6,
"Ball of Slime": 7,
"Bandit Rations": 8,
"Bat Ear": 9,
"Big Jawbreaker": 10,
"Black Steel": 11,
"Blaze Powder": 12,
"Blighted Skull": 13,
"Bloodweb": 14,
"Bone Meal": 15,
"Bone Ash": 16,
"Boar Meat": 17,
"Bright Petal": 18,
"Broken Antic Bead": 19,
"Broken Helmet": 20,
"Broken Pick": 21,
"Brown Mushroom": 22,
"Bug Parts": 23,
"Calcified Ligament": 24,
"Candy Button": 25,
"Charred Carapace": 26,
"Coastal Sand": 27,
"Cocoa Caps": 28,
"Conscription Letter": 29,
"Corbys Innards": 30,
"Corroded Chunk": 31,
"Corruption Shard": 32,
"Coyote Fang": 33,
"Crawler Eye": 34,
"Crawler Sludge": 35,
"Crawler Web": 36,
"Crumbly Rock": 37,
"Cracked Skin": 38,
"Cursed Venom Sac": 39,
"Dead Naval Shard": 40,
"Decaying Skin": 41,
"Decaying Arteries": 42,
"Demonic Ashes": 43,
"Depreciating Flesh": 44,
"Dragonling Scale": 45,
"Drained Bone": 46,
"Dry Bone": 47,
"Dry Seeds": 48,
"Egg": 49,
"Expelled Shrapnel": 50,
"Fairy Dust": 51,
"Firefly Dust": 52,
"Fish Scales": 53,
"Fluffy Fur": 54,
"Forest Web": 55,
"Fresh Bone": 56,
"Fresh Water": 57,
"Fungi Spores": 58,
"Ghostly Essence": 59,
"Gert Skin": 60,
"Ghostly Plume": 61,
"Ghostly Membrane": 62,
"Goblin Tooth": 63,
"Gold": 64,
"Gold Bar": 65,
"Gold Nugget": 66,
"Gold Tooth": 67,
"Gollier Iron": 68,
"Grey Cloud": 69,
"Hardened Magma": 70,
"Harpy Bone": 71,
"Holy Powder": 72,
"Hybrid Skin": 73,
"Ice Cream Sandwich": 74,
"Ice Sliver": 75,
"Icy Shard": 76,
"Illuminated Spirit": 77,
"Lava Blisters": 78,
"Leather": 79,
"Leafy Stalk": 80,
"Licorice Ropes": 81,
"Lizard Scale": 82,
"Lizard Tail": 83,
"Lunar Dust": 84,
"Luu Luu Vertebrae": 85,
"Magic Feather": 86,
"Magmatic Skin": 87,
"Manis Carapace": 88,
"Marsufosa Pelt": 89,
"Mashed Insect": 90,
"Mineral Cinder": 91,
"Melted Steel": 92,
"Metal Scraps": 93,
"Mixed Seeds": 94,
"Myconid Spores": 95,
"Naga Tail": 96,
"Oceanic Silt": 97,
"Ocelot Pelt": 98,
"Ocelot Tail": 99,
"Old Bone": 100,
"Ominous Pearl": 101,
"Optic Fiber": 102,
"Orc Eye": 103,
"Gritty Rocks": 104,
"Orc Skin": 105,
"Orc Teeth": 106,
"Overgrown Bones": 107,
"Perkish Potato": 108,
"Pigman Meat": 109,
"Pig's Remains": 110,
"Plucked Feather": 111,
"Poorly-Made Pouch": 112,
"Potato": 113,
"Grook Feather": 114,
"Prickly Grass": 115,
"Protective Fabric": 116,
"Pure Rain Stone": 117,
"Putrid Gunk": 118,
"Rancid Flesh": 119,
"Rat Hair": 120,
"Red Mushroom": 121,
"Reptile Scales": 122,
"Resilient Stone": 123,
"Robot Antenna": 124,
"River Clay": 125,
"Retinal Membrane": 126,
"Rose": 127,
"Rotten Bone": 128,
"Rotten Flesh": 129,
"Royal Bug\u2019s Blood": 130,
"Salt Water": 131,
"Sandy Bonemeal": 132,
"Seabird Feather": 133,
"Seagrass": 134,
"Severed Heart": 135,
"Severed Leg": 136,
"Sharp Claw": 137,
"Shattered Blade": 138,
"Shorting Wire": 139,
"Shredded Bone": 140,
"Silver Feather": 141,
"Skyraider Coin": 142,
"Shining Wool": 143,
"Sludge Parasite": 144,
"Snake Eye": 145,
"Snow Clump": 146,
"Snow Heart": 147,
"Soft Blue Wool": 148,
"Soft Red Wool": 149,
"Soft White Wool": 150,
"Soft Green Wool": 151,
"Soft Yellow Wool": 152,
"Soft Sand": 153,
"Soggy Stone": 154,
"Soul Essence": 155,
"Spider Leg": 156,
"Spellbound Ash": 157,
"Spider Eggs": 158,
"Spider Fang": 159,
"Squid Ink": 160,
"Stack of Coins": 161,
"Stolen Harvest": 162,
"Stolen Seeds": 163,
"Storm Horn": 164,
"Sugar Stick": 165,
"Tanned Flesh": 166,
"Tarnished Gold Foil": 167,
"Tendon Clump": 168,
"Terracotta Chunk": 169,
"Thick Mud": 170,
"Thick Vines": 171,
"Thin Quill": 172,
"Torn Skin": 173,
"Tough Skin": 174,
"Toxic Lumps": 175,
"Troll Hair": 176,
"Turtle Shell": 177,
"Unholy Spirit": 178,
"Unmeltable Ice": 179,
"Used Fireball": 180,
"Victim's Skull": 181,
"Viscous Slime": 182,
"Warped Skin": 183,
"Waterlogged Branch": 184,
"Werewolf Tail": 185,
"Wolf Fang": 186,
"Wood Shavings": 187,
"Wood Scrap": 188,
"Wood Snippet": 189,
"Wool": 190,
"Void Essence": 191,
"Worn Memorabilia": 192,
"Wybel Taffy": 193,
"Wybel Fluff": 194,
"Zhight Herbal Mix": 195,
"Zombie Eye": 196,
"Acidic Remains": 197,
"Active Fireball": 198,
"Adventurer's Diary": 199,
"Agullo Beak": 200,
"Alga": 201,
"Algae Mat": 202,
"Ashen Hide": 203,
"Beef Tongue": 204,
"Beak of the Nivlan Beauty": 205,
"Bloodstained Remains": 206,
"Broken Dagger": 207,
"Broken Steel Hook": 208,
"Broken Steel Blade": 209,
"Burning Soul": 210,
"Captain's Glass": 211,
"Carapace Fragment": 212,
"Cat Tail": 213,
"Cataratite": 214,
"Chain Loop": 215,
"Charred Bone": 216,
"Chitin Plate": 217,
"Chipped Quartz": 218,
"Coagulated Clot": 219,
"Condor Feather": 220,
"Corn Husk": 221,
"Congealed Slime": 222,
"Cortrich Eggs": 223,
"Cracked Geode": 224,
"Crystal Dust": 225,
"Crystallized Organ": 226,
"Cyclops Eye": 227,
"Dead Bee": 228,
"Demonic Blood": 229,
"Dense Void Hole Chunk": 230,
"Dragonling Egg": 231,
"Earthly Aura": 232,
"Durable Skin": 233,
"Elemental Crystal": 234,
"Empty Casings": 235,
"Energetic Aura": 236,
"Essence Of Dusk": 237,
"Fancy Pelt": 238,
"Fiery Aura": 239,
"Flugsvamp Cap": 240,
"Forgotten Axe": 241,
"Forgotten Pickaxe": 242,
"Foul Fluid": 243,
"Fragmentation": 244,
"Fuming Lava Rock": 245,
"Frostbitten Flesh": 246,
"Gloomy Orb": 247,
"Glowing Scales": 248,
"Green Foot": 249,
"Golden Coin": 250,
"Green Scale": 251,
"Gunpowder": 252,
"Hardened Mandible": 253,
"Hatchling Remnant": 254,
"Horse Mane": 255,
"Ibjub Fruit": 256,
"Hunter's Disguise": 257,
"Ice Fragment": 258,
"Iceberries": 259,
"Infused Gold": 260,
"Ivory Tusk": 261,
"Kaian Scroll": 262,
"Jolting Geode": 263,
"Karl Johan Cap": 264,
"Insanity Star": 265,
"Larbonic Sheddings": 266,
"Laryngeal Flesh": 267,
"Leg Eater Tooth": 268,
"Lively Apple": 269,
"Letvus Delight": 270,
"Lion Fang": 271,
"Lost Talisman": 272,
"Lotus Seedpod": 273,
"Luminescent Ink": 274,
"Lockpicking Kit": 275,
"Lunar Shard": 276,
"Luxic Plasma": 277,
"Marrow Dust": 278,
"Mixed Jewel Deposit": 279,
"Mooshroom Ear": 280,
"Muscle": 281,
"Munched Grass": 282,
"Nasty Residue": 283,
"Native Jadeite": 284,
"Nightmare Fuel": 285,
"Oceanic Sand": 286,
"Optic Lens": 287,
"Owl Feather": 288,
"Penguin Egg": 289,
"Pearlescent Jewel": 290,
"Phrumkin Seeds": 291,
"Pig's Skull": 292,
"Pillaged Fragment": 293,
"Pink Pelute": 294,
"Pink Wool": 295,
"Pirate Beard": 296,
"Piranha Jaw": 297,
"Poison Sac": 298,
"Poisonous Spider Eye": 299,
"Powdery Bone": 300,
"Primitive Delicacy": 301,
"Pristine Claw": 302,
"Putrid Spores": 303,
"Altitude Shard": 304,
"Bionic Fiber": 305,
"Flytrap Fangs": 306,
"Goblin Trinket": 307,
"Insulated Wiring": 308,
"Ivy Sprout": 309,
"Kaolin Clay": 310,
"Magicule Sample": 311,
"Nova Bloom": 312,
"Olmic Artifact": 313,
"Roasted Tissue": 314,
"Outdated Newspaper": 315,
"Red Shale": 316,
"Savannah Stone": 317,
"Serafite": 318,
"Spectral Spike": 319,
"Tropical Honeysuckle": 320,
"Tangy Nectar": 321,
"Ursine Claw": 322,
"Webbed Offshoot": 323,
"Waterfall Thyme": 324,
"Zombie Brain": 325,
"Recluse Venom Sac": 326,
"Regenerative Pins": 327,
"Red Mercury": 328,
"Rock-Hard Beak": 329,
"Rotten Teeth": 330,
"Rotten Log": 331,
"Rusty Axe Head": 332,
"Salt": 333,
"Scalding Sand": 334,
"Sea Salt": 335,
"Sentient Shadow": 336,
"Sharp Edge": 337,
"Shiny Pebble": 338,
"Shiny Mineral Deposit": 339,
"Sky Snail Shell": 340,
"Smooth Silt": 341,
"Snake Skin": 342,
"Snake Tooth": 343,
"Snake Scale": 344,
"Soapstone": 345,
"Spike Residue": 346,
"Spiked Capsule": 347,
"Squid Beak": 348,
"Stolen Goods": 349,
"Sticky Fern": 350,
"Strange Geode": 351,
"Stretched Rawhide": 352,
"Strong Flesh": 353,
"Stone Plating": 354,
"Sylphid Tears": 355,
"Tender Pork Fillet": 356,
"Terra Steel": 357,
"Tentacle": 358,
"Tough Bone": 359,
"Titanium Chunk": 360,
"Throbbing Avos Heart": 361,
"Torn Rawhide": 362,
"Truffle": 363,
"Toxic Spores": 364,
"Undead Heart": 365,
"Viral Tentacle": 366,
"Viking Stone": 367,
"Voidstone Sample": 368,
"Watery Aura": 369,
"Windy Aura": 370,
"Wooly Armour": 371,
"Worn Coin": 372,
"Wriggling Darkness": 373,
"Zhight Coral Piece": 374,
"Zhight Shiny Stone": 375,
"7-Yottabyte Storage Component": 376,
"Accursed Effigy": 377,
"Acidic Blood": 378,
"Acidic Solution": 379,
"Adaptive Tissue": 380,
"Aged Tome": 381,
"Ancient Currency": 382,
"Ancient Moss": 383,
"Ancient Panel": 384,
"Angelic Gem": 385,
"Antique Metal": 386,
"Beastial Viscera": 387,
"Black Sulphur": 388,
"Blazing Fireball": 389,
"Bloated Artery": 390,
"Bob's Tear": 391,
"Bottled Decay": 392,
"Burial Talisman": 393,
"Burnt Skull": 394,
"Calmed Thunder": 395,
"Cat Food": 396,
"Chaotic Embers": 397,
"Cherry Sapling": 398,
"Condensed Darkness": 399,
"Corrupted Ichor": 400,
"Crumbling Skull": 401,
"Crystalline Growth": 402,
"Curse Gland": 403,
"Cursed Ashes": 404,
"Cyclone Blue Leaves": 405,
"Dark Matter": 406,
"Dark Iris": 407,
"Defiled Luxroot": 408,
"Diseased Fluids": 409,
"Desert Fossil": 410,
"Dragon Aura": 411,
"Dried Kelp": 412,
"Dried Gill": 413,
"Earthly Pebble": 414,
"Elephant Toenail": 415,
"Enchanted Chain Link": 416,
"Engraved Tablet": 417,
"Enhanced Behaviour Microchip": 418,
"Enhanced Dynamics Microchip": 419,
"Enhanced Physics Microchip": 420,
"Enhanced Pathfinding Microchip": 421,
"Enhanced Potential Microchip": 422,
"Enhanced Post-Processing Microchip": 423,
"Enraged Soul": 424,
"Eternal Flame": 425,
"Fairy Powder": 426,
"Feather of Grace": 427,
"Fiberglass Frame": 428,
"Fighting Stick": 429,
"Flesh-forged Circuit": 430,
"Flameheart": 431,
"Fish Tail": 432,
"Flow of Fate": 433,
"Fresh Game": 434,
"Frozen Ghostly Essence": 435,
"Gelatinous Slime Chunk": 436,
"Generator Chip": 437,
"Glimmering Beak": 438,
"Glittering Silt": 439,
"Golden Avia Feather": 440,
"Gravitation Crystal": 441,
"Green Opal": 442,
"Gylia Essence": 443,
"Haleva Plant": 444,
"Harpy Wing": 445,
"Hellish Cinders": 446,
"Herbstzeitlose": 447,
"Hydrofluoric Acid": 448,
"Infected Mass": 449,
"Infernal Flesh": 450,
"Ironwood Chips": 451,
"Larvae Cluster": 452,
"Leopard Blood": 453,
"Lithoflesh": 454,
"Lucky Rabbit's Foot": 455,
"Lost Spirit": 456,
"Lucky Spider Egg": 457,
"Lunar Chunk": 458,
"Luxroot Cuttings": 459,
"Mangled Soul": 460,
"Maroferrous": 461,
"Maromagnetite": 462,
"Aged Medallion": 463,
"Mixed Mineral Deposit": 464,
"Mythical Hoof": 465,
"Naval Shard": 466,
"Nose Ring": 467,
"Nivlan Honeycomb": 468,
"Organic Explosive": 469,
"Old Explosives": 470,
"Paralyzing Spores": 471,
"Piercing Talons": 472,
"Pig's Blood": 473,
"Pink Pelulite": 474,
"Plutonium Waste": 475,
"Popped Pustule": 476,
"Portal Emanation": 477,
"Portal Rift": 478,
"Primeval Skin": 479,
"Prized Pelt": 480,
"Pure Quartz": 481,
"Purest Tear": 482,
"Pykrete": 483,
"Cleaned Saccharum": 484,
"Shattered Memory Shard": 485,
"Therck's Chain": 486,
"Weakening Catalyst": 487,
"Ashstained Basalt": 488,
"Astral Alloy": 489,
"Dernic Parasite": 490,
"Creepvine Cluster": 491,
"Digestible Fungi": 492,
"Defective Circuits": 493,
"Flashfrost": 494,
"Highland Basil": 495,
"Herbal Extract": 496,
"Illusory Idol": 497,
"Mellow Mango": 498,
"Mysterious Mist": 499,
"Premium Hay Bale": 500,
"Pokey Cactus": 501,
"Radiant Seeds": 502,
"Quartz Cluster": 503,
"Ruins Shard": 504,
"Shadow of Ruin": 505,
"Soul Amalgamate": 506,
"Sharpening Stone": 507,
"Spreading Fireweed": 508,
"Void Particulates": 509,
"Rabbit Carcass": 510,
"Razor-Sharp Tooth": 511,
"Rare Potato": 512,
"Relic of the Past": 513,
"Reinforced Leather": 514,
"Residual Spirit": 515,
"Rigid Fin": 516,
"Retinal Barbs": 517,
"Rotting Bone": 518,
"Router's Shield": 519,
"Scarab Husk": 520,
"Scarred Leather": 521,
"Scopaesthesia": 522,
"Seabird Egg": 523,
"Serpent Tongue": 524,
"Sealed Blaze": 525,
"Sentient Water": 526,
"Shimmering Jewel": 527,
"Shrieker's Head": 528,
"Silver Bullet": 529,
"Shinesting Scorpion Tail": 530,
"Sky Flux": 531,
"Slimy Skin": 532,
"Soft Silk": 533,
"Smokebomb": 534,
"Soulbound Cinders": 535,
"Sought-After Ore": 536,
"Split Essence": 537,
"Squid Brain": 538,
"Sticky Mudball": 539,
"Stonewalker Core": 540,
"Succulent Crab Meat": 541,
"Swooper Wing": 542,
"Tenebrous Plasma": 543,
"Thorned Tusk": 544,
"Toxxulous Ripper\u2019s Legs": 545,
"Twisted Organ": 546,
"Vile Stone": 547,
"Vortex Expulsion": 548,
"Wendigo Bone": 549,
"Wind Ornament": 550,
"Volatile Light": 551,
"World Illuminator": 552,
"Wriggling Wooden Arm": 553,
"Yeti Fur": 554,
"Zhight Weird Magic Rock": 555,
"Adamastor's Faceplate": 556,
"Ancient Coins": 557,
"Ancient Heart": 558,
"Aqua Vitae": 559,
"Aquatic Beauty": 560,
"Archaic Medallion": 561,
"Azure Blossom": 562,
"Aspect of the Void": 563,
"Bat Heart": 564,
"Black Hole": 565,
"Blighted Brain": 566,
"Blessed Heart": 567,
"Blood of the Nivlan Beauty": 568,
"Borange Fluff": 569,
"Bottled Fairy": 570,
"Braveheart": 571,
"Chromatic Bloom": 572,
"Coalescence": 573,
"Coagulated Soulmass": 574,
"Coastal Shell": 575,
"Colossus' Shard": 576,
"Contorted Stone": 577,
"Corrupted Fragment": 578,
"Corrupted Beef": 579,
"Cursed Wings": 580,
"Death Whistle Leaf": 581,
"Decaying Heart": 582,
"Deep Ice Core": 583,
"Defishious": 584,
"Defender's Stone": 585,
"Depth's Gem": 586,
"Dominant Force": 587,
"Doom Stone": 588,
"Draconic Bone Marrow": 589,
"Electroplasm": 590,
"Elephelk Trunk": 591,
"Engored Oculus": 592,
"Eye of The Beast": 593,
"Farcor's Trust": 594,
"Fiery Essence": 595,
"Festering Face": 596,
"Foul Fairy Dust": 597,
"Galvanic Stone": 598,
"Glacial Anomaly": 599,
"Gilded Bark": 600,
"Glow Bulb Seeds": 601,
"Glimmering Coin": 602,
"Gunkfueled Core": 603,
"Haros' Broken Badge": 604,
"Incremental Mapping Module": 605,
"Iridescent Elytra": 606,
"Kerasot Sporehead": 607,
"Large Titanium Chunk": 608,
"Large Lapis": 609,
"Lashing Hellfire": 610,
"Limestone Core": 611,
"Linear Accelerator": 612,
"Lion Heart": 613,
"Lunar Charm": 614,
"Luxurious Silk": 615,
"Mahogany Heartwood": 616,
"Major's Badge": 617,
"Mega Fern": 618,
"More-Pearlescent Jewel": 619,
"Naval Stone": 620,
"Nivlan Honey": 621,
"Obelisk Core": 622,
"Ocea Steel": 623,
"Overheated Processor": 624,
"Panda King\u2019s Crown": 625,
"Panda King's Crown": 626,
"Parasitic Abscission": 627,
"Pegasus Feather": 628,
"Plane of Nonexistence": 629,
"Piquant Pork Fillet": 630,
"Plasteel Plating": 631,
"Pride of the Heights": 632,
"Primordial Soul": 633,
"Familiar Essence": 634,
"Old Treasure\u058e": 635,
"Vibrant Augment": 636,
"Autonomous Core": 637,
"Canyon Parsley": 638,
"Royal Cake Slice": 639,
"Etheric Fern": 640,
"Evolving Spores": 641,
"Glowing Tree Sap": 642,
"Gaze of Darkness": 643,
"Ironwood Scale": 644,
"Luminous Rune": 645,
"Lost Heirloom": 646,
"Mangrove Root": 647,
"Mana Extract": 648,
"Mountain's Heart": 649,
"Platinum Grook Egg": 650,
"Salted Salmon": 651,
"Sentient Slimeball": 652,
"Skybound Remnant": 653,
"Soul Stone": 654,
"Shattered Dawnlight": 655,
"Spirograph Tablet": 656,
"Soulfire Matterweave": 657,
"Sun-Stained Skin": 658,
"Suspicious Shrubs": 659,
"Red Crystal Dust": 660,
"Relic of the Future": 661,
"Ritual Catalyst": 662,
"Rocky Mind": 663,
"Roots of Eternity": 664,
"Serpent's Fang": 665,
"Spark of the Oasis": 666,
"Squid": 667,
"Stolen Pearls": 668,
"Sturdy Flesh": 669,
"Tempered Core": 670,
"Subsuming Darkness": 671,
"The Grootslang's Heart": 672,
"Tungsten Chunk": 673,
"Unicorn Horn": 674,
"Unsettling Soul": 675,
"Urdar's Stone": 676,
"Vim Veins": 677,
"Vortexian Event Horizon": 678,
"Weathered Idol": 679,
"Volatile Matter": 680
}

View file

@ -2,11 +2,6 @@
import json import json
with open("dump.json", "r") as infile:
data = json.loads(infile.read())
items = data["items"]
del data["request"]
with open("recipes_compress.json", "r") as infile: with open("recipes_compress.json", "r") as infile:
recipe_data = json.loads(infile.read()) recipe_data = json.loads(infile.read())
@ -16,113 +11,7 @@ with open("ingreds_compress.json", "r") as infile:
ing_data = json.loads(infile.read()) ing_data = json.loads(infile.read())
ings = ing_data["ingredients"] ings = ing_data["ingredients"]
#this data does not have request :) #this data does not have request :)
import os
sets = dict()
item_set_map = dict()
for filename in os.listdir('sets'):
if "json" not in filename:
continue
set_name = filename[1:].split(".")[0].replace("+", " ").replace("%27", "'")
with open("sets/"+filename) as set_info:
set_obj = json.load(set_info)
for item in set_obj["items"]:
item_set_map[item] = set_name
sets[set_name] = set_obj
data["sets"] = sets
translate_mappings = { #this is used for items.
#"name": "name",
#"displayName": "displayName",
#"tier": "tier",
#"set": "set",
"sockets": "slots",
#"type": "type",
#"armorType": "armorType", (deleted)
#"armorColor": "color", (deleted)
#"addedLore": "lore", (deleted)
#"material": "material", (deleted)
"dropType": "drop",
#"quest": "quest",
"restrictions": "restrict",
"damage": "nDam",
"fireDamage": "fDam",
"waterDamage": "wDam",
"airDamage": "aDam",
"thunderDamage": "tDam",
"earthDamage": "eDam",
"attackSpeed": "atkSpd",
"health": "hp",
"fireDefense": "fDef",
"waterDefense": "wDef",
"airDefense": "aDef",
"thunderDefense": "tDef",
"earthDefense": "eDef",
"level": "lvl",
"classRequirement": "classReq",
"strength": "strReq",
"dexterity": "dexReq",
"intelligence": "intReq",
"agility": "agiReq",
"defense": "defReq",
"healthRegen": "hprPct",
"manaRegen": "mr",
"spellDamage": "sdPct",
"damageBonus": "mdPct",
"lifeSteal": "ls",
"manaSteal": "ms",
"xpBonus": "xpb",
"lootBonus": "lb",
"reflection": "ref",
"strengthPoints": "str",
"dexterityPoints": "dex",
"intelligencePoints": "int",
"agilityPoints": "agi",
"defensePoints": "def",
#"thorns": "thorns",
"exploding": "expd",
"speed": "spd",
"attackSpeedBonus": "atkTier",
#"poison": "poison",
"healthBonus": "hpBonus",
"soulPoints": "spRegen",
"emeraldStealing": "eSteal",
"healthRegenRaw": "hprRaw",
"spellDamageRaw": "sdRaw",
"damageBonusRaw": "mdRaw",
"bonusFireDamage": "fDamPct",
"bonusWaterDamage": "wDamPct",
"bonusAirDamage": "aDamPct",
"bonusThunderDamage": "tDamPct",
"bonusEarthDamage": "eDamPct",
"bonusFireDefense": "fDefPct",
"bonusWaterDefense": "wDefPct",
"bonusAirDefense": "aDefPct",
"bonusThunderDefense": "tDefPct",
"bonusEarthDefense": "eDefPct",
"accessoryType": "type",
"identified": "fixID",
#"skin": "skin",
#"category": "category",
"spellCostPct1": "spPct1",
"spellCostRaw1": "spRaw1",
"spellCostPct2": "spPct2",
"spellCostRaw2": "spRaw2",
"spellCostPct3": "spPct3",
"spellCostRaw3": "spRaw3",
"spellCostPct4": "spPct4",
"spellCostRaw4": "spRaw4",
"rainbowSpellDamageRaw": "rainbowRaw",
#"sprint": "sprint",
"sprintRegen": "sprintReg",
"jumpHeight": "jh",
"lootQuality": "lq",
"gatherXpBonus": "gXp",
"gatherSpeed": "gSpd",
}
delete_keys = [ delete_keys = [
"addedLore", "addedLore",
@ -241,12 +130,12 @@ ing_id_mappings = { #specifically for the id field of an ingredient.
"SPELLCOSTRAW3": "spRaw3", "SPELLCOSTRAW3": "spRaw3",
"SPELLCOSTPCT4": "spPct4", "SPELLCOSTPCT4": "spPct4",
"SPELLCOSTRAW4": "spRaw4", "SPELLCOSTRAW4": "spRaw4",
"JUMPHEIGHT": "jh", "JUMP_HEIGHT": "jh",
#"rainbowSpellDamageRaw": "rainbowRaw", #"rainbowSpellDamageRaw": "rainbowRaw",
"SPRINT": "sprint", "STAMINA": "sprint",
"SPRINGREGEN": "sprintReg", "STAMINA_REGEN": "sprintReg",
"GATHERXPBONUS": "gXp", "GATHER_XP_BONUS": "gXp",
"GATHERSPEED": "gSpd", "GATHER_SPEED": "gSpd",
#"lootQuality": "lq", #"lootQuality": "lq",
} }
ing_delete_keys = [ ing_delete_keys = [
@ -256,40 +145,27 @@ ing_delete_keys = [
recipe_translate_mappings = { recipe_translate_mappings = {
"level" : "lvl", "level" : "lvl",
"id" : "name",
} }
recipe_delete_keys = [ #lol recipe_delete_keys = [ #lol
] ]
import os import os
if os.path.exists("id_map.json"): if os.path.exists("ing_map.json"):
with open("id_map.json","r") as id_mapfile: with open("ing_map.json","r") as ing_mapfile:
id_map = json.load(id_mapfile) ing_map = json.load(ing_mapfile)
else: else:
id_map = {item["name"]: i for i, item in enumerate(items)} ing_map = {ing["name"]: i for i, ing in enumerate(ings)}
# wtf is this hpp
if os.path.exists("recipe_map.json"):
with open("recipe_map.json","r") as recipe_mapfile:
recipe_map = json.load(recipe_mapfile)
else:
recipe_map = {recipe["name"]: i for i, recipe in enumerate(recipes)}
texture_names = [] texture_names = []
import base64
for item in items:
for key in delete_keys:
if key in item:
del item[key]
for k, v in translate_mappings.items():
if k in item:
item[v] = item[k]
del item[k]
if not (item["name"] in id_map):
id_map[item["name"]] = len(id_map)
print(f'New item: {item["name"]}')
item["id"] = id_map[item["name"]]
item["type"] = item["type"].lower()
if item["name"] in item_set_map:
item["set"] = item_set_map[item["name"]]
print(ings[0]) print(ings[0])
for ing in ings: for ing in ings:
@ -319,6 +195,10 @@ for ing in ings:
ing['ids'][v] = ing['ids'][k] ing['ids'][v] = ing['ids'][k]
del ing['ids'][k] del ing['ids'][k]
if not (ing["name"] in ing_map):
ing_map[ing["name"]] = len(ing_map)
print(f'New Ingred: {ing["name"]}')
ing["id"] = ing_map[ing["name"]]
for recipe in recipes: for recipe in recipes:
for key in recipe_delete_keys: for key in recipe_delete_keys:
@ -329,23 +209,22 @@ for recipe in recipes:
if k in recipe: if k in recipe:
recipe[v] = recipe[k] recipe[v] = recipe[k]
del recipe[k] del recipe[k]
if not (recipe["name"] in recipe_map):
recipe_map[recipe["name"]] = len(recipe_map)
print(f'New Recipe: {recipe["name"]}')
recipe["id"] = recipe_map[recipe["name"]]
with open("1_20_ci.json", "r") as ci_file:
ci_items = json.load(ci_file)
items.extend(ci_items)
'''with open("id_map.json","w") as id_mapfile:
json.dump(id_map, id_mapfile, indent=2)
with open("clean.json", "w") as outfile:
json.dump(data, outfile, indent=2)
with open("compress.json", "w") as outfile:
json.dump(data, outfile)'''
with open("ingreds_clean.json", "w") as outfile: with open("ingreds_clean.json", "w") as outfile:
json.dump(ing_data, outfile, indent = 2) json.dump(ing_data, outfile, indent = 2)
with open("ingreds_compress2.json", "w") as outfile: with open("ingreds_compress2.json", "w") as outfile:
json.dump(ing_data, outfile) json.dump(ing_data, outfile)
'''with open("recipes_clean.json", "w") as outfile: with open("recipes_clean.json", "w") as outfile:
json.dump(recipe_data, outfile, indent = 2) json.dump(recipe_data, outfile, indent = 2)
with open("recipes_compress2.json", "w") as outfile: with open("recipes_compress2.json", "w") as outfile:
json.dump(recipe_data, outfile)''' json.dump(recipe_data, outfile)
with open("ing_map.json", "w") as ing_mapfile:
json.dump(ing_map, ing_mapfile, indent = 2)
with open("recipe_map.json", "w") as recipe_mapfile:
json.dump(recipe_map,recipe_mapfile,indent = 2)

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -96,11 +96,11 @@ const special_mappings = {
"Sum (Mana Sustain)": new SumQuery(["mr", "ms"]), "Sum (Mana Sustain)": new SumQuery(["mr", "ms"]),
"Sum (Life Sustain)": new SumQuery(["hpr", "ls"]), "Sum (Life Sustain)": new SumQuery(["hpr", "ls"]),
"Sum (Health + Health Bonus)": new SumQuery(["hp", "hpBonus"]), "Sum (Health + Health Bonus)": new SumQuery(["hp", "hpBonus"]),
"No Req Strength": new NegateQuery("strReq"), "No Strength Req": new NegateQuery("strReq"),
"No Req Dexterity": new NegateQuery("dexReq"), "No Dexterity Req": new NegateQuery("dexReq"),
"No Req Intelligence": new NegateQuery("intReq"), "No Intelligence Req": new NegateQuery("intReq"),
"No Req Agility": new NegateQuery("agiReq"), "No Agility Req": new NegateQuery("agiReq"),
"No Req Defense": new NegateQuery("defReq"), "No Defense Req": new NegateQuery("defReq"),
}; };
let itemFilters = document.getElementById("filter-items"); let itemFilters = document.getElementById("filter-items");

View file

@ -1,4 +1,4 @@
const ING_DB_VERSION = 2; const ING_DB_VERSION = 4;
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.js // @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.js

632
recipe_map.json Normal file
View file

@ -0,0 +1,632 @@
{
"Boots-3-5": 0,
"Boots-5-7": 1,
"Bow-1-3": 2,
"Boots-7-9": 3,
"Bow-3-5": 4,
"Bow-5-7": 5,
"Bow-7-9": 6,
"Bracelet-3-5": 7,
"Bracelet-5-7": 8,
"Bracelet-1-3": 9,
"Chestplate-1-3": 10,
"Chestplate-3-5": 11,
"Chestplate-7-9": 12,
"Chestplate-5-7": 13,
"Dagger-1-3": 14,
"Dagger-3-5": 15,
"Dagger-5-7": 16,
"Bracelet-7-9": 17,
"Dagger-7-9": 18,
"Food-3-5": 19,
"Food-1-3": 20,
"Food-5-7": 21,
"Food-7-9": 22,
"Helmet-1-3": 23,
"Helmet-3-5": 24,
"Helmet-7-9": 25,
"Helmet-5-7": 26,
"Necklace-3-5": 27,
"Necklace-1-3": 28,
"Necklace-7-9": 29,
"Necklace-5-7": 30,
"Leggings-1-3": 31,
"Leggings-3-5": 32,
"Leggings-5-7": 33,
"Leggings-7-9": 34,
"Potion-1-3": 35,
"Potion-3-5": 36,
"Potion-5-7": 37,
"Relik-1-3": 38,
"Potion-7-9": 39,
"Relik-5-7": 40,
"Relik-3-5": 41,
"Relik-7-9": 42,
"Boots-1-3": 43,
"Ring-3-5": 44,
"Ring-5-7": 45,
"Ring-7-9": 46,
"Scroll-1-3": 47,
"Scroll-3-5": 48,
"Scroll-5-7": 49,
"Scroll-7-9": 50,
"Spear-1-3": 51,
"Spear-3-5": 52,
"Spear-5-7": 53,
"Spear-7-9": 54,
"Wand-1-3": 55,
"Wand-3-5": 56,
"Wand-5-7": 57,
"Wand-7-9": 58,
"Boots-10-13": 59,
"Boots-13-15": 60,
"Boots-15-17": 61,
"Boots-17-19": 62,
"Bow-10-13": 63,
"Bow-13-15": 64,
"Bracelet-10-13": 65,
"Bracelet-13-15": 66,
"Bracelet-15-17": 67,
"Bow-17-19": 68,
"Bracelet-17-19": 69,
"Chestplate-10-13": 70,
"Chestplate-13-15": 71,
"Chestplate-15-17": 72,
"Bow-15-17": 73,
"Dagger-10-13": 74,
"Dagger-13-15": 75,
"Chestplate-17-19": 76,
"Dagger-17-19": 77,
"Food-13-15": 78,
"Food-15-17": 79,
"Food-10-13": 80,
"Food-17-19": 81,
"Helmet-10-13": 82,
"Helmet-13-15": 83,
"Helmet-15-17": 84,
"Helmet-17-19": 85,
"Necklace-10-13": 86,
"Dagger-15-17": 87,
"Necklace-15-17": 88,
"Necklace-17-19": 89,
"Leggings-10-13": 90,
"Leggings-13-15": 91,
"Leggings-15-17": 92,
"Leggings-17-19": 93,
"Potion-10-13": 94,
"Potion-13-15": 95,
"Potion-15-17": 96,
"Relik-10-13": 97,
"Relik-13-15": 98,
"Relik-15-17": 99,
"Relik-17-19": 100,
"Ring-10-13": 101,
"Ring-13-15": 102,
"Ring-15-17": 103,
"Ring-17-19": 104,
"Scroll-10-13": 105,
"Potion-17-19": 106,
"Scroll-13-15": 107,
"Scroll-15-17": 108,
"Spear-10-13": 109,
"Scroll-17-19": 110,
"Spear-13-15": 111,
"Spear-15-17": 112,
"Spear-17-19": 113,
"Wand-10-13": 114,
"Wand-13-15": 115,
"Wand-15-17": 116,
"Wand-17-19": 117,
"Boots-20-23": 118,
"Boots-23-25": 119,
"Boots-25-27": 120,
"Bow-23-25": 121,
"Bow-20-23": 122,
"Boots-27-29": 123,
"Bow-25-27": 124,
"Bow-27-29": 125,
"Bracelet-20-23": 126,
"Bracelet-23-25": 127,
"Bracelet-25-27": 128,
"Bracelet-27-29": 129,
"Chestplate-23-25": 130,
"Chestplate-25-27": 131,
"Chestplate-20-23": 132,
"Chestplate-27-29": 133,
"Dagger-20-23": 134,
"Dagger-23-25": 135,
"Dagger-25-27": 136,
"Dagger-27-29": 137,
"Food-20-23": 138,
"Food-25-27": 139,
"Food-27-29": 140,
"Helmet-20-23": 141,
"Food-23-25": 142,
"Helmet-23-25": 143,
"Helmet-27-29": 144,
"Helmet-25-27": 145,
"Necklace-20-23": 146,
"Necklace-23-25": 147,
"Necklace-27-29": 148,
"Leggings-20-23": 149,
"Necklace-25-27": 150,
"Leggings-23-25": 151,
"Leggings-25-27": 152,
"Leggings-27-29": 153,
"Potion-20-23": 154,
"Potion-23-25": 155,
"Potion-27-29": 156,
"Potion-25-27": 157,
"Relik-20-23": 158,
"Relik-23-25": 159,
"Relik-25-27": 160,
"Relik-27-29": 161,
"Ring-20-23": 162,
"Ring-23-25": 163,
"Ring-25-27": 164,
"Ring-27-29": 165,
"Scroll-20-23": 166,
"Scroll-23-25": 167,
"Scroll-25-27": 168,
"Scroll-27-29": 169,
"Spear-20-23": 170,
"Spear-23-25": 171,
"Spear-25-27": 172,
"Spear-27-29": 173,
"Wand-20-23": 174,
"Wand-23-25": 175,
"Wand-25-27": 176,
"Wand-27-29": 177,
"Boots-30-33": 178,
"Boots-33-35": 179,
"Boots-35-37": 180,
"Boots-37-39": 181,
"Bow-30-33": 182,
"Bow-33-35": 183,
"Bow-35-37": 184,
"Necklace-13-15": 185,
"Bow-37-39": 186,
"Bracelet-30-33": 187,
"Bracelet-33-35": 188,
"Bracelet-35-37": 189,
"Bracelet-37-39": 190,
"Chestplate-30-33": 191,
"Chestplate-35-37": 192,
"Chestplate-33-35": 193,
"Dagger-30-33": 194,
"Chestplate-37-39": 195,
"Dagger-35-37": 196,
"Dagger-37-39": 197,
"Food-30-33": 198,
"Dagger-33-35": 199,
"Food-33-35": 200,
"Food-35-37": 201,
"Food-37-39": 202,
"Helmet-30-33": 203,
"Helmet-33-35": 204,
"Helmet-35-37": 205,
"Helmet-37-39": 206,
"Necklace-30-33": 207,
"Necklace-33-35": 208,
"Necklace-35-37": 209,
"Necklace-37-39": 210,
"Leggings-33-35": 211,
"Leggings-30-33": 212,
"Leggings-35-37": 213,
"Leggings-37-39": 214,
"Potion-30-33": 215,
"Potion-33-35": 216,
"Potion-35-37": 217,
"Potion-37-39": 218,
"Relik-30-33": 219,
"Relik-33-35": 220,
"Relik-35-37": 221,
"Ring-30-33": 222,
"Relik-37-39": 223,
"Ring-33-35": 224,
"Ring-35-37": 225,
"Ring-37-39": 226,
"Scroll-30-33": 227,
"Scroll-33-35": 228,
"Scroll-35-37": 229,
"Scroll-37-39": 230,
"Spear-30-33": 231,
"Spear-33-35": 232,
"Spear-35-37": 233,
"Spear-37-39": 234,
"Wand-30-33": 235,
"Wand-33-35": 236,
"Wand-35-37": 237,
"Boots-40-43": 238,
"Wand-37-39": 239,
"Boots-45-47": 240,
"Boots-47-49": 241,
"Boots-43-45": 242,
"Bow-40-43": 243,
"Bow-47-49": 244,
"Bow-43-45": 245,
"Bracelet-40-43": 246,
"Bow-45-47": 247,
"Bracelet-45-47": 248,
"Bracelet-47-49": 249,
"Chestplate-43-45": 250,
"Bracelet-43-45": 251,
"Chestplate-40-43": 252,
"Chestplate-45-47": 253,
"Dagger-40-43": 254,
"Chestplate-47-49": 255,
"Dagger-43-45": 256,
"Dagger-47-49": 257,
"Dagger-45-47": 258,
"Food-40-43": 259,
"Food-43-45": 260,
"Food-45-47": 261,
"Food-47-49": 262,
"Helmet-40-43": 263,
"Helmet-43-45": 264,
"Helmet-45-47": 265,
"Necklace-40-43": 266,
"Necklace-43-45": 267,
"Necklace-45-47": 268,
"Helmet-47-49": 269,
"Necklace-47-49": 270,
"Leggings-40-43": 271,
"Leggings-43-45": 272,
"Leggings-45-47": 273,
"Leggings-47-49": 274,
"Potion-43-45": 275,
"Potion-45-47": 276,
"Relik-40-43": 277,
"Potion-47-49": 278,
"Potion-40-43": 279,
"Relik-45-47": 280,
"Ring-40-43": 281,
"Relik-43-45": 282,
"Ring-45-47": 283,
"Relik-47-49": 284,
"Ring-43-45": 285,
"Ring-47-49": 286,
"Scroll-40-43": 287,
"Scroll-43-45": 288,
"Scroll-45-47": 289,
"Scroll-47-49": 290,
"Spear-43-45": 291,
"Spear-40-43": 292,
"Spear-45-47": 293,
"Spear-47-49": 294,
"Wand-40-43": 295,
"Wand-43-45": 296,
"Wand-45-47": 297,
"Wand-47-49": 298,
"Boots-50-53": 299,
"Boots-53-55": 300,
"Boots-55-57": 301,
"Boots-57-59": 302,
"Bow-50-53": 303,
"Bow-55-57": 304,
"Bow-53-55": 305,
"Bow-57-59": 306,
"Bracelet-50-53": 307,
"Bracelet-53-55": 308,
"Bracelet-55-57": 309,
"Bracelet-57-59": 310,
"Chestplate-50-53": 311,
"Chestplate-53-55": 312,
"Chestplate-55-57": 313,
"Chestplate-57-59": 314,
"Dagger-50-53": 315,
"Dagger-53-55": 316,
"Dagger-55-57": 317,
"Food-50-53": 318,
"Food-53-55": 319,
"Food-55-57": 320,
"Dagger-57-59": 321,
"Food-57-59": 322,
"Helmet-50-53": 323,
"Helmet-53-55": 324,
"Helmet-55-57": 325,
"Helmet-57-59": 326,
"Necklace-50-53": 327,
"Necklace-57-59": 328,
"Necklace-53-55": 329,
"Necklace-55-57": 330,
"Leggings-53-55": 331,
"Leggings-55-57": 332,
"Leggings-57-59": 333,
"Potion-53-55": 334,
"Potion-50-53": 335,
"Potion-55-57": 336,
"Relik-50-53": 337,
"Leggings-50-53": 338,
"Relik-53-55": 339,
"Potion-57-59": 340,
"Relik-55-57": 341,
"Relik-57-59": 342,
"Ring-50-53": 343,
"Ring-53-55": 344,
"Ring-55-57": 345,
"Ring-57-59": 346,
"Scroll-50-53": 347,
"Scroll-53-55": 348,
"Scroll-57-59": 349,
"Scroll-55-57": 350,
"Spear-50-53": 351,
"Spear-53-55": 352,
"Spear-55-57": 353,
"Wand-50-53": 354,
"Spear-57-59": 355,
"Wand-55-57": 356,
"Wand-53-55": 357,
"Wand-57-59": 358,
"Boots-60-63": 359,
"Boots-65-67": 360,
"Boots-63-65": 361,
"Boots-67-69": 362,
"Bow-60-63": 363,
"Bow-63-65": 364,
"Bow-67-69": 365,
"Bow-65-67": 366,
"Bracelet-63-65": 367,
"Bracelet-60-63": 368,
"Bracelet-65-67": 369,
"Bracelet-67-69": 370,
"Chestplate-63-65": 371,
"Chestplate-60-63": 372,
"Chestplate-65-67": 373,
"Chestplate-67-69": 374,
"Dagger-60-63": 375,
"Dagger-63-65": 376,
"Dagger-65-67": 377,
"Dagger-67-69": 378,
"Food-60-63": 379,
"Food-63-65": 380,
"Food-67-69": 381,
"Helmet-60-63": 382,
"Helmet-63-65": 383,
"Food-65-67": 384,
"Helmet-65-67": 385,
"Helmet-67-69": 386,
"Necklace-60-63": 387,
"Necklace-63-65": 388,
"Necklace-65-67": 389,
"Necklace-67-69": 390,
"Leggings-63-65": 391,
"Leggings-60-63": 392,
"Leggings-65-67": 393,
"Leggings-67-69": 394,
"Potion-60-63": 395,
"Potion-63-65": 396,
"Potion-67-69": 397,
"Relik-63-65": 398,
"Relik-65-67": 399,
"Potion-65-67": 400,
"Relik-67-69": 401,
"Relik-60-63": 402,
"Ring-60-63": 403,
"Ring-65-67": 404,
"Ring-63-65": 405,
"Ring-67-69": 406,
"Scroll-60-63": 407,
"Scroll-63-65": 408,
"Scroll-67-69": 409,
"Scroll-65-67": 410,
"Spear-63-65": 411,
"Spear-60-63": 412,
"Spear-67-69": 413,
"Wand-60-63": 414,
"Wand-63-65": 415,
"Spear-65-67": 416,
"Wand-65-67": 417,
"Wand-67-69": 418,
"Boots-70-73": 419,
"Boots-73-75": 420,
"Boots-77-79": 421,
"Boots-75-77": 422,
"Bow-75-77": 423,
"Bow-73-75": 424,
"Bracelet-70-73": 425,
"Bow-77-79": 426,
"Bracelet-73-75": 427,
"Bow-70-73": 428,
"Bracelet-75-77": 429,
"Chestplate-70-73": 430,
"Bracelet-77-79": 431,
"Chestplate-73-75": 432,
"Chestplate-75-77": 433,
"Chestplate-77-79": 434,
"Dagger-70-73": 435,
"Dagger-73-75": 436,
"Dagger-75-77": 437,
"Food-70-73": 438,
"Dagger-77-79": 439,
"Food-73-75": 440,
"Food-75-77": 441,
"Food-77-79": 442,
"Helmet-70-73": 443,
"Helmet-73-75": 444,
"Helmet-75-77": 445,
"Helmet-77-79": 446,
"Necklace-70-73": 447,
"Necklace-73-75": 448,
"Necklace-75-77": 449,
"Necklace-77-79": 450,
"Leggings-73-75": 451,
"Leggings-75-77": 452,
"Leggings-77-79": 453,
"Leggings-70-73": 454,
"Potion-70-73": 455,
"Potion-73-75": 456,
"Potion-75-77": 457,
"Potion-77-79": 458,
"Relik-70-73": 459,
"Relik-73-75": 460,
"Relik-75-77": 461,
"Relik-77-79": 462,
"Ring-70-73": 463,
"Ring-73-75": 464,
"Ring-75-77": 465,
"Ring-77-79": 466,
"Scroll-70-73": 467,
"Scroll-73-75": 468,
"Scroll-75-77": 469,
"Scroll-77-79": 470,
"Spear-70-73": 471,
"Spear-73-75": 472,
"Spear-75-77": 473,
"Spear-77-79": 474,
"Wand-70-73": 475,
"Wand-73-75": 476,
"Wand-75-77": 477,
"Wand-77-79": 478,
"Boots-80-83": 479,
"Boots-83-85": 480,
"Boots-85-87": 481,
"Boots-87-89": 482,
"Bow-83-85": 483,
"Bow-85-87": 484,
"Bow-80-83": 485,
"Bracelet-83-85": 486,
"Bracelet-80-83": 487,
"Bracelet-85-87": 488,
"Bow-87-89": 489,
"Bracelet-87-89": 490,
"Chestplate-80-83": 491,
"Chestplate-83-85": 492,
"Chestplate-85-87": 493,
"Chestplate-87-89": 494,
"Dagger-83-85": 495,
"Dagger-80-83": 496,
"Dagger-85-87": 497,
"Dagger-87-89": 498,
"Food-83-85": 499,
"Food-80-83": 500,
"Food-85-87": 501,
"Food-87-89": 502,
"Helmet-80-83": 503,
"Helmet-83-85": 504,
"Helmet-85-87": 505,
"Helmet-87-89": 506,
"Necklace-80-83": 507,
"Necklace-83-85": 508,
"Necklace-85-87": 509,
"Necklace-87-89": 510,
"Leggings-80-83": 511,
"Leggings-83-85": 512,
"Leggings-85-87": 513,
"Leggings-87-89": 514,
"Potion-80-83": 515,
"Potion-83-85": 516,
"Potion-85-87": 517,
"Potion-87-89": 518,
"Relik-80-83": 519,
"Relik-83-85": 520,
"Relik-85-87": 521,
"Ring-83-85": 522,
"Relik-87-89": 523,
"Ring-85-87": 524,
"Ring-80-83": 525,
"Ring-87-89": 526,
"Scroll-80-83": 527,
"Scroll-85-87": 528,
"Scroll-83-85": 529,
"Spear-80-83": 530,
"Scroll-87-89": 531,
"Spear-85-87": 532,
"Wand-80-83": 533,
"Spear-87-89": 534,
"Wand-83-85": 535,
"Wand-85-87": 536,
"Wand-87-89": 537,
"Spear-83-85": 538,
"Boots-93-95": 539,
"Boots-95-97": 540,
"Boots-90-93": 541,
"Boots-97-99": 542,
"Bow-90-93": 543,
"Bow-93-95": 544,
"Bow-95-97": 545,
"Bow-97-99": 546,
"Bracelet-90-93": 547,
"Bracelet-93-95": 548,
"Bracelet-97-99": 549,
"Chestplate-90-93": 550,
"Chestplate-93-95": 551,
"Bracelet-95-97": 552,
"Chestplate-95-97": 553,
"Ring-1-3": 554,
"Chestplate-97-99": 555,
"Dagger-93-95": 556,
"Dagger-90-93": 557,
"Dagger-95-97": 558,
"Dagger-97-99": 559,
"Food-90-93": 560,
"Food-93-95": 561,
"Food-95-97": 562,
"Food-97-99": 563,
"Helmet-90-93": 564,
"Helmet-93-95": 565,
"Helmet-95-97": 566,
"Helmet-97-99": 567,
"Necklace-93-95": 568,
"Necklace-95-97": 569,
"Necklace-97-99": 570,
"Leggings-90-93": 571,
"Necklace-90-93": 572,
"Leggings-93-95": 573,
"Leggings-97-99": 574,
"Potion-90-93": 575,
"Potion-93-95": 576,
"Potion-95-97": 577,
"Relik-90-93": 578,
"Potion-97-99": 579,
"Relik-93-95": 580,
"Relik-95-97": 581,
"Ring-90-93": 582,
"Ring-95-97": 583,
"Ring-93-95": 584,
"Scroll-90-93": 585,
"Scroll-93-95": 586,
"Ring-97-99": 587,
"Scroll-95-97": 588,
"Spear-90-93": 589,
"Spear-93-95": 590,
"Spear-95-97": 591,
"Spear-97-99": 592,
"Relik-97-99": 593,
"Leggings-95-97": 594,
"Wand-90-93": 595,
"Scroll-97-99": 596,
"Wand-93-95": 597,
"Wand-95-97": 598,
"Wand-97-99": 599,
"Boots-100-103": 600,
"Bow-100-103": 601,
"Bracelet-100-103": 602,
"Chestplate-100-103": 603,
"Dagger-100-103": 604,
"Necklace-100-103": 605,
"Potion-100-103": 606,
"Relik-100-103": 607,
"Ring-100-103": 608,
"Scroll-100-103": 609,
"Spear-100-103": 610,
"Leggings-100-103": 611,
"Boots-103-105": 612,
"Bow-103-105": 613,
"Bracelet-103-105": 614,
"Chestplate-103-105": 615,
"Dagger-103-105": 616,
"Food-103-105": 617,
"Helmet-103-105": 618,
"Food-100-103": 619,
"Leggings-103-105": 620,
"Potion-103-105": 621,
"Relik-103-105": 622,
"Wand-100-103": 623,
"Ring-103-105": 624,
"Necklace-103-105": 625,
"Scroll-103-105": 626,
"Spear-103-105": 627,
"Wand-103-105": 628,
"Helmet-100-103": 629
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -28,7 +28,7 @@
.container { .container {
padding: 2% 4% 4%; padding: 2% 4% 4%;
display: grid; display: grid;
grid-template-columns: 0.85fr 0.5fr 0.5fr; grid-template-columns: 0.85fr 0.45fr 0.55fr;
grid-auto-columns: minmax(200px, auto); grid-auto-columns: minmax(200px, auto);
gap: 5px; gap: 5px;
grid-auto-rows: minmax(60px, auto); grid-auto-rows: minmax(60px, auto);