GitHunt
TH

thegamecracks/420th-Stats-Tracker

A server-side Arma 3 mod for tracking player statistics.

Stats Tracker

A server-side Arma 3 mod for tracking player statistics. Integrated with extDB3.

Installation

To build the mod from source, install HEMTT and run the following command:

hemtt build

Since this is a server-side mod, it does not need to be signed.

Users

  • Players (in-game participants)
  • Viewers (of the leaderboard, which can also be players)
  • Administrators

Functional Requirements

  • System should be able to track an arbitrary number of numerical player statistics
    • Infantry kills, ground kills, ship kills, tank kills, aircraft kills
    • Playtime (minutes)
    • Player deaths and incapacitations
    • Players transported
    • Players revived
    • Score (meta, totality of other stats)
  • Player statistics should be tracked per-server
  • Player statistics should be tracked in near real-time (e.g. every five minutes)
  • Viewers should be able to see the top players for each statistic in near real-time
    (e.g. fetched on request and cached for five minutes)
  • Viewers should be able to see leaderboards on different time intervals
    (1 day, 1 week, 1 month, all-time)
  • Viewers should be able to see server-specific leaderboards, plus global leaderboard
  • Players should be able to view their own ranks and statistics on each leaderboard
  • Players should be able to view neighbouring player ranks on each leaderboard
  • Players should not appear in leaderboards when no statistics are available
    (e.g. 1-day leaderboard where player X has not gained any stats)
  • Players should see themselves as unranked if no statistics are available
  • (Maybe?) Players should be able to opt-out of leaderboards
  • (Maybe?) Players should be able to opt-out of stats tracking
  • Administrators should be able to create new servers
  • Administrators should be able to reset statistics of specific players
    (e.g. for leaderboard exploiters)

Mod Design

  • Statistics should be synced to a database at least every five minutes
  • Game server should call stored procedure up to N x M times to submit
    each player's changes in stats

Database Design

  • Stored procedure should insert or update daily statistics based on CURRENT_DATE
  • Same stored procedure should insert or update 'score' daily statistic
  • Triggers should synchronize daily statistics with weekly, monthly, and all-time statistics
  • Daily, weekly, and monthly statistics should be pruned once every month
  • Deletion of daily, weekly, or monthly statistics must NOT affect all-time statistics

Entity-Relationship Diagram

erDiagram
    stat_player {
        string steam_id
        string name
    }
    stat {
        string stat_id
        number score_multiplier
    }
    stat_server {
        string server_id
        string name
    }
    stat_player_daily {
        date created_at
        string steam_id
        string stat_id
        string server_id
        number amount
    }
    stat_player_weekly {
        date created_at
        string steam_id
        string stat_id
        string server_id
        number amount
    }
    stat_player_monthly {
        date created_at
        string steam_id
        string stat_id
        string server_id
        number amount
    }
    stat_player_alltime {
        string steam_id
        string stat_id
        string server_id
        number amount
    }
    stat_player ||--o{ stat_player_daily : "measures"
    stat ||--o{ stat_player_daily : "measures"
    stat_server ||--o{ stat_player_daily : "measures"
    stat_player_daily }o--o{ stat_player_weekly : "syncs to"
    stat_player_daily }o--o{ stat_player_monthly : "syncs to"
    stat_player_daily }o--o{ stat_player_alltime : "syncs to"
Loading

Languages

SQF92.3%C++7.7%

Contributors

MIT License
Created January 26, 2026
Updated February 20, 2026