diff --git a/components/characters/Talents.jsx b/components/characters/Talents.jsx index bc21507f5..1099392de 100644 --- a/components/characters/Talents.jsx +++ b/components/characters/Talents.jsx @@ -5,11 +5,6 @@ import Tooltip from '../Tooltip'; import { Box, Stack, Tab, Tabs, Typography } from '@mui/material'; import { Breakdown, TalentTooltip } from '../common/styles'; import InfoIcon from '@mui/icons-material/Info'; -import { isArtifactAcquired } from '@parsers/sailing'; -import { getAtomBonus } from '@parsers/atomCollider'; -import { getAchievementStatus } from '@parsers/achievements'; -import { getSaltLickBonus } from '@parsers/saltLick'; -import { merits, randomList } from '../../data/website-data'; const Talents = ({ @@ -112,9 +107,13 @@ const Talents = ({ aria-label={`star-sign-tab`} icon={}/> - {activeTab === STAR_TAB_INDEX ? Specials {specialsTab + 1} : + {activeTab === STAR_TAB_INDEX ? Specials {specialsTab + 1} : {cleanUnderscore(talents?.[activeTab]?.name)}} - Total Points Spent: {spentTalentPoints} + Total Points Spent: {spentTalentPoints} Added levels: {selectedAddedLevels} }> @@ -123,23 +122,23 @@ const Talents = ({
{activeTalents?.orderedTalents?.map((talentDetails, index) => { - const { talentId, level, maxLevel, name } = talentDetails; + const { talentId, level, baseLevel, maxLevel, name } = talentDetails; if (index >= 15) return null; // if (-1 < this._SkillIconSelected) - const artifact = isArtifactAcquired(account?.sailing?.artifacts, 'Fury_Relic') - const winnerBonus = 0; - const atomBonus = getAtomBonus(account, 'Oxygen_-_Library_Booker'); - const achievementBonus = getAchievementStatus(account?.achievements, 145); - const saltLickBonus = getSaltLickBonus(account?.saltLick, 4); - const unavailableLibraryBook = randomList?.[16]?.split(' ').map((num) => Number(num)); - const isBookUnavailable = unavailableLibraryBook.includes(talentId); - const maxBookLevel = Math.round(125 + artifact?.bonus - + winnerBonus - + 10 * Math.min(atomBonus, 1) - + (Math.min(5, Math.max(0, 5 * achievementBonus)) - + saltLickBonus + merits?.[2]?.[2]?.bonusPerLevel - * account?.tasks?.[2]?.[2]?.[2])); - const hardMaxed = isBookUnavailable || activeTab === STAR_TAB_INDEX ? true : maxLevel >= maxBookLevel; + // const artifact = isArtifactAcquired(account?.sailing?.artifacts, 'Fury_Relic') + // const winnerBonus = 0; + // const atomBonus = getAtomBonus(account, 'Oxygen_-_Library_Booker'); + // const achievementBonus = getAchievementStatus(account?.achievements, 145); + // const saltLickBonus = getSaltLickBonus(account?.saltLick, 4); + // const unavailableLibraryBook = randomList?.[16]?.split(' ').map((num) => Number(num)); + // const isBookUnavailable = unavailableLibraryBook.includes(talentId); + // const maxBookLevel = Math.round(125 + artifact?.bonus + // + winnerBonus + // + 10 * Math.min(atomBonus, 1) + // + (Math.min(5, Math.max(0, 5 * achievementBonus)) + // + saltLickBonus + merits?.[2]?.[2]?.bonusPerLevel + // * account?.tasks?.[2]?.[2]?.[2])); + const hardMaxed = activeTab === STAR_TAB_INDEX ? true : baseLevel < maxLevel; const levelText = getLevelAndMaxLevel(level, maxLevel); return (talentId === 'Blank' || talentId === '84' || talentId === 'arrow') ? diff --git a/pages/dashboard.jsx b/pages/dashboard.jsx index 7ddafdb1c..fbc2af73a 100644 --- a/pages/dashboard.jsx +++ b/pages/dashboard.jsx @@ -15,7 +15,7 @@ import Button from '@mui/material/Button'; import { migrateConfig } from '@utility/migrations'; const baseTrackers = { - version: 9, + version: 10, account: { General: { tasks: { @@ -130,7 +130,9 @@ const baseTrackers = { printer: { checked: true, options: [ - { name: 'includeOakAndCopper', category: 'atoms', checked: false }, + { name: 'includeOakTree', category: 'atoms', checked: false }, + { name: 'includeCopper', checked: false }, + { name: 'includeSporeCap', checked: true }, { name: 'showAlertWhenFull', checked: false }] }, library: { @@ -191,7 +193,13 @@ const baseTrackers = { { name: 'ribbons', type: 'input', - props: { label: 'Ribbons threshold', value: 0, maxValue: 28, minValue: 0, helperText: "Empty ribbon slots" }, + props: { + label: 'Ribbons threshold', + value: 0, + maxValue: 28, + minValue: 0, + helperText: 'Empty ribbon slots' + }, checked: true } ] @@ -301,8 +309,12 @@ const baseTrackers = { options: [ { name: 'unspentPoints', checked: true }, { name: 'missingHammers', checked: true }, - { name: 'anvilOverdue', checked: true }, - { name: 'showAlertBeforeFull', checked: true, category: 'anvil overdue' } + { + name: 'anvilOverdue', + type: 'input', + props: { label: 'Minutes', value: 30, minValue: 1, helperText: 'alert X minutes before' }, + checked: true + } ] }, worship: { diff --git a/parsers/alchemy.js b/parsers/alchemy.js index 0f5019db8..cb9a1f908 100644 --- a/parsers/alchemy.js +++ b/parsers/alchemy.js @@ -512,6 +512,7 @@ export const getUpgradeableBubbles = (acc) => { if (moreBubblesFromMerit > 0) { upgradeableBubblesAmount += moreBubblesFromMerit; } + upgradeableBubblesAmount = Math.min(10, upgradeableBubblesAmount) const normal = sorted.slice(0, upgradeableBubblesAmount); const atomBubbles = getNblbBubbles(acc, 25, upgradeableBubblesAmount); return { diff --git a/parsers/misc.js b/parsers/misc.js index ef40dc187..1d77b87b8 100644 --- a/parsers/misc.js +++ b/parsers/misc.js @@ -125,9 +125,13 @@ export const getTimeToNextBooks = (bookCount, account, characters, idleonData) = export const getLooty = (idleonData) => { const lootyRaw = idleonData?.Cards?.[1] || tryToParse(idleonData?.Cards1); const allItems = structuredClone((items)); // Deep clone + const forcedNames = { + 'Motherlode': 'Motherlode_x1', + 'Island0': 'Island0_x1', + } const slabItems = slab?.map((name) => ({ name: allItems?.[name]?.displayName, - rawName: name, + rawName: forcedNames?.[name] || name, obtained: lootyRaw?.includes(name), onRotation: filteredGemShopItems?.[name], unobtainable: filteredLootyItems?.[name] @@ -137,6 +141,7 @@ export const getLooty = (idleonData) => { rawName, unobtainable }) => !obtained && !unobtainable)?.length; + return { slabItems, lootyRaw, diff --git a/utility/dashboard/account.js b/utility/dashboard/account.js index abfb2595e..00d407532 100644 --- a/utility/dashboard/account.js +++ b/utility/dashboard/account.js @@ -408,9 +408,14 @@ export const getWorld3Alerts = (account, fields, options) => { if (!account?.finishedWorlds?.World2) return alerts; if (fields?.printer?.checked) { const printer = {}; - const { includeOakAndCopper, showAlertWhenFull } = options?.printer || {}; + const { includeOakTree, includeCopper, includeSporeCap, showAlertWhenFull } = options?.printer || {}; const totals = calcTotals(account, showAlertWhenFull); - const exclusions = ['atom', ...(!includeOakAndCopper?.checked ? ['Copper', 'OakTree'] : [])].toSimpleObject(); + const exclusions = [ + 'atom', + ...(!includeOakTree?.checked ? ['OakTree'] : []), + ...(!includeCopper?.checked ? ['Copper'] : []), + ...(!includeSporeCap?.checked ? ['Grasslands1'] : []), + ].toSimpleObject(); const atoms = Object.entries(totals || {}).filter(([itemName, { atoms }]) => !exclusions?.[itemName] && atoms).map(([name, data]) => ({ name: items?.[name]?.displayName, rawName: name, diff --git a/utility/dashboard/characters.js b/utility/dashboard/characters.js index 078a6a878..ea66724b9 100644 --- a/utility/dashboard/characters.js +++ b/utility/dashboard/characters.js @@ -43,7 +43,7 @@ export const anvilAlerts = (account, characters, character, lastUpdated, options alerts.anvilOverdue = allProgress?.map(({ date, name, rawName }) => { const d = new Date(date - 1); return { diff: differenceInMinutes(d, new Date()), name, rawName }; - }).filter(({ diff }) => anvilOption?.showAlertBeforeFull?.checked ? diff <= 60 : diff <= 0); + }).filter(({ diff }) => diff <= anvilOption?.anvilOverdue?.props?.value); } return alerts; } diff --git a/utility/migrations.js b/utility/migrations.js index ee33c414b..0842ffc2d 100644 --- a/utility/migrations.js +++ b/utility/migrations.js @@ -158,6 +158,38 @@ export const migrateToVersion9 = (config) => { dashboardConfig.version = 9; return dashboardConfig } +export const migrateToVersion10 = (config) => { + let dashboardConfig = { ...config }; + if (!dashboardConfig) { + dashboardConfig = {}; + } + + const anvilOptions = dashboardConfig?.characters?.anvil?.options?.filter(({ name }) => name !== 'anvilOverdue' && name !== 'showAlertBeforeFull'); + if (dashboardConfig?.characters?.anvil) { + dashboardConfig.characters.anvil.options = [ + ...anvilOptions, + { + name: 'anvilOverdue', + type: 'input', + props: { label: 'Minutes', value: 30, minValue: 1, helperText: 'alert X minutes before full' }, + checked: true + } + ] + } + + const printerOptions = dashboardConfig?.characters?.anvil?.options?.filter(({ name }) => name !== 'includeOakAndCopper'); + if (dashboardConfig?.account?.['World 3']?.printer?.options?.length === 2) { + dashboardConfig.account['World 3'].printer.options = [ + { name: 'includeOakTree', category: 'atoms', checked: false }, + { name: 'includeCopper', checked: false }, + { name: 'includeSporeCap', checked: true }, + ...printerOptions + ] + } + + dashboardConfig.version = 9; + return dashboardConfig +} export const migrateConfig = (baseTrackers, userConfig) => { if (baseTrackers?.version === userConfig?.version) return userConfig; @@ -189,6 +221,9 @@ export const migrateConfig = (baseTrackers, userConfig) => { if (migratedConfig?.version === 8) { migratedConfig = migrateToVersion9(migratedConfig); } + if (migratedConfig?.version === 9) { + migratedConfig = migrateToVersion10(migratedConfig); + } } return migratedConfig; } \ No newline at end of file