控制台/饑荒聯機版中的命令

出自Don't Starve Wiki
跳至導覽 跳至搜尋

命令控制台<span style="font-desweight:nopermale

 Windows, Mac: <Documents>\Klei\DoNotStarveTogether\client.ini

Linux:         ~/.klei/DoNotStarve/client.ini 

找到 settings.ini 然後用記事本打開。找到 section 部分,並確保在下面有ENABLECONSOLE = true。如果它它被設置為 false ,將它改為 true 並保存。然後在遊戲中打開控制台,英文鍵盤下默認按 "~" 鍵。這可以隨時在控制菜單中修改。

本地命令模式

註:   * 你在重新加載世界後必須重新輸入每一個命令。

  • Lua 支持可變數量參數的函數,例如,你只想生成一個野牛的預設,你可以不填 "amount" 參數:"c_spawn('beefalo')"。
  • 如果你不是主機(或者它是一個專用伺服器,你是這個伺服器的管理員),大部分命令需要遠程執行。在控制台中按 Ctrl 來切換遠程命令模式。一小部分命令(例如顯示地圖)仍然可以在本地模式下完成。
    遠程命令模式

許多饑荒命令 仍然在DST(多人版饑荒)中可用,因此你仍然可以閱讀它。

黑色下劃線字體為需要加入數值或實例以運行的部分,如:

c_spawn("生物or實體",數量)

簡單命令

  • 生成實例
c_spawn("prefab",amount)

c_spawn("生物or實體or物品",數量)

利用 c_spawn("生物or實體or物品",數量) 命令,在鼠標所指處生成一定數量的指定預設。

  • 獲得物品
c_give("prefab",amount)

c_give("物品",數量)

在你的物品欄中生成一定數量被指定的"預設"。只適用於可以被儲存在物品欄的背包 和物品 。

注意,如果你在「prefab」處填入生物或實體,他們將會生成在鼠標所在的地方,這使得上一個命令變得用處不大(除非你要讓物品放在地上而不是放在背包里)

  • 腳本(未測試)
c_doscenario(scenario)

c_doscenario(項目)

應用一個選擇的項目(腳本)並執行它。

  • 生命值
c_sethea​lth(percent)

c_sethea​lth(-1到1)

用百分比設置你的生命值。註:使用分數 0.90 = 90%

你同樣可以設置比1大的數字,但是你的血量不會超過上限

  • 理智值
c_setsanit​y(percent)

c_setsanit​y(-1到1)

用百分比設置你的理智值。註:使用分數 0.90 = 90%

你同樣可以設置比1大的數字,但是你的理智不會超過上限

  • 飢餓值
c_sethunger(pe​rcent)

c_sethunger(-1到1)

用百分比設置你的飢餓值。註:使用分數 0.90 = 90%

你同樣可以設置比1大的數字,但是你的飢餓值不會超過上限

  • 濕度
c_setmoisture(pe​rcent)

c_setmoisture(-1到1)

用百分比設置你的濕度。註:使用分數 0.90 = 90%

你同樣可以設置比1大的數字,但是你的濕度不會超過上限

  • 溫度
c_settemperature(degrees)

c_settemperature(-20到85)

設置你的溫度。

玩家溫度的範圍是-20到85,你同樣可以設置比-20小或比85大的數字,但是你的溫度不會超過上限

  • 上帝模式
c_godmode() 

c_godmode(true or false,開啟或關閉)(可以為空,為空時默認為切換另一狀態)

玩家的理智值(實測有誤)、[brother


上帝模式不是無敵的,食用減少精神值的食物仍會扣除對應精神,而且濕度仍會上升下降

  • 超級上帝模式
c_supergodmode()

c_supergodmode(true or false,開啟或關閉)(可以為空,為空時默認為切換另一狀態)

和上帝模式一樣但會將你的各項統計數據設置為滿,即使你將它關閉。與c_godmode()相似,,它也會復活你(通過 c_supergodmode() 復活後不會將你置於上帝模式)。再次使用命令停用上帝模式。 使用超級上帝模式同樣會將你的濕度清零並使你的溫度變為25,在月島時使用超級上帝模式會將理智值加滿而不是清空

  • 設置額外的移動速度
c_speedmult(multiplier)

c_speedmult(0+)

標準額外的移動速度為 1。設置為 2 使你以兩倍的速度移動,設置為 20 可以讓你輕鬆地穿過牆和 "越過 " 水。

移速可以設置為負,但是實際效果為數值的絕對值,而非倒着走


這兒有其他一些命令,但是它們很難使用而且用處不大。

玩家命令

註:如果你不是管理員的客戶端發送遠程命令,那麼大多數命令將不會有效(按 Ctrl 鍵切換控制台遠程命令模式)。

  • 動作預測
ThePlayer:EnableMovementPrediction(true)

ThePlayer:EnableMovementPrediction(true or false,開啟或關閉)(可以為空,為空時默認為切換另一狀態)

默認情況下為開啟狀態,將  true 改為  false  可以關閉動作預測,關閉動作預測通常對戰鬥有一些幫助。該命令只有客戶端執行才有效,主機或伺服器執行將不會有效。(必須在控制台的本地模式下執行該命令才有效,也就是必須關閉控制台的遠程命令模式

譯者註:動作預測也可以直接在遊戲設置中關閉,設置 --> 延遲補償Lag Compensation),將其修改為 None)就可以關閉動作預測。

  • 創造模式
