Passer au contenu principal
Version: bleeding-edge 🩸

C Module

C Module est un type de Package qui permet d'étendre les fonctionnalités de l'API de scripting de nanos world

Les C Modules vous permettent d'étendre les fonctionnalités de l'API de scripting de nanos world côté serveur. Actuellement, seuls les modules C sont pris en charge.

attention

Sachez que cette partie de l'API de scripting est actuellement en cours de réalisation et peut être modifiée à tout moment.

attention

Comme il s'agit d'une procédure avancée, des instabilités, voire des crashs, peuvent se produire.

danger

C Modules are native code with full access to the server machine, so they can only be loaded if the server is started with the --enable_unsafe_libs flag. Without it, the server refuses to load any c-module Package. Only enable it if you trust all the Packages running on your server.

Also note that C Modules only run on the server side: their binaries are never sent to clients.

Créer les binaires de votre C Module​

Pour créer votre propre module, assurez-vous d'abord d'avoir Visual Studio installé avec Développement Desktop en C++ (et CMake), ou n'importe quel autre compilateur C sous Linux.

Premières étapes​

  1. Ensuite, clonez notre module d'exemple sur votre ordinateur pour commencer.
  2. Après le clonage, téléchargez ses sous-modules avec git submodule update --init --recursive : cela télécharge automatiquement le module-sdk comme sous-module git dans le dossier deps/.

Comprendre l'exemple​

Le fichier important est src/example.cpp :

src/example.cpp
loading...

Compiler votre C Module​

Pour compiler l'exemple, suivez les étapes suivantes :

  1. Créez un dossier build/ : mkdir build
  2. Entrez dans le dossier build : cd build
  3. Générez les fichiers de build cmake avec cmake ..
  4. Enfin, compilez avec cmake --build . --config Release

La bibliothèque compilée est générée ici :

  • Sous Windows : build/Release/example.dll
  • Sous Linux : build/libexample.so
tip

Si vous voulez que votre module fonctionne sur les serveurs Linux et Windows, compilez aussi les fichiers .so sur une machine Linux et livrez les deux bibliothèques avec votre Package.

Créer un Package C Module​

Commencez par créer un nouveau Package de type c-module, et ajoutez vos fichiers .dll (Windows) et/ou .so (Linux) à la racine du Package. Votre dossier devrait ressembler à cela :

Packages/
└── my-module/
├── Package.toml
├── example.dll
└── libexample.so

Then add the name of your module library (in our case, example) to the Package.toml modules list, and set lua_version to the Lua version your module was compiled against. The server refuses to load the Package if it doesn't match its own Lua version (currently 5.4):

my-module/Package.toml
# vault configurations
[meta]
# friendly name
title = "My Awesome C Module"
# contributors
author = "Contributor Names"
# version
version = "0.1.0"

# c module configurations
[c_module]
# Lua version the modules were compiled on
lua_version = "5.4"
# list of modules to load (without file extension)
modules = [
"example",
]

Charger et utiliser votre C Module​

Vous pouvez maintenant charger le package créé comme d'habitude, en l'ajoutant à la liste des Packages du Config.toml ou comme dépendance dans le Package.toml d'un autre Package, par ex. :

Server/Config.toml
...
# game configurations
[game]
# default startup map
map = "default-blank-map"
# game-mode package to load (set the main game-mode package to load - you can load only one 'game-mode' package type at once)
game_mode = ""
# packages list (set the packages you want to load)
packages = [
"my-module",
]
...

Et dans votre package, vous pouvez le charger et l'utiliser :

my-awesome-package/Server/Index.lua
-- Calls the module function 'test'
-- Will print 'Hello World' on console
Console.Log(example.test())