Zum Inhalt springen
Gang Fights

Skript-SDK · Luau

Bau deine eigenen Spielmodi.

Gang-Fights-Server führen Ressourcen aus, geschrieben in Luau (öffnet in einem neuen Tab) — Lua mit optionalen Typen. Vom Würfelbefehl bis zur kompletten Roleplay-Stadt: Was auf einem Server passiert, kannst du skripten.

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.

Ordnerstruktur
recursos/
  hello/
    resource.toml
    server/main.luau
    client/hud.luau        -- optional: runs on each player's PC
resource.toml
name = "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 = true

Deine 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.

hello/server/main.luau
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)
Serverkonsole
> 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 minutes

Was 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.

player-hud/client/hud.luau
-- 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.

Mehr zum Hosten

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.