ThePlayer.components.builder:GiveAllRecipes()

ThePlayer.components.builder:GiveAllRecipes(true or false,開啟或關閉)(可以為空,為空時默認為切換另一狀態)

你可以合成任何東西。

  • 生命值上限
​ThePlayer.components.health:SetMaxHealth(value)

ThePlayer.components.health:SetMaxHealth(數值)

改變你的角色生命 值上限

  • 理智值上限
ThePlayer.components.sanity:SetMax(value)

ThePlayer.components.sanity:SetMax(數值)

改變你的角色 的理智 值上限

  • 飢餓值上限
ThePlayer.components.hunger:SetMax(value)

ThePlayer.components.hunger:SetMax(數值)

改變你的角色 的飢餓 值上限

  • 暫停飢餓
ThePlayer.components.hunger:Pause(true)

ThePlayer.components.hunger:Pause(true or false,開啟或關閉)(可以為空,為空時默認為切換另一狀態)

你的角色 不再降低飢餓值。 食用腐爛食物仍會降低飢餓值

  • 傷害倍數
ThePlayer.components.combat.damagemultiplier = value

ThePlayer.components.combat.damagemultiplier = 數值

改變你的角色 的傷害倍數

  • 海狸
ThePlayer.components.beaverness:SetPercent(.01)

ThePlayer.components.beaverness:SetPercent(.01)(未測試,等待補充)

伍迪 變成海狸 。把 .01 改為 1 可以讓你變回伍迪。

聯機版不可用

其他玩家命令

註:下面許多命令通常用於玩家,像 c_godmode() 或者 c_sethealth(1),通過先使用 c_select(AllPlayers[number])可以對其他玩家執行命令。所以你需要一個玩家列表來知道各個玩家的編號(number ):

  • 列出所有玩家的用戶名和編號
c_listallplayers()

c_listallplayers(true or false,開啟或關閉)(可以為空,為空時默認為切換另一狀態)

實測結果為false無效

  • 取一個玩家
AllPlayers[number]

AllPlayers[玩家編號(點擊tab有顯示)]

AllPlayers[1] 取的是主機玩家。其他玩家的編號顯示在記分板上(某些情況下編號有可能是錯的,你可以先用 c_listallplayers() 來查看每個用戶編號的用戶名和角色)。大部分玩家命令可以用 AllPlayers[number] 代替 ThePlayer。

  • 對所有玩家使用同一命令
for k,v in pairs(AllPlayers) do command end

只修改command,用其他命令代替command,使用 "v" 代替命令中的 AllPlayers[number]。例如, "for k,v in pairs(AllPlayers) do c_move(v) end" 將會把所有玩家都移動到鼠標所指的位置。

  • 移動一個玩家
c_move(AllPlayers[number])

移動玩家到鼠標所指的位置。

  • 殺死一個玩家
AllPlayers[number]:PushEvent('death')

殺死玩家。

  • 復活玩家
AllPlayers[number]:PushEvent('respawnfromghost')

復活玩家。

  • 傳送至玩家
c_goto(AllPlayers[number])

傳送到對應編號的玩家,玩家編號可以通過 c_listallplayers() 獲取。

  • 丟掉玩家物品欄的物品
AllPlayers[number].components.inventory:DropEverything()

丟掉對應編號的玩家物品欄的所有物品,玩家編號可以通過 c_listallplayers() 獲取。

  • 讓玩家重新選擇角色
c_despawn(AllPlayers[number])

使用該命令將會刪除玩家物品欄的物品而不會掉落,所以推薦你先讓玩家的物品丟掉他們的物品,或者使用上一條命令 DropEverthing()。

