wynnbuilder-forked-for-changes/js/load_ing.js

245 lines
7.8 KiB
JavaScript
Raw Permalink Normal View History

const ING_DB_VERSION = 31;
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.js
let idb;
let ireload = false;
let iload_in_progress = false;
2021-04-02 22:19:22 +00:00
let iload_complete = false;
let ings;
let recipes;
let ingMap = new Map();
let ingList = [];
let recipeMap;
let recipeList = [];
let ingIDMap = new Map();
let recipeIDMap;
/*
* Load item set from local DB. Calls init() on success.
*/
async function ing_load_local() {
return new Promise(function(resolve, reject) {
let get_tx = idb.transaction(['ing_db', 'recipe_db'], 'readonly');
let ings_store = get_tx.objectStore('ing_db');
let recipes_store = get_tx.objectStore('recipe_db');
let request3 = ings_store.getAll();
request3.onerror = function(event) {
reject("Could not read local ingredient db...");
}
request3.onsuccess = function(event) {
console.log("Successfully read local ingredient db.");
}
2021-04-02 21:53:18 +00:00
let request4 = recipes_store.getAll();
request4.onerror = function(event) {
reject("Could not read local recipe db...");
}
2021-04-02 21:53:18 +00:00
request4.onsuccess = function(event) {
console.log("Successfully read local recipe db.");
}
get_tx.oncomplete = function(event) {
ings = request3.result;
2021-04-02 21:53:18 +00:00
recipes = request4.result;
init_ing_maps();
2021-04-02 22:19:22 +00:00
iload_complete = true;
idb.close();
resolve()
}
});
}
function clean_ing(ing) {
if (ing.remapID === undefined) {
if (ing.displayName === undefined) {
ing.displayName = ing.name;
}
}
}
async function load_ings_old_version(version_str) {
iload_in_progress = true;
let getUrl = window.location;
let baseUrl = `${getUrl.protocol}//${getUrl.host}/`;
// No random string -- we want to use caching
let url = `${baseUrl}/data/${version_str}/ingreds.json`;
let result = await (await fetch(url)).json();
ings = result;
for (const id in ings) {
clean_ing(ings[id]);
}
2.0.3 update (#260) * Mage atree changes * Bump version to 2.0.3.1 just tree for now * Warrior tree :pray: * Shaman tree WIP some things are too jank to stay * Fixes to bamboozle behavior also echo was -60% instead of -65% in the file??? wtf * Shurikens damage boost by echo meme * Fix description text in echo, update old version atree file * Fix shaman tree thanks spegg! * Spegg atree changes assassin tree fixed many of my shaman mistakes and other changes we missed over the months somehow? * Updated archer ability tree Thanks @mr_me! All credit to them. * Fixes to spegg's fixes implement beast lore * Change how Chant of the Lunatic is calculated coursing restraints ingame is 15% damage bonus * Updated ingredients manually thanks @watermelon (snownlite)! * Forgor to bump ing db version * Fix ingredient display jank * 2.0.3 items (#259) * API update also add new IDs to a bunch of places... tech debt whyyy * Forgot to update ingreds... * Change heal power ID name to stack with tree abils, fix multi totem effect on totemic shatter and req for mana traps * Forgot to bump item db version * Implement major IDs not implemented: Gentle Glow, and Forest's Blessing damage increase (since I don't know the exact numbers) and radiance boost is not implemented (radiance is currently handled way too jank) might wait for buffs rework to handle radiance. * patch item searcher TODO: make this not disgusting... build_encode_decode file has gotten too big --------- Co-authored-by: hppeng <hppeng> Co-authored-by: RawFish69 <108964215+RawFish69@users.noreply.github.com>
2023-07-15 01:34:30 +00:00
url = `${baseUrl}/data/${version_str}/recipes.json`;
result = await (await fetch(url)).json();
recipes = result.recipes;
init_maps();
iload_complete = true;
}
/*
* Load item set from remote DB (aka a big json file). Calls init() on success.
*/
async function load_ings() {
let getUrl = window.location;
let baseUrl = `${getUrl.protocol}//${getUrl.host}/`;
// "Random" string to prevent caching!
let url = baseUrl + "/ingreds_compress.json?"+new Date();
let result = await (await fetch(url)).json();
result = await (await fetch(url)).json();
ings = result;
url = baseUrl + "/recipes_compress.json?"+new Date();
result = await (await fetch(url)).json();
recipes = result.recipes;
// https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/clear
2021-01-19 17:32:27 +00:00
/*let clear_tx2 = db.transaction(['ing_db'], 'readwrite');
let clear_ings = clear_tx2.objectStore('ing_db');
let clear_tx3 = db.transaction(['recipe_db'], 'readwrite');
let clear_recipes = clear_tx3.objectStore('recipe_db');
await clear_ings.clear();
await clear_recipes.clear();
await clear_tx2.complete;
2021-01-19 17:32:27 +00:00
await clear_tx3.complete;*/
let add_promises = [];
let add_tx2 = idb.transaction(['ing_db'], 'readwrite');
let ings_store = add_tx2.objectStore('ing_db');
for (const id in ings) {
clean_ing(ings[id]);
add_promises.push(ings_store.add(ings[id], id));
}
let add_tx3 = idb.transaction(['recipe_db'], 'readwrite');
let recipes_store = add_tx3.objectStore('recipe_db');
for (const recipe in recipes) {
add_promises.push(recipes_store.add(recipes[recipe], recipe));
}
add_promises.push(add_tx2.complete);
add_promises.push(add_tx3.complete);
await Promise.all(add_promises);
init_ing_maps();
iload_complete = true;
idb.close();
}
async function load_ing_init() {
return new Promise((resolve, reject) => {
let request = window.indexedDB.open("ing_db", ING_DB_VERSION)
request.onerror = function() {
reject("DB failed to open...");
}
request.onsuccess = async function() {
idb = request.result;
if (iload_in_progress) {
while (!iload_complete) {
await sleep(100);
}
console.log("Skipping load...")
}
else {
iload_in_progress = true
if (ireload) {
console.log("Using new data...")
await load_ings();
}
else {
console.log("Using stored data...")
await ing_load_local();
}
}
resolve();
}
request.onupgradeneeded = function(e) {
ireload = true;
let idb = e.target.result;
try {
idb.deleteObjectStore('ing_db');
}
catch (error) {
console.log("Could not delete ingredient DB. This is probably fine");
}
try {
idb.deleteObjectStore('recipe_db');
}
catch (error) {
console.log("Could not delete recipe DB. This is probably fine");
}
idb.createObjectStore('ing_db');
idb.createObjectStore('recipe_db');
console.log("DB setup complete...");
}
});
}
function init_ing_maps() {
recipeMap = new Map();
recipeIDMap = new Map();
let ing = {
name: "No Ingredient",
displayName: "No Ingredient",
tier: 0,
lvl: 0,
skills: ["ARMOURING", "TAILORING", "WEAPONSMITHING", "WOODWORKING", "JEWELING", "COOKING", "ALCHEMISM", "SCRIBING"],
ids: {},
itemIDs: {"dura": 0, "strReq": 0, "dexReq": 0,"intReq": 0,"defReq": 0,"agiReq": 0,},
consumableIDs: {"dura": 0, "charges": 0},
posMods: {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0},
id: 4000
};
ingMap.set(ing.displayName, ing);
ingList.push(ing.displayName);
ingIDMap.set(ing.id, ing.displayName);
let numerals = new Map([[1, "I"], [2, "II"], [3, "III"], [4, "IV"], [5, "V"], [6, "VI"]]);
// pairs of (dura, req)
let powder_ing_info = [
[-35,0],[-52.5,0],[-70,10],[-91,20],[-112,28],[-133,36]
];
for (let i = 0; i < 5; i ++) {
for (let powder_tier = 0; powder_tier < 6; ++powder_tier) {
powder_info = powder_ing_info[powder_tier];
let ing = {
name: "" + damageClasses[i+1] + " Powder " + numerals.get(powder_tier + 1),
tier: 0,
lvl: 0,
skills: ["ARMOURING", "TAILORING", "WEAPONSMITHING", "WOODWORKING", "JEWELING"],
ids: {},
isPowder: true,
pid: 6*i + powder_tier,
itemIDs: {"dura": powder_info[0], "strReq": 0, "dexReq": 0,"intReq": 0,"defReq": 0,"agiReq": 0},
consumableIDs: {"dura": 0, "charges": 0},
posMods: {"left": 0, "right": 0, "above": 0, "under": 0, "touching": 0, "notTouching": 0}
};
ing.id = 4001 + ing.pid;
ing.displayName = ing.name;
ing.itemIDs[skp_order[i] + "Req"] = powder_info[1];
ingMap.set(ing.displayName, ing);
ingList.push(ing.displayName);
ingIDMap.set(ing.id, ing.displayName);
}
}
for (const ing of ings) {
ingMap.set(ing.displayName, ing);
ingList.push(ing.displayName);
ingIDMap.set(ing.id, ing.displayName);
}
for (const recipe of recipes) {
recipeMap.set(recipe.name, recipe);
recipeList.push(recipe.name);
recipeIDMap.set(recipe.id, recipe.name);
}
2021-04-01 06:52:43 +00:00
}