Featured image of post 饥荒联机版中的命令

饥荒联机版中的命令

教你如何使用饥荒联机版中的控制台输入命令

命令控制台默认是启用状态。如果它因为任何原因没有处于开启状态,你首先要做的就是调整你存档中的 settings.ini 文件。它可以在 “DoNotStarveTogether” 文件夹里被找到,位于以下路径:

Windows, Mac: \Klei\DoNotStarveTogether\client.ini

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

找到 settings.ini 然后用记事本打开。找到 section 部分,并确保在下面有ENABLECONSOLE = true。如果它它被设置为 false ,将它改为 true 并保存。然后在游戏中打开控制台,英文键盘下默认按 “~” 键。这可以随时在控制菜单中修改。

本地命令模式

注:   * 你在重新加载世界后必须重新输入每一个命令。

  • Lua 支持可变数量参数的函数,例如,你只想生成一个野牛的预设,你可以不填 “amount” 参数:“c_spawn(‘beefalo’)"。
  • 如果你不是主机(或者它是一个专用服务器,你是这个服务器的管理员),大部分命令需要远程执行。在控制台中按 Ctrl 来切换远程命令模式。一小部分命令(例如显示地图)仍然可以在本地模式下完成。

远程命令模式

许多饥荒命令 仍然在 DST(多人版饥荒)中可用,因此你仍然可以阅读它。

简单命令

  • 生成实例
1
c_spawn("prefab",amount)

利用 DebugSpawn(“预设”) 命令,在鼠标所指处生成一定数量被指定的 “预设”。

  • 获得物品
1
c_give("prefab",amount)

在你的物品栏中生成一定数量被指定的 “预设”。只适用于可以被储存在物品栏的背包 和物品 。

  • 脚本(未测试)
1
c_doscenario(scenario)

应用一个选择的脚本并执行它。

  • 生命值
1
c_sethea​lth(percent)

用百分比设置你的生命值。注:使用分数 0.90 = 90%

  • 理智值
1
c_setsanit​y(percent)

用百分比设置你的理智值。注:使用分数 0.90 = 90%

  • 饥饿值
1
c_sethunger(pe​rcent)

用百分比设置你的饥饿值。注:使用分数 0.90 = 90%

  • 湿度
1
c_setmoisture(pe​rcent)

用百分比设置你的湿度。注:使用分数 0.90 = 90%

  • 温度
1
c_settemperature(degrees)

用百分比设置你的温度。注:使用分数 0.90 = 90%

  • 上帝模式
1
c_godmode() 

玩家的理智值、饥饿值和被攻击时生命值不再下降。上帝模式下,你不能用命令改变的你统计数据。如果处于死亡状态,将会复活你(通过 c_godmode() 复活后不会将你置于上帝模式)。再次使用命令停用上帝模式。

  • 超级上帝模式
1
c_supergodmode()

和上帝模式一样但会将你的各项统计数据设置为满,即使你将它关闭。与 c_godmode() 相似,,它也会复活你(通过 c_supergodmode() 复活后不会将你置于上帝模式)。再次使用命令停用上帝模式。

  • 设置额外的移动速度
1
c_speedmult(multiplier)

标准额外的移动速度为 1。设置为 2 使你以两倍的速度移动,设置为 20 可以让你轻松地穿过墙和 “越过” 水。

这儿有其他一些命令,但是它们很难使用而且用处不大。

玩家命令

**注:**如果你不是管理员的客户端发送远程命令,那么大多数命令将不会有效(按 Ctrl 键切换控制台远程命令模式)。

  • 动作预测
1
ThePlayer:EnableMovementPrediction(true)

默认情况下为开启状态,将  true 改为  false  可以关闭动作预测,关闭动作预测通常对战斗有一些帮助。该命令只有客户端执行才有效,主机或服务器执行将不会有效。(必须在控制台的本地模式下执行该命令才有效,也就是必须关闭控制台的远程命令模式

**译者注:**动作预测也可以直接在游戏设置中关闭,设置 –> 滞后的奖励Lag Compensation),将其修改为 None)就可以关闭动作预测。

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

你可以合成任何东西。

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

改变你的角色生命 值上限

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

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

  • 饥饿值上限
1
ThePlayer.components.hunger:SetMax(value)

改变你的角色 的饥饿 值上限

  • 暂停饥饿
1
ThePlayer.components.hunger:Pause(true)

你的角色 不再降低饥饿值。

  • 伤害倍数
1
ThePlayer.components.combat.damagemultiplier = value

