2021-01-07 00:36:11 +00:00
/ *
* TESTING SECTION
* /
2021-01-07 10:23:54 +00:00
const url _base = location . href . split ( "#" ) [ 0 ] ;
const url _tag = location . hash . slice ( 1 ) ;
console . log ( url _base ) ;
console . log ( url _tag ) ;
2021-01-07 00:36:11 +00:00
/ *
* END testing section
* /
2021-01-07 00:04:16 +00:00
2021-01-08 05:36:57 +00:00
const BUILD _VERSION = "1.3" ;
2021-01-07 10:30:23 +00:00
document . getElementById ( "header" ) . textContent = "Wynn build calculator " + BUILD _VERSION + " (db version " + DB _VERSION + ")" ;
2021-01-07 00:04:16 +00:00
let player _build ;
2021-01-06 22:51:02 +00:00
// Set up item lists for quick access later.
2021-01-06 12:48:41 +00:00
let armorTypes = [ "helmet" , "chestplate" , "leggings" , "boots" ] ;
let accessoryTypes = [ "ring" , "bracelet" , "necklace" ] ;
let weaponTypes = [ "wand" , "spear" , "bow" , "dagger" , "relik" ] ;
2021-01-08 02:34:07 +00:00
let item _fields = [ "name" , "displayName" , "tier" , "set" , "slots" , "type" , "material" , "drop" , "quest" , "restrict" , "nDam" , "fDam" , "wDam" , "aDam" , "tDam" , "eDam" , "atkSpd" , "hp" , "fDef" , "wDef" , "aDef" , "tDef" , "eDef" , "lvl" , "classReq" , "strReq" , "dexReq" , "intReq" , "defReq" , "agiReq" , "hprPct" , "mr" , "sdPct" , "mdPct" , "ls" , "ms" , "xpb" , "lb" , "ref" , "str" , "dex" , "int" , "agi" , "def" , "thorns" , "exploding" , "spd" , "atkTier" , "poison" , "hpBonus" , "spRegen" , "eSteal" , "hprRaw" , "sdRaw" , "mdRaw" , "fDamPct" , "wDamPct" , "aDamPct" , "tDamPct" , "eDamPct" , "fDefPct" , "wDefPct" , "aDefPct" , "tDefPct" , "eDefPct" , "fixID" , "category" , "spPct1" , "spRaw1" , "spPct2" , "spRaw2" , "spPct3" , "spRaw3" , "spPct4" , "spRaw4" , "rainbowRaw" , "sprint" , "sprintReg" , "jh" , "lq" , "gXp" , "gSpd" , "id" ] ;
let skpReqs = [ "strReq" , "dexReq" , "intReq" , "defReq" , "agiReq" ] ;
2021-01-08 20:17:37 +00:00
let powderIDs = new Map ( ) ;
let powderNames = new Map ( ) ;
let _powderID = 0 ;
for ( const x of [ 'e' , 't' , 'w' , 'f' , 'a' ] ) {
for ( let i = 1 ; i <= 6 ; ++ i ) {
// Support both upper and lowercase, I guess.
powderIDs . set ( x . toUpperCase ( ) + i , _powderID ) ;
powderIDs . set ( x + i , _powderID ) ;
powderNames . set ( _powderID , x + i ) ;
_powderID ++ ;
}
}
let powderInputs = [
"helmet-powder" ,
"chestplate-powder" ,
"leggings-powder" ,
"boots-powder" ,
"weapon-powder" ,
] ;
// Ordering: [dmgMin, dmgMax, convert, defPlus, defMinus (+6 mod 5)]
let powderStats = [
[ 3 , 6 , 17 , 2 , 1 ] , [ 6 , 9 , 21 , 4 , 2 ] , [ 8 , 14 , 25 , 8 , 3 ] , [ 11 , 16 , 31 , 14 , 5 ] , [ 15 , 18 , 38 , 22 , 9 ] , [ 18 , 22 , 46 , 30 , 13 ] ,
[ 1 , 8 , 9 , 3 , 1 ] , [ 1 , 13 , 11 , 5 , 1 ] , [ 2 , 18 , 14 , 9 , 2 ] , [ 3 , 24 , 17 , 14 , 4 ] , [ 3 , 32 , 22 , 20 , 7 ] , [ 5 , 40 , 28 , 28 , 10 ] ,
[ 3 , 4 , 13 , 3 , 1 ] , [ 4 , 7 , 15 , 6 , 1 ] , [ 6 , 10 , 17 , 11 , 2 ] , [ 8 , 12 , 21 , 18 , 4 ] , [ 11 , 14 , 26 , 28 , 7 ] , [ 13 , 17 , 32 , 40 , 10 ] ,
[ 2 , 5 , 14 , 3 , 1 ] , [ 4 , 8 , 16 , 5 , 2 ] , [ 6 , 10 , 19 , 9 , 3 ] , [ 9 , 13 , 24 , 16 , 5 ] , [ 12 , 16 , 30 , 25 , 9 ] , [ 15 , 19 , 37 , 36 , 13 ] ,
[ 2 , 6 , 11 , 3 , 1 ] , [ 4 , 9 , 14 , 6 , 2 ] , [ 7 , 10 , 17 , 10 , 3 ] , [ 9 , 13 , 22 , 16 , 5 ] , [ 13 , 18 , 28 , 24 , 9 ] , [ 16 , 18 , 35 , 34 , 13 ]
] ;
2021-01-06 12:48:41 +00:00
let itemTypes = armorTypes . concat ( accessoryTypes ) . concat ( weaponTypes ) ;
let itemLists = new Map ( ) ;
for ( const it of itemTypes ) {
itemLists . set ( it , [ ] ) ;
}
let itemMap = new Map ( ) ;
2021-01-07 10:23:54 +00:00
let idMap = new Map ( ) ;
2021-01-06 12:48:41 +00:00
2021-01-06 22:51:02 +00:00
/ *
* Function that takes an item list and populates its corresponding dropdown .
* Used for armors and bracelet / necklace .
* /
2021-01-06 12:48:41 +00:00
function populateItemList ( type ) {
let item _list = document . getElementById ( type + "-items" ) ;
for ( const item of itemLists . get ( type ) ) {
let el = document . createElement ( "option" ) ;
el . value = item ;
item _list . appendChild ( el ) ;
}
}
2021-01-06 22:51:02 +00:00
/ *
* Populate dropdowns , add listeners , etc .
* /
2021-01-06 12:48:41 +00:00
function init ( ) {
2021-01-06 22:46:00 +00:00
let noneItems = [
2021-01-08 04:31:29 +00:00
[ "armor" , "helmet" , "No Helmet" ] ,
[ "armor" , "chestplate" , "No Chestplate" ] ,
[ "armor" , "leggings" , "No Leggings" ] ,
[ "armor" , "boots" , "No Boots" ] ,
[ "accessory" , "ring" , "No Ring 1" ] ,
[ "accessory" , "ring" , "No Ring 2" ] ,
[ "accessory" , "bracelet" , "No Bracelet" ] ,
[ "accessory" , "necklace" , "No Necklace" ] ,
[ "weapon" , "wand" , "No Weapon" ] ,
2021-01-07 06:41:41 +00:00
] ;
for ( let i = 0 ; i < 9 ; i ++ ) {
let item = Object ( ) ;
for ( const field of item _fields ) {
item [ field ] = 0 ;
}
2021-01-08 04:31:29 +00:00
item . category = noneItems [ i ] [ 0 ] ;
item . type = noneItems [ i ] [ 1 ] ;
item . name = noneItems [ i ] [ 2 ] ;
2021-01-07 06:41:41 +00:00
item . displayName = item . name ;
item . set = null ;
item . quest = null ;
item . skillpoints = [ 0 , 0 , 0 , 0 , 0 ] ;
item . has _negstat = false ;
item . reqs = [ 0 , 0 , 0 , 0 , 0 ] ;
2021-01-08 01:16:06 +00:00
item . fixID = true ;
item . tier = " " ; //do not get rid of this @hpp
2021-01-07 10:23:54 +00:00
item . id = 10000 + i ;
2021-01-08 20:17:37 +00:00
item . nDam = "0-0" ;
item . eDam = "0-0" ;
item . tDam = "0-0" ;
item . wDam = "0-0" ;
item . fDam = "0-0" ;
item . aDam = "0-0" ;
2021-01-07 06:41:41 +00:00
noneItems [ i ] = item ;
}
2021-01-06 23:31:35 +00:00
items = items . concat ( noneItems ) ;
2021-01-06 12:48:41 +00:00
console . log ( items ) ;
for ( const item of items ) {
2021-01-06 22:51:02 +00:00
itemLists . get ( item . type ) . push ( item . displayName ) ;
itemMap . set ( item . displayName , item ) ;
2021-01-07 10:23:54 +00:00
idMap . set ( item . id , item . displayName ) ;
2021-01-06 12:48:41 +00:00
}
2021-01-06 23:31:35 +00:00
/ * f o r ( c o n s t i t e m o f n o n e I t e m s ) {
2021-01-06 22:46:00 +00:00
itemLists . get ( item . type ) . push ( item . name ) ;
itemMap . set ( item . name , item ) ;
2021-01-06 23:31:35 +00:00
} * /
2021-01-06 12:48:41 +00:00
for ( const armorType of armorTypes ) {
populateItemList ( armorType ) ;
2021-01-06 22:51:02 +00:00
// Add change listener to update armor slots.
2021-01-06 12:48:41 +00:00
document . getElementById ( armorType + "-choice" ) . addEventListener ( "change" , ( event ) => {
let item = itemMap . get ( event . target . value ) ;
if ( item !== undefined ) {
document . getElementById ( armorType + "-slots" ) . textContent = item . slots + " slots" ;
}
else {
document . getElementById ( armorType + "-slots" ) . textContent = "X slots" ;
}
} ) ;
}
let ring1 _list = document . getElementById ( "ring1-items" ) ;
let ring2 _list = document . getElementById ( "ring2-items" ) ;
for ( const ring of itemLists . get ( "ring" ) ) {
let el1 = document . createElement ( "option" ) ;
let el2 = document . createElement ( "option" ) ;
el1 . value = ring ;
el2 . value = ring ;
ring1 _list . appendChild ( el1 ) ;
ring2 _list . appendChild ( el2 ) ;
}
populateItemList ( "bracelet" ) ;
populateItemList ( "necklace" ) ;
let weapon _list = document . getElementById ( "weapon-items" ) ;
for ( const weaponType of weaponTypes ) {
for ( const weapon of itemLists . get ( weaponType ) ) {
let el = document . createElement ( "option" ) ;
el . value = weapon ;
weapon _list . appendChild ( el ) ;
}
}
2021-01-06 22:51:02 +00:00
// Add change listener to update weapon slots.
2021-01-06 12:48:41 +00:00
document . getElementById ( "weapon-choice" ) . addEventListener ( "change" , ( event ) => {
let item = itemMap . get ( event . target . value ) ;
if ( item !== undefined ) {
document . getElementById ( "weapon-slots" ) . textContent = item . slots + " slots" ;
}
else {
document . getElementById ( "weapon-slots" ) . textContent = "X slots" ;
}
} ) ;
2021-01-07 10:23:54 +00:00
populateFromURL ( ) ;
}
/ *
* Populate fields based on url , and calculate build .
* /
function populateFromURL ( ) {
if ( url _tag ) {
let helmet ;
let chestplate ;
let leggings ;
let boots ;
let ring1 ;
let ring2 ;
let bracelet ;
let necklace ;
let weapon ;
2021-01-08 20:17:37 +00:00
let powdering = [ "" , "" , "" , "" , "" ] ;
2021-01-07 10:30:23 +00:00
let info = url _tag . split ( "_" ) ;
2021-01-07 10:23:54 +00:00
let version = info [ 0 ] ;
2021-01-08 20:17:37 +00:00
if ( version === "0" || version === "1" ) {
2021-01-07 10:23:54 +00:00
let equipments = info [ 1 ] ;
helmet = idMap . get ( Base64 . toInt ( equipments . slice ( 0 , 3 ) ) ) ;
chestplate = idMap . get ( Base64 . toInt ( equipments . slice ( 3 , 6 ) ) ) ;
leggings = idMap . get ( Base64 . toInt ( equipments . slice ( 6 , 9 ) ) ) ;
boots = idMap . get ( Base64 . toInt ( equipments . slice ( 9 , 12 ) ) ) ;
ring1 = idMap . get ( Base64 . toInt ( equipments . slice ( 12 , 15 ) ) ) ;
ring2 = idMap . get ( Base64 . toInt ( equipments . slice ( 15 , 18 ) ) ) ;
bracelet = idMap . get ( Base64 . toInt ( equipments . slice ( 18 , 21 ) ) ) ;
necklace = idMap . get ( Base64 . toInt ( equipments . slice ( 21 , 24 ) ) ) ;
weapon = idMap . get ( Base64 . toInt ( equipments . slice ( 24 , 27 ) ) ) ;
}
2021-01-08 20:17:37 +00:00
if ( version === "1" ) {
let powder _info = info [ 1 ] . slice ( 27 ) ;
console . log ( powder _info ) ;
// TODO: Make this run in linear instead of quadratic time...
for ( let i = 0 ; i < 5 ; ++ i ) {
let powders = "" ;
let n _blocks = Base64 . toInt ( powder _info . charAt ( 0 ) ) ;
console . log ( n _blocks + " blocks" ) ;
powder _info = powder _info . slice ( 1 ) ;
for ( let j = 0 ; j < n _blocks ; ++ j ) {
let block = powder _info . slice ( 0 , 5 ) ;
console . log ( block ) ;
let six _powders = Base64 . toInt ( block ) ;
for ( let k = 0 ; k < 6 && six _powders != 0 ; ++ k ) {
powders += powderNames . get ( ( six _powders & 0x1f ) - 1 ) ;
six _powders >>>= 5 ;
}
powder _info = powder _info . slice ( 5 ) ;
}
powdering [ i ] = powders ;
}
}
2021-01-07 10:23:54 +00:00
setValue ( "helmet-choice" , helmet ) ;
2021-01-08 20:17:37 +00:00
setValue ( "helmet-powder" , powdering [ 0 ] ) ;
2021-01-07 10:23:54 +00:00
setValue ( "chestplate-choice" , chestplate ) ;
2021-01-08 20:17:37 +00:00
setValue ( "chestplate-powder" , powdering [ 1 ] ) ;
2021-01-07 10:23:54 +00:00
setValue ( "leggings-choice" , leggings ) ;
2021-01-08 20:17:37 +00:00
setValue ( "leggings-powder" , powdering [ 2 ] ) ;
2021-01-07 10:23:54 +00:00
setValue ( "boots-choice" , boots ) ;
2021-01-08 20:17:37 +00:00
setValue ( "boots-powder" , powdering [ 3 ] ) ;
2021-01-07 10:23:54 +00:00
setValue ( "ring1-choice" , ring1 ) ;
setValue ( "ring2-choice" , ring2 ) ;
setValue ( "bracelet-choice" , bracelet ) ;
setValue ( "necklace-choice" , necklace ) ;
setValue ( "weapon-choice" , weapon ) ;
2021-01-08 20:17:37 +00:00
setValue ( "weapon-powder" , powdering [ 4 ] ) ;
2021-01-07 10:23:54 +00:00
setValue ( "str-skp" , "0" ) ;
setValue ( "dex-skp" , "0" ) ;
setValue ( "int-skp" , "0" ) ;
setValue ( "def-skp" , "0" ) ;
setValue ( "agi-skp" , "0" ) ;
calculateBuild ( ) ;
}
}
function encodeBuild ( ) {
if ( player _build ) {
2021-01-08 20:17:37 +00:00
// let build_string = "0_" + Base64.fromIntN(player_build.helmet.id, 3) +
// Base64.fromIntN(player_build.chestplate.id, 3) +
// Base64.fromIntN(player_build.leggings.id, 3) +
// Base64.fromIntN(player_build.boots.id, 3) +
// Base64.fromIntN(player_build.ring1.id, 3) +
// Base64.fromIntN(player_build.ring2.id, 3) +
// Base64.fromIntN(player_build.bracelet.id, 3) +
// Base64.fromIntN(player_build.necklace.id, 3) +
// Base64.fromIntN(player_build.weapon.id, 3);
let build _string = "1_" + Base64 . fromIntN ( player _build . helmet . id , 3 ) +
2021-01-07 10:23:54 +00:00
Base64 . fromIntN ( player _build . chestplate . id , 3 ) +
Base64 . fromIntN ( player _build . leggings . id , 3 ) +
Base64 . fromIntN ( player _build . boots . id , 3 ) +
Base64 . fromIntN ( player _build . ring1 . id , 3 ) +
Base64 . fromIntN ( player _build . ring2 . id , 3 ) +
Base64 . fromIntN ( player _build . bracelet . id , 3 ) +
Base64 . fromIntN ( player _build . necklace . id , 3 ) +
Base64 . fromIntN ( player _build . weapon . id , 3 ) ;
2021-01-08 20:17:37 +00:00
for ( const _powderset of player _build . powders ) {
let n _bits = Math . ceil ( _powderset . length / 6 ) ;
build _string += Base64 . fromIntN ( n _bits , 1 ) ; // Hard cap of 378 powders.
// Slice copy.
let powderset = _powderset . slice ( ) ;
while ( powderset . length != 0 ) {
let firstSix = powderset . slice ( 0 , 6 ) . reverse ( ) ;
let powder _hash = 0 ;
for ( const powder of firstSix ) {
powder _hash = ( powder _hash << 5 ) + 1 + powder ; // LSB will be extracted first.
}
build _string += Base64 . fromIntN ( powder _hash , 5 ) ;
powderset = powderset . slice ( 6 ) ;
}
}
2021-01-07 10:23:54 +00:00
return build _string ;
}
return "" ;
2021-01-06 12:48:41 +00:00
}
2021-01-06 20:54:15 +00:00
function calculateBuild ( ) {
2021-01-06 23:31:35 +00:00
/ * T O D O : i m p l e m e n t l e v e l c h a n g i n g
Make this entire function prettier
* /
2021-01-08 20:17:37 +00:00
let helmet = getValue ( "helmet-choice" ) ;
let chestplate = getValue ( "chestplate-choice" ) ;
let leggings = getValue ( "leggings-choice" ) ;
let boots = getValue ( "boots-choice" ) ;
let ring1 = getValue ( "ring1-choice" ) ;
let ring2 = getValue ( "ring2-choice" ) ;
let bracelet = getValue ( "bracelet-choice" ) ;
let necklace = getValue ( "necklace-choice" ) ;
let weapon = getValue ( "weapon-choice" ) ;
2021-01-06 23:31:35 +00:00
if ( helmet === "" ) {
helmet = "No Helmet" ;
}
if ( chestplate === "" ) {
chestplate = "No Chestplate" ;
}
if ( leggings === "" ) {
leggings = "No Leggings" ;
}
if ( boots === "" ) {
boots = "No Boots" ;
}
if ( ring1 === "" ) {
ring1 = "No Ring 1" ;
}
if ( ring2 === "" ) {
ring2 = "No Ring 2" ;
}
if ( bracelet === "" ) {
bracelet = "No Bracelet" ;
}
if ( necklace === "" ) {
necklace = "No Necklace" ;
}
if ( weapon === "" ) {
weapon = "No Weapon" ;
}
2021-01-08 20:17:37 +00:00
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 ) ;
}
powderings . push ( powdering ) ;
}
2021-01-07 00:04:16 +00:00
player _build = new Build (
2021-01-06 20:54:15 +00:00
106 ,
2021-01-06 23:31:35 +00:00
itemMap . get ( helmet ) ,
itemMap . get ( chestplate ) ,
itemMap . get ( leggings ) ,
itemMap . get ( boots ) ,
itemMap . get ( ring1 ) ,
itemMap . get ( ring2 ) ,
itemMap . get ( bracelet ) ,
itemMap . get ( necklace ) ,
itemMap . get ( weapon ) ,
2021-01-08 20:17:37 +00:00
powderings
2021-01-06 20:54:15 +00:00
) ;
2021-01-06 22:46:00 +00:00
console . log ( player _build . toString ( ) ) ;
2021-01-07 06:41:41 +00:00
2021-01-07 08:34:31 +00:00
let equip _order _text = "Equip order: <br>" ;
for ( const item of player _build . equip _order ) {
equip _order _text += item . displayName + "<br>" ;
}
setHTML ( "build-order" , equip _order _text ) ;
2021-01-07 08:17:53 +00:00
2021-01-08 05:36:57 +00:00
const assigned = player _build . base _skillpoints ;
const skillpoints = player _build . total _skillpoints ;
2021-01-08 20:21:31 +00:00
2021-01-08 20:14:23 +00:00
let skp _order = [ "str" , "dex" , "int" , "def" , "agi" ] ;
let skp _effects = [ "% more damage dealt." , "% chance to crit." , "% spell cost reduction." , "% less damage taken." , "% chance to dodge." ] ;
for ( let i in skp _order ) { //big bren
setText ( skp _order [ i ] + "-skp-assign" , "Before Boosts: " + assigned [ i ] ) ;
setValue ( skp _order [ i ] + "-skp" , skillpoints [ i ] ) ;
if ( assigned [ i ] <= 100 ) {
setText ( skp _order [ i ] + "-skp-base" , "Original Value: " + skillpoints [ i ] ) ;
} else {
setHTML ( skp _order [ i ] + "-skp-base" , "Original Value: " + skillpoints [ i ] + "<br>WARNING: cannot assign " + assigned [ i ] + " skillpoints naturally." ) ;
}
2021-01-08 20:21:31 +00:00
setText ( skp _order [ i ] + "-skp-pct" , ( skillPointsToPercentage ( skillpoints [ i ] ) * 100 ) . toFixed ( 1 ) . concat ( skp _effects [ i ] ) ) ;
2021-01-08 20:14:23 +00:00
}
console . log ( skillpoints ) ;
if ( player _build . assigned _skillpoints > levelToSkillPoints ( player _build . level ) ) {
setHTML ( "summary-box" , "Summary: Assigned " + player _build . assigned _skillpoints + " skillpoints.<br>" + "WARNING: Too many skillpoints need to be assigned!<br> For level " + player _build . level + ", there are only " + levelToSkillPoints ( player _build . level ) + " skill points available." ) ;
} else {
setText ( "summary-box" , "Summary: Assigned " + player _build . assigned _skillpoints + " skillpoints." ) ;
}
2021-01-07 08:34:31 +00:00
2021-01-08 01:16:06 +00:00
displayExpandedItem ( expandItem ( player _build . helmet ) , "build-helmet" ) ;
displayExpandedItem ( expandItem ( player _build . chestplate ) , "build-chestplate" ) ;
displayExpandedItem ( expandItem ( player _build . leggings ) , "build-leggings" ) ;
displayExpandedItem ( expandItem ( player _build . boots ) , "build-boots" ) ;
displayExpandedItem ( expandItem ( player _build . ring1 ) , "build-ring1" ) ;
displayExpandedItem ( expandItem ( player _build . ring2 ) , "build-ring2" ) ;
displayExpandedItem ( expandItem ( player _build . bracelet ) , "build-bracelet" ) ;
displayExpandedItem ( expandItem ( player _build . necklace ) , "build-necklace" ) ;
displayExpandedItem ( expandItem ( player _build . weapon ) , "build-weapon" ) ;
2021-01-08 20:17:37 +00:00
calculateBuildStats ( ) ;
}
function calculateBuildStats ( ) {
2021-01-08 02:34:07 +00:00
let meleeStats = player _build . getMeleeStats ( ) ;
//nDamAdj,eDamAdj,tDamAdj,wDamAdj,fDamAdj,aDamAdj,totalDamNorm,totalDamCrit,normDPS,critDPS,avgDPS
2021-01-08 20:17:37 +00:00
for ( let i = 0 ; i < 6 ; ++ i ) {
for ( let j in meleeStats [ i ] ) {
meleeStats [ i ] [ j ] = Math . round ( meleeStats [ i ] [ j ] ) ;
}
}
for ( let i = 6 ; i < 8 ; ++ i ) {
for ( let j in meleeStats [ i ] ) {
meleeStats [ i ] [ j ] = Math . round ( meleeStats [ i ] [ j ] ) ;
}
}
2021-01-08 02:34:07 +00:00
let meleeSummary = "" ;
meleeSummary = meleeSummary . concat ( "<h1><u>Melee Stats</u></h1>" ) ;
2021-01-08 20:14:23 +00:00
meleeSummary = meleeSummary . concat ( "<h2>Average DPS: " , Math . round ( meleeStats [ 10 ] ) , "</h2> <br>" ) ;
let attackSpeeds = [ "SUPER SLOW" , "VERY SLOW" , "SLOW" , "NORMAL" , "FAST" , "VERY FAST" , "SUPER FAST" ] ;
meleeSummary = meleeSummary . concat ( "<b>Attack Speed: " , attackSpeeds [ meleeStats [ 11 ] ] , "</b><br><br>" ) ;
2021-01-08 02:34:07 +00:00
meleeSummary = meleeSummary . concat ( "<b>Non-Crit Stats: </b><br>" ) ;
2021-01-08 17:30:36 +00:00
let damagePrefixes = [ "Neutral Damage: " , "Earth Damage: " , "Thunder Damage: " , "Water Damage: " , "Fire Damage: " , "Air Damage: " ] ;
2021-01-08 20:14:23 +00:00
for ( let i = 0 ; i < 6 ; i ++ ) {
2021-01-08 17:30:36 +00:00
if ( meleeStats [ i ] [ 0 ] > 0 ) {
meleeSummary = meleeSummary . concat ( damagePrefixes [ i ] , meleeStats [ i ] [ 0 ] , " -> " , meleeStats [ i ] [ 1 ] , "<br>" ) ;
}
2021-01-08 02:34:07 +00:00
}
meleeSummary = meleeSummary . concat ( "<br>Total Damage: " , meleeStats [ 6 ] [ 0 ] , " -> " , meleeStats [ 6 ] [ 1 ] , "<br>" ) ;
meleeSummary = meleeSummary . concat ( "Normal DPS: " , Math . round ( meleeStats [ 8 ] ) , "<br><br>" ) ;
meleeSummary = meleeSummary . concat ( "<b>Crit Stats: </b><br>" ) ;
2021-01-08 20:14:23 +00:00
for ( let i = 0 ; i < 6 ; i ++ ) {
2021-01-08 17:30:36 +00:00
if ( meleeStats [ i ] [ 2 ] > 0 ) {
meleeSummary = meleeSummary . concat ( damagePrefixes [ i ] , meleeStats [ i ] [ 2 ] , " -> " , meleeStats [ i ] [ 3 ] , "<br>" ) ;
}
2021-01-08 02:34:07 +00:00
}
meleeSummary = meleeSummary . concat ( "<br>Total Damage: " , meleeStats [ 7 ] [ 0 ] , " -> " , meleeStats [ 7 ] [ 1 ] , "<br>" ) ;
meleeSummary = meleeSummary . concat ( "Crit DPS: " , Math . round ( meleeStats [ 9 ] ) , "<br><br>" ) ;
2021-01-08 20:14:23 +00:00
setHTML ( "build-melee-stats" , "" . concat ( meleeSummary ) ) ; //basically complete function
let defenseStats = "" ;
setHTML ( "build-defense-stats" , "" . concat ( defenseStats ) ) ;
2021-01-07 10:23:54 +00:00
location . hash = encodeBuild ( ) ;
2021-01-07 08:11:54 +00:00
}
2021-01-08 03:15:02 +00:00
2021-01-08 17:30:36 +00:00
2021-01-06 20:54:15 +00:00
2021-01-08 01:16:06 +00:00
2021-01-06 20:54:15 +00:00
function resetFields ( ) {
2021-01-07 06:41:41 +00:00
setValue ( "helmet-choice" , "" ) ;
setValue ( "helmet-powder" , "" ) ;
setValue ( "chestplate-choice" , "" ) ;
setValue ( "chestplate-powder" , "" ) ;
setValue ( "leggings-choice" , "" ) ;
setValue ( "leggings-powder" , "" ) ;
setValue ( "boots-choice" , "" ) ;
setValue ( "boots-powder" , "" ) ;
setValue ( "ring1-choice" , "" ) ;
setValue ( "ring2-choice" , "" ) ;
setValue ( "bracelet-choice" , "" ) ;
setValue ( "necklace-choice" , "" ) ;
setValue ( "weapon-choice" , "" ) ;
setValue ( "weapon-powder" , "" ) ;
2021-01-07 10:23:54 +00:00
setValue ( "str-skp" , "0" ) ;
setValue ( "dex-skp" , "0" ) ;
setValue ( "int-skp" , "0" ) ;
setValue ( "def-skp" , "0" ) ;
setValue ( "agi-skp" , "0" ) ;
2021-01-08 01:16:06 +00:00
location . hash = "" ;
2021-01-06 22:46:00 +00:00
}
2021-01-07 00:08:19 +00:00
load _init ( init ) ;
2021-01-08 01:16:06 +00:00