自动仓库传输

自动仓库传输

把物品来回传送!

理论上这是个简单的模组,单独使用时功能有限,但与其他模组搭配后会迅速变得强大。它新增了一个物品——存储传输控制器,允许你设置各种存储容器之间相互传输物品。它采用一个非常基础的系统,每个容器都有一个频道,并在该频道上发送或接收物品。也许有一天我会实现多频道支持,但那可能需要一个专门的 UI,而我不太想做。



举个例子说明这个模组的功能:你可以把独眼巨人号里的一个储物柜设置为频道 A 并设为发送物品,然后把基地里的一个储物柜设置为频道 A 并设为接收物品。单独使用时帮助不大。它能让你从远处把物品传送到主基地,但也就仅此而已。但如果你把它和其他一些模组结合起来,那就有趣了。把自动分拣器设置为在某个频道接收物品,并使用 Grav Trap Storage 在同一频道发送物品。这样当你收集物品时,它们会自动被传送到自动分拣器进行分拣。做一个装满诱饵/鱼雷/信标的储物柜,让它把物品发送到独眼巨人号的诱饵发射管。配合我的模组 Equivalent Exchange 一起使用,让物品自动发送到研究台,或者使用 Auto Item Converter 来有效地自动合成物品并按需取出(比如为我的独眼巨人号鱼雷模组自动合成鱼雷)。或者等 FCS 更新后,用它把外部存储的物品发送到你的主自动分拣器,让你的钻头自动供给主存储。与其他模组结合时有很大的潜力。


[color=#ffff00][size=5]如果你要询问或报告传输延迟问题,请阅读性能配置部分[/size][/color]

[size=5]它能做什么
[/size]该模组会尽力自动检测任何存储容器,包括模组添加的容器。它并非万无一失,尤其是当模组物品具有奇怪的对象层级结构,或者与来自另一个对象的容器交互时,但这些情况应该很少见,所以它应该适用于大多数东西。它也有配置选项来应对性能影响。在大多数情况下你大概可以把这些设置为忽略性能,但要注意,如果你这样做,模组会尝试遍历设置为“发送”的储物柜中的[i]每一个[/i]物品,所以如果你有大量物品储备,它可能会变慢,更多内容见下文。


[size=5]它不能做什么[/size]
遗憾的是,它无法与所有东西配合。游戏中的某些东西的处理方式是这个模组单独无法应对的。一些例子包括:

[list]
[*]室内基地部件,如生物/核反应堆(遗憾的是,它们将容器与网格分离的方式使得这个模组单独无法识别和处理)
[*]某些小型潜艇,由于它们的碰撞对象和存储容器的处理方式,这个模组很难获取正确的容器。因此,你能获取到哪些容器是不一致的。虾式服在这方面处理得好得多,它[i]应该[/i]能与背部的主存储舱配合,但海蛾号(以及可能带有存储容器的模组小型潜艇)则不行
[*]玩家本身,不过这更多是因为我不想实现任何与之相关的东西,而不是因为逻辑上的限制
[/list]好消息是,我有一个叫做 Auto Storage Transfer Compatibility 的模组,它旨在修复其中一些问题,并为 FCS 模组的 c48 终端添加兼容性。不过由于 FCS 尚未更新,我也懒得更新那个附加模组。如果大家想要,我可以去掉 FCS 兼容性,只上传反应堆/海蛾号的兼容性添加。这个模组的其他一些不幸限制是,一个对象一次只能有一个频道,并且不允许进行内在的分拣。第二个问题可以部分通过使用 Autosort Lockers 来绕过,这个模组可以把物品发送到自动分拣器,物品被分拣后,这个模组可以从分拣过的储物柜中取出。但第一个限制更难绕过。理想情况下,我希望添加一种在不同频道上发送和接收的方式,例如插入反应堆棒并取出耗尽了的棒,但目前这不在计划中,因为那需要一个自定义 GUI,而我不想创建。

[size=5]性能配置[/size]
在一般使用情况下,该模组应该对性能影响最小,然而在特定条件下,它[i]有可能[/i]让存档慢到停滞。这些配置选项被设计为一种故障保护措施,以确保在出现这些情况时你的存档不会变得过于卡顿无法游玩。

为了完整解释配置选项的工作原理,我必须稍微详细说明一下模组整体的工作方式。当一个容器被设置为传输时,模组会逐一遍历容器中的每个物品,并且对于每个物品,寻找一个能接受该物品的合适容器。它必须这样做,因为我们不知道接收容器能接受什么种类的物品,也不知道能接受多少。在正常情况下,这不是问题。容器会被检查,物品会被存入,就是这样。然而,当发送容器有大量物品(30+)无法发送到任何其他地方时,这就成了问题。模组会尝试遍历所有那些物品,每一帧都如此,这显然会变得非常慢,而且随着发送储物柜中的物品越多,只会越来越慢。

为了在出现这种情况时作为故障保护,模组有两个选项:“itemChecksBeforeBreak”和“thoroughSortCooldown”

Item Checks Before Break 决定模组在决定忽略所有其他物品并假定它们也无法传输之前,会查看储物柜中的多少个物品。例如,如果你有一个储物柜,里面有 15 个钛,设置为在频道“abcd”上发送,但没有可用的接收容器,模组只会检查前 10 个,并直接假定其他 5 个也无法被分拣。正常情况下,这也不是问题。问题出现在混合物品并发送到只能接受特定类型物品的储物柜时。例如,如果你有同一个装有 15 个钛的储物柜,但里面还有一个生物诱饵,并且你有一个独眼巨人号诱饵发射管设置为在频道“abcd”上接收,那么什么也不会发生。理论上,模组应该能够把那个生物诱饵传输到诱饵发射管,但因为它首先检查了 10 个物品,全都是钛,模组就假定其他 6 个物品也无法被分拣,即使理论上其中一个可以。这是一个小众用例,所以在大多数情况下这个设置无关紧要。

Thorough Sort Cooldown 是[color=#ff7700]更有可能影响你游戏体验[/color]的设置。每当模组传输物品失败时,它会将该物品添加到一个字典中,并记录该物品传输失败的次数。在“普通”分拣(非彻底分拣)中,模组会跳过任何失败传输尝试达到 5 次或以上的物品。这是为了避免浪费处理资源去尝试传输一个我们知道不太可能可传输的物品。每隔一段时间,模组会执行一次“彻底分拣”,此时它会忽略这些失败尝试,再次尝试传输物品。这意味着,如果接收储物柜在很长一段时间内都是满的,发送储物柜中的物品会因为连续多次传输失败而被标记为在非彻底分拣中跳过,所以一旦接收储物柜腾出空间,传输重新启动前会有轻微的“延迟”。该延迟取决于你在配置中设置的冷却时间,以及当空间出现时恰好处于循环中的哪个位置。它可能几乎立即发生,也可能直到整个冷却时间过去才发生。如果你认为你的存档永远不会出现导致性能问题的条件,你可以自由地将这个冷却时间设置得极低甚至为零,这样就会消除任何“延迟”传输。我相信大多数人可能都可以这样做而只产生最小的后果,但这个选项仍然在这里,因为我见过一些存档因为某人的几个储物柜里装满了数百个物品且全部传输失败而变得几乎无法游玩。







[size=1]这次模组页面是我自己做的,因为我终于肯动手了[/size]