改变你的角色 的伤害倍数

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

伍迪 变成海狸 。把 .01 改为 1 可以让你变回伍迪。

其他玩家命令

注:下面许多命令通常用于玩家,像 c_godmode() 或者 c_sethealth(1),通过先使用 c_select(AllPlayers[number]) 可以对其他玩家执行命令。所以你需要一个玩家列表来知道各个玩家的编号(number ):

  • 列出所有玩家的用户名和编号
1
c_listallplayers()
  • 取一个玩家
1
AllPlayers[number]

AllPlayers[1] 取的是主机玩家。其他玩家的编号显示在记分板上(某些情况下编号有可能是错的,你可以先用 c_listallplayers() 来查看每个用户编号的用户名和角色)。大部分玩家命令可以用 AllPlayers[number] 代替 ThePlayer。

  • 对所有玩家使用同一命令
1
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” 将会把所有玩家都移动到鼠标所指的位置。

  • 移动一个玩家
1
c_move(AllPlayers[number])

移动玩家到鼠标所指的位置。

  • 杀死一个玩家
1
AllPlayers[number]:PushEvent('death')

杀死玩家。

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

复活玩家。

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

传送到对应编号的玩家,玩家编号可以通过 c_listallplayers() 获取。

  • 丢掉玩家物品栏的物品
1
AllPlayers[number].components.inventory:DropEverything()

丢掉对应编号的玩家物品栏的所有物品,玩家编号可以通过 c_listallplayers() 获取。

  • 让玩家重新选择角色
1
c_despawn(AllPlayers[number])

使用该命令将会删除玩家物品栏的物品而不会掉落,所以推荐你先让玩家的物品丢掉他们的物品,或者使用上一条命令 DropEverthing()。

截至 2016 年 6 月 25 日,增加了一个新的命令来指定玩家。你可以通过一个玩家名 UserToPlayer(‘玩家名’) 来指定一个玩家而不是使用玩家编号。例如,杀死一名叫做 “PlayerA” 的玩家,他的用户编号为 5,你可以执行:

1
AllPlayers[5]:PushEvent('death')

但在此之前你必须先运行 c_listallplayers() 来知道玩家编号,十分麻烦。

为了简单一点地执行命令,你可以把命令改成:

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

世界命令

  • 传送到预设
1
c_gonext("prefab")

输入该命令后,你将被传送到第一个预设的实体. 如果存在多个预设的实体,控制台日志将会显示实体数量的列表,再次执行相同的命令将会传送玩家到下一个在世界中生成的预设的实体。

  • 删除鼠标下的实体
1
2
ConsoleWorldEntityUnderMouse():Remove()
c_select():Remove() 

输入该命令后,将会删除你鼠标下的物品。在专用服务器上使用第二个命令,因为第一个不能在专用服务器上使用。

  • 显示地图
1
2
minimap = TheSim:FindFirstEntityWithTag("mini­map")
TheWorld.minimap.MiniMap:ShowArea (0,0,0,10000)

这是一个本地命令,且客户端不可用。

  • 跳过一天
1
TheWorld:PushEvent("ms_nextcycle")
  • 跳过时间
1
TheWorld.net.components.clock:OnUpdate(16*30*x) 

