《騎砍2聯機自定義服務器搭建官方教程》中文版發佈


3樓貓 發佈時間:2022-10-06 10:19:43 作者:騎砍中文站 Language

翻譯:Notealot


近期,《騎馬與砍殺2:霸主》在版本更新至e1.8.1版本的同時允許玩家自己開設騎砍2聯機服務器、創建自定義遊戲模式、遊戲場景構造等,中文站已將教程翻譯成了中文版本並上傳至了官方在線文檔,歡迎modders來這裡獲取資料。

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第0張

以下為教程具體內容。


◆前言

本文主要內容為騎友們所能用到的與多人遊戲服務器開設有關的知識,內容分為三部分,分別是搭建一個自定義服務器、創建自定義遊戲模式以及多人遊戲場景的構造。


​◆搭建一個自定義服務器

​本部分為搭建自定義服務器的教程,從安裝到部署整個流程包括在內。同時,文檔內還有關於服務器參數的講解,以及一些注意事項和可能碰到的問題的說明。在文檔最後,還有常見問題環節,用來回答開發者們可能會問的一些普遍的問題。


​安裝

​在你的 Steam 庫中選到“工具”,你會在列表裡看到“Mount & Blade II: Dedicated Server”,下載並安裝它。


搭建

​服務器不支持匿名搭建,你需要先進入遊戲生成一個令牌(Token)。


生成一個令牌(Token)

​啟動遊戲 Mount & Blade II: Bannerlord 多人模式並登錄到聯機大廳:

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第1張

通過按鍵 ALT + 波浪號鍵(~) 打開遊戲控制檯:

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第2張

在輸入框中輸入 customserver.gettoken 並按下 Enter 鍵:

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第3張

你的令牌生成了並保存到了 Documents\Mount & Blade II Bannerlord\Tokens 目錄下:

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第4張

如果你計劃在安裝了《騎砍2》的同一臺計算機上搭建獨立服務器,那麼針對令牌的操作到這一步就可以了。但如果你計劃在另外一臺不同的計算機上搭建服務器,請複製你的令牌文件到目標電腦上的 Documents\Mount & Blade II Bannerlord\Tokens 目錄下。還有一種方法是通過程序啟動參數來輸入令牌,在下面的“啟動參數”一節說明。注意,這個生成的令牌文件是綁定你的《騎砍2》賬戶的,如果有任何濫用令牌的行為,我們都可以追溯到創建令牌的用戶。我們建議你只自己用,並且不要將它分享給其他人。另外請記住,為了安全起見,你的令牌會在 3 個月後過期,屆時你可以重新生成並更換令牌。



​服務器管理

你可以在你的服務器控制檯(在啟動服務器時會顯示)裡輸入命令來管理你的服務器。通過輸入 list 然後按下 enter 鍵,你可以獲取到獨立服務器的所有可用命令:

例如,想要簡單啟動一個服務器,你可以在控制檯輸入以下命令:

ServerName Custom Dedicated Beta Test

GameType TeamDeathmatch

start_game

start_mission

通過執行這些命令,你的自定義服務器將出現在服務器列表,並且所有玩家都可以訪問。通過 ServerName 和 GameType 命令,你可以輕鬆地設置你的服務器名字和遊戲模式。通過 start_game 命令,你可以啟動你搭建的服務器。你的服務器將變為所有玩家可見,任何進入服務器的玩家都會在中場休息狀態下等待。通過 start_mission 命令,你的服務器將會切換到行動模式,並且玩家能夠正式開始遊玩。你可以使用簡寫 start_game_and_mission 來替代上述兩個命令。

​提示 & 技巧 


配置文件 

你可以指定一個配置文件在初始化時加載運行,該文件的內容將被逐行執行,而不是通過服務器控制檯一條一條的來輸入命令。你可以在 Native 模組目錄下找到示例配置文件(Modules\Native\ds_config_*.txt)。請注意,目前為止,你自己的配置文件也必須位於該目錄下,才能被服務器讀取到。關於如何指定要運行的配置文件,請參考下文中提到的“啟動參數”。

啟動參數 

