【物競天擇2】NS2-MOD 制作指南
本文意指向更多對物競天擇2或技術(shù)感興趣,
并樂于為社區(qū)開發(fā)做貢獻的人提供最基礎(chǔ)的幫助,
更多詳情或問題咨詢可以進Q群:540422237了解,群內(nèi)會提供更細致的幫助。
入門
Brute's Modding Guide 吃下這篇指南以掌握基本MOD的開發(fā)流程.
進階
以下內(nèi)容多數(shù)需要翻墻,請自備梯子跟英文翻譯.
音效添加:Rio的MOD創(chuàng)作帖
地圖制作:Natural Selection 2 Mapping Tutorial
Cinematic(動畫/特效)制作:Natural Selection 2 Cinematic Tutorial
NS2CN社區(qū)正在運行的開源MOD.StriteR's Github (NS2開頭倉庫)
施工中
原文:Ghouls Modding Guide
這是一個舊的草案,有些細節(jié)可能已經(jīng)過時了!
Spark Engine (火花引擎)
在開始制作NS2mod之前,必須先看一下它所使用的引擎。對于NS2來說,它使用了由UWE自研的Spark火花引擎。
關(guān)于Spark引擎有兩件重要的事情需要理解。首先是它基本的工作原理,其次是它是如何掛載文件的。
工作原理
火花引擎Spark(以下簡稱火花)包含了很多不同的模塊。我現(xiàn)在只描述最重要的那些,這樣你就可以基本知道火花是如何工作的。
理解這一點很重要,因為不理解這個那開始修改制作mod將是毫無意義的。
基本上所有的NS2游戲代碼都是用Lua編寫的,并由引擎通過Lua模塊來執(zhí)行。
Lua代碼本身現(xiàn)在也可以在不同的Lua虛擬機(vm)中運行,但我稍后將更詳細地解釋這一點。
基本上,火花通過網(wǎng)絡(luò)模塊使用網(wǎng)絡(luò)包與客戶端/服務(wù)器進行通信。
如果網(wǎng)絡(luò)模塊接收到一個包,它將在Lua模塊上調(diào)用一個事件,該模塊調(diào)用負責(zé)處理該包的所有代碼函數(shù),并根據(jù)它來決定應(yīng)該發(fā)生什么。
除此之外,還有一些我剛才調(diào)用的核心模塊?;旧?,它是用來管理本地按鍵輸入和相關(guān)的調(diào)用,如網(wǎng)絡(luò)模塊Lua模塊的事件,從而調(diào)用Lua 虛擬機中的某些注冊函數(shù),根據(jù)輸入生成輸出,如按下M鍵換圖→ 呼出事件“按下M鍵”→ 在客戶端虛擬機上調(diào)用Lua函數(shù)KeyDown(Key)按下M鍵→ 玩家在游戲中游玩→ 顯示地圖→ 輸出到渲染模塊:顯示貼圖實體(出現(xiàn)地圖選擇欄)
在輸入給定的模塊時,通過事件調(diào)用某些Lua函數(shù),該函數(shù)根據(jù)輸入生成一個特定的輸出,這些輸出被傳遞到輸出模塊(渲染,網(wǎng)絡(luò)等。)
基本上就是這樣運作的。
如何裝載文件
通常,火花會在裝載文件時檢查該給定的文件是否已掛載。
如果是,它將卸載舊文件并掛載新文件。
否則,它只會安裝最新的個。
例如:
我們的mod包中有l(wèi)ua/Alien.lua。現(xiàn)在spark注意到它已經(jīng)裝入了lua/Alien.lua,因為這是一個普通的文件。所以它會卸載普通文件,而裝載我們的修改過的mod文件。
這使得有兩種最基礎(chǔ)的方法讓修改NS2文件成為可能:
①.?替換普通文件:
您可以通過很基礎(chǔ)地替換普通文件,來添加你修改過的文件,并將它們添加到mod列表中。因為spark將用修改過的mod文件替換掉普通文件。
但這可能會導(dǎo)致兩個問題:
其他mod的同名文件可能會替換掉你已經(jīng)被修改后的mod文件。
所以,僅僅替換文件很容易導(dǎo)致兩個插件沖突
?如果在普通文件中添加了一些對其他游戲代碼很重要的東西,會發(fā)生什么呢?因為你基于舊的ns2構(gòu)建的修改文件不包含新的東西,那么你的mod將導(dǎo)致ns2奔潰,直到你更新你的mod。
②.?添加新文件:
這樣你就可以為你的mod創(chuàng)建屬于自己的文件,這樣就不會卸載任何其他文件,你的mod文件也不會被其他任何mod卸載。但問題是如何鏈接你的mod文件被普通代碼執(zhí)行?
我將在游戲代碼修改部分回答這些問題?,F(xiàn)在讓我說,如果你正確使用了文件夾結(jié)構(gòu),映射器就根本不會有鏈接問題,因為ns2會讓所有映射都可以自動選擇:)這就引出了我們的下一點。
普通文件夾結(jié)構(gòu)
NS2使用了一種特定的文件夾結(jié)構(gòu),我將在這里簡要地通過在下面的列表中展示它,并在“-”后面解釋每個文件夾的用途:
??Lua 包含所有游戲代碼文件(.lua 文件)
??Model 模型 — 包含游戲使用的所有模型(.model 模型文件 .material 材質(zhì)文件和.dds 貼圖文件)
??Map 映射 — 包含所有映射文件(.level 文件)
??Material 材質(zhì) — 貼圖所使用的材質(zhì)和貼圖(.material 材質(zhì)文件和 .dds 貼圖文Sound 聲音 — 包含游戲使用的所有聲音文件(.fsb 事件索引文件 .fev音頻數(shù)據(jù)文件和.soundinfo 音效文件)
??Ui — 包含UI使用的所有紋理(.dds 紋理貼圖文件)
??Screen 屏幕 — 包含用于加載屏幕背景的所有圖像(.jpg 圖片文件)
??Shaders 著色器 — 包含游戲使用的所有著色器(.fx 高階著色器文件 .screenfx 屏幕著色器文件 .hlsl 高階著色器源代碼文件 和.Shader 著色器文件)
??Cinematic 電影動畫 — 包含游戲使用的所有動畫(.cinematic 和 .dds 紋理文件)
??Gamestrings 游戲字符串 — 包含用于翻譯游戲文本的文本文件(.txt 文本文件)
ns2使用的普通文件可以在ns2安裝文件夾下的ns2和“ns2核心文件”中找到。提示:如何打開ns2安裝文件夾:


右鍵單擊Steam庫→右鍵natural selection 2中的管理→瀏覽本地文件
火花引擎登錄器


1.?新建-創(chuàng)建一個新的mod文件夾
2.?打開-打開一個現(xiàn)有的mod文件夾
3.?配置-配置當前打開的mod
4.?發(fā)布-發(fā)布當前打開的模型
5.?源文件-打開當前打開的mod文件夾的源文件夾
6.?輸出-打開當前打開的mod文件夾的輸出文件夾
7.?生成器-將源文件夾的所有源文件轉(zhuǎn)換為ns2使用的格式,并將它們保存到輸出文件夾中
8.?啟動游戲-啟動游戲與輸出文件夾的所有文件的安裝。
9.?地圖編輯器-打開地圖編輯器。
10.?查看器-打開模型查看器。
11.?動畫編輯器-打開動畫編輯器。
12.?Decoda-打開隨ns2附帶的LuaIDE(Lua編譯器)
13.?編輯器手冊-打開地圖編輯器的手冊。
14.?地圖指南-打開ns2普通地圖設(shè)計指南。
15.?示例-打開ns2資產(chǎn)文件夾,其中包括ns2附帶的所有資產(chǎn)(模型源文件等)。
測試mod
至少運行一次生成器以構(gòu)建源文件夾。
然后點擊啟動板中的“啟動游戲”,用你的mod安裝開始游戲。然后通過服務(wù)器瀏覽器→創(chuàng)建啟動一個本地服務(wù)器


習(xí)慣使用ns2的作弊模式指令和控制臺調(diào)試指令來復(fù)原某些情況并使用機器人測試mod是非常必要的。
您可以在這里找到所有可用的ns2控制臺命令的更新列表:http://wiki.unknownworlds.com/ns2/Console_Commands
然而,對于一個真正的玩家測試,你無法避免的需要發(fā)布你的mod,并在一個專門的服務(wù)器上測試它們。
發(fā)布模塊
在發(fā)布之前,請確保你的mod在“configure 配置”下有如下圖的標題和描述,[圖像編號]待添加
否則就不可能從創(chuàng)意工坊安裝你的mod了。在您檢查沒問題之后只需點擊發(fā)布按鍵就可以發(fā)布mod到創(chuàng)意工坊了。
更新一個mod的方式也是一樣的。
錯誤警告:如果你點擊發(fā)布,顯示說“發(fā)布成功”,但登錄器只把你的publish_id(發(fā)布id)從 mod.settings (模組配置)文件中刪除。
在這種情況下,只需打開mod.settings 文件(您可以在mod的父文件夾中找到它)并添加
publish_id=“[modid]” //賦值一個發(fā)布id和mod id
提示:手動設(shè)置publish_id還允許你再次上傳和更新舊的創(chuàng)意工坊mod,為此你可能會刪除mod文件夾。
提示:根據(jù)創(chuàng)意工坊鏈接獲取mod Id。
如果你忘記了你的modid再點擊創(chuàng)意工坊鏈接可以很容易找到。
獲取到你的mod的創(chuàng)意工坊頁面的鏈接,然后復(fù)制鏈接中“id=”后面的數(shù)字。進入谷歌,輸入將[從鏈接獲得的數(shù)字ID]轉(zhuǎn)碼為十六進制。谷歌呈現(xiàn)給你的十六位數(shù)字就是十六位的modid(忽略0x前綴
地圖編輯器
作為地圖編輯器,登錄器面板上的地圖編輯器將是您使用的唯一工具。要適應(yīng)地圖編輯器的UI界面,請閱讀游戲根目錄下的地圖編輯器手冊,還有地圖設(shè)計參數(shù)的一些標準。
為了開始使用ns2地圖編輯器,我推薦mendasp的這個教程視頻:http://youtu.be/oIyS0Z7CJFY?list=PLH0GoQmA4BGUbl0UxgR65XPAcDO0O_jSu

https://www.bilibili.com/video/BV1v3411i73k/?spm_id_from=333.999.0.0
基本上,一個很好的教程列表可以在這里找:http://www.youtube.com/watch?v=oIyS0Z7CJFY&index=1&list=PLcQ9D-WW8z7EmVgv2lIokfciBLqQhF2Xi
總的來說,我建議以ns2地圖制作者的身份加入SCC組,因為它提供了一個很好的問題收集反饋,并如果你被卡在某個地方可以去官方Discord上尋求幫助。
動畫電影
注意:這有點像僅僅使用動畫編輯器的mod。我自己從來沒有真正使用過它,所以希望能找到其他人能補充這個話題。
建模
NS2支持max和fbx文件。Blender文件也將很快被支持添加
可以學(xué)習(xí)3DMAX.攪拌機的插件可以在論壇里獲得
紋理模塊
物競天擇2使用DDS來存儲它的紋理。所以,如果你想打開一個紋理來編輯它,你將需要一個能夠打開DDS文件的軟件。
然而,對于新紋理的最佳做法是將它們保存為PSD文件,并讓構(gòu)建器將它們轉(zhuǎn)換為DDS。
您可以使用的軟件:
??Paint.net (http://www.getpaint.net/)(對于PSD支持:https://psdplugin.codeplex.com/)
??gimp (http://www.gimp.org/)(對于對DDS的支持:https://code.google.com/p/gimp-dds/)
??(為DDS支持:下載免費的Nvidea紋理工具https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop)

https://www.bilibili.com/video/BV1SA411F7Q3/?spm_id_from=333.999.0.0
音效模塊
[更新里約熱內(nèi)盧的聲音圖:http://forums.unknownworlds.com/discussion/comment/2076854/#Comment_2076854使用最新的fmod軟件]
著色器模塊
注意:NS2使用HLSL著色器,所以你應(yīng)該在互聯(lián)網(wǎng)上找到足夠的指南來開始。
游戲代碼模塊
首先,你需要使用Lua來修改ns2的游戲代碼。
在本教程中,我不會解釋Lua!所以如果你不習(xí)慣Lua,我建議你讀這篇文章免費的Lua書(http://www.lua.org/pil/contents.html),然后你繼續(xù)閱讀本指南。
Spark還使用多個Lua虛擬機,所以在我們開始修改之前,了解這些虛擬機和它們做什么是很重要的。
LUA IDE(Lua語言編譯器)
如果您不確定要使用什么IDE,這里有一個簡短的列表(按受歡迎程度排序):
●?Intellij IDE(有EmmyLua 插件)
●?VSCode (帶有vscode-lua or emmylua 插件)
●?記事本++ (帶有 LuaC & GLua 插件)
●?Atom(帶有l(wèi)anguage-lua, 或linter & linter-glualint 插件)
●?Decoda IDE(包含在NS2火花引擎登錄器中)
●?ZeroBrainStudio (特別是這個分支: https://github.com/sclark39/ZeroBraneStudio/tree/master)
●?帶有l(wèi)ua插件的Eclipse
●?Sublime
●?...
LUA 虛擬機VMs
客戶端虛擬機,它將運行客戶端代碼和客戶端上的共享代碼
共享虛擬機VM-VM,它將比對預(yù)測服務(wù)器端與客戶端的操作,以平滑網(wǎng)絡(luò)延遲。
服務(wù)器端虛擬機,它將運行服務(wù)器端代碼和服務(wù)器上的共享代碼
加載正在加載屏幕的虛擬機。預(yù)緩存文件和啟動其他虛擬機。為主菜單加載的主菜單(當未連接到服務(wù)器時)
提示:此外,少量的UI元素(比如武器的彈藥計數(shù)器)也可以在它們各自的虛擬機vm中運行。
提示:服務(wù)器端的權(quán)限為最高總是高于用于預(yù)測的共享虛擬機。因此,客戶端會盡快糾正錯誤的預(yù)測。
服務(wù)器和客戶端虛擬機通過網(wǎng)絡(luò)消息相互通信,如前面關(guān)于Spark引擎的部分所述。
我們現(xiàn)在將忽略共享虛擬機VM,因為你只需要看它更高級的東西。
在這一點上,你做了一些需要被預(yù)測的事情,你將如此習(xí)慣于游戲代碼,你不再需要任何指導(dǎo)了:)
這意味著我們基本上有3個不同的Lua文件:
-?客戶端:Lua文件有一個“_Client”附錄。這些文件將在客戶端虛擬機VM上加載
-?服務(wù)器:Lua文件有一個“_Server”附錄。這些文件將在服務(wù)器虛擬機VM上加載。
-?共享:所有沒有附錄的Lua文件都是普通共享文件,將加載到客戶端和服務(wù)器端兩個虛擬機中
請注意,您不能訪問沒有在同一虛擬機VM中聲明的變量、對象或函數(shù),除非它們已聯(lián)網(wǎng)。
寫代碼
編碼步驟:
1.?首先要知道你想做什么。寫下你的mod的簡短概念。
2.?查找您將需要修改的普通類、方法、變量和文件。
3.?開始編碼(逐步進行)
4.?測試您的mod并調(diào)試它
為了在普通類中查找東西,我強烈推薦ns2文檔。您可以根據(jù)這個簡短的指南生成您自己的ns2文檔:http://forums.unknownworlds.com/discussion/112360/ns2docs/p1
或者只是使用我維護的ns2文檔鏡像:http://ns2docs.bplaced.net/
否則,只能使用IDE的搜索文件函數(shù)來查找在普通代碼中如何使用方法和變量。
也要記住引擎功能,它的文檔可以在/docs文件夾的ns2安裝文件夾中找到(.json格式)。
結(jié)合這些事情,你應(yīng)該很快就知道必須修改那些文件才能實現(xiàn)你想要的功能了。
如果你仍然不能實現(xiàn)你的代碼功能,可能是由于在普通的代碼中有的東西是隱藏的,可以去discord上尋求修改部分隱藏代碼的幫助。
當你概念化你的mod時,你也必須考慮如何將你的mod集成到普通文件中。
我將在本指南中介紹4種讓mod運行的方法。你所能接受到的是兩種方法,你可以修改添加完整的ns2文件或重載這些文件。
我現(xiàn)在將向您介紹基于它們所代表的什么類型的4種修改方式:
??文件替換
??只是替換和修改普通的文件
這是實現(xiàn)ns2mod最簡單的方法,因為你所要做的就是將給定的普通文件復(fù)制到mod文件夾中,并按照你喜歡的方式修改它。
但是這樣做,您將遇到與我已經(jīng)提到的被相同文件名替換的問題。
??game_setup.xml (游戲配置拓展文件):
該文件定義了每個LuaVM 虛擬機的起點,這意味著它定義了在啟動LuaVM虛擬機時加載了哪個Lua文件。通過將這些條目更改為您自己的文件,您可以完全修改spark火花引擎mod的加載順序。
這意味著您只需替換一個文件就可以創(chuàng)建一個完整的mod?;旧?,如果你想創(chuàng)造一個游戲,這就是正確的選擇。
提示:game_setup.xml還定義了在服務(wù)器列表中顯示的游戲模式名稱。
??文件添加:
??進入系統(tǒng):
通過編寫引導(dǎo)文件,您可以在所有普通文件都已經(jīng)完全加載后,再將設(shè)置文件加載到每個VM虛擬機中。
這允許您輕松地加載mod,并通過鉤子和表項覆蓋輕松地修改函數(shù)、變量和類。
欲了解更多細節(jié),請查看Modloader Gdoc
??Shine插件:
由許多ns2服務(wù)器運行的ShineMod基本上是一個框架,它通過插件提供了其他更加靈活的功能,可以由服務(wù)器管理員動態(tài)地啟用或禁用。
Shine會自動加載安裝在lua/Shine/擴展文件夾中的所有插件。
因此,使用shine核心框架,您可以通過編寫shine插件輕松擴展ns2
這樣做的好處是,您可以使用完整的shine框架和所有的shine庫,這允許您更快地寫功能,而無需考慮如何讓功能運行。
更多的細節(jié)可以在這里找到:https://github.com/Person8880/Shine/wiki#for-developers
引擎事件鉤
除了連接到lua函數(shù)之外,您還可以通過事件向某些引擎事件添加鉤子。鉤子(字符串鉤子名稱,函數(shù)鉤子函數(shù))是創(chuàng)建mod的最重要的引擎特性之一。
下面是最常用的引擎掛鉤的一個簡短的列表:
??服務(wù)器虛擬機事件
??“客戶端連接”-呼叫連接連接的客戶端
??“客戶端斷開連接”-調(diào)用連接與斷開連接的客戶端
??“加載地圖后”-在完成加載地圖后調(diào)用鉤子
??“加載地圖前”-在開始加載地圖之前調(diào)用鉤子
??“映射實體”-在映射實體時使用類名、組名和值
??“更新服務(wù)器”-調(diào)用連接每個服務(wù)器的提示符
??客戶端虛擬機事件
??“更新客戶端”-呼叫連接每個客戶端提示
??“加載地圖后”-在完成加載地圖后調(diào)用鉤子
??“客戶端斷開連接”——在客戶端與服務(wù)器斷開連接后調(diào)用鉤子
網(wǎng)絡(luò)消息
由于您不能從客戶端對服務(wù)器端的變量進行訪問,而另一方面,您必須共享兩者都需要的值,對吧?這是通過網(wǎng)絡(luò)消息來完成的。
您可以使用Shared設(shè)置網(wǎng)絡(luò)消息。注冊寄存器網(wǎng)絡(luò)消息(字符串消息名稱,表參數(shù))
在參數(shù)表中,您必須為每個表條目定義一個類型,例如:
本地參數(shù)={
間隔1=“整數(shù)(0到10)”,
浮動1=“浮點(0到1乘0.05)”,
字符串1=“字符串(255)”,
布爾1=“布爾”
}
發(fā)送您在客戶端和服務(wù)器端上使用的網(wǎng)絡(luò)消息。發(fā)送網(wǎng)絡(luò)消息(客戶端目標、字符串消息名稱、表數(shù)據(jù)、布爾可靠)(可靠定義服務(wù)器是否應(yīng)確??蛻舳耸盏较ⅲ┖涂蛻舳丝蛻舳?。發(fā)送網(wǎng)絡(luò)消息(字符串消息名稱、表數(shù)據(jù))。
如果您想向服務(wù)器上的所有客戶端發(fā)送消息,您可以簡單地使用
服務(wù)器。發(fā)送網(wǎng)絡(luò)消息(字符串消息名稱、表數(shù)據(jù)、布爾值的可靠性)。
對于接收網(wǎng)絡(luò)消息,我們再次使用引擎鉤子函數(shù),稱為服務(wù)器。連接網(wǎng)絡(luò)消息(字符串消息名稱、函數(shù)連接函數(shù)(客戶端、消息表))或客戶端。連接網(wǎng)絡(luò)消息(字符串消息名,函數(shù)連接函數(shù)(客戶端,消息表))
控制臺命令
您可能希望使用控制臺命令。這些也只是另一個引擎事件鉤子
假設(shè)你想鉤子到sv_hello輸出“你好”,你所需要做的就是使用事件。鉤(“Console_sv_hello”,函數(shù)命令([客戶端],arg1、arg2、...))
Let’s say you want to hook into sv_hello to print out “hello” all you need to do is use Event.Hook(“Console_sv_hello”, function Command( [Client], arg1, arg2, … ) )
客戶端只在服務(wù)器上傳遞,傳遞的參數(shù)是在命令后面以空格分隔而給出的字符串。
混合器
它們在ns2代碼中起著核心作用,并且是獨特的SparkLua結(jié)構(gòu),這使得它們一開始很難理解。我經(jīng)常稱它們?yōu)椤耙褜崿F(xiàn)的接口”,因為這基本上是它們的設(shè)計智慧。每個Mixin都可以擴展給定類的功能,而不干擾類方法或其他混合方法。
有時唯一的缺點是,如果兩個混合物都被附加到同一個類上,你就不能正確地說出使用相同名稱的mixin方法。當然,這也可以用于偵聽某些方法的調(diào)用。
關(guān)于這個話題,非常有趣的是下面的視頻, Dushan 試圖獨自進一步解釋混合器的概念:https://www.youtube.com/watch?v=EQhlp6rCrY8
示例代碼項目“Zombie”
好吧,目前這樣的理論已經(jīng)足夠了。我現(xiàn)在將使用這個小mod項目向您展示編碼mod是如何工作的。我會用我之前給你展示的所有mod方式來實現(xiàn)這個mod。
在我們開始之前,我們需要一個關(guān)于我們的小mod的概念。
我決定為這個教程制作一個小的僵尸模式mod。
基本游戲玩法:
異形作為僵尸,每個陸戰(zhàn)隊員如果被僵尸殺死都會變成僵尸。
在還沒開始的時候,玩家只能加入陸戰(zhàn)隊,如果有超過一定數(shù)量的陸戰(zhàn)隊玩家加入,我們就會選擇一定數(shù)量的玩家來扮演僵尸。
隨著游戲的開始,我們將建好地圖上的所有電源節(jié)點,如果一個電源節(jié)點被摧毀(沒有應(yīng)急燈),我們將把房間完全弄黑
游戲?qū)⒃谝欢〞r間內(nèi)如果陸戰(zhàn)隊沒有全部變成僵尸則陸戰(zhàn)隊員獲勝,否則如所有陸戰(zhàn)隊員都被變成僵尸,則僵尸獲勝
如果一個僵尸被殺死,它會在一段短暫的延遲后重生。
個人資源點=均衡分數(shù)點
僵尸應(yīng)該在開始的時候就比陸戰(zhàn)隊員更強大一些。僵尸會根據(jù)陸戰(zhàn)隊的死亡而獲得分數(shù)
陸戰(zhàn)隊的生存時間和僵尸死亡都可以獲得分數(shù)。
陸戰(zhàn)隊應(yīng)該能夠按B鍵打開購買菜單以購買新武器。
這個概念還不夠完美,但它應(yīng)該足以編寫一個基本的ns2mod。
所以,讓我們來看看我們將需要修改或改變什么。
因為這將是一種游戲模式的mod,我們將無法在不改變NS2游戲玩家類的情況下創(chuàng)建它,它基本上管理著所有的游戲回合邏輯。
所以我們需要改變檢查回合開始和結(jié)束的函數(shù)。查看ns2游戲子項的ns2文檔頁面
http://ns2docs.bplaced.net/ns2docs/tables/NS2Gamerules/index.html我們可以很容易地發(fā)現(xiàn)NS2游戲:檢查啟動()和NS2游戲:檢查啟動()
we can easily spot NS2Gamerules:CheckGameStart() and NS2Gamerules:CheckGameEnd()
接下來,我們需要避免任何人加入異形隊伍,而不是直接把他們和我們的mod放在那里。
如果你再看NS2游戲的ns2文檔頁面,你會看到它也通過NS2游戲處理團隊加入(玩家,加入的隊伍編號,強制)。
If you look again at the ns2docs page of NS2Gamerules you see that it also handles team joins via NS2Gamerules:JoinTeam(player, newTeamNumber, force).
游戲開始的代碼會隱藏在NS2游戲玩家類中。有一個NS2游戲規(guī)則:SetGame啟動了(),但正如它之前的評論所說,它似乎只是為了測試的原因才存在。
The game start code is a bit hidden in the NS2Gamerules class. There is a NS2Gamerules:SetGameStarted() but as the comment in before it say it seems to be only there for test reasons.
但是,即使這個函數(shù)沒有在普通的ns2中被使用,它也會幫助我們,如果我們看看它調(diào)用ns2玩家的代碼:Set游戲狀態(tài)(k游戲狀態(tài)。已啟動)。
But even if that function doesn't get used in vanilla ns2 it helps us as we see if we look at the code that it calls NS2Gamerules:SetGameState( kGameState.Started).
看看這個方法,我們找到了一個關(guān)于k游戲狀態(tài)的如果檢查。開始,其中包括“真正的”開始游戲呼叫。所以我們需要添加我們的開始游戲的內(nèi)容。
Looking at that method we find an if check for kGameState.Started which includes the “real” start game calls. So we need to add there our Start Game stuff.
我們現(xiàn)在如何把一個陸戰(zhàn)隊員變成一個異形?只是把死后的陸戰(zhàn)隊員放進了異形的隊伍。讓我們來看看人類頁面的子項有什么http://ns2docs.bplaced.net/ns2docs/tables/Marine/index.html
哦,找到了“kill”指令,向我們展示了有一個陸戰(zhàn)隊員:OnKill(攻擊者,行動者,指向,方向)的方法。完美!
Oh look searching for “kill” shows us that there is a Marine:OnKill(attacker, doer, point, direction) method. Perfect!
這已經(jīng)足夠了,現(xiàn)在我們可以在做剩下的事情之前先從核心內(nèi)容開始了。
That's enough by now we can start with the core stuff before doing the rest.
譯:祖莉ZulyHiroky? ?校準、編輯:StriteR.