feat: web dashboard and playground work

The NexusDashboard-parity dashboard (dDashboardServer) and everything built on it on the experimental branch:
accounts, characters, properties and moderation tools, permissions shared with in-game slash commands, economy
reports, World 3D and property 3D views with client scenery, scheduled events (features, vanity changes, live
events, announcements, restarts), vanity files and events, the CDClient browser, the message inspector with saved
captures, chat filter tools, community challenges, live ops, the AI moderator helper, and the server-side changes
they need.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-26 17:52:10 -05:00
parent 854d02f509
commit e213a7aeff
681 changed files with 88310 additions and 1321 deletions

View File

@@ -0,0 +1,17 @@
#pragma once
#ifndef __BEHAVIORSTATES__H__
#define __BEHAVIORSTATES__H__
#include <cstdint>
enum class BehaviorState : uint32_t {
HOME_STATE = 0, //!< The HOME behavior state
CIRCLE_STATE, //!< The CIRCLE behavior state
SQUARE_STATE, //!< The SQUARE behavior state
DIAMOND_STATE, //!< The DIAMOND behavior state
TRIANGLE_STATE, //!< The TRIANGLE behavior state
STAR_STATE //!< The STAR behavior state
};
#endif //!__BEHAVIORSTATES__H__

View File

@@ -0,0 +1,70 @@
#pragma once
enum class BehaviorTemplate : unsigned int {
EMPTY, // Not a real behavior, indicates invalid behaviors
BASIC_ATTACK,
TAC_ARC,
AND,
PROJECTILE_ATTACK,
HEAL,
MOVEMENT_SWITCH,
AREA_OF_EFFECT,
PLAY_EFFECT,
IMMUNITY,
DAMAGE_BUFF,
DAMAGE_ABSORBTION,
OVER_TIME,
IMAGINATION,
TARGET_CASTER,
STUN,
DURATION,
KNOCKBACK,
ATTACK_DELAY,
CAR_BOOST,
FALL_SPEED,
SHIELD,
REPAIR_ARMOR,
SPEED,
DARK_INSPIRATION,
LOOT_BUFF,
VENTURE_VISION,
SPAWN_OBJECT,
LAY_BRICK,
SWITCH,
BUFF,
JETPACK,
SKILL_EVENT,
CONSUME_ITEM,
SKILL_CAST_FAILED,
IMITATION_SKUNK_STINK,
CHANGE_IDLE_FLAGS,
APPLY_BUFF,
CHAIN,
CHANGE_ORIENTATION,
FORCE_MOVEMENT,
INTERRUPT,
ALTER_COOLDOWN,
CHARGE_UP,
SWITCH_MULTIPLE,
START,
END,
ALTER_CHAIN_DELAY,
CAMERA,
REMOVE_BUFF,
GRAB,
MODULAR_BUILD,
NPC_COMBAT_SKILL,
BLOCK,
VERIFY,
TAUNT,
AIR_MOVEMENT,
SPAWN_QUICKBUILD,
PULL_TO_POINT,
PROPERTY_ROTATE,
DAMAGE_REDUCTION,
PROPERTY_TELEPORT,
PROPERTY_CLEAR_TARGET,
TAKE_PICTURE,
MOUNT,
SKILL_SET
};

View File

