311 lines
9.8 KiB
JavaScript
311 lines
9.8 KiB
JavaScript
/** Main function to create the sections of Cookie Monster on the Statistics page */
|
|
|
|
import { AddMissingUpgrades } from './CreateMissingUpgrades';
|
|
import * as CreateSections from './CreateStatsSections';
|
|
import * as CreateElements from './CreateDOMElements';
|
|
import * as GameData from '../../Data/Gamedata';
|
|
import { CMOptions } from '../../Config/VariablesAndData';
|
|
|
|
import {
|
|
CacheAverageClicks,
|
|
CacheCentEgg,
|
|
CacheLastChoEgg,
|
|
CacheSeaSpec,
|
|
CacheWrinklersFattest,
|
|
CacheWrinklersNormal,
|
|
CacheWrinklersTotal,
|
|
} from '../../Cache/VariablesAndData';
|
|
import PopAllNormalWrinklers from '../HelperFunctions/PopWrinklers';
|
|
import { ClickTimes, CookieTimes } from '../VariablesAndData';
|
|
import GetCPS from '../HelperFunctions/GetCPS';
|
|
import { Beautify } from '../BeautifyAndFormatting/BeautifyFormatting';
|
|
|
|
/**
|
|
* This function adds stats created by CookieMonster to the stats page
|
|
* It is called by CM.Disp.AddMenu
|
|
* @param {object} title On object that includes the title of the menu
|
|
*/
|
|
export default function AddMenuStats(title) {
|
|
const stats = document.createElement('div');
|
|
stats.className = 'subsection';
|
|
stats.appendChild(title);
|
|
|
|
stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky'));
|
|
if (CMOptions.Header.Lucky) {
|
|
stats.appendChild(CreateSections.LuckySection());
|
|
}
|
|
|
|
stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain'));
|
|
if (CMOptions.Header.Chain) {
|
|
stats.appendChild(CreateSections.ChainSection());
|
|
}
|
|
|
|
if (Game.Objects['Wizard tower'].minigameLoaded) {
|
|
stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells'));
|
|
if (CMOptions.Header.Spells) {
|
|
stats.appendChild(CreateSections.SpellsSection());
|
|
}
|
|
}
|
|
|
|
if (Game.Objects.Farm.minigameLoaded) {
|
|
stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden'));
|
|
if (CMOptions.Header.Garden) {
|
|
stats.appendChild(CreateSections.GardenSection());
|
|
}
|
|
}
|
|
|
|
stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige'));
|
|
if (CMOptions.Header.Prestige) {
|
|
stats.appendChild(CreateSections.PrestigeSection());
|
|
}
|
|
|
|
if (Game.cpsSucked > 0) {
|
|
stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink'));
|
|
if (CMOptions.Header.Wrink) {
|
|
const popAllFrag = document.createDocumentFragment();
|
|
popAllFrag.appendChild(
|
|
document.createTextNode(
|
|
`${Beautify(CacheWrinklersTotal)} / ${Beautify(
|
|
CacheWrinklersNormal,
|
|
)} `,
|
|
),
|
|
);
|
|
const popAllA = document.createElement('a');
|
|
popAllA.textContent = 'Pop All Normal';
|
|
popAllA.className = 'option';
|
|
popAllA.onclick = function () {
|
|
PopAllNormalWrinklers();
|
|
};
|
|
popAllFrag.appendChild(popAllA);
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Rewards of Popping (All/Normal)',
|
|
popAllFrag,
|
|
),
|
|
);
|
|
const popFattestFrag = document.createDocumentFragment();
|
|
popFattestFrag.appendChild(
|
|
document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `),
|
|
);
|
|
const popFattestA = document.createElement('a');
|
|
popFattestA.textContent = 'Pop Single Fattest';
|
|
popFattestA.className = 'option';
|
|
popFattestA.onclick = function () {
|
|
if (CacheWrinklersFattest[1] !== null)
|
|
Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;
|
|
};
|
|
popFattestFrag.appendChild(popFattestA);
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
`Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${
|
|
CacheWrinklersFattest[1] !== null
|
|
? CacheWrinklersFattest[1]
|
|
: 'None'
|
|
})`,
|
|
popFattestFrag,
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
let specDisp = false;
|
|
const missingHalloweenCookies = [];
|
|
for (const i of Object.keys(GameData.HalloCookies)) {
|
|
if (!Game.Has(GameData.HalloCookies[i])) {
|
|
missingHalloweenCookies.push(GameData.HalloCookies[i]);
|
|
specDisp = true;
|
|
}
|
|
}
|
|
const missingChristmasCookies = [];
|
|
for (const i of Object.keys(GameData.ChristCookies)) {
|
|
if (!Game.Has(GameData.ChristCookies[i])) {
|
|
missingChristmasCookies.push(GameData.ChristCookies[i]);
|
|
specDisp = true;
|
|
}
|
|
}
|
|
const missingValentineCookies = [];
|
|
for (const i of Object.keys(GameData.ValCookies)) {
|
|
if (!Game.Has(GameData.ValCookies[i])) {
|
|
missingValentineCookies.push(GameData.ValCookies[i]);
|
|
specDisp = true;
|
|
}
|
|
}
|
|
const missingNormalEggs = [];
|
|
for (const i of Object.keys(Game.eggDrops)) {
|
|
if (!Game.HasUnlocked(Game.eggDrops[i])) {
|
|
missingNormalEggs.push(Game.eggDrops[i]);
|
|
specDisp = true;
|
|
}
|
|
}
|
|
const missingRareEggs = [];
|
|
for (const i of Object.keys(Game.rareEggDrops)) {
|
|
if (!Game.HasUnlocked(Game.rareEggDrops[i])) {
|
|
missingRareEggs.push(Game.rareEggDrops[i]);
|
|
specDisp = true;
|
|
}
|
|
}
|
|
const missingPlantDrops = [];
|
|
for (const i of Object.keys(GameData.PlantDrops)) {
|
|
if (!Game.HasUnlocked(GameData.PlantDrops[i])) {
|
|
missingPlantDrops.push(GameData.PlantDrops[i]);
|
|
specDisp = true;
|
|
}
|
|
}
|
|
const choEgg =
|
|
Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg');
|
|
const centEgg = Game.Has('Century egg');
|
|
|
|
if (Game.season === 'christmas' || specDisp || choEgg || centEgg) {
|
|
stats.appendChild(CreateElements.StatsHeader('Season Specials', 'Sea'));
|
|
if (CMOptions.Header.Sea) {
|
|
if (missingHalloweenCookies.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Halloween Cookies Left to Buy',
|
|
CreateElements.StatsMissDisp(missingHalloweenCookies),
|
|
),
|
|
);
|
|
if (missingChristmasCookies.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Christmas Cookies Left to Buy',
|
|
CreateElements.StatsMissDisp(missingChristmasCookies),
|
|
),
|
|
);
|
|
if (missingValentineCookies.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Valentine Cookies Left to Buy',
|
|
CreateElements.StatsMissDisp(missingValentineCookies),
|
|
),
|
|
);
|
|
if (missingNormalEggs.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Normal Easter Eggs Left to Unlock',
|
|
CreateElements.StatsMissDisp(missingNormalEggs),
|
|
),
|
|
);
|
|
if (missingRareEggs.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Rare Easter Eggs Left to Unlock',
|
|
CreateElements.StatsMissDisp(missingRareEggs),
|
|
),
|
|
);
|
|
if (missingPlantDrops.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Rare Plant Drops Left to Unlock',
|
|
CreateElements.StatsMissDisp(missingPlantDrops),
|
|
),
|
|
);
|
|
|
|
if (Game.season === 'christmas')
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Reindeer Reward',
|
|
document.createTextNode(Beautify(CacheSeaSpec)),
|
|
),
|
|
);
|
|
if (choEgg) {
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'withTooltip',
|
|
'Chocolate Egg Cookies',
|
|
document.createTextNode(Beautify(CacheLastChoEgg)),
|
|
'ChoEggTooltipPlaceholder',
|
|
),
|
|
);
|
|
}
|
|
if (centEgg) {
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Century Egg Multiplier',
|
|
document.createTextNode(
|
|
`${Math.round((CacheCentEgg - 1) * 10000) / 100}%`,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc'));
|
|
if (CMOptions.Header.Misc) {
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
`Average Cookies Per Second (Past ${
|
|
CookieTimes[CMOptions.AvgCPSHist] < 60
|
|
? `${CookieTimes[CMOptions.AvgCPSHist]} seconds`
|
|
: CookieTimes[CMOptions.AvgCPSHist] / 60 +
|
|
(CMOptions.AvgCPSHist === 3 ? ' minute' : ' minutes')
|
|
})`,
|
|
document.createTextNode(Beautify(GetCPS(), 3)),
|
|
),
|
|
);
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
`Average Cookie Clicks Per Second (Past ${
|
|
ClickTimes[CMOptions.AvgClicksHist]
|
|
}${CMOptions.AvgClicksHist === 0 ? ' second' : ' seconds'})`,
|
|
document.createTextNode(Beautify(CacheAverageClicks, 1)),
|
|
),
|
|
);
|
|
if (Game.Has('Fortune cookies')) {
|
|
const fortunes = [];
|
|
for (const i of Object.keys(GameData.Fortunes)) {
|
|
if (!Game.Has(GameData.Fortunes[i])) {
|
|
fortunes.push(GameData.Fortunes[i]);
|
|
}
|
|
}
|
|
if (fortunes.length !== 0)
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Fortune Upgrades Left to Buy',
|
|
CreateElements.StatsMissDisp(fortunes),
|
|
),
|
|
);
|
|
}
|
|
if (CMOptions.ShowMissedGC) {
|
|
stats.appendChild(
|
|
CreateElements.StatsListing(
|
|
'basic',
|
|
'Missed Golden Cookies',
|
|
document.createTextNode(Beautify(Game.missedGoldenClicks)),
|
|
),
|
|
);
|
|
}
|
|
if (Game.prefs.autosave) {
|
|
const timer = document.createElement('span');
|
|
timer.id = 'CMStatsAutosaveTimer';
|
|
timer.innerText = Game.sayTime(
|
|
Game.fps * 60 - (Game.OnAscend ? 0 : Game.T % (Game.fps * 60)),
|
|
4,
|
|
);
|
|
stats.appendChild(
|
|
CreateElements.StatsListing('basic', 'Time till autosave', timer),
|
|
);
|
|
}
|
|
}
|
|
|
|
l('menu').insertBefore(stats, l('menu').childNodes[2]);
|
|
|
|
if (CMOptions.MissingUpgrades) {
|
|
AddMissingUpgrades();
|
|
}
|
|
}
|