LV. 15
GP 228

【心得】在 Win7 TF2 SrcDS 上安裝 SourceMod。

樓主 遊戲‧浪人 GameRover

這篇,一樣是推坑用教學文,而且很恐怖~~~

關於 SourceMod 這部分,我一邊編撰時也一邊想著:我該寫那些?

SourceModAlliedModders (http://www.alliedmods.net) 社群下的一個專案。基於該專案的目標(請參閱 AlliedModders 的首頁內敘述)、特性、與個人使用經驗,若要編撰 SourceMod 的教學文,我覺得應該要把插件腳本編輯(plugin's scripting)相關內容也寫進去,但這樣會與我的目標:「簡單的介紹與教學」有所衝突 (好吧,我知道我寫的東西都不怎麼簡單…)

到本文差不多成形的時候,我決定編撰基本(?)的安裝與應用就好,而其他的部分,我只會小提部分的概念或經驗,更深入的還請自行參閱 AMWiki (http://wiki.alliedmods.net) 上的內容。
(因為我不想寫太多…雖然我已經刪掉很多內容了,但這文在我看來好像還是會嚇跑一堆人的樣子…)

本篇教學文需要 [【心得】這是個隨意教學文: 在 Win 7 下建立 TF2 SrcDS 伺服器。] 的基本觀念與技能;如遇到難以理解的內容,請你先略覽前述那篇教學文。

後面的內容,大致上粗分以下幾個部分:
  1. 程式簡介
  2. 檔案下載
    • Metamod:Source (MMSrc)
    • SourceMod (SrcMod)
  3. 安裝程式檔案
    • 前置作業
    • Metamod:Source (MMSrc)
    • SourceMod (SrcMod)
  4. 簡單的組態設置
    • SourceMod 管理員帳號設置
    • SourceMod 多語系檔案設置
    • SourceMod 的一些組態設置
      • 多語系功能組態
      • 保留位功能組態
  5. 檢查與操作
    • 確認 SrcDS 是否有載入 MMSrc 與 SrcMod
    • SrcMod 的遠端控制方式
  6. SourceMod 插件與擴件

程式簡介:
  1. Metamod:Source (後續簡稱 MMSrc) 提供在 Half-Life 2/Source 遊戲引擎下的一個 C++ 插件環境。雖然 Valve 有提供 C++ 插件環境但(從某些觀點看來)並非完善,而 MMSrc 主要目標便是提供良好的插件環境,而並非著眼於提供高階的伺服器管理或遊戲功能。
  2. SourceMod (後續簡稱 SrcMod) 提供 SrcDS 的功能擴充與基本管理功能,需要透過 MMSrc 載入、運作。
  3. SrcMod 插件 (Plug-in) ( * 註解[1] ),供 SrcMod 載入、運作的程式元件。主要是得自於編譯 SourcePawn 語法檔案所得到的 SMX 檔案,例如 SrcMod 內建的 [\\tf\\addons\\sourcemod\\plugins\\basecommands.smx]。
  4. SrcMod 擴件 (Extension),供 SrcMod/MMSrc 載入、連結、運作的程式元件。與 SrcMod 插件的差別在於運作的層面不同,主要開發工具也不同。例如 SocketcURL 等。

下載檔案:

為何這會自成一部份?因為隨著 TF2 的更新、變異,常會造成同時期被標示為穩定版本的模組運作異常。所以大部分的時候都是不得不使用開發中的快照版本(Snapshot)。因此後續的敘述中,我會提示在哪裡可下載開發快照版本的程式,而各位在心中要先有個底:正式版本異常時就不得不先試試最新的開發快照版本程式。

後續操作大致分為兩段:MMSrc 與 SrcMod 的相關檔案下載。
( 注意!下載前請先參閱 * 註解[2] )
  • Metamod:Source (MMSrc)
    1. 在 MMSrc 官網頁面 (http://www.sourcemm.net/) 中:
      • 左上 [Downloads] 綠色方塊內提供正式版本的下載頁面連結。
      • 左下 [Developers] 橘色方塊內的 [Snapshots] 連結頁面提供快照版本的下載。
        目前 MMSrc 的程式開發快照提供兩個分支版本:穩定 (stable)開發 (development)
      我沒細究上列內容的差異,因為我個人玩 TF2 SrcDS 是玩樂趣而已,所以我是偏好使用開發快照版的來玩;至於各位可依自己需求或觀察快照時程紀錄表 (waterfall)開發異動紀錄來選擇要使用哪個版本。
    2. 除了下載 MMSrc 主要檔案外,還得下載 [metamod.vdf] 檔案,以設定 SrcDS 的模組啟動/載入動作:
      1. 在首頁左上 [Downloads] 綠色方塊內有個 [Make your VDF] 連結,點擊進入檔案產生頁面。
      2. 第一個欄位 [Game] ,選擇你要使用的遊戲,這裡當然是選用 [Team Fortress 2]。
      3. 第二個欄位 [Game Folder] ,除非你有特殊需求,不然這裡就留空,不需要輸入資料。
      4. 接著按下下面的 [Generate metamod.vdf] 以產生並下載該檔案。
    3. 在經過上述說明後,你應該要下載好兩個檔案: MMSrc 的壓縮封裝檔案與 [metamod.vdf]。
  • SourceMod (SrcMod)
    1. 在 SrcMod 官網頁面 (http://www.sourcemod.net/) 中:
      1. 左列 [Downloads] 下的 [Releases] 提供正式版本的下載頁面連結。
      2. 左列 [Downloads] 下的 [Snapshots] 提供快照版本的下載頁面連結。
      3. [廣告]:左列下方還有個橘黃按鈕 [Donate] 的贊助連結,有閒錢就支持一下吧!
      至於版本的選擇,請依自己需求來選擇;我一樣只玩開發版的。
      (如有中文介面需求請參考 * 註解[3]* 註解[4] 。)
    2. 至於還有個 [Plugins] 部分,因為 SrcMod 下的插件相當繁雜,所以該頁面是搜索引擎介面,往後你可以自己試用看看。我個人是沒怎在用這介面,因為我都是在官方論壇網站(在左側的 Community > Forums) 的頁面內閒逛看插件。
    3. 在經過上述說明後,你應該至少要下載好一個檔案: SrcMod 的壓縮封裝檔案

至此為下載檔案的流程結尾。

安裝程式檔案:

在 SrcMod 官網頁面 (http://www.sourcemod.net/) 左列 [ Documentation > Install/Usage ] 內有詳盡的安裝說明,有需要時可去看看,這裡只提供基本安裝步驟。

後續操作主要分為三段:[前置作業],[MMSrc 的檔案安裝],[SrcMod 的檔案安裝]。
  • 前置作業
    1. MMSrc 可以利用 SrcDS 在 SteamPipe 改版後的 [\\tf\\custom] 資料夾功能特性來安裝於 [\\tf\\custom] 資料夾內(我個人就是這樣安裝 MMSrc);不過因為 SrcMod 目前不相容於使用該特性的安裝,所以我這裡還是以傳統安裝方式(依 AMWiki 內的說明)為主,省的各位出現啥詭異現象。
    2. 開啟 Windows 的 命令提示字元 ([Cmd.exe],後續簡寫為 WCmd;建議以系統管理員身分啟動 WCmd。)
    3. 在 WCmd 輸入 [set SDSDir=Q:\\Server\\TF2SrcDS\\Run01],以在 WCmd 中建立值為 [Q:\\Server\\TF2SrcDS\\Run01] 的環境變數 [SDSDir],設定往後安裝時需要的 SrcDS 位置(正常應為 [srcds.exe] 檔案的所在目錄)請依環境自行修改位置(可修改的字串用淺綠背景標明。)
      (往後的 WCmd 指令輸入提示,我會使用 「輸入 WCmd:[<命令內容>], <命令說明>」 的樣式。)
    4. 輸入 WCmd:[CD /D "%SDSDir%"],切換 WCmd 操作位置。
    5. 輸入 WCmd:[explorer /root,"%SDSDir%\\tf"],開啟 [%SDSDir%\\tf] 資料夾視窗。
    6. 一般狀況下,TF2 SrcDS 的插件(/增件)資料夾為 [%SDSDir%\\tf\\addons] (初始安裝時 TF2 SrcDS 不會自動建立),用以放置 TF2 模組增件檔案。若你開啟前述步驟下載的 MMSrc 與 SrcMod 的壓縮檔案,你會發現壓縮檔內根目錄下會有資料夾 [addons],這是與[%SDSDir%\\tf\\addons] 位置對應的同位節點。

  • Metamod:Source (MMSrc)
    1. 前置作業中,你開啟了 [%SDSDir%\\tf] 資料夾視窗;請把下載的 MMSrc 壓縮檔案解壓縮於此處。(過程中可能會提示 [addons] 的覆蓋,可選用覆蓋。)
    2. 在 [%SDSDir%\\tf] 資料夾視窗中點擊進入資料夾 [addons],將下載的 [metamod.vdf] 複製於此處。(如果使用快照版本的 MMSrc,此處可能已存在該檔案,可選用覆蓋。)
    3. 以上就完成 MMSrc 基本安裝了。有必要時才需編輯 [\\tf\\addons\\metamod.vdf] 這檔案的內容,不然一般不用管它。
  • SourceMod (SrcMod)
    1. MMSrc 安裝作業後,你的資料夾視窗路徑 [%SDSDir%\\tf\\addons],請將其設回到[%SDSDir%\\tf]。
    2. 請把下載的 SrcMod 壓縮檔案解壓縮於 [%SDSDir%\\tf] 內。(過程中可能會提示 [addons] 與 [cfg] 的覆蓋,可選用覆蓋。)
    3. 以上就完成 SrcMod 基本檔案安裝了。

至此為安裝程式檔案的流程結尾。

簡單的組態設置:

雖然經過上述步驟後 SrcDS 應可正常運作了,但啟動之前最好先設置好 SrcMod 帳號等設定,不然你只能從 SrcDS console 使用 SrcMod 的命令而無法從 TF2 client (遊戲客端)控制 SrcMod/SrcDS。
因為 MMSrc 是個單純的介面層,所以沒我們 SrcMod 使用者要去操煩的,我們要處理的是 SrcMod 的部分。(如要詳盡資訊,請參考 Managing your Sourcemod installationSourceMod Documentation )

後續的操作大致分為三段: [SrcMod 的帳戶設置],[SrcMod 的多語系檔案設置],[SrcMod 的組態設置]。

注意:後續步驟遇到純文字檔案請使用 [UTF-8 without BOM] 格式儲存,後續不再提醒。
( * 註解[5]* 註解[6] )
  • SourceMod 管理員帳號設置:
    1. SrcMod 預設使用內建基本插件 [admin-flatfile.smx] 來讀取:
      • [\\tf\\addons\\sourcemod\\configs\\admins_simple.ini]
      • [\\tf\\addons\\sourcemod\\configs\\admins.cfg]
      這些檔案的帳號資料,這裡只說明 [admins_simple.ini] 的設置。
      ( * 註解[7]* 註解[8] )
    2. 目前 SrcMod 帳號認證有 3 種:[Steam ID]、[Client IP]、[Name&Password]。基於便利性這裡使用 [Steam ID] 模式。而 Steam 帳號的 SteamID,可利用 Steam ID Finder 或在玩遊戲時在遊戲主控台(console)使用 [status] 命令取得。
    3. 輸入 WCmd:[explorer /select,"%SDSDir%\\tf\\addons\\sourcemod\\configs\\admins_simple.ini"],開啟 [configs] 資料夾視窗並選擇 [admins_simple.ini] 組態設定檔案。
    4. 以純文字編輯程式開啟 [admins_simple.ini] 組態設定檔案。
    5. 檔案中,()斜線(//)單行註解符號,SrcMod 解析單行字串時會無視單行註解符號之後的內容。往下看文件後方應該會有單行註解掉的基本設定語法範例。
    6. 在文件後新增一行,以下段的語法設置你的帳號:

      "<SteamID>"    "99:z"

      (雙引號(")用途如同括號,請確認成雙成對的完整性!)
      在上段語法中:
      1. 第一欄位用你的 Steam ID 取代 <SteamID> 來設定為你的 Steam ID
      2. 第二欄位放入免疫等級(99)與旗標(z),其間用冒號(:)區隔。
      3. 在單行開頭放多少 [Space] 或 [Tab] 都沒差,因為資料解析會從單行的非空白字元開始;而欄位與欄位之間只要有一個以上的 [Space] 或 [Tab] 字元間隔開即可。
      這樣你的 Steam 帳號在這伺服器上就被設置為免疫等級 99,權限旗標 z 的帳號了。
      ( * 註解[9]* 註解[10]* 註解[11] )
  • SourceMod 多語系檔案設置:
    1. 如果你想要安裝/設置 SrcMod 中文語系介面才需要參考這段內容。
      SrcMod 在正式版本內有多語系支援的資料,而在快照版本中只有預設的英文(en)語系。後續的移植步驟是給安裝快照版本的讀者參考的,正式版本的需要參考移植步驟,只需參考設置的步驟。
    2. 移植語系定義:
      檔案 [\\tf\\addons\\sourcemod\\configs\\languages.cfg] 為 SrcMod 的語系定義檔(UTF-8 編碼的純文字檔案),使用 KeyValues 的語法,用以宣告 SrcDS 的各語系在 SrcMod 內所設定對應的語系 ID。若你使用快照版本,你可以到 Translator.Status 頁面以 Export languages.cfg 連結下載目前的語系定義檔;或者把正式版本內的該檔複製過來使用。
    3. 移植語系資源:
      資料夾 [\\tf\\addons\\sourcemod\\translations\\] 內的檔案為 SrcMod 的語系資源檔(UTF-8 編碼的純文字檔案),使用 KeyValues 的語法,用以存放各語系所對應使用的字串。
      ( * 註解[12] )
      1. 預設語系(en:英文)資源的移植:
        資料夾 [\\translations\\] 內的 [*.phrases.txt] 檔案為預設語系的語系資源檔。這部分使用快照版本的就好。
      2. 非預設語系資料夾的移植(例如繁體中文)
        資料夾 [\\translations\\] 內的各子資料夾為各非預設語系的語系資源資料夾,快照版本只有預設語系的檔案而沒這些資料夾,你可以到 Translator.Status 頁面找你想要的語系,按下後面的 [export] 以下載該語系目前的語系資源檔;或者把正式版本這些子資料夾複製過來使用。
        另,因為版本差異所以常會有語系資源差異,如果你希望有完整的語系資源內容的話,可能得自己檢修語系資源檔案。
        ( * 註解[13]* 註解[14] )
  • SourceMod 的一些組態設
    首先檢查一下 SrcMod 的多語系組態。
    開啟文字檔案 [\\tf\\addons\\sourcemod\\configs\\core.cfg],其中:
    1.     "ServerLang"    "en"
      設置:伺服器的預設語系。
      沒必要的話,使用預設的英文([en])就好,以避免意外;而且出問題時在 SrcDS console 內用預設語言的提示訊息也比較好尋找/了解參考資訊。
    2.     "AllowClLanguageVar"        "On"
      設置: SrcMod 是否要讀取 TF2 client 的 CVar:[cl_language] 的值並使用對應的介面語系。
      這個建議使用預設的開啟([on]),這樣 SrcMod 就會依照 TF2 client 的 CVar:[cl_language] 的值(中文語系 TF2 之該值為 [tchinese])遊戲端提供中文或對應語系的支援。
      ( * 註解[13]* 註解[15] )

    接著設定 SrcMod 的保留位功能,以避免伺服器人滿了而管理員進不去的窘態。
    SrcMod 的保留位系統有些不錯的機制,建議參考 Reserved Slots 的內容,這裡只指導基本設置。
    ( * 註解[16] )
    開啟 [\\tf\\cfg\\sourcemod\\sourcemod.cfg],其中:
    1. sm_reserve_type 0
      設置:選擇運作方式。
    2. sm_reserved_slots 2
      設置:設定保留位的數量。
    3. sm_hide_slots 1
      設置:設定是否在回應伺服器狀態查詢時隱藏保留位置的數量。
      例如一個 32 人 SrcDS,在伺服器清單中會顯示該伺服器有 32 人的空間。如果你設定保留數量 2 而且啟用保留位隱藏功能,這樣伺服器清單中就會顯示該伺服器人數為 30 人。
      ( * 註解[17] )

至此為簡單的組態設置的流程結尾。
接著你就可以執行 TF2 SrcDS,看看是否能正常運作。

檢查與操作:

在 SrcDS console 中,若要確認 SrcDS 是否有載入 MMSrc 與 SrcMod:
  1. 在 SrcDS console 內輸入 [plugin_print] 以確認 SrcDS 是否載入 MMSrc。
    (輸入 SrcDSC:[find plugin_] 會列出 SrcDS 內含 [plugin_] 字串的命令。)
    (往後的 SrcDS console 指令輸入提示,我會使用 「輸入 SrcDSC:[<命令內容>], <命令說明>」 的樣式。)
  2. 確認 SrcDS 載入 MMSrc 後,輸入 SrcDSC:[meta list] 以確認 MMSrc 是否載入 SrcMod;若有異常時清單中會標記發生錯誤的插件。
    (輸入 SrcDSC:[meta] 會列出 meta 命令可用的命令選項。)
  3. 確認 MMSrc 載入 SrcMod 後,可輸入 SrcDSC:[sm plugins list] 看看 SrcMod 載入了那些插件(此時應該只有載入幾個 SrcMod 的基本內建插件);若有異常時清單中會標記發生錯誤的插件。
    (輸入 SrcDSC:[sm] 會列出 sm 命令可用的命令選項。)
在 SrcDS 上確認好 MMSrc 與 SrcMod 的載入後,伺服器端的基本架設就 OK 了。
接著來了解一下如何從 TF2 client 控制 SrcDS/SrcMod 。
一般遠端控制 SrcMod 的常用介面/方式有兩種:
  1. 在 TF2 client console 中輸入 SrcMod 提供的遠端控制用命令。
    (往後的 TF2 client console 指令輸入提示,我會使用 「輸入 TF2CC:[<命令內容>], <命令說明>」 的樣式。)
    SrcMod 的內建插件各自提供不同的遠端命令以供管理員使用( * 註解[18] ),例如輸入 TF2CC:[sm_rcon sv_alltalk "1"] 就可利用 SrcMod 修改 SrcDS 的 CVar:[sv_alltalk] 之值為 1。
    如想了解其他命令請參閱 Admin Commands,在此我不贅述。
  2. 在遊戲中開啟 SrcMod Admin 選單。
    SrcMod 內建插件 [adminmenu.smx] 提供 [sm_admin] 遠端命令供管理員開啟管理員選單。
    你可以輸入 TF2CC:[bind "=" "sm_admin"] 以把 [=] ([等於]符號)按鍵指定用來開啟選單;當然你也可以依喜好改為其他按鍵。

以上為檢查與操作的內容。

SourceMod 插件 (Plug-in) 與擴件 (Extension)

對於社群的插件或擴件等內容,你要先有個觀念:SrcMod 社群中有很多人開發/發布各種工具,但隨著時間流逝與人來人往,會有些檔案跟不上更新或缺乏維護,所以使用前最好先確認檔案的狀況。雖然論壇中插件主題的版面內會有提供基本資訊,我還是習慣先看串頭串尾以瞭解個大概。有時某些失去維護的插件會有好心人在後面發布自己改過的版本供大家使用。
另,給沒這經驗的人,論壇的主題列表頁面下方會有主題列表模式選項,你可以選擇依主題最後回應的時間排序或依主題起始時間排序。

關於 SourceMod 的 SP 檔案與 SMX 檔案:
基於 SrcMod 專案的性質,論壇上的插件多提供原始碼檔案(*.SP,為純文字檔案,在主題內附件區內按下 [Get Source] 取得),而網站還提供基本的編譯功能以讓用戶能下載由網站編譯過而可直接使用的 SrcMod 插件檔案(*.SMX,在主題內附件區內按下[Get Plugin] 取得)
例如 Console Welcome Message 這個插件的主題內下方,有個名稱 [console-welcome.sp] 的附件,其前方便有兩個下載連結供選擇。但有些插件因為網站的編譯功能無法處理,所以作者會提供原始碼等壓縮封裝檔或先行編譯過的 SMX 檔案供下載,例如 Updater
我個人是習慣下載原始碼後使用 SrcMod 內建的編譯器自行編譯(因為有時會有 API 版本差異或插件間相容性等問題)( * 註解[19] ) 一般狀況你可以直接下載 SMX 檔案來使用;只要使用過程中 SrcMod 沒通知異常且 SrcDS 運作正常就好。
有些插件會需要其他的軟體元件才能正常運行,例如 Automatic Steam Update 這個插件,主題內就有說明它需要 SteamTools 這個擴件。

一般插件主題內會標明環境需求與安裝方法,這裡講一下簡單的社群插件的安裝流程:
  1. 取得執行用插件檔案(*.SMX)
    從插件主題頁面內的附件區塊中以 [Get Plugin] 取得插件檔案,或是使用 SP 檔案自行編譯( * 註解[19] )
  2. 將檔案放置於 [\\tf\\addons\\sourcemod\\plugins] 資料夾內,這樣 SrcMod 啟動時會自動載入。( * 註解[20] )
以上就是簡單的安裝流程,複雜點的就試著對照目錄結構或參考安裝說明,後續流程視插件的說明、設計而判斷是否要安裝/編輯插件相關的檔案,例如組態或語系資源檔案。
如果要停用插件,你可以刪除 SMX 檔案,或是將 SMX 檔案移置於 [\\tf\\addons\\sourcemod\\plugins\\disabled] 資料夾內即可。

欲檢查 SrcMod 載入的插件,你可以:
  1. 輸入 SrcDSC:[sm plugins list] 取得 SrcMod 插件載入清單。
  2. 輸入 TF2CC:[sm plugins] 取得 SrcMod 插件載入清單。


SrcMod 的擴件 (Extension) 為運作層面異於 SrcMod 插件的程式元件,多以下列三種封裝發布:
  1. Windows 用的 DLL 封裝
  2. Linux 用的 SO 封裝
  3. Mac 用的 DyLib 封裝
簡單的擴件安裝方式,只要把與 OS 對應的封裝檔案置於 [\\tf\\addons\\sourcemod\\extensions] 資料夾即可,例如運作於 Windows 下的 SrcDS,就只需要 DLL 封裝的檔案。複雜點的安裝方式就如前已述的概念:對照目錄結構或參考安裝說明。

若要檢查 SrcMod 載入的擴件,你可以輸入 SrcDSC:[sm exts list] 取得擴件清單。


以上為 SourceMod 插件與擴件的簡單說明。

註解:

註解[1]
擴充/修改特定軟體之功能/特性的軟體元件,在英文中有各種稱呼的詞彙,例如 extensionadd-onplug-in 等。為在編撰中文內容時能區分出各英文詞彙的對應,往後內文中會使用如下的對應/翻譯:
  1. extension: 擴件
  2. add-on: 增件
  3. plug-in: 插件
注意!以上是僅於本文內的個人習慣之詞彙對應,並非通則。

註解[2]
本文發布時,我測試的版本為:
  1. TF2 SrcDS
    Build Label:  1845487
    Network PatchVersion: 1844935
    Protocol version: 24
  2. Metamod:Source
    Version: 1.10.0-dev
    Build ID: 857:56a79c5617d6-dev
    Plugin interface version: 15:14
    SourceHook version: 5:5
  3. SourceMod
    Version: 1.5.0-dev+3890
    SourcePawn Engine: SourcePawn 1.1, jit-x86 (build 1.5.0-dev+3890)
    SourcePawn API: v1 = 4, v2 = 4
    Build ID: 3890:fcf43c2589a2

至於為何不用 SrcMod v1.6?
因為我測試 SrcDSC:[quit] 與「以 SrcDSC:[meta unload] 命令卸載 SrcMod v1.6.0-hg4023」時發生 SrcDS 停止現象;而我有使用 「SrcDS 關閉時自動重新啟動或更新 SrcDS」 的 Windows Script,這種 SrcDS 停止現象會造成麻煩所以我就不測試 SrcMod v1.6 了。

註解[3]
SrcMod 正式版本內具有完整的多語系支援等功能實作的檔案內容,而精簡的開發快照並沒放入這些內容。所以你有需要時可以下載正式版的檔案後,依需求來比對、拷貝、編輯這些檔案來試著引用;如果只需要語系檔案,請參考本文中「簡單的組態設置」的「SourceMod 多語系檔案設置」內容,而不需下載 SrcMod 正式版本。
(為何說是試著?因為隨著改版的差異,可能會有舊設定在新系統上不相容的狀況。)

註解[4]
如果你需要 SrcMod 語系檔案(或者你對翻譯有興趣),可以到 SourceMod Translator 看看。
[廣告]:
說到翻譯,有能力的請支援一下本版置頂主題之一吧: 【TF2 官方維基】徵人-報錯專區

註解[5]
基本上,SrcDS、MMSrc、與 SrcMod 等等在處理文字檔案時主要是使用 UTF-8 格式,但這不代表所有的軟體開發者都會考量這格式的使用與相容性
這導致有些插件會在文字檔案解析上發生問題;如遇到異常時試著考量下這因素。

註解[6]: 小技巧
若你的純文字編輯程式具有 UTF-8 格式自動檢測能力,你可以在支援註解語法的檔案內以註解語法放入隨意中文字串後存為 [UTF-8 without BOM],這樣往後開啟檔案時便會自動檢測以該格式開啟。(因為純 ASCII 內容的文字檔案內不會有 UTF-8 的多位元字元而無法被檢測為 UTF-8 格式。)
例如我常在支援()斜線註解語法的檔案開頭或結尾放上:

//  TestString_TC[//繁//體//中//文//測//試//文//字//]


註解[7]
SrcMod 內建存取 SQL 資料庫系統 (MySQLSQLite) 以運作 SrcMod 帳號系統的能力。
我試過其內建的 SQLite 系統還可以拿來作為其他簡易的應用。
該功能的使用請參考 [SQL Admins (SourceMod)]。

註解[8]
[admins_simple.ini]、[admins.cfg] 這兩個檔案的差別在於:
  • [admins_simple.ini] 使用簡單的語法設置 SrcMod 帳號。
  • [admins.cfg] 使用 KeyValues (Valve Source engine 使用的一種語法/格式,在 SrcMod 中也經常被應用。) 的語法設置 SrcMod 帳號。
這兩個檔案都會被 SrcMod 的 [admin-flatfile.smx] 插件讀取。

註解[9]: SrcMod 的帳號免疫(Immunity)機制
當有兩個帳號,一個帳號使用命令控制另一方時,若命令的插件有應用 SrcMod 的免疫機制,則帳號免疫等級會被用來判斷哪邊比較高後,執行高免疫等級端的命令不執行低免疫等級端的命令(或依插件的設計而有不同動作)
另,免疫等級值上限並不為 99,此例中只是假設案例需求的上限為 99。

註解[10]: SrcMod 的帳號旗標(Flag)機制
帳號旗標機制常用以標示帳號所具有的權限;例如 SrcMod 中的帳號旗標 [c] 預設為 kick 命令類別/群組( [sm_kick] 命令便為其中之一)的使用權限,即意為,若一帳號具有 [c] 旗標則該帳號具有使用 kick 命令類別下的命令之權限。
在 SrcMod 中,一個帳號可以含有多個旗標;而 SrcMod 預設 [z] 旗標定義為 SrcMod 的全權限旗標。所以基於安全性,如非必要,在設置其他使用者帳號權限時,不要隨便給予 z 旗標
另,有些插件會利用此機制提供基於帳號旗標的功能差異。例如假設有個插件會檢測帳號的 [p] 旗標:具有該旗標的爆擊率 90%,沒有該旗標的爆擊率為系統預設值。

註解[11]
SrcMod 帳號系統還有帳號群組命令的權限旗標覆載等功能,詳情請參閱 Adding AdminsAdding GroupsOverriding Command Access
下面一段是使用於 [\\tf\\addons\\sourcemod\\configs\\admins_simple.ini] 檔案中的進階範例片段:

//  最高管理員;
    "STEAM_N:N:N000001N"    "99:z"            //    管理員A
//  高等管理員群組 (需先於 [admin_groups.cfg] 中設定好群組)
    "STEAM_N:N:N000002N"    "@HighLevelAdmin"    //    管理員B
    "STEAM_N:N:N000003N"    "@HighLevelAdmin"    //    管理員C
    "STEAM_N:N:N000004N"    "@HighLevelAdmin"    //    管理員D


註解[12]
關於 SrcMod 的多語系機制 (Multi-Lingual Translation layer,有簡寫 ML。)可參考 Translations 的內容。

註解[13]
SrcMod 語系定義檔 [\\configs\\languages.cfg] 的片段內容:

    "zho"        "TChinese"        // Chinese (Traditional)

可知 [zho] 為 TF2 client 繁體中文 ("TChinese") 對應於 SrcMod ML識別名(識別名大小寫有別!)

註解[14]
移植時,常會發生語系資源的增修刪改。預設語系資源(en:英文)會隨著改版而改變所以不用管它,麻煩的是其他語系的資源就只能靠自己修改。基本修改方式就是開啟預設語系非預設語系的同名檔案,比對內容來修改非預設語系的資源內容。
例如:
  • 英文資源檔案: [\\tf\\addons\\sourcemod\\translations\\adminhelp.phrases.txt]
  • 繁中資源檔案: [\\tf\\addons\\sourcemod\\translations\\zho\\adminhelp.phrases.txt]
這兩個檔案內的對照片段:
  •     "No description available"
        {
            "en"            "No description available"
        }
  •     "No description available"
        {
            "zho"        "無詳細的描述"
        }
語系資源除了可以如前述範例之分開放置在不同檔案的方式外,也可以放在同一個檔案內,只要各自於單行的第一個欄位標明該行的語系 ID 即可。將多語系資源置於單一檔案這種作法因為發布便利而常見於社群人員發布之具多語系功能的插件中;而 SrcMod 為了維護便利所以內建插件的語系資源採取分檔放置的方法。只要插件有完整的支援,你可以選擇自己喜歡的方式來處理。
若需要更詳細的內容請參考 Translations

註解[15]
依 Client 端語系使用對應的語系資源:也就是說在一個伺服器中,使用英文介面 TF2 client 登入的就會看到英文訊息,而使用中文介面 TF2 client 登入的就會看到中文訊息。但這有個前提:語系檔案的完整。如果有漏缺對應的中文語系資源或玩家 TF2 client 語系所對應的資源並沒有被建立/安裝在 SrcMod 內時,SrcMod 就會使用預設的語系資源回應給客戶端。
另,SrcMod 內建的基本功能插件多有支援多語系,但社群人員發布的插件不一定有支援多語系;就算有也不一定會內含中文語系資源。(所以有心的開發者會在插件主題中徵求其他語系的資源檔;當然也有些好心人即使作者沒徵求,還是會主動提供語系資源檔案)

註解[16]
該功能由 SrcMod 內建插件 [reservedslots.smx] 實作,且該插件會檢測帳號權限旗標 Flag[A] (reservation)。
如果你發現有些 CVar 在說明文件上有列出但在  [\\tf\\cfg\\sourcemod\\sourcemod.cfg] 檔案中沒有,你可以自行加入或置於其他檔案。

註解[17]
TF2 client 或 Steam client 在確認 SrcDS 滿人時,不會進行連線以減少 SrcDS 或網路上的負擔。若你的帳號擁有保留位旗標且 SrcDS 保留位未滿,想連線時就輸入 TF2CC:[connect <SvIP>] 即可。
(快捷方式: TF2CC:[conn<Tab>],<Tab>表示鍵盤上的 Tab 按鍵;當然,上、下方向鍵也行~)

註解[18]
多數 MMSrc/SrcMod 遠端控制命令名與在 SrcDS console 上使用的命令名相同,但在 SrcDS/MMSrc/SrcMod 中,遠端控制輸入SrcDS console 輸入的命令運作是有差異的(基於一些權限控制、網路機制等各種考量或因素)
例如輸入 SrcDSC:[meta] 與輸入 TF2CC:[meta],兩邊所下的同名命令所得到的回應訊息並不同。
有些社群插件的說明文件內寫的命令可能只單供 SrcDS console 或遠端控制的單一方面使用而並非兩邊通用,因此當你感覺命令運作異常時你要先考量這個概念。
另,若想遠端輸入 SrcDS console 命令,可利用 sm_rcon 命令;只是可能會發生回應訊息只會顯示於 SrcDS console 而不會顯示於 TF2 client console 等各種狀況,這要看命令的運作。

註解[19]
編譯的簡要流程:
  1. 將下載的 SP 檔案(後述以 <MyScript> 表示此檔案)置於 [\\tf\\addons\\sourcemod\\scripting] 資料夾內。
    (若你下載的是含多個檔案的壓縮封裝,也是解壓縮到該資料夾即可;除非封裝內有使用 SrcMod 的資料夾結構才需要對照位置來安置檔案)
  2. 使用 Windows Cmd,以 WCmd:[cd /d <ScriptPath>] 命令切換工作路徑至 [\\tf\\addons\\sourcemod\\scripting] 資料夾。
  3. 輸入 WCmd:[spcomp.exe <MyScript>] 後,等 spcomp 成功編譯後會取得同名的 SMX 檔案。
簡單點的,你也可以用拖拉法:把 SP 檔案拖放於 [spcome.exe];只是如此一來若有錯誤訊息你會遺漏掉,因為 CLI 介面視窗會馬上關閉。
有些插件編譯時需要其它檔案,例如 Inc (Include,純文字的原始碼檔案) 檔案,這需求通常會標明於主題內。
另,如果你對 SrcMod Script 開發有興趣的話,可以試試 Pawn Studio 這個 IDE

註解[20]
如果你不想 SrcMod 自動載入而想自己下命令(或另用 CFG 檔案)來載入,你可以用以下方式:
  1. 在 [\\tf\\addons\\sourcemod\\] 資料夾內建立一個資料夾以放置自己想另外載入的插件檔案,本例使用 [\\tf\\addons\\sourcemod\\plugins.Cat4y01\\Ann8t01] 資料夾放置  Console Welcome Message ([console-welcome.smx])
  2. 在 SrcDS console 中輸入下列這個命令來載入 [console-welcome.smx]:
    sm plugins load "../plugins.Cat4y01/Ann8t01/console-welcome.smx"
    上列命令中,因為 SrcMod 插件基本路徑是在 [\\tf\\addons\\sourcemod\\plugins] 資料夾,所以使用了 [..] (連續兩個句點符號,在路徑語法中表示[上一個目錄]) 符號。
    而目錄間的子符號,使用()斜線([/])()斜線([\\])都沒差。
另,印象中在我最後的測試,在 [\\tf\\addons\\sourcemod\\plugins] 下除了 [\\disabled] 以外的子目錄,SrcMod 也會自動搜尋並載入,所以本範例並沒演示於 [\\tf\\addons\\sourcemod\\plugins] 內的子資料夾。


板務人員:

767 筆精華,03/18 更新
一個月內新增 0
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】