Skip to content

DC-Highs/dc-statistics

Repository files navigation

@dchighs/dc-statistics 📊🐉

TypeScript License NPM version

A powerful data extraction and statistics generation library designed to work natively with the raw GameConfigDto from Dragon City, sourced via the official @dchighs/dc-config package.

📦 Installation

You can install the library via npm, yarn, or pnpm:

npm install @dchighs/dc-statistics

⚠️ Peer Dependencies

To parse the metrics properly, your project must have the core DTOs installed:

npm install @dchighs/dc-config

🚀 Usage

The main exported function is generateStatistics(configDto). By passing the raw game configuration, it computes the entire metrics tree on-demand and returns an optimized object structure.

import { Config } from "@dchighs/dc-config";
import { generateStatistics } from "@dchighs/dc-statistics";

async function main() {
    // 1. Fetch the config using the native dc-config tools
    const dcData = await Config.fetchRaw({ url: "https://dc-config.vercel.app/api/raw" });
    
    // 2. Generate statistics easily
    const stats = generateStatistics(dcData);

    console.log(`Global chests in the game: ${stats.chestsCount}`);
    console.log(`Number of Rare Dragons: ${stats.dragons.rareCount}`);
}
main();

📈 Extracted Data Structure

The codebase is split into specific domain modules (src/dragons.ts, src/islands.ts, etc.) to extract individual statistics efficiently. Currently, the following metrics are processed and returned:

1. items (Item Types Statistics)

Iterates through all game items natively and categorizes them by group_type. Returns metrics like dragonsCount, buildingsCount, habitatsCount, obstaclesCount, farmsCount, and more out-of-the-box.

2. dragons (Dragon Statistics)

  • totalCount: Total number of dragons available.
  • commonCount, rareCount, heroicCount...: Breakdown of dragon totals based on Rarities.
  • elements: Provides deep element topology statistics such as dragonsWith3Elements and accurate top-lists (like the occurrences per specific element via dragonCountsPerElement).
  • breedableCount and inStoreCount: Direct counter of specific static tags.

3. islands (Active Events / Islands Metrics)

Uses native timestamps (availability and start_ts) mapped to events to check their respective timelines against the realtime server prediction. It creates variables such as activesCount (currently ongoing), upcomingsCount (future scheduled events), and pastsCount (ended events). It tracks specific subcategories out of the box:

  • maze, tower, fog, grid, heroicRaces, runner, and puzzle.

4. Extracted Global Variables

Global disconnected numeric keys are grouped here for convenience:

  • maxLevel for the current game season limit.
  • chestsCount unique chests modeled.
  • dragonCollectionsCount.
  • dragonSkinsCount.

🛠️ Chart Tests Locally

The library includes an awesome built-in script with QuickChart that allows you to develop and test using PNG charts generated locally! This is super useful to visualize crossed data natively avoiding thousands of console logs.

Run it pointing to a dummy/mock setup (included in repo):

npm run test:charts

Or pass any local raw JSON dump of the game to perform the scan:

npm run test:charts -- ./path-to-your-local-gameconfig.json

It will render visualization stacked chunks (chart-rarity, chart-islands, chart-general, etc) right inside the root directory. They are already automatically ignored in your .gitignore.


By DC Highs


License

This project is licensed under the terms of the MIT license.

About

Powerful data extraction and statistical generation utilities for Dragon City configurations.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors