Démarrage rapide
Lancez un serveur et créez votre premier Package en moins de 10 minutes !
Introduction
Bienvenue dans le guide de démarrage rapide de nanos world ! À la fin de ce guide, vous saurez :
- Configurer et rejoindre votre serveur
- Créer un Package simple avec des scripts de base
- Faire apparaître des Props et des entités par script
- Vous abonner aux événements du jeu
- Prendre le contrôle d'un personnage (Possess)
Ce tutoriel s'adresse à celles et ceux qui n'ont jamais utilisé le serveur nanos world et veulent démarrer rapidement !
Étape 1 : Télécharger le serveur
Pour commencer, vous devez télécharger le serveur nanos world. Il existe trois façons de le faire :
- Utiliser l'exécutable
nanos-world/Server/NanosWorldServer.exe(dans le dossier d'installation du jeu). - Utiliser SteamCMD pour télécharger nanos world™ Dedicated Server.
- Télécharger l'outil nanos world™ Dedicated Server depuis le client Steam.
Étape 2 : Créer un package basique
Une fois le serveur téléchargé, créons un Package de base. Un Package est un ensemble de scripts Lua exécutés côté client ou côté serveur pour interagir avec le jeu.
Pour créer un nouveau Package, utilisons l'outil CLI, bien pratique pour aller plus vite. Ouvrez un terminal dans le dossier de votre serveur et lancez la commande suivante :
- Windows
- Linux
./NanosWorldServer.exe --cli add package my-awesome-package
./NanosWorldServer.sh --cli add package my-awesome-package
Cette commande lance l'interface en ligne de commande (CLI) de nanos world pour créer votre nouveau Package de façon interactive. Elle vous demandera quelques informations sur votre Package : son nom, son auteur, sa version et son type.
INFO Please enter the Package Title: (my-awesome-package)
my-awesome-package
INFO Please enter the Package Author: ()
myself
INFO Please enter the Package Type ('script', 'game-mode', 'map' or 'loading-screen'): (game-mode)
script
Une fois le Package créé, vous trouverez un nouveau dossier my-awesome-package/ dans le dossier Packages/. Il contient trois dossiers, Server/, Client/ et Shared/, ainsi qu'un fichier de configuration appelé Package.toml.
Il faut ensuite indiquer au serveur de charger votre Package au démarrage. Pour cela, ouvrez le fichier Config.toml situé dans le dossier du serveur et repérez le paramètre packages = [], dans la section [game].
Ajoutez le nom de votre Package ("my-awesome-package") à la liste des Packages à charger :
[game]
# ...
packages = [
"my-awesome-package",
]
Le fichier Config.toml est créé automatiquement au premier démarrage du serveur. Si vous ne l'avez pas encore, démarrez le serveur une fois (étape 4) puis fermez-le, ou ne le modifiez pas et lancez le serveur avec --packages my-awesome-package à la place.
Étape 3 : Ajout de fonctionnalités de script
Maintenant que vous avez un Package, il est temps de lui ajouter des fonctionnalités par script. Les scripts sont des morceaux de code exécutés par le serveur ou le client pour ajouter une logique de jeu personnalisée.
Pour ajouter votre premier script, ouvrez le fichier my-awesome-package/Server/Index.lua dans votre éditeur préféré. Ce fichier est le point d'entrée des scripts côté serveur de votre Package.
Nous recommandons l'éditeur VSCode, qui dispose d'une extension nanos world pour vous aider à coder !
Pour cet exemple, ajoutons du code qui fait apparaître quelques Props dans le monde du jeu :
-- Print a message to the server console
Console.Log("Loading some Props =D")
-- Spawn some props in the game world
local prop_table = Prop(Vector(200, 0, 0), Rotator(0, 0, 0), "nanos-world::SM_WoodenTable")
local prop_chair = Prop(Vector(400, 200, 0), Rotator(0, 0, 0), "nanos-world::SM_WoodenChair")
local prop_tire = Prop(Vector(600, 0, 0), Rotator(0, 0, 0), "nanos-world::SM_TireLarge")
Étape 4 : Démarrage du serveur
Démarrons maintenant le serveur avec le Package que vous venez de créer ! Il suffit de double-cliquer sur l'exécutable du serveur ou de le lancer depuis le terminal :
- Windows
- Linux
./NanosWorldServer.exe
./NanosWorldServer.sh
Par défaut, le serveur tourne sous l'application Steam Playtest, celle que les joueurs utilisent actuellement pour se connecter. Le paramètre --steam_app accepte playtest (par défaut) ou game, et les joueurs ne peuvent rejoindre que les serveurs qui tournent sous la même application Steam que celle qu'ils ont lancée.
Une fois le serveur démarré, votre console affichera quelque chose comme ceci :
INFO nanos world (C) Copyright Go Horse Studios. All Rights Reserved.
INFO Starting Server at Port: 7777. Version: 1.9.0. Unreal Version: 5.7.4. Map: 'default-blank-map'.
INFO Loading Package 'my-awesome-package' (0.0.1)...
SCRIPT Loading some Props =D
INFO Package 'my-awesome-package' (0.0.1) loaded.
INFO Loading Package 'default-blank-map'...
INFO Package 'default-blank-map' (1.0.0) loaded.
SUCCESS Server started!
SUCCESS Server successfully connected to Steam! VAC Secure!
On voit que le serveur a chargé votre Package et affiché le texte Loading some Props =D.
Étape 5 : Rejoignez votre serveur
Allons voir le résultat en jeu ! Ouvrez nanos world, allez dans Find Servers, cliquez sur Quick Connect et connectez-vous à 127.0.0.1:7777.
Une fois connecté, vous serez un pion volant et vous pourrez voir les props apparus ! 😁

Étape supplémentaire : Apparition d'un personnage
Vous l'avez peut-être remarqué : vous n'êtes qu'une âme errante qui vole partout, alors donnons-vous un corps ! Pour cela, il va falloir utiliser des événements du jeu.
Faire apparaître un personnage pour le joueur
Ajoutons du code à la fin de votre Server/Index.lua pour faire apparaître un Character quand un Player rejoint le serveur :
-- Function to spawn a Character and possess it to a Player
function SpawnCharacter(player)
-- Spawns a Character at position X=0, Y=0, Z=0 with default constructor parameters
local new_character = Character(Vector(0, 0, 0), Rotator(0, 0, 0), "nanos-world::SK_Male")
-- Possess the new Character
player:Possess(new_character)
end
-- Subscribes to an Event which is triggered when Players join the server
-- (i.e. Player entity spawns)
Player.Subscribe("Spawn", SpawnCharacter)
-- When this Package loads, we don't have any Character spawned and possessed, so
-- iterates for all already connected Players and give them a Character as well.
-- This will make sure you also get a Character when you reload the package
Package.Subscribe("Load", function()
for k, player in pairs(Player.GetAll()) do
SpawnCharacter(player)
end
end)
Pour appliquer vos modifications, lancez cette commande dans la console du serveur : package reload my-awesome-package. Votre Package est rechargé à chaud et les changements s'appliquent immédiatement à tous les joueurs connectés.

Vous contrôlez maintenant un personnage : vous pouvez vous déplacer et interagir avec les props !
Détruire le personnage quand le joueur quitte le serveur
Attention : le Character n'est pas détruit automatiquement quand le Player se déconnecte. Il faut donc s'abonner au départ du joueur (l'événement Destroy), puis détruire le personnage manuellement.
Ajoutez ce code :
-- When Player leaves the server, destroy its possessing Character
Player.Subscribe("Destroy", function(player)
local character = player:GetControlledCharacter()
if (character) then
character:Destroy()
end
end)
Pour appliquer vos modifications, lancez cette commande dans la console du serveur : package reload my-awesome-package.
Conclusion
Félicitations ! Vous avez terminé votre premier Package de base et appris beaucoup de choses !
Continuez ensuite avec Votre premier mode de jeu, qui reprend ce Package pour y ajouter des scripts client, un HUD et la communication entre le serveur et le client.
Vous trouverez des informations plus complètes sur chaque sujet abordé dans ce guide aux liens suivants :
Configuration du serveurcore-concepts/server-manual/server-configuration Interface en ligne de commande (CLI)core-concepts/server-manual/command-line-interface Guide des Packagescore-concepts/packages/packages-guide Guide des classescore-concepts/scripting/classes-guide Guide des événementscore-concepts/scripting/events-guide Débogage et journalisationcore-concepts/scripting/debugging-and-logging