Skip to content

Commit

Permalink
use zod for loading
Browse files Browse the repository at this point in the history
  • Loading branch information
KhafraDev committed Jun 12, 2024
1 parent 62f11d7 commit 47facbe
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 22 deletions.
18 changes: 10 additions & 8 deletions src/ImportExport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -280,15 +280,17 @@ export const reloadDeleteGame = async () => {
await resetGame()
}

export const resetGame = async () => {
const a = window.crypto.getRandomValues(new Uint16Array(1))[0] % 16
const b = window.crypto.getRandomValues(new Uint16Array(1))[0] % 16
export const resetGame = async (force = true) => {
if (!force) {
const a = window.crypto.getRandomValues(new Uint16Array(1))[0] % 16
const b = window.crypto.getRandomValues(new Uint16Array(1))[0] % 16

const result = await Prompt(
i18next.t('importexport.resetPrompt', { a, b, sum: a + b })
)
if (result === null || Number(result) !== a + b) {
return Alert(i18next.t('importexport.wrongAnswer'))
const result = await Prompt(
i18next.t('importexport.resetPrompt', { a, b, sum: a + b })
)
if (result === null || Number(result) !== a + b) {
return Alert(i18next.t('importexport.wrongAnswer'))
}
}

const hold = Object.assign({}, blankSave, {
Expand Down
34 changes: 25 additions & 9 deletions src/StatCache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,11 +168,15 @@ type AmbrosiaLuckAdditiveMult =
| 'Event'

export class AmbrosiaLuckAdditiveMultCache extends AdditionCache<AmbrosiaLuckAdditiveMult> {
vals: Record<AmbrosiaLuckAdditiveMult, number>
public totalVal: number
vals!: Record<AmbrosiaLuckAdditiveMult, number>
totalVal!: number

constructor () {
super()
this.reset()
}

reset () {
this.vals = {
Base: 1,
Exalt1: 0,
Expand Down Expand Up @@ -221,12 +225,16 @@ export class AmbrosiaLuckAdditiveMultCache extends AdditionCache<AmbrosiaLuckAdd
}

export class AmbrosiaLuckCache extends AdditionCache<AmbrosialLuck> {
vals: Record<AmbrosialLuck, number>
public totalVal: number
public usedTotal: number
vals!: Record<AmbrosialLuck, number>
totalVal!: number
usedTotal!: number

constructor () {
super()
this.reset()
}

reset () {
this.vals = {
Base: 100,
SingPerks: 0,
Expand Down Expand Up @@ -312,11 +320,15 @@ export class AmbrosiaLuckCache extends AdditionCache<AmbrosialLuck> {
}

export class AmbrosiaGenerationCache extends MultiplicationCache<AmbrosiaGeneration> {
vals: Record<AmbrosiaGeneration, number>
public totalVal: number
vals!: Record<AmbrosiaGeneration, number>
totalVal!: number

constructor () {
super()
this.reset()
}

reset () {
this.vals = {
DefaultVal: 1,
Blueberries: 1,
Expand Down Expand Up @@ -384,11 +396,15 @@ export class AmbrosiaGenerationCache extends MultiplicationCache<AmbrosiaGenerat
}

export class BlueberryInventoryCache extends AdditionCache<BlueberryInventory> {
vals: Record<BlueberryInventory, number>
public totalVal: number
vals!: Record<BlueberryInventory, number>
totalVal!: number

constructor () {
super()
this.reset()
}

reset () {
this.vals = {
Exalt1: 0,
SingularityUpgrade: 0,
Expand Down
13 changes: 11 additions & 2 deletions src/Synergism.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,6 @@ import i18next from 'i18next'
import localforage from 'localforage'
import { BlueberryUpgrade, blueberryUpgradeData } from './BlueberryUpgrades'
import { DOMCacheGetOrSet } from './Cache/DOM'
import { checkVariablesOnLoad } from './CheckVariables'
import { lastUpdated, prod, testing, version } from './Config'
import { WowCubes, WowHypercubes, WowPlatonicCubes, WowTesseracts } from './CubeExperimental'
import { eventCheck } from './Event'
Expand All @@ -157,6 +156,7 @@ import {
} from './Hepteracts'
import { disableHotkeys } from './Hotkeys'
import { init as i18nInit } from './i18n'
import { resetGame } from './ImportExport'
import { handleLogin } from './Login'
import { octeractData, OcteractUpgrade } from './Octeracts'
import { updatePlatonicUpgradeBG } from './Platonic'
Expand Down Expand Up @@ -2049,7 +2049,16 @@ const loadSynergy = async () => {
player.firstOwnedAnts = 0
}

checkVariablesOnLoad(data)
// checkVariablesOnLoad(data)
const validatedPlayer = playerSchema.safeParse(data)
if (validatedPlayer.success) {
Object.assign(player, validatedPlayer.data)
} else {
console.log(validatedPlayer.error)
resetGame(true)
return
}

if (data.ascensionCount === undefined || player.ascensionCount === 0) {
player.ascensionCount = 0
if (player.ascensionCounter === 0 && player.prestigeCount > 0) {
Expand Down
30 changes: 27 additions & 3 deletions src/saves/PlayerSchema.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Decimal from 'break_infinity.js'
import { z, ZodType } from 'zod'
import { BlueberryUpgrade, blueberryUpgradeData } from '../BlueberryUpgrades'
import { WowCubes, WowHypercubes, WowPlatonicCubes, WowTesseracts } from '../CubeExperimental'
import {
AbyssHepteract,
Expand All @@ -11,7 +12,10 @@ import {
MultiplierHepteract,
QuarkHepteract
} from '../Hepteracts'
import { octeractData, OcteractUpgrade } from '../Octeracts'
import { QuarkHandler } from '../Quark'
import { singularityData, SingularityUpgrade } from '../singularity'
import { SingularityChallenge, singularityChallengeData } from '../SingularityChallenges'
import { blankSave } from '../Synergism'
import { deepClone, padArray } from '../Utility'

Expand Down Expand Up @@ -316,7 +320,7 @@ export const playerSchema = z.object({
crystalUpgradesCost: z.number().array().default(() => [...blankSave.crystalUpgradesCost]),

runelevels: z.number().array(),
runeexp: z.number().array(),
runeexp: z.union([z.number(), z.null()]).array().transform((value) => value.map((val) => val === null ? 0 : val)),
runeshards: z.number(),
maxofferings: z.number().default(() => blankSave.maxofferings),
offeringpersecond: z.number().default(() => blankSave.offeringpersecond),
Expand Down Expand Up @@ -564,8 +568,14 @@ export const playerSchema = z.object({

// TODO: why is this on player?
singularityUpgrades: z.record(z.string(), singularityUpgradeSchema('goldenQuarksInvested'))
.transform(() =>
Object.fromEntries(Object.keys(singularityData).map((k) => [k, new SingularityUpgrade(singularityData[k], k)]))
)
.default(() => JSON.parse(JSON.stringify(blankSave.singularityUpgrades))),
octeractUpgrades: z.record(z.string(), singularityUpgradeSchema('octeractsInvested'))
.transform(() =>
Object.fromEntries(Object.keys(octeractData).map((k) => [k, new OcteractUpgrade(octeractData[k], k)]))
)
.default(() => JSON.parse(JSON.stringify(blankSave.octeractUpgrades))),

dailyCodeUsed: z.boolean().default(() => blankSave.dailyCodeUsed),
Expand All @@ -580,7 +590,13 @@ export const playerSchema = z.object({
highestSingularityCompleted: z.number(),
enabled: z.boolean()
})
).default(() => JSON.parse(JSON.stringify(blankSave.singularityChallenges))),
)
.transform(() =>
Object.fromEntries(
Object.keys(singularityChallengeData).map((k) => [k, new SingularityChallenge(singularityChallengeData[k], k)])
)
)
.default(() => JSON.parse(JSON.stringify(blankSave.singularityChallenges))),

ambrosia: z.number().default(() => blankSave.ambrosia),
lifetimeAmbrosia: z.number().default(() => blankSave.lifetimeAmbrosia),
Expand All @@ -590,6 +606,11 @@ export const playerSchema = z.object({
spentBlueberries: z.number().default(() => blankSave.spentBlueberries),
// TODO: is this right?
blueberryUpgrades: z.record(z.string(), singularityUpgradeSchema('blueberriesInvested'))
.transform(() =>
Object.fromEntries(
Object.keys(blueberryUpgradeData).map((k) => [k, new BlueberryUpgrade(blueberryUpgradeData[k], k)])
)
)
.default(() => JSON.parse(JSON.stringify(blankSave.blueberryUpgrades))),

// TODO: what type?
Expand All @@ -600,7 +621,10 @@ export const playerSchema = z.object({
ultimatePixels: z.number().default(() => blankSave.ultimatePixels),

// TODO: what type?
caches: z.record(z.string(), z.any()).default(() => blankSave.caches),
caches: z.record(z.string(), z.any()).default(() => {
Object.values(blankSave.caches).map((cache) => cache.reset())
return blankSave.caches
}),

lastExportedSave: z.number().default(() => blankSave.lastExportedSave)
})

0 comments on commit 47facbe

Please sign in to comment.