目前,有幾個特別有用的啟動參數:/dedicatedcustomserverconfigfile [配置文件名] - 指定一個要加載的配置文件,如上文“配置文件”一節中所提到的那樣。/dedicatedcustomserverauthtoken [認證令牌內容] - 當令牌通過啟動參數傳入,包含令牌的本地文件就不需要了。/DisableErrorReporting - 禁用崩潰報告上傳(Crash Uploader)彈出和自動錯誤上報。/LogOutputPath [輸出目錄] - 設置服務器日誌文件的輸出目錄,路徑應該用雙引號括起來。

日誌文件 

默認情況下,Windows 的自定義服務器的日誌文件可以在你的 ProgramData 目錄(%programdata%\Mount and Blade II Bannerlord\logs)下找到。

自動換圖次數 

通過在 enable_automated_battle_switching 之前使用命令 set_automated_battle_count 你可以設置在服務器關閉前可以遊玩的行動數量。例如,set_automated_battle_count 10 會讓服務器運行 10 個行動後關閉,如果你想設置為無限行動數量,將值設為 -1。


輔助模組 

我們提供可選模組 DedicatedCustomServerHelper 來輔助搭建服務器,其中有幾個子模組可以實現不同的功能。為了使服務端模組可以通過外部網絡使用,你需要開放 TCP 端口 7210。請注意,儘管該模組對於服務器搭建來說是可選的,但如果你加載了此模組,那麼玩家也必須加載此模組。否則,模組不匹配的玩家將無法加入服務器。


網頁管理面板 

這個模組啟動了一個網頁面板,通過一個通用的管理頁面和終端頁面與你的自定義服務器進行交互:

你的網頁面板初始化完成後,你可以在你的服務器控制檯看到它的 URL 地址。該網頁面板受服務器所配置的 AdminPassword 選項的密碼保護。默認情況下,該選項的值為空,所以一定要設置一個安全的密碼。如果你不希望除本地網絡或機器以外的地方能訪問網頁面板,同時也不需要下面的地圖下載功能,那麼你只需要攔截外部對 TCP 端口 7210 的訪問即可。

遊戲內地圖下載 

我們還提供了一種允許玩家通過遊戲內面板下載服務器的地圖文件的方式。作為服務器主機,你必須要滿足一些條件才能讓這個功能發揮作用:

地圖文件必須置於 DedicatedCustomServerHelper 模組的 SceneObj 目錄下,就像一個典型的包含場景的模組一樣。如果沒有該目錄,你可以手動新建一個。

要把這個地圖提供給玩家,必須通過 Map 選項或 add_map_to_automated_battle_pool 命令“註冊”到服務器。

為了讓玩家能夠打開下載面板,他們需要在加載了 DedicatedCustomServerHelper 模組後啟動遊戲。現在,他們可以鼠標右擊自定義服務器列表項,然後會打開一個上下文菜單,其中會有打開該服務器下載面板的選項。地圖下載成功後,無需重新啟動遊戲,他們應該就能直接加入你的服務器。

請注意,這個功能是用於支持這一簡單的使用場景。這不是一個模組管理器功能,也無法支持獲取給定的模組分佈在其他資產(如 ModuleData、Prefabs 等)中的地圖。只有 SceneObj 目錄下的內容會在服務端和客戶端之間傳輸。

常見問題 

在服務器搭建時需要 Steam 保持運行嗎? 

不,你只需要用 Steam 保持你的服務器文件為最新就行,你可以隨意拷貝服務器文件到其它計算機上搭建。但我們強烈推薦你帶一個 Steam 以保證文件是最新的。區別於《戰團》,目前而言,任何舊版本的服務器文件都不兼容我們的系統。

你們計劃支持其他的遊戲平臺嗎? 

是的。

如果我不想用任何遊戲平臺來獲取服務器文件,會有其他選擇嗎? 

目前,Steam 是下載服務器文件的唯一渠道。我們計劃將服務器文件添加到其他遊戲平臺,同時也在考慮未來使用 Docker 分發服務器文件這樣一個方案。

你們會提供 Linux 支持嗎? 

