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