diff --git a/types/gimloader/gimloader-tests.ts b/types/gimloader/gimloader-tests.ts index ba3ca08edbb9d0..8b8037d1b7dd7c 100644 --- a/types/gimloader/gimloader-tests.ts +++ b/types/gimloader/gimloader-tests.ts @@ -160,6 +160,19 @@ api.net.state.characters["..."].x; // $ExpectType number api.net.state.characters.get("...")!.x; // $ExpectType number api.net.state.teams[0].characters[0]; // $ExpectType string api.net.state.mapSettings; // $ExpectType string +api.net.state.listen("teams", () => {}); +api.net.state.characters.onAdd((item, index) => { + item; // $ExpectType ObjectSchema + index; // $ExpectType string + item.listen("x", () => {}); +}); +api.net.state.teams.onAdd((item, index) => { + item; // $ExpectType ObjectSchema + index; // $ExpectType number +}); +api.net.state.characters.onRemove((item, index) => {}); +api.net.state.$callbacks; +api.net.state.characters.get("...")!.$callbacks; // Test settings api.settings.something; diff --git a/types/gimloader/index.d.ts b/types/gimloader/index.d.ts index 48e936754db3de..f8a482b3e84900 100644 --- a/types/gimloader/index.d.ts +++ b/types/gimloader/index.d.ts @@ -2261,7 +2261,12 @@ declare global { error?: (error: any) => void; } namespace Schema { - type ObjectSchema = T & { + interface ColyseusMethods { + $callbacks: Record; + $changes: any; + toJson(): any; + } + type ObjectSchema = T & ColyseusMethods & { listen( key: K, callback: (value: T[K], lastValue: T[K]) => void, @@ -2269,11 +2274,11 @@ declare global { ): () => void; onChange(callback: () => void): () => void; }; - interface CollectionSchema { + type CollectionSchema = ColyseusMethods & { onAdd(callback: (value: T, index: K) => void, immediate?: boolean): () => void; onRemove(callback: (value: T, index: K) => void): () => void; onChange(callback: (item: T, index: K) => void): () => void; - } + }; type MapSchema = & { [key: string]: T; @@ -2299,6 +2304,7 @@ declare global { interface HealthState { classImmunityActive: boolean; fragility: number; + health: number; lives: number; maxHealth: number; maxShield: number; @@ -2316,11 +2322,16 @@ declare global { waitingEndTime: number; waitingStartTime: number; } + interface SlotState { + amount: number; + } interface InventoryState { activeInteractiveSlot: number; infiniteAmmo: boolean; - interactiveSlots: MapSchema; + interactiveSlots: MapSchema>; interactiveSlotsOrder: ArraySchema; + maxSlots: number; + slots: MapSchema>; } interface PermissionsState { adding: boolean; @@ -2386,8 +2397,8 @@ declare global { url: string; } interface CallToActionState { - categories: ArraySchema; - items: ArraySchema; + categories: ArraySchema>; + items: ArraySchema>; } interface GameSessionState { callToAction: ObjectSchema; @@ -2437,15 +2448,16 @@ declare global { score: number; } interface GimkitState { - characters: MapSchema; - customAssets: MapSchema; + characters: MapSchema>; + customAssets: MapSchema>; hooks: ObjectSchema; mapSettings: string; matchmaker: ObjectSchema; session: ObjectSchema; - teams: ArraySchema; + teams: ArraySchema>; world: ObjectSchema; } + type GimkitSchema = ObjectSchema; } class BaseNetApi extends EventEmitter2 { constructor(); @@ -2456,7 +2468,7 @@ declare global { /** The room that the client is connected to, or null if there is no connection */ get room(): any; /** Gimkit's internal Colyseus state */ - get state(): Schema.GimkitState; + get state(): Schema.GimkitSchema; /** Whether the user is the one hosting the current game */ get isHost(): boolean; /** Sends a message to the server on a specific channel */