Skript-SDK · Luau
Bau deine eigenen Spielmodi.
Status: frühe Alpha. Die Skript-API wächst innerhalb einer Hauptversion nur, deine heute geschriebenen Ressourcen funktionieren also weiter. Eigene Modelle, Texturen und Sounds kommen als Nächstes.
Ressourcen
Eine Ressource ist ein Ordner im Ordner recursos/ des Servers: ein resource.toml-Manifest plus Skripte. Server-Skripte laufen auf dem Server; Client-Skripte werden an jeden Spieler geschickt und laufen auf dessen PC. Jeder mitgelieferte Spielmodus ist nur eine Ressource — kopieren, umbenennen und nach Belieben ändern.
recursos/
hello/
resource.toml
server/main.luau
client/hud.luau -- optional: runs on each player's PCname = "hello"
version = "1.0.0"
description = "Says hello"
author = "You"
server_scripts = ["server/main.luau"]
client_scripts = [] # sent to each player and run on their PC
dependencies = [] # resources that must be running first
gamemode = false # true: this resource runs the rounds
autostart = trueDeine erste Ressource
Begrüße Spieler beim Beitreten und füge einen /dice-Befehl hinzu. Starte den Server, und die Ressource läuft; nach dem Bearbeiten tippst du restart hello in die Serverkonsole, und sie wird sofort neu geladen.
on("playerJoin", function(player: number)
players.message(player, "Hello, " .. (players.name(player) or "?") .. "!")
end)
registerCommand("dice", function(player: number)
chat.broadcast((players.name(player) or "?") .. " rolls " .. math.random(1, 6))
end)> resources # list what's running
> restart hello # reload after editing — no server restart
> players
> say Round starts in 1 minute
> ban 7 60 spamming # by player number, for 60 minutesWas die API abdeckt
Die Server-API ist in kleine, fokussierte Bibliotheken gegliedert. Spieler werden über eine Nummer identifiziert — die, die alle in der Spielerliste neben dem Spitznamen sehen.
Events
Beitreten, Verlassen, Treffer, K.o.s, Items, Runden, Graffiti, Menüauswahl — plus eigene Events zwischen Ressourcen.
Chat & Befehle
Farbiger Chat, /Befehle mit Argumenten, Vorschläge und Nachrichten an einzelne Spieler.
Timer
setTimeout, setInterval und clearTimer für alles, was später läuft oder sich wiederholt.
Spieler
Spitznamen, Namensfarben und Tags, Admins, Kicks, zeitlich begrenzte Bans und dauerhafte Spieler-IDs.
Kämpfer
Lebenspunkte, Teams, Spawns, Teleports, Charaktere, Einfrieren, Unverwundbarkeit und Respawns.
Cops
Mach jeden Kämpfer zum Cop, leg Handschellen an und ab, verteil Schlüssel dafür.
Crews & Befehle
Lies und gib die sechs Crew-Befehle und arbeite mit den Crews des Spiels und ihren Mitgliedern.
Items
Waffen und Gegenstände geben, nehmen und fallen lassen, auflisten, was am Boden liegt, Gewicht anpassen.
NPCs
Platziere Charaktere, die an Ort und Stelle bleiben, mit Namen, Symbol und Idle-Animation — Ladenbesitzer, Anwerber, Auftraggeber.
Dimensionen
Mehrere Karten gleichzeitig betreiben, Kämpfer zwischen ihnen bewegen und Karten zwischen Matches rotieren.
Marker & Türen
Schwebende Marker, die zeigen, wo etwas passiert, und Kontrolle über die Türen jeder Karte.
Objekte
Kartenobjekte per Skript oder mit dem Editor im Spiel platzieren, verschieben und entfernen (bis zu 5.000 pro Server).
Graffiti
Sprühwände anlegen, sperren, zurücksetzen und auf jede fertige Schicht reagieren.
Runden & Modi
Runden starten, beenden und abbrechen — oder ganz darauf verzichten für Freeroam, Deathmatch und Roleplay.
Bildschirm-UI
Texte, Panels, Balken, Bilder, große Ansagen, nummerierte Menüs und Texteingaben.
Fenster & Klicks
Anklickbare Zeichnungen, Beschriftungen, Item-Bilder und ein freier Cursor für eigene Fenster.
Symbole & Zonen
Symbole und farbige Zonen auf der Karte jedes Spielers.
Gespeicherte Daten
Ein Schlüssel-Wert-Speicher pro Ressource, der Server-Neustarts übersteht.
Passwörter & Bans
Gesalzenes, absichtlich langsames Passwort-Hashing für Server-Accounts und Bans nach ID und IP mit optionaler Dauer.
Client-Skripte
Client-Skripte sind für das, was jedem Spieler selbst gehört: ein HUD, Menüs, Tastenbelegungen, lokale Chatbefehle, die Kamera und Sounds. Jede Ressource läuft in ihrer eigenen Sandbox auf dem PC des Spielers.
Sie können den Kampf lesen, aber nie verändern — sonst würde jeder PC etwas anderes sehen und Cheaten wäre trivial. Um etwas zu ändern, fragt ein Client-Skript den Server, und der Server entscheidet.
-- client/hud.luau
setInterval(function()
local me = fighters.get(localPlayer.fighter() or -1)
if me then
ui.text("hp", "Health " .. math.floor(me.health), { position = "bottom-right" })
end
end, 200)
on("keyDown", function(key)
if key == "F3" then
emitServer("askStats") -- handled on the server with onClient("askStats", ...)
end
end)Sandbox & Grenzen
Kein Zugriff nach außen
Skripte können weder Dateien, das Netzwerk noch das Betriebssystem anfassen und keine API-Funktionen ersetzen.
250 ms pro Lauf
Ein Skript, das am Stück zu lange läuft, wird gestoppt — eine Endlosschleife kann den Server nicht einfrieren.
64 MB pro Ressource
Jede Ressource bekommt ihr eigenes Speicherbudget.
Fehler bleiben isoliert
Fehler landen mit dem Ressourcennamen im Serverlog; die Ressource läuft weiter.
Editor-Unterstützung: Das SDK liefert Typdefinitionen für die Server- und Client-APIs. Binde sie in luau-lsp (öffnet in einem neuen Tab) ein (zum Beispiel über eine Luau-Erweiterung für VS Code), um Autovervollständigung und Typprüfung zu bekommen.
Mitgelieferte Vorlagen
Jeder Server bringt diese Ressourcen mit. Nichts darin ist spielspezifisch — deine eigenen Ressourcen können dasselbe und mehr.
- welcome
- Begrüßt Spieler und zählt ihre Besuche mit gespeicherten Daten.
- basic-commands
- /players und ein regelmäßiger Tipp im Chat.
- player-hud
- Client-Skripte: ein HUD, F2 zum Ausblenden, F3 fragt den Server nach deinen Stats.
- scoreboard
- Eine K.o.-Tabelle, die Runde in großen Buchstaben und ein /stats-Menü.
- fight-basics
- Kündigt K.o.s und Rundensieger an, dazu /heal und /where.
- deathmatch
- Ein Modus ohne Runden: Respawns, Killfeed, wer zuerst 10 hat, gewinnt.
- roleplay
- Accounts, Charaktere, gespeicherte Positionen, ein Krankenhaus und eine U-Bahn zwischen den Vierteln.
- roleplay-chat
- Lokaler Chat, /me, /do, /shout, /ooc und Co.
- mapvote
- Eine Abstimmung über die nächste Karte am Ende jedes Matches.
- mapping
- Kartenobjekte und der Platzierungseditor im Spiel.
- admin
- Admin-Werkzeuge wie freies Fliegen über die Karte.
Einen Server betreiben
Hoste für schnelle Runden direkt aus dem Spielmenü oder bau mit CreateServer.bat in deinem Spielordner ein Paket für einen dedizierten Server. Es fragt nach dem Zielsystem (Windows oder Linux) und den Karten und erstellt einen Ordner mit Serverprogramm, Daten, deinen Ressourcen, einer servidor.cfg und der SDK-Dokumentation.
- Linux: Ubuntu 24.04+ oder Debian 12+, 64 Bit, mit installierten ALSA- und udev-Bibliotheken.
- Ports: UDP 27015 für das Spiel und UDP 27016 für die Serversuche (oder der konfigurierte Port und der nächste).
- Updates: Der Server meldet beim Start, wenn eine neue Version erschienen ist. Spiel aktualisieren, Paket neu bauen, Programm und Daten ersetzen — Konfiguration und Ressourcen bleiben.
- Private Daten: Der Ordner
data/des Pakets wird aus deiner eigenen Kopie des Originalspiels erzeugt. Teile ihn niemals öffentlich.
Vollständige Referenz
Die vollständige API-Referenz — jede Funktion, jedes Event, jede Option — liegt jedem Serverpaket in sdk/README.md bei, zusammen mit den Typdefinitionen für den Editor in sdk/types/. Sie passt immer zu der Version, die du betreibst.