跳至正文
版本:最新版 - a1.133.x ⚖️

快速开始

在不到 10 分钟的时间内启动服务器并创建你的第一个包!

简介

欢迎来到 nanos world 快速开始指南! 通过本指南,你将学习:

  1. 如何配置并加入你的服务器
  2. 如何使用基础脚本创建一个简单的
  3. 如何通过脚本生成道具实体
  4. 如何订阅游戏事件
  5. 如何控制一个角色
tip

本教程适用于从未接触过 nanos world 服务器并希望快速入门的玩家!

第 1 步:下载服务器

首先,你需要下载 nanos world 服务器。 共有三种方法可以做到这一点:

  1. 使用位于 nanos-world/Server/NanosWorldServer.exe 的可执行文件_(在游戏基础安装文件夹中)_。
  2. Use SteamCMD to download nanos world™ Dedicated Server.
  3. 从 Steam 客户端下载 nanos world™ Dedicated Server 工具。

第 2 步:创建基础包

下载服务器后,让我们创建一个基础的。 包是执行在客户端或服务器上以与游戏进行交互的 Lua 脚本的集合。

To create a new Package, lets use the handy CLI tool to speed up the process. 在你的服务器文件夹中打开一个终端,并运行以下命令:

./NanosWorldServer.exe --cli add package my-awesome-package

该命令将运行 nanos world 命令行界面(CLI)来交互式创建你的新包。 其中会提示你提供有关包的一些信息,例如名称、作者、版本和类型。

NanosWorldServer
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: (game-mode)
script

完成包的创建后,你将在 Packages/ 文件夹内发现一个名为 my-awesome-package/ 的新文件夹。 该文件夹包含另外三个文件夹:Server/Client/Shared/,以及一个名为 Package.toml 的配置文件。

接下来,你需要告诉服务器在启动时加载你的包。 为此,打开位于服务器文件夹中的 Config.toml 文件,并找到 packages = [] 部分。

将你的包名称("my-awesome-package")添加到应当加载的包列表中。

第 3 步:添加脚本功能

现在你已经有了一个包,是时候给它添加一些脚本功能了。 脚本是可由服务器/客户端执行的代码片段,用于添加自定义的游戏逻辑。

为了添加你的第一个脚本,在首选编辑器中打开 my-awesome-package/Server/Index.lua 文件。 该文件是包中服务器端脚本的入口点。

tip

我们建议使用 VSCode 编辑器,因为它包含一个 nanos world 扩展,可以在编写代码时提供帮助!

在这个示例中,让我们添加一些代码在游戏世界中生成一些 Prop

Packages/my-awesome-package/Server/Index.lua
-- 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")

第 4 步:启动服务器

现在让我们用你刚刚创建的包来启动服务器! 为此,只需双击服务器可执行文件或从终端启动它:

./NanosWorldServer.exe

启动后,你的控制台将显示类似以下的内容:

NanosWorldServer
INFO nanos world (C) Copyright nanos. All Rights Reserved.
INFO Starting Server at Port: 7777. Version: 0.0.0. Map: 'default-blank-map'.
INFO Loading Package 'my-awesome-package'...
SCRIPT Loading some Props =D
INFO Package 'my-awesome-package' loaded.
INFO Loading Package 'default-blank-map'...
INFO Package 'default-blank-map' loaded.

你可以看到它加载了你的包,并在其中输出了文本“Loading some Props =D”。

第 5 步:加入你的服务器

现在我们在游戏内看看效果! 打开 nanos world 并连接到本地主机的 127.0.0.1:7777

连接成功后,你将变成一个飞行的 Pawn,并且能够看到生成的道具! 😁

额外步骤:生成角色

你可能已经注意到自己只是一个到处飞的游魂,让我们给你一副肉身! 为此,我们将需要与一些游戏事件进行交互。

为玩家生成一个角色

让我们在你的 Server/Index.lua 中追加一些代码,以便在 Player 加入服务器时生成一个 Character

my-awesome-package/Server/Index.lua
-- 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)

要应用你的更改,请在服务器控制台运行命令:package reload all。 这将实时重新加载包,并立即使更改应用到所有已连接的玩家。

现在你已经控制了角色,可以四处走动并与道具进行交互了!

当玩家离开服务器时销毁角色

请注意,当 Player 断开连接时,Character 并不会自动销毁。 为此,我们需要订阅玩家离开服务器的事件(Destroy 事件),然后手动销毁角色。

追加这段代码:

my-awesome-package/Server/Index.lua
-- When Player leaves the server, destroy it's possessing Character
Player.Subscribe("Destroy", function(player)
local character = player:GetControlledCharacter()
if (character) then
character:Destroy()
end
end)

要应用你的更改,请在服务器控制台运行命令:package reload all

Conclusion

恭喜你! 你已经完成了你的第一个基础包,并且学到了很多知识!

你可以在以下链接中找到本指南中提到的每个主题的更多详细信息:

服务器配置core-concepts/server-manual/server-configuration 命令行界面(CLI)core-concepts/server-manual/command-line-interface 包指南core-concepts/packages/packages-guide 类指南core-concepts/scripting/classes-guide 事件指南core-concepts/scripting/events-guide