是的。事實上,我們的後端使用的就是 Linux 服務器,但要給公眾使用的話,還需要對系統進行進一步開發。

我的服務器所有人都可以訪問嗎? 

是的,你的服務器所有人都可以訪問,除非說你設置了密碼來保護。

我可以搭建多少服務器? 

你可以同時運行的服務器數量是有限的。目前,你最多可以同時運行 5 個服務器。

我的服務器在列表裡顯示了,但玩家無法加入。什麼問題? 

默認情況下,獨立服務器使用 UDP 端口 7210。你必須在互聯網上有一個大家可以訪問的(公共)IP 地址,以及上述端口也必須可以訪問到。

硬件要求是什麼? 

這需要看是何種遊戲模式以及玩家數量。這是我們搭建遊戲服務器時,默認的配置:

小型戰鬥(遭遇戰和決鬥):2 核 CPU (2GHz 到 3GHz) 和 4GB 內存

大型戰鬥(圍攻戰、團隊死鬥和領軍戰):4 核 CPU (2GHz 到 3GHz) 和 8GB 內存

但舉例來說,你總是可以在一臺 2 核機器上搭建一個較少玩家的攻城服務器。你也可以嘗試使用單核機器來搭建一臺非常小型的服務器,但你可能在遊戲中碰到一些使用率突增卡頓的情況。

帶寬要求是什麼? 

這取決於玩家數量。默認情況下,我們會給每個玩家發送 60 個數據包,並且每個數據包少於 1.5 kb(千字節)。對於大多數配置,任何專用服務器供應商都應該能夠提供足夠的網絡連接。

遊戲支持任何自定義模組嗎? 

是的!

自定義時的反作弊功能是怎樣的? 

對於自定義遊戲反作弊是關閉的。請注意,任何修改過遊戲的玩家都無法加入官方服務器。

會有遊戲內管理面板來幫助更快更方便地管理服務器嗎? 

我們打算做一個。


◆創建自定義遊戲模式


本教程會指導你如何從頭開始建立一個包含自定義遊戲模式的模組,教程內提供的示例模組將會提供一個試用版本下載鏈接。


前提條件 

要製作一個多人遊戲模式,你首先需要在你遊戲安裝目錄的 Modules 目錄下創建你的模組文件夾。在你的模組目錄下,你需要創建一個 bin 文件夾來放置 DLL 文件,還要創建一個 SubModule.xml 文件來存放你的模組定義和額外數據。對於程序開發,你需要有 .NET Framework 開發工具。配置開發環境的話,下載 Visual Studio 2017 社區版並安裝 .NET Framework 4.7.2 支持。完成這些步驟後,新建一個 Class Library 項目。對於客戶端而言,添加位於你的 Mount & Blade II: Bannerlord 安裝目錄的 Win64_Shipping_Client 目錄下的所有的 DLL 引用。對於服務端而言,添加位於你的 Mount & Blade II: Dedicated Server 安裝目錄的 Win64_Shipping_Server 目錄下的所有的 DLL 引用。請保證你項目的輸出路徑是:

客戶端代碼放在你模組 bin 目錄下的 Win64_Shipping_Client 目錄下。

服務器代碼放在你模組 bin 目錄下的 Win64_Shipping_Server 目錄下。

一切準備完畢後,你可以開始對你的遊戲模式進行編程。請注意,本文檔中創建的遊戲模式及其完整的源代碼和額外的數據文件,都會以 ZIP 壓縮包的形式提供給你。


模組定義(Module Definition)文件 

再開始定義你的遊戲模式行為(behaviors)前,你需要先填寫模組定義的 SubModule.xml 文件。在該文件中,你要給你的模組一個名字、一個 ID、一個版本,並定義它的依賴和 DLL 文件。

       <Module>

    <Name value="MP Bounty"/>

    <Id value="BountyMP"/>

    <Version value="v1.8.0"/>

    <ModuleCategory value="Multiplayer"/>

    <DependedModules>

        <DependedModule Id="Native" DependentVersion="e1.8.0" Optional="false"/>

    </DependedModules>

    <SubModules>

        <SubModule>

            <Name value="BountyMP"/>

            <DLLName value="BountyMP.dll"/>

            <SubModuleClassType value="BountyMP.BountyMPSubModule"/>

        </SubModule>

    </SubModules>

