LV. 31
GP 485

【心得】7 D2D Dedicated Server安裝、設定、管理、自動維護

樓主 [TW]工口宏 x29452340
有鑑於目前版上似乎沒有一個正式的伺服器開設教學文章
因此在下想說發文,一部分可以教學
一部分也可以做備份,以免以後忘記,可以再回來查詢
另外,本篇為自我的心得,也許有許多錯誤
還煩請有看到這篇文章的朋友再另行指點,在下會再行修改


下列分別為

安裝設定管理
以及本篇最主要記錄的目的 自動維護

PS:
如果有任何問題的話,歡迎提問

在下是正版魔人,如果你是X版的話
就請自行向別人詢問吧

1.安裝
準備檔案
首先你的STEAM帳號內只要有7DaysToDie

那麼在工具的部分便可以下載7 Days to Die Dedicated Server
如果有的話,請對7 Days to Die Dedicated Server按下右鍵,下載


等待下載完畢即可對下載好的伺服器軟體按右鍵>內容

對上方的 本機檔案 頁籤點 選瀏覽本機檔案


點選了以後對跳出一個資料夾視窗,此資料夾即為你的遊戲下載處,也是執行的地方

之後只要點選資料夾內的startdedicated.bat
即會跳出一個命令提示字元

待執行至最後一步的時候即可看到工作管理員內有伺服器的程式在運行

這時候你的7 Days to Die Dedicated Server算是第一步的完成了

另外補充
通常安裝位置會位於
\\steamapps\\common\\7 Days to Die Dedicated Server\\
底下
另外遊戲紀錄檔位置為
C:\\Users\\***\\AppData\\Roaming\\7DaysToDie\\
*** = 系統使用者帳號

2-1.設定
伺服器第一步已經開設完畢了
但是許多設定仍然不是們想要的狀態
例如殭屍奔跑狀態、空投時間、晝夜間距或者是掉落機率等
這些東西全部都在
\\steamapps\\common\\7 Days to Die Dedicated Server\\serverconfig.xml
可以使用記事本開啟

或者是其他的文字編輯軟體來開啟
在這裡在下使用的是Notepad++

內部設定的話
可以參考官方WIKI

就目前內部的狀態,還是稍微翻譯一些給有需求的使用者好了

  <property name="ServerPort"                 value="26900"/>                <!-- 伺服器監聽的連接埠 -->
  <property name="ServerIsPublic"             value="true"/>                <!-- 伺服器是否公開(指按下Connect To Server 是否可以在7日殺遊戲內被其他玩家搜尋到)-->
  <property name="ServerName"                 value="My Game Host"/>        <!-- 伺服器名稱 -->
  <property name="ServerPassword"             value=""/>                    <!-- 伺服器密碼,玩家 進入時必須輸入 -->
  <property name="ServerMaxPlayerCount"     value="8"/>                    <!-- 遊戲內最大玩家數量 -->
  <property name="ServerDescription"         value="A 7 Days to Die server"/> <!-- 伺服器註解 -->
這東西會在Connect To Server 頁面的右上方顯示

  <property name="ServerWebsiteURL"         value=""/>                    <!-- 你的七日殺往首頁(如果你有網頁的話) -->
這東西會在Connect To Server的右下角顯示,點選以後會連到該網頁(無意外應該是開啟STEAM UI內建的瀏覽器)

  <property name="GameWorld"                 vaNavezganelue="Navezgane"/>            <!-- 遊戲地圖 目前有Navezgane以及Random Gen -->
Navezgane為固定的地圖,而Random Gen則會隨機產生物件,但是有些固定地圖的東西則會因為種子目前運算不出,而無法產生(例如某些特別的建築)
  <property name="GameName"                 value="My Game"/>            <!-- 遊戲名稱 這同時也控制你的地圖隨機種子碼以及儲存的資料夾名稱 -->
  <property name="GameDifficulty"             value="2"/>                  <!-- 遊戲難度0~5,5為最難 -->
  <property name="GameMode"                    value="GameModeSurvivalMP"/>    <!-- 遊戲模式,分別為生存多人,生存單人,只有多人才有土地保護(領地石) -->
  <property name="ZombiesRun"                value="0" />                <!-- 僵屍的奔跑模式,預設為0:白天步行晚上跑。還有1:永不奔跑,2:白天晚上都是奔跑狀態 -->
  <property name="BuildCreate"                value="false" />                <!-- 建造者(作弊)模式開或關 -->
