From e53f7228a00fe6336cc017fe773ad955bce65cfe Mon Sep 17 00:00:00 2001 From: Russell Stringer Date: Mon, 14 Nov 2022 13:57:40 -0500 Subject: [PATCH 1/3] add utility function to reduce arrays with add&mult bonuses --- src/Utility.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Utility.ts b/src/Utility.ts index 4c484019f..d58603cfb 100644 --- a/src/Utility.ts +++ b/src/Utility.ts @@ -47,6 +47,24 @@ export const sumContents = (array: number[]): number => { */ export const productContents = (array: number[]): number => array.reduce((a, b) => a * b); +/** + * Given an array of {type, value} where type is one of '+' or '*', reduces the values based on the + * arithmetic operation associated with each value. + * @param toCalc + * @returns number + */ +export const calculateContents = (toCalc: {'type':string, 'value':number}[]): number => { + return toCalc.reduce((accumulator, contents) => { + if (contents.type === '+') { + return accumulator + contents.value; + } + if (contents.type === '*') { + return accumulator * contents.value; + } + return accumulator; + }, 0) +} + export const sortWithIndices = (toSort: number[]) => { return Array .from([...toSort.keys()]) From 1f7a2da7d7a69750a430050a8cfcdea45d84c3ce Mon Sep 17 00:00:00 2001 From: Russell Stringer Date: Mon, 14 Nov 2022 13:58:53 -0500 Subject: [PATCH 2/3] move calculation of 'daily' free rewards into Calculate.ts --- src/Calculate.ts | 23 ++++++++++++++++++++++- src/ImportExport.ts | 18 ++---------------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/Calculate.ts b/src/Calculate.ts index 915f57e26..0498fab6c 100644 --- a/src/Calculate.ts +++ b/src/Calculate.ts @@ -1,5 +1,5 @@ import { player, saveSynergy, format, resourceGain, updateAll, getTimePinnedToLoadDate } from './Synergism'; -import { sumContents, productContents } from './Utility'; +import { sumContents, productContents, calculateContents } from './Utility'; import { Globals as G } from './Variables'; import { CalcECC } from './Challenges'; import Decimal from 'break_infinity.js'; @@ -1992,3 +1992,24 @@ export const derpsmithCornucopiaBonus = () => { return 1 + counter * player.singularityCount / 100 } + +export const calculateDailyRewardRolls = () => { + const rolls = [ + {'type': '+', 'value': 3 * Math.sqrt(player.singularityCount)}, + {'type': '+', 'value': +player.octeractUpgrades.octeractImprovedDaily.getEffect().bonus}, + {'type': '+', 'value': player.shopUpgrades.shopImprovedDaily2}, + {'type': '+', 'value': player.shopUpgrades.shopImprovedDaily3}, + {'type': '+', 'value': player.shopUpgrades.shopImprovedDaily4}, + {'type': '+', 'value': (+player.singularityUpgrades.platonicPhi.getEffect().bonus * + Math.min(50, 5 * player.singularityCounter / (3600 * 24)))}, + {'type': '+', 'value': +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus}, + {'type': '*', 'value': +player.octeractUpgrades.octeractImprovedDaily2.getEffect().bonus}, + {'type': '*', 'value': 1 + +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus / 200}, + {'type': '*', 'value': player.highestSingularityCount >= 200 ? 2 : 1} + ]; + + return { + list: rolls, + total: Math.floor(calculateContents(rolls)) + }; +} diff --git a/src/ImportExport.ts b/src/ImportExport.ts index 0d9732437..39fb0ee6f 100644 --- a/src/ImportExport.ts +++ b/src/ImportExport.ts @@ -1,5 +1,5 @@ import { player, saveSynergy, blankSave, reloadShit, format } from './Synergism'; -import { octeractGainPerSecond } from './Calculate'; +import {calculateDailyRewardRolls, octeractGainPerSecond} from './Calculate'; import { testing, version } from './Config'; import { cleanString, getElementById } from './Utility'; import LZString from 'lz-string'; @@ -387,22 +387,8 @@ export const promocodes = async (input: string | null, amount?: number) => { singOfferings1: {value: 1, pdf: (x: number) => 600 < x && x <= 800}, ascensions: {value: 1, pdf: (x: number) => 800 < x && x <= 1000} } - let rolls = 3 * Math.sqrt(player.singularityCount) - rolls += +player.octeractUpgrades.octeractImprovedDaily.getEffect().bonus - rolls += player.shopUpgrades.shopImprovedDaily2 - rolls += player.shopUpgrades.shopImprovedDaily3 - rolls += player.shopUpgrades.shopImprovedDaily4 - rolls += (+player.singularityUpgrades.platonicPhi.getEffect().bonus * - Math.min(50, 5 * player.singularityCounter / (3600 * 24))) - rolls += +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus - rolls *= +player.octeractUpgrades.octeractImprovedDaily2.getEffect().bonus - rolls *= 1 + +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus / 200 - if (player.highestSingularityCount >= 200) { - rolls *= 2 - } - - rolls = Math.floor(rolls) + const rolls = calculateDailyRewardRolls().total; const keys = Object .keys(player.singularityUpgrades) From b9c4939f9c065270f35f0fccea98a788ee120c2c Mon Sep 17 00:00:00 2001 From: Russell Stringer Date: Mon, 14 Nov 2022 13:59:35 -0500 Subject: [PATCH 3/3] add new stats block for daily code levels --- index.html | 17 +++++++++++++++++ src/Statistics.ts | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index be79c56ad..46feeb977 100644 --- a/index.html +++ b/index.html @@ -2992,6 +2992,7 @@

Artists

+

Miscellaneous Stats

@@ -3256,6 +3257,22 @@

Artists

TOTAL OCTERACT MULTIPLIER: 0

+ +
diff --git a/src/Statistics.ts b/src/Statistics.ts index 9fa0392fb..ce6beb094 100644 --- a/src/Statistics.ts +++ b/src/Statistics.ts @@ -1,7 +1,7 @@ import { player, format, formatTimeShort } from './Synergism'; import { Globals as G } from './Variables'; import { hepteractEffective } from './Hepteracts' -import {calculateSigmoidExponential, calculateCubeMultiplier, calculateOfferings, calculateTesseractMultiplier, calculateHypercubeMultiplier, calculatePlatonicMultiplier, calculateHepteractMultiplier, calculateAllCubeMultiplier, calculateSigmoid, calculatePowderConversion, calculateEffectiveIALevel, calculateQuarkMultFromPowder, calculateOcteractMultiplier, calculateQuarkMultiplier, calculateEventBuff, calculateSingularityQuarkMilestoneMultiplier, calculateTotalOcteractQuarkBonus } from './Calculate'; +import {calculateSigmoidExponential, calculateCubeMultiplier, calculateOfferings, calculateTesseractMultiplier, calculateHypercubeMultiplier, calculatePlatonicMultiplier, calculateHepteractMultiplier, calculateAllCubeMultiplier, calculateSigmoid, calculatePowderConversion, calculateEffectiveIALevel, calculateQuarkMultFromPowder, calculateOcteractMultiplier, calculateQuarkMultiplier, calculateEventBuff, calculateSingularityQuarkMilestoneMultiplier, calculateTotalOcteractQuarkBonus, calculateDailyRewardRolls } from './Calculate'; import { challenge15ScoreMultiplier } from './Challenges'; import type { GlobalVariables } from './types/Synergism'; import { DOMCacheGetOrSet } from './Cache/DOM'; @@ -20,7 +20,8 @@ const associated = new Map([ ['kPlatMult', 'platonicMultiplierStats'], ['kHeptMult', 'hepteractMultiplierStats'], ['kOrbPowderMult', 'powderMultiplierStats'], - ['kOctMult', 'octeractMultiplierStats'] + ['kOctMult', 'octeractMultiplierStats'], + ['kDailyRewardStats', 'dailyRewardStats'] ]); export const displayStats = (btn: HTMLElement) => { @@ -60,6 +61,9 @@ export const loadStatisticsUpdate = () => { case 'powderMultiplierStats': loadPowderMultiplier(); break; + case 'dailyRewardStats': + loadDailyCodeStats(); + break; default: loadStatisticsCubeMultipliers(); break; @@ -390,6 +394,32 @@ export const loadPowderMultiplier = () => { DOMCacheGetOrSet('sPoMT').textContent = `x${format(calculatePowderConversion().mult, 3)}`; } +export const loadDailyCodeStats = () => { + const statsArray = calculateDailyRewardRolls(); + const statsMap: Record = { + 0: {acc: 2, desc: 'Base:'}, + 1: {acc: 0, desc: 'Octeract Improved Daily:'}, + 2: {acc: 0, desc: 'Improved Daily 2 (green):'}, + 3: {acc: 0, desc: 'Improved Daily 3 (red):'}, + 4: {acc: 0, desc: 'Improved Daily 4 (gray):'}, + 5: {acc: 0, desc: 'Octeract Improved Daily 3:'}, + 6: {acc: 2, desc: 'Platonic PHI'}, + 7: {acc: 2, desc: 'Octeract Improved Daily 2:'}, + 8: {acc: 2, desc: 'Octeract Improved Daily 3:'}, + 9: {acc: 2, desc: 'Industrial Daily Codes:'} + } + + for (let i = 0; i < statsArray.list.length; i++) { + const statRow = DOMCacheGetOrSet(`statDailyM${i + 1}`); + const arithmeticSymbol = statsArray.list[i]['type'] === '*' ? 'x' : statsArray.list[i]['type']; + const value = format(statsArray.list[i]['value'], statsMap[i].acc); + statRow.childNodes[0].textContent = statsMap[i].desc; + + DOMCacheGetOrSet(`sDailyM${i + 1}`).textContent = `${arithmeticSymbol}${value}`; + } + DOMCacheGetOrSet('sDailyMT').textContent = `${format(statsArray.total, 0)}`; +} + export const c15RewardUpdate = () => { const exponentRequirements = [750, 1.5e3, 3e3, 5e3, 7.5e3, 7.5e3, 1e4, 1e4, 2e4, 4e4, 6e4, 1e5, 1e5, 2e5, 5e5, 1e6, 3e6, 1e7, 3e7, 1e8, 5e8, 2e9, 1e10, 1e11, 1e15, 2e15, 4e15, 7e15, 1e16, 2e16, 3.33e16, 3.33e16, 3.33e16, 2e17, 1.5e18] type Key = keyof GlobalVariables['challenge15Rewards'];