KeepWorlds

Valheim 難度與伺服器設定:英靈神殿專用伺服器的世界修正實測

在《英靈神殿》Valheim 專用伺服器上實測世界修正:每個預設與 -modifier 實際寫進世界的數值、-setkey 參數的正確寫法,以及死亡懲罰和里程碑(成就)會被停用的條件。

建立《英靈神殿》(Valheim)世界時選的難度與規則,也就是戰鬥、死亡懲罰、資源、突襲、傳送門和幾個勾選框,遊戲裡統稱為世界修正。但專用伺服器沒有這個選單,只能用啟動參數來指定。多數教學把那幾個參數列出來就結束了。

我們自己在營運英靈神殿專用伺服器,所以實測了每個參數到底往世界裡寫了什麼:在 1.0.16 的專用伺服器上跑了幾十種組合,再到 1.0.17 重新確認,每一輪都把世界檔讀回來看;檔案回答不了的地方,就去讀遊戲程式碼。最常讓人意外的結果有四個:

  • 世界修正存在世界檔裡。把啟動參數拿掉,什麼都不會變。
  • -modifier 不是取代既有的值,而是疊加上去。
  • -setkey 的數字必須和鍵名放在同一個參數裡,否則數字會被默默丟掉。
  • 只要用了一項遊戲選單裡沒有的設定,這個世界的里程碑(成就)就會被停用。

世界修正存在哪裡

存在世界的中繼資料檔,也就是放世界本體的 .db 旁邊那個 .fwl(1.0 的存檔格式是 .fwl2 與 .db2),以一串鍵的形式記錄。.db 裡沒有這些資料。伺服器每次載入世界,都會先清掉所有世界修正的鍵,再從這份清單重新讀進來,所以設定只存在世界檔這一個地方。

這帶來幾個實際影響:

  • 拿掉啟動參數,設定不會變。 下次啟動照樣沿用世界裡已經有的值。
  • 還原備份,世界修正也跟著回去。 回到上週二的備份,難度也回到上週二的狀態。
  • 搬進來的世界會帶著自己的設定。 把單人世界搬上伺服器,或從別家伺服器租用服務搬過來,世界會帶著建立時的世界修正一起來。
  • 檔案要到下次存檔才更新。 伺服器每 30 分鐘、以及正常關機時會存一次世界。改完參數重啟後馬上打開檔案,看到的還是舊清單;但遊戲裡新設定其實已經生效了。

四個啟動參數

參數作用
-preset <名稱>先清掉所有世界修正,再套用預設:normal、casual、easy、hard、hardcore、immersive、hammer
-modifier <類別> <等級>只改 combat、deathpenalty、resources、raids、portals 其中一項,其餘不動
-setkey <鍵>原樣加入一個鍵,選單裡沒有的鍵也收
-resetmodifiers清掉所有世界修正。伺服器附帶的說明書裡沒寫,但可以用

參數照你寫的順序從左到右執行,名稱和等級不分大小寫。預設或等級名稱打錯,伺服器也不會停下來:它只會記一行 Could not parse 開頭的紀錄,然後用世界原本的世界修正照常啟動。

為什麼 -modifier 清不掉先前的設定

-modifier 只會新增或覆寫你所選等級用到的鍵,那個等級沒用到的鍵會原封不動留著。例如一個用「困難」預設開的世界,後來改成 -modifier combat veryeasy,「困難」寫下的 enemyleveluprate 120 還會留在世界裡——其他都是非常簡單,偏偏帶星的敵人特別多。因為「非常簡單」本來就沒有這個鍵,也就沒有東西去覆寫它。

解法是每次都從空清單開始。用下面這個順序,不管重啟幾次結果都一樣:

./valheim_server.x86_64 -nographics -batchmode -name "Our world" -world "Dedicated" -password "<密碼>" \
  -resetmodifiers -preset hard -modifier deathpenalty casual -setkey nomap

-resetmodifiers 放最前面,接著是預設或個別的 -modifier,最後才是 -setkey。-preset 本身就會清空一切,寫在它前面的設定都會不見。

每個預設實際寫入的值

在新世界上實測的結果,數字是相對遊戲標準值的百分比。每個預設另外還會留一筆 preset <名稱> 的紀錄用項目,後面講到的里程碑判定會略過它。

預設寫入的鍵
普通無(全部清空)
休閒playerdamage 125、enemydamage 50、enemyspeedsize 90、deathkeepequip、skillreductionrate 15、resourcerate 150、eventrate 0、passivemobs、teleportall、playerevents
簡單playerdamage 110、enemydamage 75、enemyspeedsize 95、eventrate 150
困難playerdamage 85、enemydamage 150、enemyspeedsize 110、enemyleveluprate 120、eventrate 60
硬派playerdamage 70、enemydamage 200、enemyspeedsize 120、enemyleveluprate 140、eventrate 60、deathdeleteitems、deathskillsreset、nomap、nobossportals
沉浸式nomap、noportals、fire
建築鎚模式nobuildcost、passivemobs、eventrate 0