</Module>

從這個示例定義文件中,我們可以看到一個模組的基本需求。關於多人遊戲模組的 ModuleCategory 節點,其值可以是 Multiplayer 或 Server。如果模組是一個 Multiplayer(多人遊戲)模組, 這意味著它在客戶端和服務端都會被加載。Server(服務器)模組就只在服務器端被加載,並且可以用於管理和分析需要。SubModules 節點定義了這個模組創建和使用的 DLL 文件。確保你的 DLL 文件的名稱和繼承 MBSubModuleBase 類的名稱與該文件中的名稱一致。


SubModule 類 

要在代碼中定義你的遊戲模式,你需要創建一個類並繼承自 MBSubModuleBase 類。在這個類中,重寫 OnSubModuleLoad 方法並添加此行:Module.CurrentModule.AddMultiplayerGameMode(new MissionMultiplayerBountyMPMode("BountyMP"))

傳遞給構造函數的字符串是你遊戲模式的名字。在該示例中,我們創建了一個名為 BountyMP 的遊戲模式。要加載有文本信息的 XML 文件,重寫 InitializeGameStarter 方法,調用其 base 方法然後添加此行:game.GameTextManager.LoadGameTexts(ModuleHelper.GetModuleFullPath("BountyMP") + "ModuleData/multiplayer_strings.xml")

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第5張

確保 ID 與你在代碼和模組定義文件中所定義的 ID 一致。


《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第6張

《騎砍2聯機自定義服務器搭建官方教程》中文版發佈-第7張

通過這段代碼,你可以看見 GameNetwork 有一個變量,可以用在你的代碼裡,用於檢查運行的遊戲實例是服務端還是客戶端。在該方法中,你可以看到它用來分隔客戶端行為和服務器行為。這能確保正確的 MissionBehaviors 被加載到正確類型的遊戲。其他方法中, GameNetwork.IsClient 和 GameNetwork.IsServer 可用於對不同事件採取不同處理。該方法也大概展示了一場行動是如何進行的。所有行動行為(mission behaviors)都是一個接一個加載的,它們分別處理遊戲的不同方面。根據你的遊戲模式,你可能希望在你的模式中使用全部這些行為,又或者是隻使用一部分。另外請注意,其中一些行為之間存在依賴關係,這意味著如果一個行為不存在,其他行為可能無法正確工作。在本例中,如果你按照第一部分中提到的步驟創建了一個空項目,那麼有兩個任務行為是無法實現的。開發者創建這兩個行為來添加自己的遊戲邏輯,它們是 MissionMultiplayerBountyMP 和 MissionMultiplayerBountyMPClient。前者從服務端管理遊戲模式,後者從客戶端管理遊戲模式,確保所有重要的共享數據都在你的服務器上並正確同步。


行動行為(Mission Behaviors) 

對於所有原版遊戲模式,服務端的遊戲模式邏輯類,示例中的 MissionMultiplayerBountyMP,繼承自 MissionMultiplayerGameModeBase。該類定義了基本的重生和同步系統。對於所有的原版遊戲模式,客戶端遊戲模式消息處理邏輯類,示例中的 MissionMultiplayerBountyMPClient,繼承自 MissionMultiplayerGameModeBaseClient。該類有幾種可用的重寫,可以確保消息處理程序(message handlers)的註冊和註銷在正確的時間發生。


行動典型(Mission Representatives) 

在原版遊戲模式中,所有客戶端添加了行動典型(Mission Representative)類來處理遊戲模式特定的數據和邏輯。通過這一典型類,客戶端可以根據條件查詢多種關於遊戲的事物。服務端也可以使用客戶端的行動典型來計算多種事物,包括獲得的金錢、旗幟信息等等。該類的內容依賴於遊戲模式自身,行動典型的基類只有客戶端的金錢和受控的 AI。在示例中,它是 BountyMPMissionRepresentative。行動典型被添加到了服務端遊戲模式的先前一節提到的行動行為(Mission Behavior)類中。


