For the complete documentation index, see llms.txt. This page is also available as Markdown.

πŸ›‘οΈAdmin Panel

Opening the panel

The admin panel is built into the skill tree UI. To access it:

1

Make sure your account is recognised as admin

The panel checks Core.IsPlayerAdmin(source) from devhub_lib. If your framework's admin detection isn't configured in devhub_lib, the panel will not be accessible.

2

Open the skill tree menu

Use your normal command (/skill), keybind (F7), or item.

3

Click the admin button in the top-right corner

The admin button is only rendered when the isAdmin callback returns true for your source.


Features

Dashboard

  • Total players β€” distinct rows in dh_skilltree

  • Total skills unlocked β€” sum across all players

  • Total XP earned β€” sum across all players

  • Most popular skill β€” most-unlocked skill across the server

  • Average level β€” mean of totalLevel across all players

Dashboard stats are cached server-side for 15 minutes to avoid expensive scans on every open. The UI shows how stale the data is.

Search players by name or server ID. The query hits both online players (live data) and offline players (via SQL on dh_skilltree.name and dh_skilltree.identifier β€” the new columns added in v3).

Player Details

For any player (online or offline) the panel exposes:

  • Their level, XP, points, and unlocked skills per category

  • Action buttons to:

    • Add XP to a category

    • Remove XP from a category

    • Add points to a category

    • Remove points from a category

    • Reset skills in a category (with point refund)

    • Unlock a specific skill (skips requirements)

All write actions are logged via the existing log webhooks.


Console commands

These are registered in configs/s.main.lua and enabled by default in v3 (commented out in v2). Permission is Core.IsPlayerAdmin(source).

If you want to disable them, comment out the RegisterCommand blocks in configs/s.main.lua.


Permissions

Admin status is determined by your devhub_lib framework adapter β€” typically the same logic that decides if /admin and similar commands work in your other resources. There is no separate ACE / group config for the skill tree itself; if Core.IsPlayerAdmin(source) returns true, the player can use the panel.


Offline player support

Offline players are read directly from dh_skilltree via SQL. Modifications (add/remove XP, unlock skill, etc.) update the database directly. When the player next connects, they receive the updated state through the normal player-load flow.


Logging

All admin write actions go through the same Discord webhook log channels configured in configs/s.main.lua:

Last updated