Remove ambivalence, add error logging, add strength boosts
This commit is contained in:
parent
400ad9943c
commit
a310eee0a6
8 changed files with 112 additions and 157 deletions
34
build.js
34
build.js
|
@ -64,59 +64,59 @@ class Build{
|
|||
this.powders[0] = this.powders[0].slice(0,helmet.slots);
|
||||
this.helmet = expandItem(helmet, this.powders[0]);
|
||||
}else{
|
||||
throw new TypeError("No such helmet named ", equipment[0]);
|
||||
throw new TypeError("No such helmet named "+ equipment[0]);
|
||||
}
|
||||
if(itemMap.get(equipment[1]).type === "chestplate") {
|
||||
if(itemMap.get(equipment[1]) && itemMap.get(equipment[1]).type === "chestplate") {
|
||||
const chestplate = itemMap.get(equipment[1]);
|
||||
this.powders[1] = this.powders[1].slice(0,chestplate.slots);
|
||||
this.chestplate = expandItem(chestplate, this.powders[1]);
|
||||
}else{
|
||||
throw new TypeError("No such chestplate named ", equipment[1]);
|
||||
throw new TypeError("No such chestplate named "+ equipment[1]);
|
||||
}
|
||||
if(itemMap.get(equipment[2]).type === "leggings") {
|
||||
if(itemMap.get(equipment[2]) && itemMap.get(equipment[2]).type === "leggings") {
|
||||
const leggings = itemMap.get(equipment[2]);
|
||||
this.powders[2] = this.powders[2].slice(0,leggings.slots);
|
||||
this.leggings = expandItem(leggings, this.powders[2]);
|
||||
}else{
|
||||
throw new TypeError("No such leggings named ", equipment[2]);
|
||||
throw new TypeError("No such leggings named "+ equipment[2]);
|
||||
}
|
||||
if(itemMap.get(equipment[3]).type === "boots") {
|
||||
if(itemMap.get(equipment[3]) && itemMap.get(equipment[3]).type === "boots") {
|
||||
const boots = itemMap.get(equipment[3]);
|
||||
this.powders[3] = this.powders[3].slice(0,boots.slots);
|
||||
this.boots = expandItem(boots, this.powders[3]);
|
||||
}else{
|
||||
throw new TypeError("No such boots named ", equipment[3]);
|
||||
throw new TypeError("No such boots named "+ equipment[3]);
|
||||
}
|
||||
if(itemMap.get(equipment[4]).type === "ring") {
|
||||
if(itemMap.get(equipment[4]) && itemMap.get(equipment[4]).type === "ring") {
|
||||
const ring = itemMap.get(equipment[4]);
|
||||
this.ring1 = expandItem(ring, []);
|
||||
}else{
|
||||
throw new TypeError("No such ring named ", equipment[4]);
|
||||
throw new TypeError("No such ring named "+ equipment[4]);
|
||||
}
|
||||
if(itemMap.get(equipment[5]).type === "ring") {
|
||||
if(itemMap.get(equipment[5]) && itemMap.get(equipment[5]).type === "ring") {
|
||||
const ring = itemMap.get(equipment[5]);
|
||||
this.ring2 = expandItem(ring, []);
|
||||
}else{
|
||||
throw new TypeError("No such ring named ", equipment[5]);
|
||||
throw new TypeError("No such ring named "+ equipment[5]);
|
||||
}
|
||||
if(itemMap.get(equipment[6]).type === "bracelet") {
|
||||
if(itemMap.get(equipment[6]) && itemMap.get(equipment[6]).type === "bracelet") {
|
||||
const bracelet = itemMap.get(equipment[6]);
|
||||
this.bracelet = expandItem(bracelet, []);
|
||||
}else{
|
||||
throw new TypeError("No such bracelet named ", equipment[6]);
|
||||
throw new TypeError("No such bracelet named "+ equipment[6]);
|
||||
}
|
||||
if(itemMap.get(equipment[7]).type === "necklace") {
|
||||
if(itemMap.get(equipment[7]) && itemMap.get(equipment[7]).type === "necklace") {
|
||||
const necklace = itemMap.get(equipment[7]);
|
||||
this.necklace = expandItem(necklace, []);
|
||||
}else{
|
||||
throw new TypeError("No such necklace named ", equipment[7]);
|
||||
throw new TypeError("No such necklace named "+ equipment[7]);
|
||||
}
|
||||
if(itemMap.get(equipment[8]).category === "weapon") {
|
||||
if(itemMap.get(equipment[8]) && itemMap.get(equipment[8]).category === "weapon") {
|
||||
const weapon = itemMap.get(equipment[8]);
|
||||
this.powders[4] = this.powders[4].slice(0,weapon.slots);
|
||||
this.weapon = expandItem(weapon, this.powders[4]);
|
||||
}else{
|
||||
throw new TypeError("No such weapon named ", equipment[8]);
|
||||
throw new TypeError("No such weapon named "+ equipment[8]);
|
||||
}
|
||||
if(level < 1){ //Should these be constants?
|
||||
this.level = 1;
|
||||
|
|
76
clean.json
76
clean.json
|
@ -57924,82 +57924,6 @@
|
|||
"gSpd": 0,
|
||||
"id": 772
|
||||
},
|
||||
{
|
||||
"name": "Ambivalence",
|
||||
"tier": "Legendary",
|
||||
"set": null,
|
||||
"quest": null,
|
||||
"poison": 0,
|
||||
"thorns": 0,
|
||||
"sprint": 0,
|
||||
"category": "accessory",
|
||||
"slots": 0,
|
||||
"drop": "never",
|
||||
"restrict": "Untradable",
|
||||
"hp": 0,
|
||||
"fDef": 70,
|
||||
"wDef": 0,
|
||||
"aDef": 70,
|
||||
"tDef": 70,
|
||||
"eDef": 0,
|
||||
"lvl": 100,
|
||||
"classReq": null,
|
||||
"strReq": 0,
|
||||
"dexReq": 40,
|
||||
"intReq": 0,
|
||||
"agiReq": 40,
|
||||
"defReq": 40,
|
||||
"hprPct": 0,
|
||||
"mr": 0,
|
||||
"sdPct": 250,
|
||||
"mdPct": 0,
|
||||
"ls": 0,
|
||||
"ms": 0,
|
||||
"xpb": 0,
|
||||
"lb": 0,
|
||||
"ref": 0,
|
||||
"str": 0,
|
||||
"dex": 0,
|
||||
"int": -70,
|
||||
"agi": 0,
|
||||
"def": 0,
|
||||
"expd": 0,
|
||||
"spd": 0,
|
||||
"atkTier": 0,
|
||||
"hpBonus": 0,
|
||||
"spRegen": 0,
|
||||
"eSteal": 0,
|
||||
"hprRaw": 0,
|
||||
"sdRaw": 0,
|
||||
"mdRaw": 0,
|
||||
"fDamPct": 0,
|
||||
"wDamPct": 50,
|
||||
"aDamPct": 0,
|
||||
"tDamPct": 0,
|
||||
"eDamPct": 0,
|
||||
"fDefPct": 0,
|
||||
"wDefPct": 0,
|
||||
"aDefPct": 0,
|
||||
"tDefPct": 0,
|
||||
"eDefPct": 0,
|
||||
"type": "necklace",
|
||||
"fixID": true,
|
||||
"spPct1": 130,
|
||||
"spRaw1": 0,
|
||||
"spPct2": 85,
|
||||
"spRaw2": 0,
|
||||
"spPct3": 130,
|
||||
"spRaw3": 0,
|
||||
"spPct4": 100,
|
||||
"spRaw4": 0,
|
||||
"rainbowRaw": 0,
|
||||
"sprintReg": 0,
|
||||
"jh": 0,
|
||||
"lq": 0,
|
||||
"gXp": 0,
|
||||
"gSpd": 0,
|
||||
"id": 773
|
||||
},
|
||||
{
|
||||
"name": "Algaa",
|
||||
"tier": "Rare",
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -50,7 +50,7 @@ function expandItem(item, powders){
|
|||
expandedItem.set("maxRolls",maxRolls);
|
||||
expandedItem.set("powders", powders);
|
||||
|
||||
if(expandedItem.has("eDef")){ //item is armor
|
||||
if(expandedItem.get("category") == "armor"){ //item is armor
|
||||
for(const id of powders){
|
||||
//console.log(powderStats[id]);
|
||||
let powder = powderStats[id];
|
||||
|
@ -708,7 +708,6 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats){
|
|||
//overall average DPS
|
||||
let singleHitDamage = document.createElement("p");
|
||||
singleHitDamage.classList.add("itemp");
|
||||
console.log(stats);
|
||||
singleHitDamage.textContent = "Single Hit Average: " + stats[12].toFixed(2);
|
||||
overallparent_elem.append(singleHitDamage);
|
||||
overallparent_elem.append(document.createElement("br"));
|
||||
|
|
|
@ -206,7 +206,7 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class = "powder-specials">
|
||||
<!--div class = "powder-specials">
|
||||
<div class = "powder-special-stats" style = "grid-column:1;grid-row:1">
|
||||
<div class = "center" id = "powder-special-stats">
|
||||
<p class = "itemp">Powder Specials</p>
|
||||
|
@ -384,7 +384,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
2
load.js
2
load.js
|
@ -1,4 +1,4 @@
|
|||
const DB_VERSION = 14;
|
||||
const DB_VERSION = 15;
|
||||
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.js
|
||||
|
||||
let db;
|
||||
|
|
146
test.js
146
test.js
|
@ -11,9 +11,13 @@ console.log(url_tag);
|
|||
* END testing section
|
||||
*/
|
||||
|
||||
const BUILD_VERSION = "6.8.2";
|
||||
const BUILD_VERSION = "6.8.3";
|
||||
|
||||
document.getElementById("header").textContent = "WynnBuilder version "+BUILD_VERSION+" (db version "+DB_VERSION+")";
|
||||
function setTitle() {
|
||||
document.getElementById("header").textContent = "WynnBuilder version "+BUILD_VERSION+" (db version "+DB_VERSION+")";
|
||||
}
|
||||
|
||||
setTitle();
|
||||
|
||||
let player_build;
|
||||
// Set up item lists for quick access later.
|
||||
|
@ -383,65 +387,91 @@ function encodeBuild() {
|
|||
}
|
||||
|
||||
function calculateBuild(save_skp, skp){
|
||||
save_skp = (typeof save_skp !== 'undefined') ? save_skp : false;
|
||||
/* TODO: implement level changing
|
||||
Make this entire function prettier
|
||||
*/
|
||||
let equipment = [ null, null, null, null, null, null, null, null, null ];
|
||||
for (let i in equipment) {
|
||||
let equip = getValue(equipmentInputs[i]);
|
||||
if (equip === "") equip = "No " + equipment_names[i];
|
||||
equipment[i] = equip;
|
||||
}
|
||||
let powderings = [];
|
||||
for (const i in powderInputs) {
|
||||
// read in two characters at a time.
|
||||
// TODO: make this more robust.
|
||||
let input = getValue(powderInputs[i]);
|
||||
let powdering = [];
|
||||
while (input) {
|
||||
let first = input.slice(0, 2);
|
||||
powdering.push(powderIDs.get(first));
|
||||
input = input.slice(2);
|
||||
try {
|
||||
for (const boost of ["vanish", "warscream", "yourtotem", "allytotem"]) {
|
||||
let elem = document.getElementById(boost+"-boost");
|
||||
elem.classList.remove("toggleOn");
|
||||
}
|
||||
powderings.push(powdering);
|
||||
}
|
||||
//level setting
|
||||
let level = document.getElementById("level-choice").value;
|
||||
if(level === ""){
|
||||
level = 106;
|
||||
}
|
||||
document.getElementById("level-choice").value = level;
|
||||
|
||||
console.log(equipment);
|
||||
player_build = new Build(level, equipment, powderings);
|
||||
console.log(player_build.toString());
|
||||
displayEquipOrder(document.getElementById("build-order"),player_build.equip_order);
|
||||
|
||||
|
||||
|
||||
const assigned = player_build.base_skillpoints;
|
||||
const skillpoints = player_build.total_skillpoints;
|
||||
for (let i in skp_order){ //big bren
|
||||
setText(skp_order[i] + "-skp-base", "Original Value: " + skillpoints[i]);
|
||||
}
|
||||
|
||||
if (save_skp) {
|
||||
// TODO: reduce duplicated code, @updateStats
|
||||
let skillpoints = player_build.total_skillpoints;
|
||||
let delta_total = 0;
|
||||
for (let i in skp_order) {
|
||||
let manual_assigned = skp[i];
|
||||
let delta = manual_assigned - skillpoints[i];
|
||||
skillpoints[i] = manual_assigned;
|
||||
player_build.base_skillpoints[i] += delta;
|
||||
delta_total += delta;
|
||||
save_skp = (typeof save_skp !== 'undefined') ? save_skp : false;
|
||||
/* TODO: implement level changing
|
||||
Make this entire function prettier
|
||||
*/
|
||||
let equipment = [ null, null, null, null, null, null, null, null, null ];
|
||||
for (let i in equipment) {
|
||||
let equip = getValue(equipmentInputs[i]);
|
||||
if (equip === "") equip = "No " + equipment_names[i];
|
||||
equipment[i] = equip;
|
||||
}
|
||||
player_build.assigned_skillpoints += delta_total;
|
||||
}
|
||||
|
||||
calculateBuildStats();
|
||||
let powderings = [];
|
||||
for (const i in powderInputs) {
|
||||
// read in two characters at a time.
|
||||
// TODO: make this more robust.
|
||||
let input = getValue(powderInputs[i]);
|
||||
let powdering = [];
|
||||
while (input) {
|
||||
let first = input.slice(0, 2);
|
||||
let powder = powderIDs.get(first);
|
||||
console.log(powder);
|
||||
if (powder === undefined) {
|
||||
throw new TypeError("Invalid powder " + powder + " in slot " + i);
|
||||
}
|
||||
powdering.push(powder);
|
||||
input = input.slice(2);
|
||||
}
|
||||
powderings.push(powdering);
|
||||
}
|
||||
//level setting
|
||||
let level = document.getElementById("level-choice").value;
|
||||
if(level === ""){
|
||||
level = 106;
|
||||
}
|
||||
document.getElementById("level-choice").value = level;
|
||||
|
||||
console.log(equipment);
|
||||
player_build = new Build(level, equipment, powderings);
|
||||
console.log(player_build.toString());
|
||||
displayEquipOrder(document.getElementById("build-order"),player_build.equip_order);
|
||||
|
||||
|
||||
|
||||
const assigned = player_build.base_skillpoints;
|
||||
const skillpoints = player_build.total_skillpoints;
|
||||
for (let i in skp_order){ //big bren
|
||||
setText(skp_order[i] + "-skp-base", "Original Value: " + skillpoints[i]);
|
||||
}
|
||||
|
||||
if (save_skp) {
|
||||
// TODO: reduce duplicated code, @updateStats
|
||||
let skillpoints = player_build.total_skillpoints;
|
||||
let delta_total = 0;
|
||||
for (let i in skp_order) {
|
||||
let manual_assigned = skp[i];
|
||||
let delta = manual_assigned - skillpoints[i];
|
||||
skillpoints[i] = manual_assigned;
|
||||
player_build.base_skillpoints[i] += delta;
|
||||
delta_total += delta;
|
||||
}
|
||||
player_build.assigned_skillpoints += delta_total;
|
||||
}
|
||||
|
||||
calculateBuildStats();
|
||||
setTitle();
|
||||
}
|
||||
catch (error) {
|
||||
let msg = error.stack;
|
||||
let lines = msg.split("\n");
|
||||
let header = document.getElementById("header");
|
||||
header.textContent = "";
|
||||
for (const line of lines) {
|
||||
let p = document.createElement("p");
|
||||
p.classList.add("itemp");
|
||||
p.textContent = line;
|
||||
header.appendChild(p);
|
||||
}
|
||||
let p2 = document.createElement("p");
|
||||
p2.textContent = "If you believe this is an error, contact hppeng on forums or discord.";
|
||||
header.appendChild(p2);
|
||||
}
|
||||
}
|
||||
|
||||
/* Updates all build statistics based on (for now) the skillpoint input fields and then calculates build stats.
|
||||
|
|
|
@ -4,6 +4,8 @@ NOTE!!!!!!!
|
|||
|
||||
DEMON TIDE 1.20 IS HARD CODED!
|
||||
|
||||
AMBIVALENCE IS REMOVED!
|
||||
|
||||
"""
|
||||
|
||||
import json
|
||||
|
|
Loading…
Reference in a new issue