這在下沒用過,還煩請用過的玩家給予指導
  <property name="DayNightLength"            value="50" />                <!-- 遊戲一天對比現實世界的時間 預設值為遊戲一天,現實世界50分 -->
  <property name="DayLightLength"            value="18" />                <!-- 遊戲內白天的時間(遊戲小時計算)-->
  <property name="PlayerKillingMode"        value="3" />                <!-- 玩家可以攻擊其他玩家的模式 0:不能攻擊任何玩家,1:僅限攻擊盟友 ,2:可以攻擊非盟友的陌生人,3:不管盟友或者是陌生人皆可以攻擊-->
盟友部分可以在遊戲內按下 I 來確認

  <property name="PersistentPlayerProfiles"    value="false" />            <!--遊戲玩家檔案, -->
  <property name="PlayerSafeZoneLevel"        value="5" />                <!--安全區域,如果在依定的區域內少於這個數量的玩家,就不會有殭屍產生 -->
區域的大小就要在請問其他玩家了
  <property name="PlayerSafeZoneHours"        value="5" />                <!-- Hours in world time this safe zone exists -->
這部分不是很理解,待其他玩家補充
  <property name="ControlPanelEnabled"         value="false"/>                <!-- 是否開放給ControlPanel連入管理(遊戲中按F1) -->
  <property name="ControlPanelPort"         value="8080"/>                <!-- ControlPanel 管理連入的埠號-->
  <property name="ControlPanelPassword"     value="CHANGEME"/>            <!-- ControlPanel 連入密碼-->
基本上是不開放ControlPanel的,必較怕其他玩家也會連入作修改
  <property name="TelnetEnabled"             value="true"/>                <!-- 是否可以開啟Telnet進入管理 -->
  <property name="TelnetPort"                 value="8081"/>                <!-- Telnet 連入埠-->
  <property name="TelnetPassword"             value=""/>            <!-- Telnet 連入密碼-->