搭建使用模組的自定義服務器 

要搭建一個使用模組的自定義服務器,你可以使用啟動命令,如下:DedicatedCustomServer.Starter.exe _MODULES_*Native*Multiplayer*YOUR_MODULE_NAME_1*YOUR_MODULE_NAME_2*_MODULES_

在星號之間,你可以放入任何你想要的模組的名稱。你提供給 /dedicatedcustomserverconfigfile 參數的文件也可以包含你的自定義遊戲模式的名稱。

示例模組 

你可以通過地址(https://download.taleworlds.com/BountyMP.zip)找到添加了一個新多人遊戲模式的示例模組。請注意,示例模組中可能有一些小 bug,這不是一個完整的打磨過的官方遊戲模式。要編譯示例的客戶端,你需要安裝 Mount & Blade II: Bannerlord。要編譯示例的服務端,你需要安裝 Mount & Blade II: Dedicated Server。


◆多人遊戲場景的構造

本技術介紹將使你能夠為特定的遊戲模式創建自定義多人場景,它詳細說明了你的多人遊戲場景需要滿足哪些要求才不會崩潰。這不是設計指南或最佳實踐文檔。


遊戲模式(Gamemode)細節 

《霸主》中的每個遊戲模式都需要一些不同的相關預製件(prefabs)的設置。(提示:通過包含所有需要的預製件,可以使場景與多種遊戲模式兼容。場景不能與使用不同重生(生成)系統的模式兼容,例如團隊死鬥場景不能與領軍戰場景兼容,但如果有合適的重生設置的話,領軍戰場景也可以用於遭遇戰。)

遊戲對象 

作為遊戲模式在你的場景中運行所需要的預製件的遊戲對象(Gameobjects),你可以在“預製件(Prefabs)”窗口中找到這些。

通用 

mp_camera_start_pos 

初始相機位置,這是為正在加入的玩家設置的。它基本上定義了加入服務器時選擇陣營的背景,它也是人們看到的你的場景的第一個畫面。確保你稍微旋轉了它(它默認是向下旋轉的)。這玩意兒只用放置一個!


border_soft 

定義場景周圍的軟邊界(soft border)。如果玩家越過,他們將有幾十秒時間返回。該邊界用於設置場景的邊界,確保邊界不會穿進你的可遊玩區域。你可以通過在地圖周圍放置邊界探測點(border probes)來定義邊界(最佳實踐是做一個六邊形的形狀)。探測點總是會與離其最近的 2 個探測點相連。(提示:你可以通過在可見性(Visibility)窗口中啟用“邊界(Borders)”來查看形成的邊界,有時最好在這一步之前重新加載場景。)


flee_line 

這些逃離線(flee lines)是 AI(在我們的遊戲模式中只有 AI 馬匹)用於逃離戰場的,他們會嘗試使用導航網格(navmesh)來找到這些。所以這些位置需要放置在 AI 可以通過導航網格觸及到的地方。當他們到達這些逃離線,他們會在短時間內消失,你可以放置多個這樣的實例。(提示:圍城戰時,你要確保城堡裡也有這樣的逃離線,這樣城內的馬就可以不經過城門跑出去。導航網格和 AI 不能分清樓梯和坡道,你可能需要調整或刪除樓梯上的導航網格,以避免無人騎的馬擋住他們。)


envmap_prop 

當你創建一個新場景時應該已經存在了,如果沒有,就放置它並在“檢查器(Inspector)”窗口中將其設置為“IsGlobal”,還要確保它在一個有效位置。當然可以有多個探測點,但使用 local_envmap_probe 作進一步探測。

旗幟管理(遭遇戰、戰場、領軍戰) 


Flags 

這些遊戲模式都使用 3 個旗幟。不要被它們的命名搞懵,但是所有的遊戲模式都使用相同的預製件!它們的預製件:flag_pole_big_sergeant_A, flag_pole_big_sergeant_B, flag_pole_big_sergeant_C旗幟管理(Flag Domination)需要三個獨立的旗幟,所以不要複製旗幟 A 兩次。


圍城戰 

Flags 

使用了跟旗幟管理一樣的旗幟,而且顯然更多。放置從 A 到 F 的所有旗幟,並且主旗幟是 G。它們的預製件:flag_pole_big_sergeant_A, flag_pole_big_sergeant_B, flag_pole_big_sergeant_C, flag_pole_big_sergeant_D, flag_pole_big_sergeant_E, flag_pole_big_sergeant_F, flag_pole_big_sergeant_main


Siege Engines 

從技術上來講,它們與單人遊戲中的圍攻的運作方式相同,但仍有一些明顯的差別。首先,它們大多為多人遊戲使用了不同的預製件,確保你使用的也是這些!你的場景中所需的圍城戰器械沒有最小(或最大)數量的要求,也沒有部署點的要求,因為圍城器械是由你的場景決定的,而不是沙盒戰役遊戲。此外,你不需要為攻城塔、攻城槌和攻城梯做大量的導航工作。所以你可以忽略檢查器(Inspector)中的所有導航網格輸入。攻城槌和攻城塔仍然需要一條路徑前進。簡單創建一條路徑,記住它的名稱,並且在檢查器的腳本中將其設置為“PathEntityName”。多人遊戲特定預製件:siege_tower_5m_spawnerMP, siege_tower_9m_spawnerMP, siege_tower_12m_spawnerMP, batteringram_a_spawnerMP, mangonel_a_spawnerMP, mangonel_a_spawnerFireMP, mangonel_b_spawnerMP, mangonel_b_spawnerFireMP, mangonel_a_spawnerMP, mangonel_a_spawnerFireMP, ballista_a_spawnerMP, ballista_a_spawnerFireMP, ballista_b_spawnerMP, ballista_b_spawnerFireMP(提示:大門和攻城梯的預製件與單人遊戲的相同。)


arrow_barrel 

你可以將該預製件(箭筒)放置在你場景內的任何位置,玩家可以使用它來補充彈藥。

rock_pile 

放置該預製件允許玩家撿起石頭,它們的工作方式與默認的圍城器械相同。在 StonePile 腳本中,你可以設置這個預製件中石頭的數量。這個預製件還有一個火罐版本:“pot_pile”該預製件帶有子對象“icon_man”,它定義了你可以從何處撿起石頭。如果你不希望從任何方向訪問你的石堆,你可以刪除那些子對象。Rock_pile 和 pot_pile 預製件可以伴隨投石車和拋石機一起使用。如果你想要給玩家選擇彈藥的權力,你可以直接把石堆放在圍城器械旁邊。


決鬥 

對於決鬥模式你會需要手動創建地標(landmarks)。有兩類地標,3 種定義了部隊類型,16 種較小的定義了競技場和它們所屬的類型。

Big landmarks 

你可以隨意使用該預製件,它需要有這兩個標記(tags):“duel_zone_landmark”和“flag_x”。這個 x 代表兵種類型,所以應該用“infantry”,“cavalry”或“archery”來替換它。你還需要(再次)使用腳本定義該區域的兵種類型。為此,添加“DuelZoneLandmark”到你的預製件,並將其設置為你打算在這裡生成的任何兵種類型。


Arena landmarks 

這些地標定義了由大地標(big landmarks)分組的競技場。同樣,你可以使用任何預製件作為其基礎。它需要設置兩個標記(tags),第一個“flag_x”用於將其引用到大地標。所以如果你想讓這個競技場用於騎兵戰鬥,你應該使用標記“flag_cavalry”。你的地標還需要一個引用實際競技場區域的標記(下面會解釋),基本上是一個 ID。為此,使用標記“area_flag_x”,x 是你競技場的 ID。所以如果你有 16 個競技場,它們都應該有它們自己的標記,範圍從“area_flag_1”到“area_flag_16”。


volume_box 

這個盒子定義了戰鬥人員在競技場中決鬥的區域,每場決鬥結束後所有掉落在這個盒子裡的屍體和武器都會被清除。確保它比你在場景編輯器中創建的物理競技場稍大。你可以使用 volume_box 預製件並縮放到你喜歡的大小。這個盒子需要一個引用你競技場 ID 的標記:“area_box_x”,x 應該是你競技場的 ID。所以如果你競技場的標記是“area_flag_5”,你應該給你的 volmue_box 打上標記“area_box_5”。兩個決鬥參與者的重生點都要放在這個盒子裡,下面細說。


重生點 

在回合開始時或回合中途玩家重生的點位。旗幟管理(Flag Domination)模式(領軍戰、遭遇戰、戰場)使用了幾乎相同的重生系統,場景之間只需要做一點工作就可以相互兼容。從技術上來說,是兼容的。大多數重生點需要設置右側標記(tag)。這些預製件帶有默認標記,要麼是“attacker”,要麼是“defender”。顯然,你需要為對立的兩隊複製並調整這些預製件及其子對象上的標記。有時候如果標記還沒有出現在你的場景中,就需要你手動將其添加到列表中,否則它不會顯示在下拉菜單中!


通用 

spawn_visual 

進行兵種和特長選擇時的位置。該預製件有 6 個子對象,一個給玩家,5 個給其隊友。對於大多數遊戲模式(除了遭遇戰和領軍戰外的所有遊戲模式),只使用有標記“sp_visual_0”的子對象,因為我們沒有設置隊友的數量。在兵種/特長選擇期間,一個鏡頭會被放在“sp_visual_0”子對象前面。(提示:你可以忽略子對象上的“attacker”標記。與很多其他的重生位置不同,這個位置不需要複製給防守方隊伍。)


旗幟管理(遭遇戰、戰場、領軍戰) 

skirmish_start_spawn 

該預製件定義了初始重生點。不要被預製件的名字迷惑到,它可以用於所有 3 個遊戲模式的旗幟管理。帶有 9 個子重生點,但你可以複製那些來弄出更多可能的重生位置(例如,如果你不想要人們在 50 vs 50 的戰場模式中重生時疊在一起)。所有的子對象需要帶有“spawnpoint”,還有“attacker”或“defender”標記。主空間(main zone)的標記“starting”和“spawn_zone”不應該被修改。(提示:確保點位不低於你正在使用的地形和地面資產。也要記住,馬的重生需要周圍更大的空間,所以不要把你的重生點太靠近其他人和其他預製件。)


skirmish_respawn 

預製件定義了遭遇戰的重生位置,所以玩家會在死後重生在這裡。如果你不放置這些點位,玩家將會在重生時出生在最開始的重生點。每一邊你可以放置最多 3 個。就像初始重生點(start spawn)一樣,你必須複製兩邊的“attacker”和“defender”,主空間的標記“spawn_zone”不應被修改。重生點選擇系統檢查周圍的敵人時依賴於父實體(parent entity)的位置,玩家將在子實體(child entities)中重生。你可以利用這一點來調整重生位置的偏差。


圍城戰 

圍城戰中的重生與其它模式中有本質上的區別。圍城戰中的重生空間(Spawnzones)是否活躍取決於對局中被移除的旗幟數量。每個重生空間都通過標記 sp_zone_x(x 是從 0 到 6 的數字)連接到遊戲模式(gamemode)邏輯。該標記是在主重生點(main spawn point)預製件中設置的,其中有單個重生點“mp_spawnpoint”作為子對象。標記的“x”定義了進攻方需要佔領(和移除)多少面旗幟,這樣重生區域才會活躍。所以在圍城戰開始時,玩家會重生在有標記 sp_zone_0 的空間裡,一旦第一面旗幟被移除,他們就會重生在標記 sp_zone_1 的空間裡,諸如此類。如果只剩下 G 旗(主旗幟),玩家將會重生在標記 sp_zone_6 的空間裡。你可以在同一個重生空間上放置多個這些標記,所以你可以為前兩面旗幟只創建一個重生空間,只需要給它添加 sp_zone_0 和 sp_zone_1 標記即可。確保重生空間的子對象有“spawnpoint”,還有“attacker”或“defender”標記,就像其它模式一樣。這個 spawnpoint 沒有預製件,所以大多數情況下你需要自己設置標記。我建議你使用“skirmish_start_spawn”預製件。為此,你需要從空間中刪除“starting”標記並把它替換為“sp_zone_x”標記。不要忘記放置進攻方(attacker)和防守方(defender)重生點!(提示:你可以在重生空間的“mp_spawnpoint”子對象上使用特定的標記來調整什麼兵種可以重生在這裡。這裡不言自明的標記是:“exclude_mounted”和“exclude_footmen”。)

團隊死鬥 

團隊死鬥不使用重生空間,重生點放置在場景周圍,沒有區分攻守的標記。使用“mp_spawnpoint”預製件就行。確保它們不是另一個預製件的子對象,並且只有“spawnpoint”標記。


決鬥 

決鬥不使用重生空間,重生點被放置在場景周圍(最好是一種大廳區域),沒有區分攻守的標記。使用“mp_spawnpoint”預製件就行。確保它們不是另一個預製件的子對象,並且只有“spawnpoint”標記。請記住在每個競技場內放兩個 mp_spawnpoints,它們需要被標記連接到競技場地標(arena landmark)。因此,使用“spawnpoint_area_x”,x 為所屬競技場的 ID。還要確保它們被放置在該競技場的 volume_box 內。


導航網格 

一般來說,導航網格在多人遊戲中不太重要,因為大多數原版遊戲模式不使用 AI 士兵。不過,導航網格還可以用來給馬匹定位,讓它們找到逃離線(flee lines),並且也可以用來烘焙全局光照。關於如何創建一個正確的網格請參考我們已有的文檔。你可以忽略 AI 腳本的特定 ID。


領軍戰 

一般來說,領軍戰模式和單人遊戲戰場地形導航網格工作模式是一樣的。你將不得不覆蓋一個相對較大的場景,並使用非常精確的導航網格。你無須顧及 ID,你可以像在但遊戲中一樣消耗導航網格,來阻止 AI 使用某些導航網格的面。(請記住:比單人遊戲更重要的是,那些玩家可以到達但沒有導航網格的區域,給了玩家巨大的利用空間。儘量避免出現這樣的地方。)


圍城戰 

城堡的大門需要在腳本中設置適當的導航網格,就像在單人遊戲中一樣(參考上面之前鏈接的文檔)。如果你不創建一個適當的導航網格,馬匹會感到困惑並卡在你的門裡。此外,我們忽略了用於全局光照生成的城堡大門,這將阻止光照透進你的門樓主體。還要確保馬匹在城堡內外都可以夠到逃離線。請記住,馬匹總是會選擇最近的“flee_line”進行逃離,如果“flee_line”恰好在城外,它們會試圖找到一條出路,如果你沒有正確設置大門和梯子,它們就會被卡住。


其他 


氛圍(Atmosphere) 

與單人遊戲不同,多人遊戲場景只使用一種氛圍。在進行編輯時不要忘記保存它。


標籤(Label) 

在“SceneOptions”窗口中,你可以為你的場景設置一個標籤(Label)。如果你掃描你的場景以查找問題(頂部圖標欄中倒數第二個按鈕),這會很有幫助。如果你把這個標籤設為“mp”,它會過濾掉所有與單人遊戲相關的問題。


避免動畫點(animation point)預製件 

使用某些用於單人遊戲的預製件會導致你的場景崩潰。請注意不要放置任何有關動畫點的資產,這對椅子和類似的東西很重要,但對任何可能附帶有動畫的 shop_prop 預製件也很重要。通常,所有這些預製件都有一個非動畫點版本。除此之外,你總是可以使用這些資產,只需要刪除其動畫點子對象,並從預製件上移除所有的標記和腳本。


避免在圍城戰外使用可破壞對象 

可破壞對象只與我們的圍城戰遊戲模式正確同步。在其它模式下,放置路障或圍城器械這樣的可破壞物體可能會使你的遊戲崩潰,或造成其他問題。城牆上的城齒和可破壞的屋頂也是如此。

​ 


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com