截至2016年6月25日,增加了一個新的命令來指定玩家。你可以通過一個玩家名UserToPlayer('玩家名') 來指定一個玩家而不是使用玩家編號。例如,殺死一名叫做 "PlayerA" 的玩家,他的用戶編號為5,你可以執行:

AllPlayers[5]:PushEvent('death')

但在此之前你必須先運行 c_listallplayers() 來知道玩家編號,十分麻煩。

為了簡單一點地執行命令,你可以把命令改成:

UserToPlayer('PlayerA'):PushEvent('death')

世界命令

  • 傳送到預設
c_gonext("prefab")

輸入該命令後,你將被傳送到第一個預設的實體.如果存在多個預設的實體,控制台日誌將會顯示實體數量的列表,再次執行相同的命令將會傳送玩家到下一個在世界中生成的預設的實體。

  • 刪除鼠標下的實體
ConsoleWorldEntityUnderMouse():Remove()
c_select():Remove() 

輸入該命令後,將會刪除你鼠標下的物品。在專用伺服器上使用第二個命令,因為第一個不能在專用伺服器上使用。

  • 顯示地圖
minimap = TheSim:FindFirstEntityWithTag("mini­map")
TheWorld.minimap.MiniMap:ShowArea (0,0,0,10000)

這是一個本地命令,且客戶端不可用。

  • 跳過一天
​TheWorld:PushEvent("ms_nextcycle")
  • 跳過時間
TheWorld.net.components.clock:OnUpdate(16*30*x) 

