超空间方案(Hyperspace Ideas)

by nbdfs1

添加一种能够在物品状态下存储物品的容器(类似箱中箱),并且能够无视距离放置或打开。 提供以下几种更好的空间传输方案: 剪切:在不占用背包的前提下,剪切所有选中建筑及其内部物品,并在放置后全部归位(选择器+左键框选,右键放置) 拆除:无需机器人与人工,直接框选拆除并转移物品(选择器+右键框选) 升级:自动消耗背包物品来复生镜像以及标记升级的建筑(选择器+SHIFT+左键框选) Add a container that can store items in item state, and can be placed or opened regardless of distance. And there are solutions for advanced cutting /deconstruct/upgrading.

Content
10 months ago
1.1
283
Storage Blueprints

g 大佬,有个设想

10 months ago

https://mods.factorio.com/mod/m-spell-pack
咒语包
不知道你能不能以咒语形式(执行脚本命令?)来打开item-with-inventory类型的虚拟容器,这样你身上又不存有item-with-inventory类型实体容器,就能跳过SE检测身上的东西是item-with-inventory类型,火箭OK,飞船OK。。。
当然如果要平衡的话,我觉得限制一下容器里面只能存放建筑跟装备(大修包太多了,建筑物品多得也太恐怖了)

10 months ago

container 以及 logistic container 类型的实体容器没有办法实现筛选特定类型物品的功能,这一点和item-with-inventory的容器不同;

以咒语的方式打开容器是一个可行的偷运方案,但如果需要为单/多玩家关联多个容器,另做一个gui界面可能会更直观更方便一些(然而gui方面一直是我的知识盲区);

但是,你仍可以通过另一种现有的方式来实现偷运物品的操作;
首先放置一个实体状态的超空间容器,随后手持一种物品/或是对这个容器设定某些物流需求,选中容器后按下鼠标中键,就可以为这个容器启用超空间物流供应功能(自动提供这些物品)。

启用该功能的容器能够实现一些拓展功能:
1. 使用超空间矩阵的SHIFT+左键实现快捷升级时(即自动消耗背包物品放置框选ghost实体,不包括升级规划实体),如果你的背包物品不足,则转而使用开启了此物品供应的容器中的物品,不论在何处。

2.勾选背包物流供应区,手持任意一个物品状态的超空间容器,点击【超空间矩阵-选择器】按钮或按下【alt+M】,开始此功能的容器将自动根据你的背包物流需求向你传输物品,直到背包满或满足最低物流需求。

3.手持任意一个物品状态的超空间容器,双击【超空间矩阵-选择器】按钮或连续按下【alt+M】两次,开始此功能的容器将自动根据这个手持容器中的筛选槽来填充物品,没有设置筛选槽的位置不会触发物流需求。

你可以先利用这些特性来实现远程的货物传输,不论你身在何处。^_^

10 months ago

下面的偷渡我已经知道了的- -
最终,我其实就是想要在SE KR2 248这类大修模组合集中来个包中包,然后这个包只能装建筑类物品,
而且我还加入了废墟模组,跑图拆建筑,包里面材料建筑更是乱七八糟,就这样来折腾时间。。。
我用AI折腾出了下面的代码,来限制item-with-inventory可放入的东西,但是拖动物品进入大部分时间会失效
当然最终限制的物品我觉得可以通过setting来配置- -(QuantumResourceDistribution这个模组设置就可以判断你设定物品的大类或子类,而且它应该就是你的知识盲区,gui界面的另类容器。)
附上没什么卵用的物品半限制代码,不折腾了,感觉直接改SE的限制代码最实际

-- 当玩家的库存发生变化时
script.on_event(defines.events.on_player_main_inventory_changed, function(event)
local player = game.players[event.player_index]
-- 检查玩家是否将不希望的物品放入了item-with-inventory类型的物品
for i = 1, #player.get_main_inventory() do
local item_stack = player.get_main_inventory()[i]
-- 检查物品堆栈是否存在,并且它是一个有效的item-with-inventory类型的物品
if item_stack and item_stack.valid_for_read and item_stack.prototype.type == "item-with-inventory" then
-- 获取物品的库存
local inventory = item_stack.get_inventory(defines.inventory.item_main)
-- 如果库存不存在,那么跳过这个物品
if not inventory then
player.print("这个物品没有库存!")
goto continue
end
-- 遍历库存中的每个物品
for name, count in pairs(inventory.get_contents()) do
if name == "raw-fish" then
-- 如果是,那么移除这个物品,并将它返回到玩家的库存
inventory.remove({name = "raw-fish", count = count})
player.insert({name = "raw-fish", count = count})
player.print("你不能将这个物品放入容器!")
end
end
end
-- 使用一个标签,用于跳过没有库存的物品
::continue::
end
end)

10 months ago

如果你只是想要一个只能装建筑类物品的包中包,那完全不需要这么复杂,只需要在原型data阶段为其设定一个黑名单或白名单即可

10 months ago

隔壁关联箱有个背包共享区的功能,也可以考虑一下(虽然关联箱有点赖皮,但可以选择性使用)
https://mods.factorio.com/mod/LinkedChestAndPipe

New response