「休閒」是戰鬥非常簡單,加上休閒的死亡懲罰、資源變多、沒有突襲、被動敵人、傳送門物品與基於玩家的突襲;「硬派」是戰鬥非常困難,加上硬派的死亡懲罰、無地圖,以及首領還活著時不能用傳送門。

每個等級實際寫入的值

戰鬥——playerdamage 是你造成的傷害,enemydamage 是你受到的傷害,enemyspeedsize 是敵人的體型與速度,enemyleveluprate 是帶星敵人出現的頻率。

-modifier combatplayerdamageenemydamageenemyspeedsizeenemyleveluprate
veryeasy(非常簡單)1255090—
easy(簡單)1107595—
normal(普通)————
hard(困難)85150110120
veryhard(非常困難)70200120140

死亡懲罰——skillreductionrate 調的是死亡時失去多少技能。

-modifier deathpenalty鍵死亡時
casual(休閒)deathkeepequip、skillreductionrate 15身上裝備留著,其餘掉在原地;技能只掉一點
veryeasy(非常簡單)skillreductionrate 15全部掉在死亡地點;技能只掉一點
easy(簡單)skillreductionrate 50全部掉落;技能掉平常的一半
normal(普通)無全部掉落,可以回去撿
hard(困難)deathdeleteunequipped、skillreductionrate 150裝備中的物品掉在原地,其餘背包內容直接刪除;技能掉得更多
hardcore(硬派)deathdeleteitems、deathskillsreset身上所有東西刪除,所有技能歸零

資源掉落率——只有一個鍵 resourcerate:muchless 50、less 75、more 150、muchmore 200、most 300。

突襲頻率——只有一個鍵 eventrate,而且方向是反的:它拉長的是兩次突襲之間的間隔,所以數字越大,突襲越少。none 0(沒有突襲)、muchless 200、less 150、more 60、muchmore 30。

傳送門——casual 寫入 teleportall(包含礦石與金屬,所有物品都能通過),hard 寫入 nobossportals(首領還活著時不能用),veryhard 寫入 noportals。

選單裡的五個勾選框沒有 -modifier 的寫法,要用 -setkey 指定:nobuildcost(無建造費用)、passivemobs(被動敵人)、playerevents(基於玩家的突襲)、nomap(無地圖)、fire(火災)。

選單裡沒有的設定

-setkey 收的鍵比選單多。下面這些鍵不在遊戲的世界修正畫面裡,但遊戲程式碼會讀取,專用伺服器上照樣生效:

鍵效果
nocraftcost製作不需要材料
noworkbench不靠近工作台也能建造
allpiecesunlocked所有建築物一開始就能用
allrecipesunlocked所有製作配方一開始就能用
dungeonbuild可以在地城等室內放建築物
nobuildingfall雨、雪、灰燼與岩漿不再損壞建築

deathkeepinventory、nopseudodrops、noheavysnow、allheavysnow、worldlevellockedtools 也是遊戲會讀的鍵,實際效果我們還沒測。

再來是倍率。全部以百分比指定,100 是遊戲預設值,而且數字要和鍵放在同一個參數裡:-setkey "carryweightrate 200" 就是負重上限加倍。

鍵調整的是
skillgainrate技能升級速度
skillreductionrate死亡時失去的技能
staminarate所有動作的體力消耗(0 = 不消耗)
movestaminarate跑、跳、游泳額外的體力消耗
staminaregenrate體力恢復速度
eitrrate施法消耗的巨蛇之毒(Eitr)
durabilityrate武器、工具、護甲的耐久耗損速度
foodrate食物效果消退的速度(越高越快)
adrenalinerate腎上腺素累積的速度
carryweightrate負重上限

戰鬥的鍵也能用同樣的寫法填任意百分比,例如 -setkey "playerdamage 150"。

這一節的設定全部都會停用該世界的里程碑,選單上任何等級都沒有的戰鬥數值也一樣。詳見下文。

為什麼 -setkey 看起來沒有生效

數字被當成另一個參數了。 -setkey carryweightrate 200 其實是兩個參數:伺服器存下的是沒有數字的 carryweightrate(等於 100%),200 則被當成多出來的參數。鍵和數字一定要是同一個參數,請用引號括起來:-setkey "carryweightrate 200"。也要留意那種把一整串變數照空白切開來組啟動指令的啟動器——有些面板和容器映像就是這樣做的,會把你用引號括好的那一對又切成兩個。

打錯字也照收。 -setkey 不檢查名稱,-setkey nobuildcosts 會照你打的原樣存進世界,然後什麼效果都沒有。

它沒辦法刪除。 下次啟動把某個 -setkey 拿掉,設定也不會關掉,因為那個鍵早就存在世界裡了。從 -resetmodifiers 開始,再把要留的重新寫一遍。

你太早去看檔案了。 新的鍵在世界載入的那一刻就在遊戲裡生效,但要到下次存檔才會寫進 .fwl。

租用的伺服器不必自己拼這一行

