From 3197efc097d522c4bf02b94e1a0766d007d6cdeb Mon Sep 17 00:00:00 2001 From: staticvariablejames <69834129+staticvariablejames@users.noreply.github.com> Date: Fri, 2 Jun 2023 17:10:32 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#65633=20[cookiecli?= =?UTF-8?q?cker]=20Update=20types=20to=202.052=20by=20@staticvariablejames?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [cookieclicker] Update types to 2.052 * [cookieclicker] Refactor code for YouCustomizer using generics --- types/cookieclicker/cookieclicker-tests.ts | 24 ++++ types/cookieclicker/index.d.ts | 140 ++++++++++++++++++++- 2 files changed, 160 insertions(+), 4 deletions(-) diff --git a/types/cookieclicker/cookieclicker-tests.ts b/types/cookieclicker/cookieclicker-tests.ts index 923a304f0c..b27f010708 100644 --- a/types/cookieclicker/cookieclicker-tests.ts +++ b/types/cookieclicker/cookieclicker-tests.ts @@ -219,3 +219,27 @@ Game.jukebox.musicScrub(5); if (Music) { Music.pause(); } + +Game.Loader.waitForLoad([Game.resPath + 'img/goldCookie.png'], () => {}); + +if (Game.cookiesSent > Game.cookiesReceived) { +} + +Game.YouCustomizer.currentGenes[0] = 9; +Game.YouCustomizer.offsetGene('acc2', -1); +let currentGenes = Game.YouCustomizer.save(); +Game.YouCustomizer.load(currentGenes); + +let someChoice: [number, number] = Game.YouCustomizer.genesById['hair'].choices[5]; +let someChoice2: number = Game.YouCustomizer.genesById['hairCol'].choices[5]; + +// Support modded genes +let someChoice3: number | [number, number] = Game.YouCustomizer.genesById['moddedGene'].choices[5]; +// @ts-expect-error - but we don't know the type of the gene +let someChoice4: number = Game.YouCustomizer.genesById['moddedGene'].choices[5]; +// @ts-expect-error +let someChoice5: [number, number] = Game.YouCustomizer.genesById['moddedGene'].choices[5]; + +// offsetGene cannot handle numbers except -1, 0, 1 +// @ts-expect-error +Game.YouCustomizer.offsetGene('acc2', 2); diff --git a/types/cookieclicker/index.d.ts b/types/cookieclicker/index.d.ts index c7f3bebeae..57b12d5438 100644 --- a/types/cookieclicker/index.d.ts +++ b/types/cookieclicker/index.d.ts @@ -1,6 +1,7 @@ -// Type definitions for non-npm package cookieclicker 2.048 +// Type definitions for non-npm package cookieclicker 2.052 // Project: https://orteil.dashnet.org/cookieclicker/ // Definitions by: Lubomir +// Static Variable James // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // Minimum TypeScript Version: 3.6 @@ -437,6 +438,10 @@ declare class Loader { * An internal callback function */ onLoad: (e: Event) => void; + /* + * Waits for all assets to load (checking once every 200ms) and then calls the callback + */ + waitForLoad: (assets: string[], callback: () => void) => void; /** * Returns the progress of loading all assets */ @@ -472,6 +477,15 @@ declare namespace Game { export let version: number; export let loadedFromVersion: number; export let beta: PseudoBoolean; + /** + * True if the game is running locally + * (either on Steam, or if the hostname is 'localhost' or '127.0.0.1') + */ + export let local: boolean; + /** + * '' if on Steam, '//cdn.dashnet.org/cookieclicker/' (or similar) on web. + */ + export let resPath: string; export let https: boolean; export let visible: boolean; export let wrapper: HTMLElement; @@ -491,9 +505,10 @@ declare namespace Game { */ export let ready: PseudoBoolean; /** - * Callback for `window.onload`, loads an empty 8x8 image via `Game.Loader`, and adds `Game.Init` on the load callback (Connectivity test) + * Part of the launching sequence. + * The callback is assigned to Game.Loader.loaded. */ - export function Load(): void; + export function Load(callback: typeof Loader.loaded): void; /** * Sets the error of `#javascriptError` to a message about the game being in an iframe. (Doesn't change display style, so is invisible after load) */ @@ -657,6 +672,17 @@ declare namespace Game { * Sets the default options */ export function DefaultPrefs(): void; + + /** + * Number of cookies that were gifted (with the button in the Options menu). + */ + export let cookiesSent: number; + + /** + * Number of cookies received (from the button in the Options menu). + */ + export let cookiesReceived: number; + /** * Toggles mobile mode */ @@ -2533,6 +2559,94 @@ declare namespace Game { export function magicCpS(what: unknown): number; export let SpecialGrandmaUnlock: number; + + export interface YouCustomizerGene { + id: string; + isList: true; + /** + * Default value. + */ + def: number; + /** + * List of possible choices. + * + * For T = [number, number], each choice is an offset in 'youAddons.png', + * similar to an icon. + */ + choices: T[]; + /** + * Index of the gene in Game.YouCustomizer.genes. + */ + n: number; + } + export type YouCustomizerAddonGeneId = 'face' | 'head' | 'hair' | 'acc1' | 'acc2'; + export type YouCustomizerColorGeneId = 'skinCol' | 'hairCol'; + + export let YouCustomizer: YouCustomizerT; + export interface YouCustomizerT { + render(): void; + genes: Array | YouCustomizerGene<[number, number]>>; + /** + * Returns a string representation of the YouCustomizer. + */ + save(): string; + /** + * Calls Game.YouCustomizer.resetGenes() if noReset is not true, + * then loads Game.YouCustomizer by parsing the given string. + */ + load(genes: string, noReset?: boolean): boolean; + + /** + * Maps the ID of the gene to the gene itself. + * The last line is there to support modded genes. + */ + genesById: + Record> & + Record> & + Record | YouCustomizerGene<[number, number]>>; + + /** + * currentGenes[i] is an index to genes[i].choices + */ + currentGenes: number[]; + getGeneValue(id: string): number; + + resetGenes(): void; + + /** + * Adds the offset `off` to currentGenes[i], where i = genesById[gene].n. + * Also may award the achievement 'In her likeness'. + */ + offsetGene(gene: string, off: -1 | 0 | 1): void; + + /** + * Changes the genes uniformly at random. + * Does not award 'In her likeness'. + */ + randomize(): void; + + /** + * Renders the clone preview in the "Customize your clones" prompt. + */ + renderPortrait(): void; + + /** + * Opens the prompt for exporting the current gene configuration. + */ + export(): void; + + /** + * Opens the prompt for importing the current gene configuration. + * `def` is the default string for the prompt; unused. + */ + import(def?: string): void; + + /** + * Opens the prompt for customizing the clones. + */ + prompt(): void; + } + export let foolObjects: Record; export function ClickProduct(what: GameObject): void; @@ -3293,6 +3407,7 @@ declare namespace Game { export function UpdateGrandmapocalypse(): void; export let wrinklerHP: number; + export let wrinklerLimit: number; export interface Wrinkler { id: number; @@ -3304,6 +3419,7 @@ declare namespace Game { r: number; hurt: number; hp: number; + clicks: number; selected: PseudoBoolean; type: number; } @@ -3453,6 +3569,8 @@ declare namespace Game { export function OpenSesame(): void; + export function loadAscendCalibrator(): void; + export function EditAscend(): void; export let debuggedUpgradeCpS: number[]; @@ -3527,6 +3645,11 @@ declare namespace Game { * The currently focused prompt option */ export let promptOptionFocus: number; + /** + * If `true`, disallows the prompt to be closed. + * Set to `true` by Game.Prompt if the content contains the substring "". + */ + export let promptNoClose: boolean; /** * * @param dir The direction to go in @@ -3542,7 +3665,7 @@ declare namespace Game { * Unused */ export function setWubMusic(what: number): void; - export function showLangSelection(): void; + export function showLangSelection(firstLaunch?: boolean): void; /** * The treshold when the game considers itself to be too narrow */ @@ -3576,6 +3699,15 @@ declare namespace Game { musicScrub(time: number): void; } export let jukebox: Jukebox; + + /** + * Icon indices for the design of the gift box. + * Note that the icons are [number, number], rather than Game.Icon. + */ + export let giftBoxDesigns: Array<[number, number]>; + export function promptGiftRedeem(): void; + export function promptGiftSend(): void; + export function getVeilDefense(): number; export function getVeilBoost(): number; export let showedScriptLoadError: boolean;