跳过 x 天。将 x 修改为所要跳的天数(例如,16304.5 为跳过 4.5 天)  _警告:_数值太大可能会冻结游戏。(取决于电脑的运算速度

  • 跳过时间单元并更新
1
LongUpdate(X)

对世界对象执行 “LongUpdate” 事件并跳过 X 个时间单元

_注:_每一个时间部分有 30 个时间单元。想要跳过一天可以使用 LongUpdate(480) 或者用乘法计算,例如 LongUpdate(X1630) 或者 LongUpdate(X*TUNING.TOTAL_DAY_TIME) X 为想要跳过的天数。

_译者注:_每天有 16 个小部分,每部分有 30 个时间单元,每单元为现实中的一秒,所以一天为现实中的 8 分钟。(详见日夜周期 )

  • 跳过时钟阶段
1
TheWorld:PushEvent("ms_nextphase")

跳过当前时钟阶段。

  • 设置时钟阶段
1
TheWorld:PushEvent("ms_setclocksegs", {day=x,dusk=y,night=z})

设置每个时钟阶段的时间部分的数量。如果 x + y + z 加起来超过 16 将会产生错误。注意这样的修改第二天会复原。
例子:

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

非常长的白天,非常短的黄昏和夜晚(只给黄昏一个时间部分和夜晚一个时间部分)

  • 设置季节的时钟阶段
1
TheWorld:PushEvent("ms_setseasonclocksegs", {summer={day=sx,dusk=sy,night=sz}, winter={day=wx,dusk=wy,night=wz}}) 

为指定季节设置每个时钟阶段的时间部分的数量。如果 x + y + z 加起来超过 16 将会产生错误。不像设置时钟阶段一样,该设置是永久性的。
例子:

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

非常长的白天,非常短的黄昏和夜晚(夏天:只给黄昏一个时间部分和夜晚一个时间部分,冬天:只给黄昏一个时间部分和夜晚两个个时间部分)

  • 设置季节长度
1
TheWorld:PushEvent("ms_setseasonlength", {season="summer", length=15})

设置季节的长度。

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

进入夏季

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

进入冬季

当添加了巨人的统治 DLC,会有额外的命令 TheWorld:PushEvent(“ms_setseason”, “spring”)​ 和 TheWorld:PushEvent(“ms_setseason”, “autumn”)​

  • 开始下雨
1
TheWorld:PushEvent("ms_forceprecipitation")

开始下雨

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

停止下雨。这包括青蛙雨

  • 生成闪电
1
TheWorld:PushEvent("ms_sendlightningstrike", ConsoleWorldPosition())

闪电击中玩家,如果靠近避雷针的话,则击中避雷针。

  • 陨星撞击
1
c_spawn("shadowmeteor", 1)

陨星撞击在鼠标的位置。随机生成不同类型的岩石。

  • 激活所有的事件
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

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

  • 测量距离
1
print(math.sqrt(ThePlayer:GetDistanceSqToInst(ConsoleWorldEntityUnderMouse())))

在控制台日志中输出玩家和鼠标指着的物体的距离(默认情况下按 Ctrl + L 显示控制台日志)。

网络 / 服务器命令

  • 踢 / 封禁一个玩家
1
2
TheNet:Kick(userid)
TheNet:Ban(userid)

注意,这可以通过记分板更简单得完成。userid 可以通过 AllPlayers 表来获取,先找到你想要踢出服务器的玩家的编号(见上面的其他玩家命令 部分),然后使用 AllPlayers[#].userid。

例子:

c_listallplayers()
[1] (KU_aabbccdd) Player1

[2] (KU_AABBCCDD) Player2

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

1
_TheNet:Ban(AllPlayers[2].userid)_

或者

1
_TheNet:Ban("KU_AABBCCDD")_
  • 临时封禁一个玩家
1
TheNet:BanForTime(userid,time_in_seconds)

可以短时间内封禁玩家。userid 为将要被封禁的玩家的 KU id。获取到它后,它可以被放到这种格式里:

TheNet:BanForTime(“KU_aabbccdd”, 120).

执行后会封禁相应 KU id 的玩家 120 秒。如果你的服务器拥有多个世界(洞穴和上层世界),这个命令需要在两个服务端都输入。

  • 连接服务器
1
c_connect("IP address", port, "password")

如果无法进行常规的连接,可以使用该命令直接连接一个 IP 地址。默认情况下,端口是 10999。如果服务器没有密码的话,你可以不填密码参数:c_connect(“10.0.0.8”, 10999)

  • 重新加载世界
1
c_reset()

不保存游戏并重载世界(也就是重载到上一个储存点)。如果你是一个客户端的话,该命令可能会造成你的游戏崩溃(除非你用远程命令模式发送该命令)。

  • 重新生成世界
1
c_regenerateworld()

重生生成世界。

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

重新生成世界碎片。

  • 保存
1
c_save()

强制服务器立即保存。(服务器通常在夜晚结束的时候自动保存)

  • 关闭服务器
1
c_shutdown( true / false)

true 会保存游戏,false 不会保存游戏。 c_shutdown() 和 c_shutdown(true) 是一样的。

  • 回档
1
c_rollback(count)

回档服务器一定次数。 c_rollback() 会回档一次,c_rollback(3) 会回档三次。

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

默认情况下设置为 true (新玩家可以加入)。设置为 false 将禁止玩家进入。

  • 发送一个服务器公告
1
c_announce("announcement")

可以发送一个公告给玩家,例如即将关闭 / 重启服务器,让玩家知道即将断线。

杂项命令

  • 清空停尸间(讣告)
1
ErasePersistentString("morgue")

清空停尸间,需要关闭并重启游戏才能看到清空效果。

  • 计算预设的数量
1
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. 完成!
  • 生成一只被驯化了的牛
1
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”

参考资料: dontstarve.fandom.com