Skip to content

Structs and methods

#pragma once
#include <clpp/libs/janitor.clh>
struct LeaderstatsServer {
static constexpr int STARTING_COINS = 0;
Janitor janitor;
void PlayerEntered(Player player);
};
void LeaderstatsServer::PlayerEntered(Player player) {
guard (player != null) else {
warn("Invalid player");
return;
}
Folder folder = new Folder(player);
folder.Name = "leaderstats";
}

Class::Method emits function Class:Method(...). Inside, @this is self. @janitor is self.janitor. Bare fields still become self.field. this without @ is the same alias.

void init() {
Players players = GetService<Players>();
LeaderstatsServer leaderstatsServer;
for (Player player in players.GetPlayers()) {
leaderstatsServer.PlayerEntered(player);
}
players.PlayerAdded~>Connect(func (Player playerEntered) {
leaderstatsServer.PlayerEntered(playerEntered);
});
}

Build one service object and capture it. That is the game’s singleton.

Field-only structs in a .clh (PlayerData templates) emit const function Name() with default fields.

Untagged files that only define Class:: methods return the table (ModuleScript).

Next: I/O.