SDK de script · Luau
Créez vos propres modes de jeu.
État : alpha précoce. L’API de script ne fait que s’enrichir au sein d’une version majeure, donc les ressources que vous écrivez aujourd’hui continueront de fonctionner. Modèles, textures et sons personnalisés arrivent ensuite.
Ressources
Une ressource est un dossier placé dans le dossier recursos/ du serveur : un manifeste resource.toml et ses scripts. Les scripts serveur tournent sur le serveur ; les scripts client sont envoyés à chaque joueur et tournent sur son PC. Chaque mode de jeu fourni avec le serveur n’est qu’une ressource — copiez-en une, renommez-la et changez ce que vous voulez.
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 = trueVotre première ressource
Saluez les joueurs à leur arrivée et ajoutez une commande /dice. Démarrez le serveur et la ressource s’exécute ; après modification, tapez restart hello dans la console du serveur et elle se recharge aussitôt.
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 minutesCe que couvre l’API
L’API serveur est organisée en petites bibliothèques ciblées. Chaque joueur est identifié par un numéro — celui que tout le monde voit à côté de son pseudo dans la liste des joueurs.
Événements
Arrivées, départs, coups, K.-O., objets, manches, graffitis, choix dans les menus — et vos propres événements entre ressources.
Chat et commandes
Chat en couleur, /commandes avec arguments, suggestions et messages par joueur.
Minuteurs
setTimeout, setInterval et clearTimer pour tout ce qui s’exécute plus tard ou se répète.
Joueurs
Pseudos, couleurs et tags de nom, admins, kicks, bans temporaires et identifiants stables.
Combattants
Santé, équipes, points d’apparition, téléportations, personnages, gel, invulnérabilité et réapparitions.
Flics
Faites de n’importe quel combattant un flic, menottez et libérez, distribuez les clés des menottes.
Bandes et ordres
Lisez et donnez les six ordres de bande, et travaillez avec les bandes du jeu et leurs membres.
Objets
Donnez, retirez et lâchez armes et objets, listez ce qui traîne au sol, ajustez leur poids.
PNJ
Placez des personnages qui restent sur place, avec nom, icône et animation d’attente — commerçants, recruteurs, donneurs de quêtes.
Dimensions
Faites tourner plusieurs cartes à la fois, déplacez les combattants entre elles et alternez les cartes entre les matchs.
Marqueurs et portes
Des marqueurs flottants qui indiquent où il se passe quelque chose, et le contrôle des portes de chaque carte.
Objets de carte
Placez, déplacez et supprimez des objets de carte par script ou avec l’éditeur en jeu (jusqu’à 5 000 par serveur).
Graffitis
Créez des murs à bomber, verrouillez-les, réinitialisez-les et réagissez à chaque couche terminée.
Manches et modes
Lancez, terminez et arrêtez des manches — ou passez-vous-en pour le mode libre, le deathmatch et le roleplay.
Interface à l’écran
Textes, panneaux, barres, images, grandes annonces, menus numérotés et champs de saisie.
Fenêtres et clics
Dessins cliquables, étiquettes, images d’objets et curseur libre pour vos propres fenêtres.
Icônes et zones
Icônes et zones colorées sur la carte de chaque joueur.
Données sauvegardées
Un stockage clé-valeur par ressource qui survit aux redémarrages du serveur.
Mots de passe et bans
Hachage salé et volontairement lent des mots de passe des comptes serveur, et bans par identifiant et IP avec durée optionnelle.
Scripts client
Les scripts client servent à ce qui appartient à chaque joueur : un HUD, des menus, des raccourcis clavier, des commandes de chat locales, la caméra et les sons. Chaque ressource tourne dans son propre bac à sable sur le PC du joueur.
Ils peuvent lire le combat mais jamais le modifier — sinon chaque PC verrait quelque chose de différent et tricher deviendrait trivial. Pour changer quelque chose, un script client le demande au serveur, et c’est le serveur qui décide.
-- 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)Bac à sable et limites
Aucun accès extérieur
Les scripts ne peuvent toucher ni aux fichiers, ni au réseau, ni au système d’exploitation, ni remplacer les fonctions de l’API.
250 ms par exécution
Un script qui tourne trop longtemps d’une traite est arrêté — une boucle infinie ne peut pas figer le serveur.
64 Mo par ressource
Chaque ressource dispose de son propre budget mémoire.
Erreurs confinées
Les erreurs vont dans le journal du serveur avec le nom de la ressource ; la ressource continue de tourner.
Prise en charge dans l’éditeur : le SDK fournit les définitions de types des API serveur et client. Ajoutez-les à luau-lsp (s’ouvre dans un nouvel onglet) (par exemple via une extension Luau pour VS Code) pour bénéficier de l’autocomplétion et de la vérification des types.
Modèles inclus
Chaque serveur est livré avec ces ressources. Rien en elles n’est propre au jeu — vos propres ressources peuvent en faire autant, et plus.
- welcome
- Salue les joueurs et compte leurs visites grâce aux données sauvegardées.
- basic-commands
- /players et une astuce périodique dans le chat.
- player-hud
- Scripts client : un HUD, F2 pour le masquer, F3 pour demander vos statistiques au serveur.
- scoreboard
- Un tableau des K.-O., la manche en grandes lettres et un menu /stats.
- fight-basics
- Annonce les K.-O. et les vainqueurs de manche, plus /heal et /where.
- deathmatch
- Un mode sans manches : réapparitions, fil des éliminations, le premier à 10 gagne.
- roleplay
- Comptes, personnages, positions sauvegardées, un hôpital et un métro entre les quartiers.
- roleplay-chat
- Chat local, /me, /do, /shout, /ooc et compagnie.
- mapvote
- Un vote pour la prochaine carte à la fin de chaque match.
- mapping
- Les objets de carte et l’éditeur de placement en jeu.
- admin
- Des outils d’admin, comme voler librement au-dessus de la carte.
Faire tourner un serveur
Hébergez depuis le menu du jeu pour des parties rapides, ou générez un paquet de serveur dédié avec CreateServer.bat dans le dossier du jeu. Il demande le système cible (Windows ou Linux) et les cartes, puis crée un dossier avec le programme serveur, ses données, vos ressources, un servidor.cfg et la documentation du SDK.
- Linux : Ubuntu 24.04+ ou Debian 12+, 64 bits, avec les bibliothèques ALSA et udev installées.
- Ports : UDP 27015 pour le jeu et UDP 27016 pour la recherche de serveurs (ou le port configuré et le suivant).
- Mises à jour : le serveur vous prévient au démarrage quand une nouvelle version est sortie. Mettez le jeu à jour, régénérez le paquet et remplacez le programme et les données — votre configuration et vos ressources restent.
- Données privées : le dossier
data/du paquet est généré à partir de votre propre copie du jeu original. Ne le partagez jamais publiquement.
Référence complète
La référence complète de l’API — chaque fonction, événement et option — est fournie avec chaque paquet serveur dans sdk/README.md, avec les définitions de types pour l’éditeur dans sdk/types/. Elle correspond toujours à la version que vous utilisez.