跳過 x 天。將 x 修改為所要跳的天數(例如,16*30*4.5 為跳過4.5天)  警告數值太大可能會凍結遊戲。(取決於電腦的運算速度

  • 跳過時間單元並更新
LongUpdate(X)

對世界對象執行 "LongUpdate" 事件並跳過X個時間單元

註:每一個時間部分有30個時間單元。想要跳過一天可以使用 LongUpdate(480) 或者用乘法計算,例如 LongUpdate(X*16*30) 或者 LongUpdate(X*TUNING.TOTAL_DAY_TIME) X 為想要跳過的天數。

譯者註:每天有16個小部分,每部分有30個時間單元,每單元為現實中的一秒,所以一天為現實中的8分鐘。(詳見日夜周期 )

  • 跳過時鐘階段
TheWorld:PushEvent("ms_nextphase")

跳過當前時鐘階段。

  • 設置時鐘階段
TheWorld:PushEvent("ms_setclocksegs", {day=x,dusk=y,night=z})

設置每個時鐘階段的時間部分的數量。如果 x + y + z 加起來超過 16 將會產生錯誤。注意這樣的修改第二天會復原。
例子:

TheWorld:PushEvent("ms_setclocksegs", {day=14,dusk=1,night=1})

非常長的白天,非常短的黃昏和夜晚(只給黃昏一個時間部分和夜晚一個時間部分)

  • 設置季節的時鐘階段
​TheWorld:PushEvent("ms_setseasonclocksegs", {summer={day=sx,dusk=sy,night=sz}, winter={day=wx,dusk=wy,night=wz}}) 

為指定季節設置每個時鐘階段的時間部分的數量。如果 x + y + z 加起來超過 16 將會產生錯誤。不像設置時鐘階段一樣,該設置是永久性的。
例子:

TheWorld:PushEvent("ms_setseasonclocksegs", {summer={day=14,dusk=1,night=1}, winter={day=13,dusk=1,night=2}})

非常長的白天,非常短的黃昏和夜晚(夏天:只給黃昏一個時間部分和夜晚一個時間部分,冬天:只給黃昏一個時間部分和夜晚兩個個時間部分)

  • 設置季節長度
TheWorld:PushEvent("ms_setseasonlength", {season="summer", length=15})

設置季節的長度。

  • 進入夏季
TheWorld:PushEvent("ms_setseason", "summer")

進入夏季

  • 進入冬季
TheWorld:PushEvent("ms_setseason", "winter")

進入冬季

當添加了巨人的統治DLC,會有額外的命令TheWorld:PushEvent("ms_setseason", "spring")​ 和 TheWorld:PushEvent("ms_setseason", "autumn")​

  • 開始下雨
TheWorld:PushEvent("ms_forceprecipitation")

開始下雨

  • 停止下雨
TheWorld:PushEvent("ms_forceprecipitation", false) 

停止下雨。這包括青蛙雨

  • 生成閃電
TheWorld:PushEvent("ms_sendlightningstrike", ConsoleWorldPosition())

閃電擊中玩家,如果靠近避雷針的話,則擊中避雷針。

  • 隕星撞擊
c_spawn("shadowmeteor", 1)

隕星撞擊在鼠標的位置。隨機生成不同類型的岩石。

  • 激活所有的事件
for k, v in pairs(SPECIAL_EVENTS) do if v ~= SPECIAL_EVENTS.NONE then local tech = TECH[k] if tech ~= nil then tech.SCIENCE = 0 end end end function IsSpecialEventActive(event) return true end

同一事件內激活所有事件 。

  • 測量距離
print(math.sqrt(ThePlayer:GetDistanceSqToInst(ConsoleWorldEntityUnderMouse())))

在控制台日誌中輸出玩家和鼠標指着的物體的距離(默認情況下按Ctrl + L顯示控制台日誌)。

網絡/伺服器命令

  • 踢/封禁一個玩家
TheNet:Kick(userid)
TheNet:Ban(userid)

注意,這可以通過記分板更簡單得完成。userid 可以通過 AllPlayers 表來獲取,先找到你想要踢出伺服器的玩家的編號(見上面的其他玩家命令 部分),然後使用 AllPlayers[#].userid。

例子:

c_listallplayers()
[1] (KU_aabbccdd) Player1 <wolfgang>

[2] (KU_AABBCCDD) Player2 <wolfgang>

如果想要在伺服器上封禁 Player2,控制台中輸入命令

TheNet:Ban(AllPlayers[2].userid)

或者

TheNet:Ban("KU_AABBCCDD")

  • 臨時封禁一個玩家
TheNet:BanForTime(userid,time_in_seconds)

可以短時間內封禁玩家。userid 為將要被封禁的玩家的 KU id。獲取到它後,它可以被放到這種格式里:

TheNet:BanForTime("KU_aabbccdd", 120).

執行後會封禁相應KU id的玩家120秒。如果你的伺服器擁有多個世界(洞穴和上層世界),這個命令需要在兩個服務端都輸入。

  • 連接伺服器
c_connect("IP address", port, "password")

如果無法進行常規的連接,可以使用該命令直接連接一個IP位址。默認情況下,端口是10999。如果伺服器沒有密碼的話,你可以不填密碼參數:c_connect("10.0.0.8", 10999)

  • 重新加載世界
c_reset()

不保存遊戲並重載世界(也就是重載到上一個儲存點)。如果你是一個客戶端的話,該命令可能會造成你的遊戲崩潰(除非你用遠程命令模式發送該命令)。

  • 重新生成世界
c_regenerateworld()

重生生成世界。

  • 重新生成世界碎片
c_regenerateshard()

重新生成世界碎片。

  • 保存
c_save()

強制伺服器立即保存。(伺服器通常在夜晚結束的時候自動保存)

  • 關閉伺服器
c_shutdown( true / false)

true 會保存遊戲,false 不會保存遊戲。 c_shutdown() 和 c_shutdown(true) 是一樣的。

  • 回檔
c_rollback(count)

回檔伺服器一定次數。 c_rollback() 會回檔一次,c_rollback(3) 會回檔三次。

  • 啟用/禁用新玩家加入
TheNet:SetAllowIncomingConnections( true / false )

默認情況下設置為 true (新玩家可以加入)。設置為 false 將禁止玩家進入。

  • 發送一個伺服器公告
c_announce("announcement")

可以發送一個公告給玩家,例如即將關閉 / 重啟伺服器,讓玩家知道即將斷線。

雜項命令

  • 清空停屍間(訃告)
ErasePersistentString("morgue")

清空停屍間,需要關閉並重啟遊戲才能看到清空效果。

  • 計算預設的數量
c_countprefabs("prefab")

在專用伺服器上計數結果將會輸出在控制台上

  • 生成蟲洞
  1. 沒有只用一行的命令,請逐步輸入
  2. 用這個命令生成蟲洞1: worm1 = c_spawn("wormhole")
  3. 用這個命令生成蟲洞2: worm2 = c_spawn("wormhole")
  4. 創建蟲洞1到蟲洞2之間的連接: worm1.components.teleporter.targetTeleporter = worm2
  5. 還有回來的連接: worm2.components.teleporter.targetTeleporter = worm1
  6. 完成!
  • 生成一隻被馴化了的牛
local beef = c_spawn("beefalo"); beef.components.hunger:DoDelta(400); beef.components.domesticatable:DeltaTendency("DEFAULT", 1); beef:SetTendency(); beef.components.domesticatable.domestication = 1; beef.components.domesticatable:BecomeDomesticated(); 

用下面的值替換 DEFAULT 來改變牛的特徵。"RIDER", "ORNERY", "PUDGY"