跳至正文
版本:bleeding-edge 🩸

C Module

C Module is a Package type that allows extending the functionalities of nanos world Scripting API

C Modules allows you to extend the functionality of the nanos world scripting API on the server side. 目前仅支持 C 模块。

caution

请注意,脚本 API 的这部分内容目前正在开发中,可能会随时发生变化。

caution

这是一个高级操作,因此可能会出现不稳定甚至崩溃的情况。

Creating your C Module binaries

To create your own module, fist make sure you have Visual Studio installed with Desktop development with C++ (and CMake) or any other C compiler on Linux.

第一步

  1. Then, clone our example module in your computer to get start with it.
  2. After cloning, you will need to download it's submodules with git submodule update --init --recursive - this will download the module-sdk as a git submodule into deps/ folder automatically.

理解示例

The important file is under src/example.cpp:

src/example.cpp
loading...

Compiling your C Module

要编译该示例,请按照以下步骤操作:

  1. Create a folder called build/: mkdir build
  2. Enter the build folder: cd build
  3. Generate the cmake build files with cmake ..
  4. Finally build it with cmake --build . --config Release

This will generate the compiled library at:

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

If you intend to make your module available for both Linux and Windows servers, you must also compile the .so files in a Linux machine and deliver both library files with your Package.

Creating a C Module Package

First of all, create a new Package of type c-module, and add your .dll (windows) and/or .so (linux) files into the Package's root folder. It will look like that:

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:

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]
# list of modules to load (without file extension)
modules = [
"example",
]

Loading and Using your C Module

Now you can load the package you created as usual, by adding it to the Config.toml's list of Packages requirement or by adding it to another Package's Package.toml as dependency, e.g.:

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",
]
...

在你的包中,你可以像这样加载并使用它:

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