跳至正文
版本:bleeding-edge 🩸

快速开始

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

简介​

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

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

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

第 1 步:下载服务器​

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

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

第 2 步:创建基础包​

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

为了创建一个新的软件包,我们使用便捷的 CLI 工具来加快流程。在你的服务器文件夹中打开一个终端,并运行以下命令:

./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 ('script', 'game-mode', 'map' or 'loading-screen'): (game-mode)
script

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

接下来,你需要告诉服务器在启动时加载你的包。 To do that, open the Config.toml file located in the server folder and find the packages = [] setting, under the [game] section.

Add your package name ("my-awesome-package") to the list of Packages that should be loaded:

Config.toml
[game]
# ...
packages = [
"my-awesome-package",
]
提示

The Config.toml is created automatically the first time the server starts. If you don't have it yet, start the server once (Step 4) and close it, or skip editing it and start the server with --packages my-awesome-package instead.

第 3 步:添加脚本功能​

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

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

提示

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

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

Packages/my-awesome-package/Server/Index.lua
-- 向服务器控制台打印一条消息
Console.Log("正在加载一些道具 =D")

-- 在游戏世界中生成一些道具
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
备注

By default the server runs as the Playtest Steam App, which is what players currently use to join. The --steam_app parameter accepts playtest (default) or game, and players can only join servers running the same Steam App they launched.

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

NanosWorldServer
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 正在加载一些道具 =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!

你可以看到它加载了你的包,并在其中输出了文本 正在加载一些道具 =D。

第 5 步:加入你的服务器​

现在我们在游戏内看看效果! Open nanos world, go to Find Servers, click Quick Connect and connect to 127.0.0.1:7777.

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

额外步骤:生成角色​

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

为玩家生成一个角色​

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

Packages/my-awesome-package/Server/Index.lua
-- 生成角色并让玩家控制该角色的函数
function SpawnCharacter(player)
-- 在坐标 X=0, Y=0, Z=0 处使用默认构造函数参数生成一个角色
local new_character = Character(Vector(0, 0, 0), Rotator(0, 0, 0), "nanos-world::SK_Male")

-- 让玩家控制这个新角色
player:Possess(new_character)
end

-- 订阅当玩家加入服务器(即玩家实体生成)时触发的事件
Player.Subscribe("Spawn", SpawnCharacter)

-- 当此包加载时,我们还没有生成和控制任何角色,因此
-- 遍历所有已经连接的玩家并同样为他们赋予一个角色。
-- 这可以确保你在重新加载包时也能获得一个角色
Package.Subscribe("Load", function()
for k, player in pairs(Player.GetAll()) do
SpawnCharacter(player)
end
end)

To apply your changes, run the command in the server console: package reload my-awesome-package. This will live reload your Package and apply the changes immediately to all Players connected.

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

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

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

追加这段代码:

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

To apply your changes, run the command in the server console: package reload my-awesome-package.

结语​

恭喜你! You have finished your first basic Package and learned a lot!

Next, continue with Your First Game-Mode, which builds on this Package to add client scripts, a HUD and communication between server and client.

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

Server Configurationcore-concepts/server-manual/server-configuration Command-line Interface (CLI)core-concepts/server-manual/command-line-interface Packages Guidecore-concepts/packages/packages-guide Classes Guidecore-concepts/scripting/classes-guide Events Guidecore-concepts/scripting/events-guide Debugging & Loggingcore-concepts/scripting/debugging-and-logging