{"mappings":"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","sources":["src/Banner.js","src/ItemDatabase.js","src/DropSelector.js"],"sourcesContent":["import {database} from \"./ItemDatabase.js\";\nimport { bannerData, dropTables } from \"./data.js\";\nexport class Banner {\n bannerType;\n\n sixStarPity; // either S rank or 6* weapon\n\n currentSixStarPity;\n\n sixStarPityType;\n\n fiveStarPity; // either A rank or 5* weapon\n\n currentFiveStarPity;\n\n fiveStarPityType;\n \n rateUpPercent;\n\n rateUpSelection;\n\n rateUpCategory;\n\n currentRolls;\n\n constructor(bannerType) {\n this.bannerType = bannerType;\n this.currentFiveStarPity = 0;\n this.currentSixStarPity = 0;\n this.rateUpPercent = 70;\n this.rateUpCategory = ``;\n this.parseData();\n }\n\n parseData() {\n this.rateUpPercent = bannerData[this.bannerType].rateUpChance;\n this.rateUpCategory = bannerData[this.bannerType].rateUpCategory;\n this.sixStarPity = bannerData[this.bannerType].sixStarPity;\n this.fiveStarPity = bannerData[this.bannerType].fiveStarPity;\n this.fiveStarPityType = bannerData[this.bannerType].fiveStarPityType;\n this.sixStarPityType = bannerData[this.bannerType].sixStarPityType;\n }\n updatePityDisplay(){\n pityCounter.innerText =\n `${this.rateUpPercent}% rateup\n Five star pity: ${this.currentFiveStarPity} / ${this.fiveStarPity}\n Six star pity: ${this.currentSixStarPity} / ${this.sixStarPity}`;\n }\n roll10(e) {\n e.preventDefault();\n let parent = document.createElement(`div`);\n for (let ind = 1; ind <= 10; ind += 1) {\n // use a map on currentRolls with roll1\n let dropObj = this.roll1();\n let imageDiv = document.createElement(`div`);\n imageDiv.setAttribute(`class`, `${dropObj.category} itemDisplay`);\n let dropImage = document.createElement(`img`);\n dropImage.setAttribute(`src`, `${dropObj.drop.assetPath}`);\n dropImage.setAttribute(`class`, `${dropObj.category}`);\n imageDiv.appendChild(dropImage);\n parent.appendChild(imageDiv);\n }\n this.currentRolls = parent;\n let domParent = document.querySelector(`.parent2`);\n domParent.replaceChildren(...parent.childNodes);\n this.updatePityDisplay();\n }\n checkPity(drop, category){\n //need to override for weapon and transcendant banners\n if(drop.rank === `A` && `constructShard` !== category){\n this.currentFiveStarPity = 0;\n }\n else if(drop.rank === `S` && `constructShard` !== category){\n this.currentFiveStarPity = 0;\n this.currentSixStarPity = 0;\n this.generateFloatingPity(); //do nothing, only FloatingConstructPity has behavior\n }\n if(this.currentFiveStarPity > this.fiveStarPity || this.currentSixStarPity > this.sixStarPity){\n alert(`Pity had a nuclear meltdown. Please take a screenshot of the page and create an issue.`);\n }\n }\n generateFloatingPity(){\n return;\n }\n incrementPity(){\n this.currentFiveStarPity++;\n this.currentSixStarPity++;\n }\n roll1() {\n let drop;\n let category;\n this.incrementPity();\n //need six star pity check first\n //otherwise, can trigger edge case of hitting 5 star pity at 60, giving A construct instead of S construct\n if(this.currentSixStarPity === this.sixStarPity){\n console.log(`six star pity reached`);\n drop = this.pickPity(this.sixStarPityType);\n category = this.sixStarPityType;\n }\n else if(this.currentFiveStarPity === this.fiveStarPity){\n console.log(`five star pity reached`);\n drop = this.pickPity(this.fiveStarPityType);\n category = this.fiveStarPityType;\n }\n else{\n //in case our nonpity drop gave us a lucky early jackpot, we need to apply rate up as well\n category = chance.weighted(\n dropTables[this.bannerType].items,\n dropTables[this.bannerType].rates\n );\n if(category === this.pityCategory || `bOrAConstruct` === category){\n console.log(`Got lucky ${category} drop of rate up category, check rate up success`);\n drop = this.pickPity(category);\n }\n else if(category === this.fiveStarPityType || category === this.sixStarPityType){\n console.log(`Got lucky ${category} drop not of rate up category, pick random`);\n drop = this.pickPity(category);\n }\n else{\n drop = database.pickOneFromCategory(category);\n }\n }\n this.checkPity(drop, category);\n return { drop, category };\n }\n isSuccessRateUp(){\n //weapon banner must override to deal with different rates\n let random = chance.natural({max: 100});\n return random <= this.rateUpPercent;\n }\n pickPityDrop(pityCategory){\n //weapon banner must override to deal with offrates\n return database.pickOneFromCategory(pityCategory);\n }\n pickPity(pityCategory) {\n //don't do rate up calculations if it's not the same category. Prevents A selections from stifling S pity drops\n if(pityCategory !== this.rateUpCategory && !(`bOrAConstruct` === pityCategory && `aConstruct` === this.rateUpCategory)){\n console.log(`${pityCategory} does not have rate up, skip`);\n return database.pickOneFromCategory(pityCategory); \n }\n let getSelectedRateUp = this.isSuccessRateUp();\n if(`Select` !== this.rateUpSelection && this.rateUpSelection && getSelectedRateUp){\n //rate up is not a lie\n console.log(`Rateup ✅, picking rate up selection ${this.rateUpSelection}`);\n return database.pickSpecificDrop(this.rateUpSelection, pityCategory);\n }\n else if(`Select` !== this.rateUpSelection && this.rateUpSelection && !getSelectedRateUp){\n //rate up is a lie\n let drop = this.pickPityDrop(pityCategory);\n while(drop.name === this.rateUpSelection){\n drop = this.pickPityDrop(pityCategory);\n }\n console.log(`Rateup ❌, picking ${drop.name} instead of ${this.rateUpSelection}`);\n return drop;\n }\n else{\n //no rate up\n console.log(`No rate up, pick something random`);\n return database.pickOneFromCategory(pityCategory);\n }\n }\n clearStats(e) {\n e.preventDefault();\n this.currentSixStarPity = 0;\n this.currentFiveStarPity = 0;\n this.updatePityDisplay();\n }\n changeRateUpSelection({target: {value: selection}}) {\n let choiceImage = document.getElementById(`select-target-image`);\n const offrate1Img = document.getElementById(`offrate1-image`);\n const offrate2Img = document.getElementById(`offrate2-image`);\n this.rateUpSelection = selection;\n if (`Select` !== selection) {\n choiceImage.setAttribute(`src`, `${database.pickSpecificDrop(selection, this.rateUpCategory).assetPath}`);\n choiceImage.style.opacity = 100; // there has to be a smarter way to hide the picture when the choice is select?\n } else {\n choiceImage.setAttribute(`src`, ``);\n choiceImage.style.opacity = 0;\n }\n offrate1Img.style.opacity = 0;\n offrate2Img.style.opacity = 0;\n }\n switchIn(){\n //add event listeners, populateBannerTargetSelect if there are any, update pity display\n //future nice to do is to restore \"history\" of the last 10 pulls on this banner\n //methods as event listeners need to add .bind(this) and save a reference https://stackoverflow.com/questions/11565471/removing-event-listener-which-was-added-with-bind\n //banner rate up selection\n const bannerTargetSelect = document.getElementById(`select-target`);\n this.targetSelectListener = this.changeRateUpSelection.bind(this);\n bannerTargetSelect.addEventListener(`change`, this.targetSelectListener);\n\n //clear stats\n const clearStatsButton = document.getElementById(`clearStats`);\n this.clearStatsListener = this.clearStats.bind(this);\n clearStatsButton.addEventListener(`click`, this.clearStatsListener);\n\n //roll 10\n const roll10Button = document.getElementById(`roll10`);\n this.roll10Listener = this.roll10.bind(this);\n roll10Button.addEventListener(`click`, this.roll10Listener);\n\n this.updatePityDisplay();\n this.populateBannerTargetSelect();\n\n }\n switchOut(){\n //remove event listeners\n const bannerTargetSelect = document.getElementById(`select-target`);\n const clearStatsButton = document.getElementById(`clearStats`);\n const roll10Button = document.getElementById(`roll10`);\n bannerTargetSelect.removeEventListener(`change`, this.targetSelectListener);\n clearStatsButton.removeEventListener(`click`, this.clearStatsListener);\n roll10Button.removeEventListener(`click`, this.roll10Listener);\n }\n populateBannerTargetSelect(){\n let options = [];\n let option = document.createElement(`option`);\n option.text = `Select`;\n options.push(option.outerHTML);\n if(this.rateUpCategory){\n for (const choice of database.getReferenceTable(this.rateUpCategory)) {\n option.text = choice.title || choice.frame;\n option.value = choice.frame;\n options.push(option.outerHTML);\n }\n }\n const bannerTargetSelect = document.getElementById(`select-target`);\n bannerTargetSelect.options.length = 0;\n bannerTargetSelect.innerHTML = options.join('\\n');\n this.changeRateUpSelection({target: {value: bannerTargetSelect.value}});\n }\n \n}\n\nexport class ConstructBanner extends Banner{\n constructor(bannerType){\n super(bannerType);\n }\n}\n\nexport class FloatingConstructBanner extends Banner{\n constructor(bannerType){\n super(bannerType);\n }\n parseData(){\n super.parseData();\n this.generateFloatingPity();\n }\n generateFloatingPity(){\n this.sixStarPity = chance.integer({min: 80, max: 100});\n }\n updatePityDisplay(){\n super.updatePityDisplay();\n pityCounter.innerText = `Floating pity is not well-documented.\\nIn-game gacha might have hidden mechanics.\\nHeed simulation at your own risk!!\\n\\n` + pityCounter.innerText;\n }\n}\n\nexport class WeaponBanner extends Banner{\n constructor(bannerType){\n super(bannerType);\n }\n pickPityDrop(pityCategory, isRateUp){\n //need to be generalized for both 5 star and 6 star weapons\n //the 6 star weapon array needs to be processed before returning\n return database.pickTargetedWeapon(this.rateUpSelection, pityCategory, isRateUp);\n }\n pickPity(pityCategory) {\n //pity category applies to both 5 and 6 star weapons\n let getSelectedRateUp = this.isSuccessRateUp();\n if(`Select` !== this.rateUpSelection && this.rateUpSelection && getSelectedRateUp){\n //rate up is not a lie\n console.log(`Rateup ✅, picking rate up selection ${this.rateUpSelection}`);\n return this.pickPityDrop(pityCategory, true);\n }\n else if(`Select` !== this.rateUpSelection && this.rateUpSelection && !getSelectedRateUp){\n //rate up is a lie\n let drop = this.pickPityDrop(pityCategory, false);\n while(drop.name === this.rateUpSelection){\n drop = this.pickPityDrop(pityCategory, false);\n }\n console.log(`Rateup ❌, picking ${drop.name} instead of ${this.rateUpSelection}`);\n return drop;\n }\n else{\n //no rate up\n console.log(`No rate up, pick something random`);\n return database.pickOneFromCategory(pityCategory);\n }\n }\n checkPity(drop, category){\n //need to override for weapon and transcendant banners\n if(`fiveStarWeapon` === category){\n this.currentFiveStarPity = 0;\n }\n else if(`sixStarWeapon` === category){\n this.currentFiveStarPity = 0;\n this.currentSixStarPity = 0;\n }\n if(this.currentFiveStarPity > this.fiveStarPity || this.currentSixStarPity > this.sixStarPity){\n alert(`Pity had a nuclear meltdown. Please take a screenshot of the page and create an issue.`);\n }\n }\n populateBannerTargetSelect(){\n let options = [];\n let option = document.createElement(`option`);\n option.text = `Select`;\n options.push(option.outerHTML);\n if(this.rateUpCategory){\n for(const key in database.getReferenceTable(this.rateUpCategory)){\n option.text = key;\n option.value = option.text;\n options.push(option.outerHTML);\n }\n }\n const bannerTargetSelect = document.getElementById(`select-target`);\n bannerTargetSelect.options.length = 0;\n bannerTargetSelect.innerHTML = options.join('\\n');\n this.changeRateUpSelection({target: {value: bannerTargetSelect.value}});\n }\n changeRateUpSelection(e) {\n super.changeRateUpSelection(e);\n let {target: {value: selection}} = e;\n if(`Select` !== selection){\n const offrate1Img = document.getElementById(`offrate1-image`);\n const offrate2Img = document.getElementById(`offrate2-image`);\n const {offrate1: {assetPath: path1}, offrate2: {assetPath: path2}} = database.getOffratesForWeapon(selection, this.rateUpCategory);\n offrate1Img.setAttribute(`src`, path1);\n offrate2Img.setAttribute(`src`, path2);\n offrate1Img.style.opacity = 100;\n offrate2Img.style.opacity = 100;\n }\n }\n}\n\nexport class TranscendantBanner extends Banner{\n constructor(bannerType){\n super(bannerType);\n this.currentFiveStarPity = -1;\n }\n incrementPity(){\n this.currentSixStarPity++;\n }\n checkPity(drop, category){\n //need to override for weapon and transcendant banners\n if(`transcendant` === category){\n this.currentSixStarPity = 0;\n }\n if(this.currentSixStarPity > this.sixStarPity){\n alert(`Pity had a nuclear meltdown. Please take a screenshot of the page and create an issue.`);\n }\n }\n updatePityDisplay(){\n pityCounter.innerText = \n `${this.rateUpPercent}% rateup\n Transcendant pity: ${this.currentSixStarPity} / ${this.sixStarPity}`;\n }\n}","import {dropTables} from \"./data.js\";\nimport { BOrAConstructSelector, ConstructShardSelector, ConstructSelector, WeaponSelector, ItemSelector } from \"./DropSelector.js\";\nclass ItemDatabase {\n lookupTable;\n constructor() {\n this.generateLookupTable();\n }\n categoryToClass(category){\n switch(category){\n case `bOrAConstruct`:\n return BOrAConstructSelector;\n case `constructShard`:\n return ConstructShardSelector;\n case `bConstruct`:\n case `aConstruct`:\n case `sConstruct`:\n case `transcendant`:\n case `nierConstruct`:\n return ConstructSelector;\n case `sixStarWeapon`:\n case `fiveStarWeapon`:\n case `fourStarWeapon`:\n case `threeStarWeapon`:\n case `twoStarWeapon`:\n return WeaponSelector;\n case `cogs`:\n case `exp`:\n case `overclock`:\n case `fourStarEquipment`:\n return ItemSelector;\n default:\n console.log(\n `categoryToClass: ${category} is not a valid category. Please create an issue.`\n );\n break;\n }\n }\n generateLookupTable(){\n this.lookupTable = {};\n for(const banner in dropTables){\n (dropTables[banner].items).forEach(\n category => {\n if(!(category in this.lookupTable)){\n this.lookupTable[`${category}`] = new (this.categoryToClass(category))(category);\n }\n }\n );\n }\n }\n pickOneFromCategory(category) {\n try{\n //console.log(`Database pick one from ${category}`);\n return this.lookupTable[category].pickOneFromCategory();\n } catch(err){\n console.log(category, err);\n }\n }\n pickSpecificDrop(selection, category, isRateUp = true) {\n try{\n return this.lookupTable[category].pickSpecificDrop(selection, category, isRateUp);\n } catch(err){\n console.log(category, err);\n }\n }\n getReferenceTable(category){\n return this.lookupTable[category].getReferenceTable();\n }\n pickTargetedWeapon(rateUpSelection, category, isRateUp){\n return this.lookupTable[category].pickSpecificDrop(rateUpSelection, category, isRateUp);\n }\n getOffratesForWeapon(selection, category){\n return this.lookupTable[category].getOffratesForWeapon(selection, category);\n }\n}\n\nexport const database = new ItemDatabase();","import {unitData, itemData, weaponData} from \"./data.js\";\nclass BaseSelector{\n dataTable;\n category;\n\n //baseSelector is for constructs. Weapon banner needs to override as needed\n constructor(category){\n this.category = category;\n }\n generateCustomList(){\n //don't call from constructor unless it's needed\n }\n getReferenceTable(category = this.category){\n //some banners need to override this to return its own custom array\n return this.dataTable[category];\n }\n packReturnObject(drop){\n try{\n return { name: drop.name, assetPath: `${this.dataTable.assetPath}${drop.name}.png`, rank: drop.rank };\n } catch(err){\n console.log(category, err);\n }\n }\n pick(){\n return chance.pickone(this.getReferenceTable());\n }\n pickOneFromCategory(){\n let drop = this.pick();\n return this.packReturnObject(drop);\n }\n pickSpecificDrop(selection, category, isRateUp){\n let drop = this.getReferenceTable().find(obj => obj.frame === selection);\n return this.packReturnObject(drop);\n }\n}\n\nexport class ConstructSelector extends BaseSelector{\n constructor(category){\n super(category);\n this.dataTable = unitData;\n }\n packReturnObject(drop){\n return { name: drop.frame, assetPath: `${this.dataTable.assetPath}${drop.frame}.png`, rank: drop.rank };\n }\n}\n\nexport class BOrAConstructSelector extends ConstructSelector{\n list;\n constructor(category){\n super(category);\n this.generateCustomList();\n }\n generateCustomList(){\n this.list = [];\n this.list.push(...(unitData.bConstruct), ...(unitData.aConstruct));\n }\n getReferenceTable(){\n //some banners need to override this to return its own custom array\n return this.list;\n }\n}\n\nexport class ConstructShardSelector extends ConstructSelector{\n list;\n constructor(category){\n super(category);\n this.generateCustomList();\n }\n generateCustomList(){\n this.list = [];\n this.list.push(...(unitData.bConstruct), ...(unitData.aConstruct), ...(unitData.sConstruct));\n }\n getReferenceTable(){\n //some banners need to override this to return its own custom array\n return this.list;\n }\n packReturnObject(drop){\n try{\n return { name: drop.name, assetPath: `${this.dataTable.assetPath}shards/InverShard${drop.frame}.png`, rank: drop.rank };\n } catch(err){\n console.log(category, err);\n }\n }\n}\n\nexport class WeaponSelector extends BaseSelector{\n constructor(category){\n super(category);\n this.dataTable = weaponData;\n }\n packReturnObject(drop, index = 0){\n if(`sixStarWeapon` === this.category){\n if(index !== 0){\n drop = this.getReferenceTable(`sixStarWeapon`)[drop][index];\n }\n drop = this.getReferenceTable(`sixStarWeapon`)[drop][0];\n }\n return { name: drop, assetPath: `${this.dataTable.assetPath}${drop}.png` };\n }\n pickSpecificDrop(selection, category, isRateUp){\n //only used in targeted weapon banner for 5 and 6 star weapon drops\n /*\n Since the dropdown menu choices have spaces but the filenames do not, multi-word six star weapon keys do not match the filenames\n The offrate five star weapons need to reference the offrate array. Therefore we are forced to set up the six star weapon data array to match the dropdown menu's string (which is why offrates have spaces) so the offrate object can be referenced\n Procedure is as such:\n 1. Get onrate array.\n 2. If offrate, get the string of the offrate weapon from the onrate array.\n 3. Use offrate weapon string to get offrate array. This guarantees the next step will reference the correct weapon array\n 4. Check if a five star weapon should be returned. If so return the last element. If not, return the first element.\n */\n let drop = this.getReferenceTable(`sixStarWeapon`)[selection];\n if(!isRateUp){\n drop = this.getReferenceTable(`sixStarWeapon`)[selection][chance.integer({min: 1, max: 2})]; //get offrate weapon string\n drop = this.getReferenceTable(`sixStarWeapon`)[drop]; //get the offrate array\n }\n //we will always have the correct weapon array here\n if(`fiveStarWeapon` === category){\n drop = drop[3];\n }\n else{\n drop = drop[0];\n }\n return { name: drop, assetPath: `${this.dataTable.assetPath}${drop}.png` };\n }\n pick(){\n if(`sixStarWeapon` === this.category){\n return chance.pickone(Object.keys(this.getReferenceTable()));\n }\n else{\n return super.pick();\n }\n }\n getOffratesForWeapon(selection, category){\n let drop = this.getReferenceTable(`sixStarWeapon`)[selection];\n return {offrate1: this.packReturnObject(selection, 1), offrate2: this.packReturnObject(selection, 2)};\n }\n}\n\nexport class ItemSelector extends BaseSelector{\n constructor(category){\n super(category);\n this.dataTable = itemData;\n }\n packReturnObject(drop){\n return { name: drop, assetPath: `${this.dataTable.assetPath}${drop}.png` };\n }\n}\n"],"names":["$7x8Nx","parcelRequire","$828131a16b3c365e$export$3b4e64e77073e307","bannerType","sixStarPity","currentSixStarPity","sixStarPityType","fiveStarPity","currentFiveStarPity","fiveStarPityType","rateUpPercent","rateUpSelection","rateUpCategory","currentRolls","constructor","this","parseData","$3ESMo","bannerData","rateUpChance","updatePityDisplay","pityCounter","innerText","roll10","e","preventDefault","parent","document","createElement","ind","dropObj","roll1","imageDiv","setAttribute","category","dropImage","drop","assetPath","appendChild","querySelector","replaceChildren","childNodes","checkPity","rank","generateFloatingPity","alert","incrementPity","console","log","pickPity","chance","weighted","dropTables","items","rates","pityCategory","database","pickOneFromCategory","isSuccessRateUp","natural","max","pickPityDrop","getSelectedRateUp","pickSpecificDrop","name","clearStats","changeRateUpSelection","target","value","selection","choiceImage","getElementById","offrate1Img","offrate2Img","style","opacity","switchIn","bannerTargetSelect","targetSelectListener","bind","addEventListener","clearStatsButton","clearStatsListener","roll10Button","roll10Listener","populateBannerTargetSelect","switchOut","removeEventListener","options","option","text","push","outerHTML","choice","getReferenceTable","title","frame","length","innerHTML","join","$828131a16b3c365e$export$25abf57ee44fafc8","super","$828131a16b3c365e$export$6acacf27a0be66a5","integer","min","$828131a16b3c365e$export$f6dc28c6c2686749","isRateUp","pickTargetedWeapon","key","offrate1","path1","offrate2","path2","getOffratesForWeapon","$828131a16b3c365e$export$931ac376e10bcf3f","$57c27093f03009f4$export$a62f5db2b03ceea3","lookupTable","generateLookupTable","categoryToClass","$290LY","BOrAConstructSelector","ConstructShardSelector","ConstructSelector","WeaponSelector","ItemSelector","banner","forEach","err","$18fd0582bd06dd25$var$BaseSelector","dataTable","generateCustomList","packReturnObject","pick","pickone","find","obj","$18fd0582bd06dd25$export$70e7f81334bb0cf","unitData","$18fd0582bd06dd25$export$bb5c549a3bd1e962","list","bConstruct","aConstruct","$18fd0582bd06dd25$export$7f296522a910d543","sConstruct","$18fd0582bd06dd25$export$a259bacf402cc988","weaponData","index","Object","keys","$18fd0582bd06dd25$export$cd303fea6ed83a4","itemData"],"version":3,"file":"index.7257f894.js.map"}