CommunityCodierung & Entwicklunggithub.com

Roblox-Entwicklung mit Rojo (Luau)

Entwickle Roblox-Erfahrungen in Luau mit Rojo innerhalb der VM und veröffentliche sie über Open Cloud in einem vom Benutzer angegebenen TEST-Place.

Was ist Roblox-Entwicklung mit Rojo (Luau)?

Dieses Skill-Tool richtet sich an Entwickler, die Roblox-Spiele in Luau mit Rojo erstellen möchten, und zwar vollständig innerhalb einer VM (virtuellen Maschine). Es automatisiert die Einrichtung von Rojo, die Projektstruktur, die Einhaltung von Codierungsstandards und die Veröffentlichung des Builds über die Roblox Open Cloud API – und zwar ausschließlich in einem vom Benutzer angegebenen Test-Ort. Der Skill legt großen Wert auf die Vermeidung von Entwicklungsfehlern: API-Schlüssel werden sicher über einen Vault-Mechanismus behandelt, es gibt strikte Regeln gegen die Preisgabe sensibler Informationen. Zudem wird der gesamte Code strikt nach den Client-Server-Sicherheitsprinzipien von Roblox strukturiert (niemals dem Client vertrauen, Remotes validieren, DataStores korrekt verwenden). Der Skill ist primär für CLI-gesteuerte Workflows konzipiert, bei denen die gesamte Entwicklung in der VM stattfindet und die Veröffentlichung über das sichere Open Cloud von Roblox erfolgt. Er unterstützt Plattformen wie Codex, Cursor und Claude Code und stellt sicher, dass die Entwicklungsumgebung schnell und konsistent eingerichtet und gewartet werden kann. Der Anwendungsfall ist klar: Ein Entwickler kann innerhalb der VM Roblox-Erlebnisse als einfache Dateien erstellen, sie mit Rojo zu einer .rbxl-Datei kompilieren und diese dann auf Befehl in einen Test-Ort hochladen. Die Konfiguration ist so angelegt, dass sie keine bestehende Projektstruktur überschreibt, und es wird ausdrücklich davon abgeraten, ohne explizite Aufforderung Live-Ort zu verwenden. Der Skill behandelt typische Fehler wie fehlende API-Berechtigungen, falsche Ort-IDs oder kaputte Builds, ohne API-Schlüssel preiszugeben, was ihn zu einem robusten Werkzeug für kontinuierliche Entwicklung und Tests in einer isolierten Umgebung macht.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ali-ali18/agent-skills/tree/HEAD/skills/roblox

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Roblox-Entwicklung mit Rojo (Luau)?

Du erstellst Roblox-Erlebnisse als einfache Dateien innerhalb der VM, kompilierst sie mit Rojo zu einer Ortsdatei und lädst diese nur auf Anfrage über Roblox Open Cloud in einen TEST-Ort hoch. Antworte dem Benutzer in seiner Sprache (pt-BR ist Standard).

0. Grundregeln

  • Gib niemals einen API-Schlüssel aus, protokolliere, logge oder schreibe ihn. Verwende ausschließlich den Vault-Marker {{secret:<name>}} innerhalb eines shell-Aufrufs; die Laufzeit ersetzt den Wert und blendet ihn in der Ausgabe aus.
  • Veröffentliche NUR in den Test-Ort, den der Benutzer angegeben hat (universeId + placeId). Ratese niemals IDs und verwende keine IDs aus einem anderen Gespräch erneut. Wenn der Benutzer einen Live-/Produktionsort angibt, stoppe und bestätige dies absichtlich.
  • Standardmäßig ist versionType = Saved (eine neue Version im Versionsverlauf, nicht live). Verwende Published nur, wenn der Benutzer explizit darum bittet, live zu gehen.
  • Fehlt die universeId, placeId oder der geheime Name? Frage mit propose_questionnaire (ein kurzes Formular). Fehlt das Geheimnis vollständig? Rufe secret_request auf (vorgeschlagener Name: ROBLOX_API_KEY). Frage niemals im Chat nach dem Schlüssel.

1. Rojo installieren (einmal pro VM)

