/** * @typedef {{ kind: "egg", eggType: string, tokenId: number, hatchAt: number, seed: number }} EggCell * @typedef {{ kind: "animal", id: string, mutation: string, level: number, placedAt: number, lastVisitedAt?: number, lastFedAt?: number, originKey?: string, cellsWide?: number, cellsHigh?: number, fromOtherZoo?: boolean }} AnimalCell * @typedef {{ kind: "school", level: number }} SchoolCell * @typedef {{ kind: "nursery", tokenId?: number, level?: number }} NurseryCell * @typedef {{ kind: "souvenirShop", level: number }} SouvenirShopCell * @typedef {{ kind: "research", level: number }} ResearchCell * @typedef {{ kind: "billeterie", level: number }} BilleterieCell * @typedef {{ kind: "food", level: number }} FoodCell * @typedef {{ kind: "reception", level: number }} ReceptionCell * @typedef {{ kind: "biomeChangeColor", level: number }} BiomeChangeColorCell * @typedef {{ kind: "biomeChangeTemp", level: number }} BiomeChangeTempCell * @typedef {EggCell | AnimalCell | SchoolCell | NurseryCell | SouvenirShopCell | ResearchCell | BilleterieCell | FoodCell | ReceptionCell | BiomeChangeColorCell | BiomeChangeTempCell} Cell * * @typedef {{ id: string, animalId: string, nurseryCellKey: string, readyAt: number, fromOtherZoo?: boolean }} PendingBaby * @typedef {{ id: string, animalId: string, receptionCellKey: string, readyAt: number, originZooId?: string, reproductionScoreAtSale?: number }} ReceptionAnimal * @typedef {{ id: string, zooId: string, babyId?: string, animalId?: string, isBaby: boolean, price: number, endAt: number, reproductionScoreAtSale?: number, serverId?: string, bestBidAmount?: number, bestBidderZooId?: string, status?: "active"|"sold"|"expired"|"rejected"|"validated", validatedAt?: number | null }} SaleListing * * @typedef {{ arrivedAt: number, incidentType?: "thirst"|"bin"|"bench"|"animalFar"|"photo", incidentSince?: number }} VisitorEntry * * @typedef {{ id: string, descriptionKey: string, target: number, current: number, reward: number, done: boolean }} Quest * * @typedef {{ coins: number, plotLevel: number, conveyorLevel: number, truckLevel: number, profile: "fast"|"slow"|"balanced", lastTickAt: number }} BotState * @typedef {{ id: string, name: string, x: number, y: number, animalWeights: Record, botState?: BotState }} WorldZooEntry * * @typedef {{ * version: number, * specVersion?: number, * coins: number, * conveyorLevel: number, * plotLevel: number, * truckLevel?: number, * grid: { width: number, height: number, cells: Record }, * pendingEggTokens: Array<{ tokenId: number, eggType: string, boughtAt: number }>, * nextTokenId: number, * conveyorOffers: Array<{ eggType: string, price: number, zooId?: string }>, * lastOfferRefreshAt: number, * worldZoos?: Array, * truckSale?: { toZooId: string, startAt: number }, * eggPurchaseTruck?: { eggType: string, fromZooId: string, toZooId: string, startAt: number }, * worldTruckSales?: Array<{ fromZooId: string, toZooId: string, startAt: number }>, * lastEvolutionAt?: number, * laboratoryOffer?: { eggType: string, price: number, endAt: number } | null, * prestigeLevel?: number, * timeOfDay?: number, * weather?: string, * lastWeatherChangeAt?: number, * quests?: Quest[], * lastQuestDay?: string, * stats?: { eggsPlaced: number, animalsSold: number, conveyorUpgrades: number, plotUpgrades: number, truckUpgrades?: number }, * mapZoom?: number, * mapPanX?: number, * mapPanY?: number, * worldMapLevel?: number, * autoMode?: boolean, * autoModeProfile?: "fast"|"slow"|"balanced", * autoModeProfileId?: number, * autoProfilePickerOpen?: boolean, * autoProfilePickerFamily?: number, * lastPlayerAutoTickAt?: number, * myZooId?: string, * playerName?: string, * playerX?: number, * playerY?: number, * researchPoints?: number, * pendingBabies?: PendingBaby[], * receptionAnimals?: ReceptionAnimal[], * saleListings?: SaleListing[], * salesFromApi?: { asSeller: Array<{ id: string, seller_zoo_id: string, animal_id: string, is_baby: boolean, initial_price: number, end_at: string, status: string, best_bid_amount?: number, best_bidder_zoo_id?: string, sold_at?: string, validated_at?: string | null, reproduction_score_at_sale?: number }>, asBuyerUndelivered: Array<{ id: string, animal_id: string, is_baby: boolean, initial_price: number, status?: string, validated_at?: string | null, reproduction_score_at_sale?: number }>, active: Array<{ id: string, seller_zoo_id: string, animal_id: string, is_baby: boolean, initial_price: number, end_at: string, best_bid_amount?: number }> }, * deathCountRecent?: number, * birthCount?: number, * feedingRate?: number, * reproductionScore?: number, * attractivityScore?: number, * attractivityScore?: number, * reproductionTimers?: Array<{ keyA: string, keyB: string, animalId: string, dueAt: number }>, * visitorArrivals?: VisitorEntry[], * attractivityBonusFromIncidents?: number, * }} GameState */ export default {};