在 KeepWorlds,世界修正是會員中心裡的一張表單:選一個預設,或選「自訂修正」逐項設定難度五項、規則和倍率。會員中心會照上面的順序寫參數、每次都從空清單開始,倍率也一律當成一個參數傳。預設選項是保留世界原有設定,所以搬進來的世界、或你之前就設好的世界,會保留原本的世界修正。

哪些設定會停用里程碑(成就)

遊戲選單裡選得到的設定——各個預設、五條滑桿的各個等級、五個勾選框——本身不會停用里程碑;其他的都會。

遊戲會把世界裡的每一個世界修正鍵,拿去和選單能產生的值逐一比對。只要有一個鍵不在範圍內,這個世界就會被標記,在裡面玩的每個人都會在里程碑畫面看到這句話:

由於使用作弊世界修改器,此世界的里程碑進度已永久停用。

會觸發的包括:「選單裡沒有的設定」那一節的所有鍵;所有倍率鍵——就算寫的是 100 也算——除非數值剛好是選單某個等級會寫的值(例如 skillreductionrate 50);以及任何等級都沒用到的戰鬥數值(例如 playerdamage 150)。專用伺服器上也一樣:玩家連線時,伺服器會把世界的鍵送過去,玩家這端的遊戲做同一套判定。這是我們在 1.0.16 的遊戲程式碼裡讀到的,1.0.17 也確認沒有改。提示寫的是「永久」;判定讀的是世界當下的鍵,所以用 -resetmodifiers 清掉之後也許會解除,但我們沒有在遊戲裡驗證過,請當作永久處理。

Iron Gate 的 Valheim 1.0 FAQ 另外提到,選單裡的部分世界修正也會擋住某些里程碑,舉的例子是建築鎚模式,並把它算作「暫時作弊」。我們在程式碼裡找不到對應的處理,保險起見,就當建築鎚模式也會擋。

和難度掛鉤的里程碑,只看戰鬥這一項來計算進度;死亡懲罰、資源、突襲、傳送門都不影響。

備份救不回來的,只有死亡懲罰

英靈神殿的角色存在每位玩家自己的電腦上,不在伺服器上。伺服器備份裡的是世界:建築、箱子、地圖和世界修正,不包含任何人的背包或技能。

所以困難和硬派這兩種死亡懲罰,作用在伺服器備份碰不到的地方。困難時,死掉的玩家會失去背包裡所有沒裝備的東西;硬派時,身上所有東西都會被刪掉,技能全部歸零。事後就算把世界回檔,回去的也只有世界,丟掉的裝備不會回來。

這兩種請當成大家一起做的決定,在開啟之前就先告訴所有人,而不是等第一個人死了才說。

已經在玩的世界也能改世界修正

隨時都能改:停下伺服器、改參數、再啟動。新的世界修正會在世界載入時套用,之後就存進世界裡。已經在這個世界玩的人角色不受影響,新的戰鬥、倍率和規則從那次啟動開始套用到他們身上。

如果你本來就打算把參數留在啟動指令裡,那就留下從 -resetmodifiers 開始的完整清單。這樣啟動指令本身就是這個世界設定最準確的紀錄,改一個字就只改一項設定。

常見問題

Valheim 專用伺服器要怎麼調整難度?

在伺服器的啟動指令後面加上啟動參數:七種預設之一用 -preset,戰鬥、死亡懲罰、資源、突襲、傳送門用 -modifier <類別> <等級>,勾選框和其他設定用 -setkey。開頭先放 -resetmodifiers,讓結果不受世界原本設定影響,然後重啟伺服器。

伺服器重啟後世界修正會被重置嗎?

不會。世界修正存在世界檔裡、跟著世界一起載入,所以就算重啟時不帶參數也會保留。要改就得傳新的參數;要清掉就用 -resetmodifiers 或 -preset normal。

為什麼 -setkey 後面的數字沒有生效?

因為鍵和數字被當成兩個參數傳了。請用引號把它們括成一個:-setkey "carryweightrate 200"。寫成 -setkey carryweightrate 200 的話,伺服器存下的是沒有數字的鍵,也就是預設的 100%。

世界修正會被一起備份嗎?

會。世界修正是世界檔的一部分,所以備份裡帶著當時的世界修正,還原時會一起回來。玩家角色不在伺服器備份裡,被嚴苛的死亡懲罰拿走的東西也一樣救不回來。

交給我們處理

上面每一項設定,都是要把順序、引號和拼字全部寫對的啟動參數;而世界還會默默留著最後一次收到的值。

在 KeepWorlds 的英靈神殿 Valheim 伺服器租用上,同樣這些設定是一張表單。儲存困難或硬派死亡懲罰時,會先請房主確認已經告知其他玩家;就算實驗出了差錯,也有備份和還原可以把世界救回來。

會員中心裡的世界修正,可以選預設,也可以逐項設定

其他語言版本

不想自己維護?

選好遊戲與方案就能開伺服器,整機獨享,備份、遊戲更新與期限提醒都由我們盯著。

查看方案