Festgelegte Version: Rojo 7.7.1 (prüfe https://github.com/rojo-rbx/rojo/releases auf neuere 7.x-Versionen und informiere den Benutzer, bevor du den Pin änderst). Installiere das vorgefertigte Linux x86_64-Binärprogramm in das Home-Verzeichnis, kein Root erforderlich:

mkdir -p "$HOME/.local/bin" && cd "$(mktemp -d)"
curl -fsSL -o rojo.zip https://github.com/rojo-rbx/rojo/releases/download/v7.7.1/rojo-7.7.1-linux-x86_64.zip
unzip -o rojo.zip && install -m 0755 rojo "$HOME/.local/bin/rojo"
export PATH="$HOME/.local/bin:$PATH"
rojo --version   # erwartet: rojo 7.7.1

Prüfe zuerst mit command -v rojo; überspringe die Installation, wenn es bereits 7.x ausgibt. Verwende auf einer ARM-VM das linux-aarch64-Asset. Alternativ, wenn bereits ein Toolchain-Manager vorhanden ist: rokit add rojo-rbx/rojo && rokit install. Führe keine Installationsprogramme von anderen URLs aus.

2. Projektstruktur

my-game/
  default.project.json
  src/
    server/     -> ServerScriptService.Server   (server-seitiger Code)
    client/     -> StarterPlayer.StarterPlayerScripts.Client
    shared/     -> ReplicatedStorage.Shared      (Module, die beide Seiten benötigen können)

default.project.json:

{
  "name": "my-game",
  "tree": {
    "$className": "DataModel",
    "ServerScriptService": { "Server": { "$path": "src/server" } },
    "ReplicatedStorage": { "Shared": { "$path": "src/shared" } },
    "StarterPlayer": {
      "$className": "StarterPlayer",
      "StarterPlayerScripts": { "Client": { "$path": "src/client" } }
    }
  }
}

Dateinamen, die Rojo versteht: init.server.luau (ein Script für den Ordner), *.server.luau (Script), *.client.luau (LocalScript), einfaches *.luau (ModuleScript), init.luau (Ordner wird zum ModuleScript). Füge eine .gitignore mit *.rbxl, *.rbxlx, Packages/ hinzu. Erstelle das Projekt nur, wenn der Ordner keine default.project.json hat; überschreibe niemals ein vorhandenes Layout, passe dich an.

3. Codierungskonventionen

  • Luau mit --!strict am Anfang jeder Datei. Typisiere Funktionssignaturen und exportierte Tabellen.
  • Eine Verantwortlichkeit pro ModuleScript, das eine Tabelle zurückgibt. Keine globalen Variablen, kein _G, kein shared. Verwende require mit direkten Referenzen (script.Parent.Module oder ReplicatedStorage.Shared.Module).
  • Halte Einstiegspunkte klein: ein init.server.luau und ein Client-Einstiegspunkt, der Dienste/Controller requiret und sie nacheinander startet.
  • Rufe Dienste oben ab: local Players = game:GetService("Players"). Bevorzuge task.wait, task.spawn, task.delay gegenüber wait/spawn/delay. Trenne spielerbezogene Verbindungen bei Players.PlayerRemoving.
  • Vertraue niemals dem Client. Der Server besitzt den Spielstatus (Währung, Inventar, Schaden, Teleportation, Fortschritt). Der Client sendet nur Absichten und rendert Ergebnisse.

Remotes-Sicherheitscheckliste

  • Erstelle RemoteEvent/RemoteFunction-Instanzen unter ReplicatedStorage vom Server aus mit einem festen Namen; erstelle sie niemals vom Client aus.
  • Bei jedem OnServerEvent/OnServerInvoke: Validiere Argumentanzahl und -typen (typeof), begrenze Bereiche, weise NaN/inf zurück, begrenze Zeichenkettenlänge, prüfe, ob der Spieler berechtigt ist (Cooldown, Eigentum, Distanz, Leben).
  • Rate-Limite pro Spieler (Token-Bucket oder letzter Aufruf-Zeitstempel). Ein Remote darf niemals einen Preis, eine Schadenshöhe oder einen anderen Wert enthalten, den der Client zu seinem Vorteil wählen könnte.
  • RemoteFunction: Verwende niemals InvokeClient (ein bösartiger Client kann den Server-Thread aufhängen).
  • DataStore: Wickele in pcall, wiederhole mit Backoff, speichere bei PlayerRemoving und game:BindToClose; Sitzungssperre für wertvolle Daten.
  • Geheimnisse und Einstellungs-Knöpfe leben nur in ServerScriptService/ServerStorage, niemals in ReplicatedStorage.

4. Build

rojo build default.project.json -o place.rbxl
ls -l place.rbxl

Behebe zuerst Build-Fehler (fehlender $path, fehlerhaftes JSON, doppelte Namen). Übertrage place.rbxl nicht. selene / stylua --check sind optional; installiere sie nicht, außer du wirst darum gebeten. Ein aus Dateien erstellter Ort ist nur ein Script-Skelett: Assets, Terrain und UI, die in Studio erstellt wurden, leben in dem bereits vorhandenen Ort, daher ERSETZT das Hochladen den Inhalt der Zielversion. Genau deshalb muss das Ziel ein Test-Ort sein.

5. Veröffentlichung über Open Cloud (Test-Ort)

Endpunkt (Roblox Open Cloud Place Publishing, Universen v1):

POST https://apis.roblox.com/universes/v1/{universeId}/places/{placeId}/versions?versionType=Saved|Published

  • Header x-api-key: <key>; Content-Type: application/octet-stream für .rbxl (binär), application/xml für .rbxlx.
  • Body: die rohe Ortsdatei. Erfolgsantwort: { "versionNumber": 7 }.
  • Der API-Schlüssel benötigt die Berechtigung universe-places mit Schreibzugriff auf die Ziel-Erfahrung (erstellt im Creator Dashboard).
  • Nur HTTPS. Die API aktualisiert einige Instanztypen nicht (EditableImage, EditableMesh, PartOperation, SurfaceAppearance, BaseWrap): Sage dem Benutzer, dass er diese aus Studio veröffentlichen soll.
  • Docs: https://create.roblox.com/docs/en-us/cloud/guides/usage-place-publishing

Führe es mit dem Vault-Marker aus (der Marker steht innerhalb des Shell-Befehls, niemals im Nachrichtentext):

curl -sS -X POST \
  "https://apis.roblox.com/universes/v1/$UNIVERSE_ID/places/$PLACE_ID/versions?versionType=Saved" \
  -H "x-api-key: {{secret:ROBLOX_API_KEY}}" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @place.rbxl

Ersetze $UNIVERSE_ID und $PLACE_ID mit den vom Benutzer angegebenen Zahlen und den geheimen Namen mit dem tatsächlichen Vault-Namen (secret_list zeigt nur Namen an). Behandle Fehler, ohne den Schlüssel preiszugeben: 401/403 = Schlüssel ungültig oder fehlende Berechtigung/Erfahrung; 404 = falsches Universum/Ort-Paar; 400 = fehlerhafte Datei (neu builden); 429 = warte und wiederhole einmal. Zitiere nur den HTTP-Status und den Antworttext, der niemals den Schlüssel enthält.

6. Bericht

Beende jede Aufgabe mit einem kurzen Bericht in der Sprache des Benutzers:

  1. Was sich geändert hat (Dateien und Verhalten), in einfachen Worten.
  2. Das rojo build Ergebnis und, falls veröffentlicht, die versionNumber, der verwendete versionType und dass es an den Test-Ort <placeId> ging.
  3. Wie man in Studio testet: Öffne den Test-Ort, öffne Version History, um die neue Saved-Version zu laden, drücke Play (F5), und die genauen Dinge, die mit den erwarteten Output-Nachrichten ausprobiert werden sollen.
  4. Was du NICHT gemacht hast (Live-Veröffentlichung, Assets oder Terrain, die Studio benötigen).

7. Option für lokale Synchronisation

Für Live-Bearbeitung kann der Benutzer rojo serve auf seinem eigenen Computer mit dem Rojo Studio Plugin (https://rojo.space/docs/v7/getting-started/installation/) ausführen. Die VM kann von seinem Studio nicht erreicht werden, bleibe daher innerhalb der VM bei Build plus Open Cloud Upload.

Verwandte Skills