@@ -29,6 +29,31 @@ namespace MessageType {
NEW_SESSION_ALERT,
REQUEST_SERVER_LIST,
SERVER_LIST_RESPONSE,
// Dashboard -> master -> every world: act on an online player (see PlayerAction.h)
PLAYER_ACTION,
// World -> master: whether this world handled a PLAYER_ACTION; master -> dashboard: aggregated result
PLAYER_ACTION_RESULT,
// World -> master -> dashboard: rows the game just wrote, so open dashboards update at once (see DataChanged.h)
DATA_CHANGED,
// World -> master -> dashboard: where players are (see DashboardMessages.h)
PLAYER_POSITIONS,
// Dashboard -> master -> every world: show an announcement to everyone online
ANNOUNCE,
// Dashboard -> master: shut the whole server down now (scheduled restarts; a supervisor starts it again)
DASHBOARD_SHUTDOWN,
// Dashboard -> master -> every server: settings changed on the dashboard, reload the config
CONFIG_RELOAD,
// Dashboard -> master: shut down one world instance (uint32 zone, uint32 instance)
INSTANCE_SHUTDOWN,
// Dashboard -> master -> every world: start or stop capturing a player's game messages (see MessageCapture.h)
MESSAGE_CAPTURE_CONTROL,
// World -> master -> dashboard: captured game messages and the capture's state (see MessageCapture.h)
MESSAGE_CAPTURE_DATA,
// Move everyone in one instance to another (replace or merge; see InstanceMigration.h). Sent by a world
// for a GM command; a dashboard could send it too
INSTANCE_MIGRATE,

View File

@@ -5,7 +5,8 @@ enum class ServiceType : uint16_t {
COMMON = 0,
AUTH,
CHAT,
WORLD = 4,
DASHBOARD,
WORLD,
CLIENT,
MASTER,
UNKNOWN

View File

@@ -0,0 +1,37 @@
#ifndef __STATISTICID__H__
#define __STATISTICID__H__
/**
* The IDs of each of the possible statistics
*/
enum StatisticID {
CurrencyCollected = 1,
BricksCollected,
SmashablesSmashed,
QuickBuildsCompleted,
EnemiesSmashed,
RocketsUsed,
MissionsCompleted,
PetsTamed,
ImaginationPowerUpsCollected,
LifePowerUpsCollected,
ArmorPowerUpsCollected,
MetersTraveled,
TimesSmashed,
TotalDamageTaken,
TotalDamageHealed,
TotalArmorRepaired,
TotalImaginationRestored,
TotalImaginationUsed,
DistanceDriven,
TimeAirborneInCar,
RacingImaginationPowerUpsCollected,
RacingImaginationCratesSmashed,
RacingCarBoostsActivated,
RacingTimesWrecked,
RacingSmashablesSmashed,
RacesFinished,
FirstPlaceRaceFinishes,
};
#endif //!__STATISTICID__H__

View File

@@ -0,0 +1,13 @@
#ifndef __EACCOUNTLINK__H__
#define __EACCOUNTLINK__H__
#include <cstdint>
// What two accounts have in common, from data the servers store (see IModeration::GetLinkedAccounts)
enum class eAccountLink : uint8_t {
PLAY_KEY, // signed up with the same play key
EMAIL, // the same email address
LOGIN_ADDRESS, // logged in to the game from the same network address (account_login_addresses)
};
#endif //!__EACCOUNTLINK__H__

View File

@@ -0,0 +1,22 @@
#ifndef __ELEADERBOARDTYPE__H__
#define __ELEADERBOARDTYPE__H__
#include <cstdint>
/**
* CDClient Activities.leaderboardType. The client picks the leaderboard's columns from it
* (LWOCharacterComponent::msgSendActivitySummaryLeaderboardData in 1.10.64); the server decides the order.
*/
enum class eLeaderboardType : uint32_t {
ShootingGallery, // Score, Streak, Accuracy
Racing, // Best Time, Best Lap, Wins
MonumentRace, // Time taken
FootRace, // Time left on the race's countdown at the finish (L_ACT_BASE_FOOT_RACE_CLIENT.lua sends the remaining time)
UnusedLeaderboard4, // There is no 4 defined anywhere in the cdclient, but it takes Points.
Survival, // Time, Points
SurvivalNS, // Wave, Time
Donations, // Donations
None
};
#endif //!__ELEADERBOARDTYPE__H__

View File

@@ -0,0 +1,13 @@
#ifndef __EPLAYERREPORTKIND__H__
#define __EPLAYERREPORTKIND__H__
#include <cstdint>
// What a player reported from the game's Report Abuse window (player_reports.kind holds the name)
enum class ePlayerReportKind : uint8_t {
PLAYER, // another player: ReportBug with nOtherPlayerID set
MODEL, // an object in the world, usually a model on a property: ReportOffensiveModel
PROPERTY, // a property, picked by its plaque: ReportOffensiveProperty
};
#endif //!__EPLAYERREPORTKIND__H__

View File

@@ -0,0 +1,13 @@
#ifndef __EPLAYERREPORTSTATUS__H__
#define __EPLAYERREPORTSTATUS__H__
#include <cstdint>
// Where a player report stands (player_reports.status)
enum class ePlayerReportStatus : uint8_t {
OPEN,
ACTIONED, // staff acted on it (and may have given a strike)
DISMISSED, // nothing to act on
};
#endif //!__EPLAYERREPORTSTATUS__H__

View File

@@ -0,0 +1,11 @@
#ifndef __EPROPERTYPRIVACYOPTION__H__
#define __EPROPERTYPRIVACYOPTION__H__
// Who may visit a property (properties.privacy_option)
enum class PropertyPrivacyOption {
Private = 0, // Default, only you can visit your property
Friends = 1, // Your friends can visit your property
Public = 2 // Requires Mythran approval, everyone can visit your property
};
#endif //!__EPROPERTYPRIVACYOPTION__H__

View File

@@ -0,0 +1,16 @@
#ifndef __ESTRIKESOURCE__H__
#define __ESTRIKESOURCE__H__
#include <cstdint>
// What a strike against an account was given for (account_strikes.source holds the name)
enum class eStrikeSource : uint8_t {
MANUAL, // given by hand on the account's page
NAME, // a rejected character name
PET_NAME, // a rejected pet name
PROPERTY, // a rejected property
LEADERBOARD, // a score removed from a leaderboard
PLAYER_REPORT, // acting on a report a player sent from the game (Player Reports)
};
#endif //!__ESTRIKESOURCE__H__

View File

@@ -0,0 +1,14 @@
#ifndef __ESTRIKESTEP__H__
#define __ESTRIKESTEP__H__
#include <cstdint>
// What happens on its own when an account reaches a number of active strikes (strike_*_at settings).
// account_strikes.step holds the name on the strike that set it off.
enum class eStrikeStep : uint8_t {
WARN, // a warning on the account's record, shown to the player if they're online
MUTE, // muted for strike_mute_days
BAN, // banned for strike_ban_days (0: permanently)
};
#endif //!__ESTRIKESTEP__H__