個人比較會用Telnet來做管理,自動化管理部分也是使用Telnet
  <property name="AdminFileName"            value="serveradmin.xml"/>    <!-- 遊戲伺服器OP檔案 -->
  <property name="DropOnDeath"                value="0" />                <!-- 死亡後物品何去何從 0:全部掉落(在原地跑出一個包包可以撿回),1:只會掉落工具欄的東西,包包內物資還在,2:只會掉落包包內的東西,工具欄的東西重生後還在手上,3:全部的東西都刪除,連包包都沒有 -->
  <property name="DropOnQuit"                value="0" />                <!-- 玩家下線以後,身上的東西 0:沒有(玩家登出後物品不會在地上產生一個包包,1:全部的東西在地上變成一個包包,上線後要再撿回,2:只有道具欄的東西會變成包包,3:背包內的東西會另外變成包包 -->
  <property name="EnemySenseMemory"            value="60" />                <!-- 當殭屍發現玩家,而玩家又隱藏起來後殭屍搜尋玩家的時間 -->
  <property name="EnemySpawnMode"            value="3" />                <!-- 殭屍出現機率0:不出現殭屍, 0 = Disabled 0%, 1 = Very Low 50%, 2 = Low 75%, 3 = Medium 100%, 4 = High 125%, 5 = Very High 150% -->
  <property name="EnemyDifficulty"            value="0" />                <!-- 0 = Normal, 1 = Feral -->
  <property name="BlockDurabilityModifier"     value="100" />                 <!-- 方塊的耐久度 -->
這部分要請理解的玩家再行補充了
  <property name="LootAbundance"             value="100" />                 <!-- 戰利品的出現機率 -->
  <property name="LootRespawnDays"             value="30" />                 <!-- 可搜刮的物資重製天數 -->
  <property name="LandClaimSize"                         value="7"/>        <!-- 領地石的保護範圍大小 -->
  <property name="LandClaimDeadZone"                     value="30"/>    <!-- 除非你是盟友 ,不然則要有領地石與領地石的間隔範圍-->
  <property name="LandClaimExpiryTime"                     value="3"/>        <!-- 玩家下線後領地可以受到多久的保護時間 -->
這個不確定是現實時間還是遊戲時間的天數
  <property name="LandClaimDecayMode"                     value="0"/>        <!-- 設定領地石的保護程度0:線性,1:指數,2:完全保護 -->
這部分也請理解的玩家再另行講解
  <property name="LandClaimOnlineDurabilityModifier"     value="4"/>        <!-- How much protected claim area block hardness is increased when a player is online. 0 means infinite (no damage will ever be taken). Default is 32x -->
  <property name="LandClaimOfflineDurabilityModifier"     value="4"/>        <!-- How much protected claim area block hardness is increased when a player is offline. 0 means infinite (no damage will ever be taken). Default is 32x -->
  <property name="AirDropFrequency"                        value="72"/>    <!-- 空投時間(遊戲內的小時數),如果射成0的話代表永遠沒有空投 -->
  <property name="AirDropMarker"                        value="false"/>    <!-- 是否增加空投標記在玩家的小地圖上-->
  <property name="MaxSpawnedZombies"                    value="60"/>    <!-- 最大的殭屍生成數量,遊戲官方是建議80以內,超過80的話會對伺服器造成負擔(就是要更好的電腦啦)-->
  <property name="MaxSpawnedAnimals"                    value="50"/>  <!-- 最大的動物生成數量 -->
  <property name="EACEnabled"                            value="true"/>  <!-- 是否開啟EAC反作弊程式 -->
  <!--property name="SaveGameFolder"      value="absolute path" /-->    <!-- 記錄檔儲存位置 -->

2-2.管理
偶然間看到某篇文章說關閉伺服器的方法是
使用工作管理員直接結束7DaysToDieServer.exe
這方法實在不是很建議一般管理者這樣使用
因為地圖在運行的時候,突然遭到結束
可能會造成破圖(地圖破碎)、不正常的玩家資訊
甚至整張地圖都壞掉,無法登入的情況發生

至於關閉伺服器的方法,以下為Win10的安裝過程
Win7以上應該都是差不多的

首先請先至控制台>程式和功能

開啟或關閉Windows功能


安裝Telnet用戶端


之後會請你重啟
重啟後變可以直接使用命令提示字元輸入telnet
表示已經正確安裝好telnet用戶端了


既然裝好了Telnet用戶端,那就來實際連入7 Days to Die Dedicated Server吧
請先確認工作管理員內是否有7 Days to Die Dedicated Server在運行

如果有的話,請使用命令提示字元
輸入telnet,之後便會看到"歡迎使用 Microsoft Telnet 用戶端"的字眼出現
當出現後再輸入
open 127.0.0.1 8081

便可以看到目前的7 Days to Die Dedicated Server後台


這時候可以下個help,來觀看伺服器目前有哪些指令可以使用
玲螂滿目的,事實上在下也沒有很理解所有的指令用法
不過還是先把在下常用的指令翻譯出來

*** List of Help Topics ***
None yet

*** List of Commands ***
admin => Manage user permission levels
aiddebug => Toggles AIDirector debug output.
audio => Watch audio stats
ban => Manage ban entries
buff => Applies a buff to the local player
buffplayer => Apply a buff to a player
chunkcache cc => 顯示所有載入的快取
commandpermission cp => Manage command permission levels
creativemenu cm => enables/disables the creativemenu
DeathScreen => Display DeathScreen
debuff => Removes a buff from the local player
debuffplayer => Remove a buff from a player
debugmenu dm => enables/disables the debugmenu
debugweather => Dumps internal weather state to the console.
enablescope es => toggle debug scope
exhausted => Makes the player exhausted.
exportitemicons => Exports all ItemIcons
getgamepref gg => Gets game preferences
getgamestat ggs => Gets game stats
gettime gt => Get the current game time
givequest => usage: givequest questname
giveself => usage: give itemName qualityLevel (default quality is 600)
giveselfskillxp => usage: giveselfskillxp Mining Tools 10000
giveselfxp => usage: giveselfxp 10000
help => Help on console and specific commands
kick => Kicks user with optional reason. "kick playername reason"
kickall => Kicks all users with optional reason. "kickall reason"
kill => 殺死玩家
killall => Kill all players
lgo listgameobjects => List all active game objects
lights => Debug views to optimize lights
listents le => lists all entities
listplayerids lpi => 列出玩家ID
listplayers lp => 列出玩家資訊(血量,體力,BUFF等)
listthreads lt => lists all threads
loggamestate lgs => Log the current state of the game
loglevel => Telnet/Web only: Select which types of log messages are shown
mem => Prints memory information and calls garbage collector
memcl => Prints memory information on client and calls garbage collector
pplist => Lists all PersistentPlayer data
removequest => usage: removequest questname
repairchunkdensity rcd => check and optionally fix densities of a chunk
saveworld sa => Saves the world manually.
say => Sends a message to all connected clients
setgamepref sg => sets a game pref
setgamestat sgs => sets a game stat
settempunit stu => Set the current temperature units.
settime st => Set the current game time
showalbedo albedo => enables/disables display of albedo in gBuffer
showchunkdata sc => shows some date of the current chunk
showClouds => Artist command to show one layer of clouds.
shownexthordetime => Displays the wandering horde time
shownormals norms => enables/disables display of normal maps in gBuffer
showspecular spec => enables/disables display of specular values in gBuffer
shutdown => 關閉伺服器
sounddebug => Toggles SoundManager debug output.
spawnairdrop => Spawns an air drop
spawnentity se => spawns an entity
spawnscouts => Spawns zombie scouts
SpawnScreen => Display SpawnScreen
spawnsupplycrate => Spawns a supply crate where the player is
spawnwanderinghorde => Spawns a wandering horde of zombies
spectrum => Force a particular lighting spectrum.
starve => Makes the player starve.
staticmap => Switches Navazgane map between static and dynamic
switchview sv => Switch between fpv and tpv
SystemInfo => List SystemInfo
teleport tp => Teleport the local player
teleportplayer tele =>傳送玩家到指定的座標
thirsty => Makes the player thirsty.
traderarea => ...
updatelighton => Commands for UpdateLightOnAllMaterials and UpdateLightOnPlayers
version => Get the currently running version of the game and loaded mods
water => Control water settings
weather => Control weather settings
weathersurvival => Enables/disables weather survival
whitelist => Manage whitelist entries

既然知道如何關閉伺服器
那就來下個關閉伺服器的指令吧
shutdown



3.自動維護
7 Days to Die Dedicated Server常常會發生這種問題
卡在執行序內,記憶體沒有波動
Telnet進入後無法下任何指令(應該說下了不理你)
看了資源監視器後,才會發現原來是卡在Thread上
個人對程式部分不是很理解,就在下淺薄的知識來理解,可能是執行序再跑久了以後發生了錯誤
就卡在記憶裡體面裝死,而沒有釋放掉記憶體
(這部分還麻煩對程式有研究的玩家再行幫在下解惑)

總而言之,自動維護部分要做的,就是自動關閉伺服器以及自動重啟伺服器
這兩件事情
首先要自動重啟伺服器
使用目前的startdedicated.bat是無解的
它會執行兩次7 Days to Die Dedicated Server
造成執行序卡兩個伺服器

所以我們需要一個判定執行序內是否有7 Days to Die Dedicated Server的Script
網路上搜尋後找到了
這篇文章
上方有個BAT的撰寫法,可以使用

@echo off
tasklist /FI "IMAGENAME eq 7DaysToDie.exe" | findstr "7DaysToDie.exe" >nul
if %ERRORLEVEL% == 1 goto rebootserver
TIMEOUT 25
tasklist /FI "IMAGENAME eq 7DaysToDie.exe" | findstr "7DaysToDie.exe" >nul
if %ERRORLEVEL% == 1 goto rebootserver
goto eof
:rebootserver
call "S:\\7d-servers\\7 Days to Die Dedicated Server\\startdedicated.bat"
:eof
exit


首先開啟記事本並且將上方的語法全部COPY下來貼到記事本上
下方的"S:\\7d-servers\\7 Days to Die Dedicated Server\\startdedicated.bat"
這串修改為你的startdedicated.bat位置


@echo off
tasklist /FI "IMAGENAME eq 7DaysToDieServer.exe" | findstr "C:\\Program Files (x86)\\Steam\\steamapps\\common\\7 Days to Die Dedicated Server\\7DaysToDieServer.exe" >nul
if %ERRORLEVEL% == 1 goto rebootserver
TIMEOUT 25
tasklist /FI "IMAGENAME eq 7DaysToDieServer.exe" | findstr "C:\\Program Files (x86)\\Steam\\steamapps\\common\\7 Days to Die Dedicated Server\\7DaysToDieServer.exe" >nul
if %ERRORLEVEL% == 1 goto rebootserver
goto eof
:rebootserver
call "C:\\Program Files (x86)\\Steam\\steamapps\\common\\7 Days to Die Dedicated Server\\startdedicated.bat"
:eof
exit


設定好後將此文件另存檔為Modifiy7D2DServerRun.bat先放著備用
可以先點兩下該檔案,確認是否有跑出黑視窗
如果有的話就表示OK,如果是跑出記事本的話,請確認你的附檔名為BAT檔


準備好啟動的腳本後,接下來要準備讓伺服器關閉的腳本
http://blog.csdn.net/wonsoft/article/details/5196960
我是參考這篇文章作的修改
可以直接複製以下給予的腳本並且貼到記事本上
然後另存檔案為Kill7D2DServerRun.bat

@echo off
echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs
echo WScript.Sleep 300 >>telnet_tmp.vbs
echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 300 >>telnet_tmp.vbs
echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 300 >>telnet_tmp.vbs
echo sh.SendKeys "shutdown{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 300 >>telnet_tmp.vbs
echo sh.SendKeys "exit{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 300 >>telnet_tmp.vbs
echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs
start telnet localhost 8081
cscript //nologo telnet_tmp.vbs
del telnet_tmp.vbs
exit


可以先點兩下,確認會把執行序內的7DaysToDieServer.exe給登出
如果還是跑出記事本的話,請再次確認你的附檔名為BAT檔

目前我們有兩個BAT檔了

但是這只是第一步,因為在windows的工作排成器裡面,無法直接使用這兩個BAT檔
所以我們還需要另外一個BAT檔來另外開啟這兩個檔案
分別為Run.bat以及Kill.bat

Run.bat,請自行修改紅色部分為你的Modifiy7D2DServerRun.bat位置

cd "C:\\Program Files (x86)\\Steam\\steamapps\\common\\7 Days to Die Dedicated Server"
Modifiy7D2DServerRun.bat


Kill.bat,請自行修改紅色部分為你的 Kill7D2DServerRun.bat位置

cd "C:\\Program Files (x86)\\Steam\\steamapps\\common\\7 Days to Die Dedicated Server"
Kill7D2DServerRun.bat


所以現在我們有了4個bat檔,

之後就使用工作排成器將Kill.bat以及Run.bat在固定時間執行即可


PS:工作排成器的叫出方法
首先進入控制台
然後可以找到一個 系統管理工具


點下去後會另外開啟一個資料夾

資料夾內部就有一個工作排成器的連結,點兩下即可以叫出工作排程器



大致上開設伺服器就是這樣的流程
如果有任何問題,在下可以解決的,歡迎隨時寄信給在下
或者於下方回覆(如果我可以解決的話....)

PS:本文章同時發表於在下的巴哈小屋以及巴哈姆特七日殺專版



板務人員:

68 筆精華,07/29 更新
一個月內新增 0
歡迎加入共同維護。


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

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