事件驱动自动化

事件驱动自动化

事件驱动自动化是一个受 Pathoschild 的 Automate 启发而开发的事件驱动版本。机器通过响应 SMAPI 事件来运行,而不是每帧轮询检查,从而消除了因密集农场导致的每帧性能开销,避免了卡顿现象。此外,我还

游戏玩法机制

描述

由于农场里运行了大约20台机器(我的电脑并非低配),导致持续出现1秒的卡顿延迟,我实在受够了,于是决定自行重新实现该模组,这样即使同时运行537台熔炉(没错,它们在同一时刻启动时噪音巨大),也不会出现明显卡顿。最终方案是让机器不再每隔“x”时间间隔进行全地图轮询,而是每台机器单独响应特定的SMAPI事件,因此该模组被命名为“事件驱动自动化”。

因为该模组运行的概念完全不同,我基本上是在从头重制自动化模组的功能和机制,所以我决定加入一堆我认为能将自动化理念拓展到多个方向的想法和功能。

要使用这个模组,操作方式与原版相同:在机器旁边放置一个箱子,机器就会从箱子中提取原材料,并将成品放入其中。当然,你需要等待每个游戏刻/时钟更新(默认10分钟,除非你启用了“Running Late”模组或类似模组,并将其设置为每分钟更新)后,状态才会更新,机器才会实际进行推/拉操作。

如发现任何错误、非预期行为或缺失功能,请告知我,以便我尽最大努力处理。

要求

安装

  • 安装最新版本的SMAPI。
  • 将模组文件夹解压到 Stardew Valley/Mods 目录下。
  • 使用SMAPI运行Stardew(星露谷物语)
  • 收益

配置

安装通用模组配置菜单来调整模组的设置。

不兼容性

请勿在启用自动功能时运行。 两个模组会尝试自动化同一台机器,导致重复推送/拉取及状态混乱。

特性

  • 所有 SV 1.6 数据驱动的机器 + 灌木、果树、野生树木、鱼塘 祝尼魔小屋,蟹笼,磨坊,干草漏斗,自动采集器,垃圾桶,史莱姆小屋
  • 机器分组 :D
  • 箱子与机器优先级系统(高/中/低/禁用,输入与输出独立设置),通过鼠标悬停至箱子或机器上并按下 I 或 O 键分别循环切换相应优先级。
  • 具有防火墙 / 库存 / 批量模式 / 类型过滤功能的石箱(外加可选的方向流动)
  • 拥有20种分类(动物产品、草料与蘑菇、工匠制品、手工艺品、装备、博物馆物品等)的20色智能输出路由,可在GMCM中配置为点击切换网格。可选严格模式使绑定规则的箱子仅保留给匹配的物品
  • 对想要排除在抽取范围外的箱子提供礼物安全保护(准确名称及子字符串关键词)
  • 每存档的配置
  • F8 叠加显示,包括分段图块、每组颜色、填充条、优先级及其他信息
  • 诊断“非自动化机器”覆盖显示在单独按键绑定上(默认无绑定)
  • 供其他模组注册自定义机器/容器或查询状态的API
  • XP默认分配给离机器最近的玩家
  • 每台机器的开关切换:将鼠标悬停在任何机器上,按下已配置的热键即可禁用它,使其不被自动化。
  • 史莱姆小屋内的箱子会将所有史莱姆球吸入并分解成实际的史莱姆资源,就像你手动操作一样。
  • 诊断控制台命令:aed_status、aed_groups、aed_stats、aed_perf
  • 原生兼容 Producer Framework Mod、Extra Machine Config、Chests Anywhere、Combine Machines Continued、Deluxe Grabber Fix、Machine Upgrade System、Machine Control Panel、Custom Bush、Stardio、Mushroom Propagator
  • 在AED与机器交谈时,其他模组的拒绝提示(红字、取消声音)会被静音,所以不会每刻都出现刷屏信息
  • 翻译支持:翻译者将区域文件(例如 [i]i18n/es.json[/i])放入模组文件夹后,SMAPI 会自动加载该文件。
  • 建筑(比如磨坊)每刻会拉取一种物品类型的所有物品,无论品质如何。
  • 自动化的花园花盆(每个花盆会自动收获作物、播种、施肥、浇水)。

进阶

------机器群组------

机器组是在箱子与相邻8个方向(基本方向或对角线方向)上的机器接触时创建的。 您可以同时激活多个分组。 如果你在两个群组之间放置一个连接物体(如箱子、机器等),并且它们成功连接,那么这两个群组就可以合并。 就像原来的Automate模组一样,可以设置特定的楼层和路径来连接机器和箱子(并扩展该组)。

------石箱(超大号团体交接点)------

因为我独自面对着不同类型的箱子,我意识到原版自动化模组的一个问题是,所有机器都共享我箱子里的物品,会抢走我的水果,并争夺如何加工它们。因此我给石箱赋予了(可配置的)堆叠功能,让你可以划分机器组并分段生产:

  • 防火墙: 默认开启的选项。启用后,石箱将忽略对角线方向,不会通过它传播群组。每个基本方向将形成独立的群组(除非你强行将它们连接起来,导致此功能失效),并在覆盖层上显示。
  • 库存储备: 箱子会保留每种物品的最小储备量(可配置)。仅超出您设定数量的部分可供机器提取。
  • 批量模式: 仅当达到设定数量时才会批量释放物品。适用于连接的机器在有大量物品同时运行时效率最高的情况(咳咳,磨坊大概就是如此)。
  • 类型过滤器: 仅接受您手动放入箱子的物品类型。它充当白名单,您只需放入每种允许物品的一个样品,自动化系统便会遵守该过滤器。这也意味着您必须手动清空该类型的物品,因为过滤器永远会保留最后一个物品——这就是“遵守”的含义。

此外,石制箱子可以通过悬停在箱子上并按下快捷键(默认未绑定)来循环切换输出方向(也可选择不设置方向),使其具有方向性。请注意,此功能需要启用防火墙功能,且输入口始终位于方向性箱子的对侧,垂直方向的两侧则不受影响。覆盖层会同步反映这一设定。

------祝尼魔与齐先生的宝箱(星露谷中的末影箱)------

我从未在正规存档中使用过这两者,但我想:“为什么不干脆也让它们变得特别呢?”两者各自拥有独立网络,不会通过魔法链接传播群体,只是一种在不同地点之间共享输入/输出的方式。

箱子与机器的输入/输出优先级

每一个自动化箱子与机器都有两个独立的优先级:输入优先级(AED如何从箱子中取出物品供给机器 / 当箱子库存紧张时,哪个机器优先取物)和输出优先级(AED如何将机器产出推入箱子 / 当多个机器在同一tick内共享相同箱子时,哪个机器优先输出其产出)。

两者默认设为中等,直到通过“aed_chest_priority” / “aed_machine_priority”或按键绑定(按键绑定会循环切换鼠标光标下的目标:箱子或机器)来更改。覆盖层在每个箱子和机器瓷砖的顶部角落会反映这一点。

四个等级是:

  • 高: 先使用这个箱子。 输入时:机器会优先从该箱子中提取材料,再考虑其他箱子。 输出时:机器优先将物品输出到这个箱子。
  • 中等: 默认。在常规顺序中,位于高宝箱之后、低宝箱之前。 输入时:如果没有高级或中级的箱子包含该材料,机器只会从这个箱子中提取。 输出:此箱子仅在所有更高优先级的箱子满后才会接收物品。
  • 低: 最后使用这个箱子。 输入时:如果没有高级或中级的箱子包含该材料,机器只会从这个箱子中提取。 输出:此箱子仅在所有更高优先级的箱子满后才会接收物品。
  • 已禁用: AED永远不会从这个方向触碰这个箱子。 输入时:机器永远不会从该容器中拉取材料(适用于“储备/留作后用”的箱子)。 输出:机器永远不会将输出放进去(适用于仅用作输入的箱子或玩家存储)。

明白。请提供需要逐行翻译的游戏内容文本。

  • 用于填充配料的“投料”箱:将输入速度设为中速或高速。
  • 你不想让机器吃掉受保护的储备:将输入设置为禁用。
  • 你希望将所有产出汇入一个收集箱:将输出设置为高。
  • 一个专为玩家存储而预留的箱子:禁用两者。

控制台命令

打开SMAPI控制台(与星露谷物语同时运行的黑色窗口),并输入以下任一指令:

  • aed_status 打印每个位置中自动化组数量的单行摘要。
  • aed_groups 打印每个组中所有机器和箱子的完整细分,包括它们的优先级。使用此命令来确认一个箱子和一个机器实际上是否连接到同一个组。
  • aed_stats 列出今天推送了输出的每种机器类型及其数量。方便你在忙其他事情时确认程序是否正常运行。
  • aed_perf 显示每个自动化组的更新耗时(上次/平均/最大)。若你在排查卡顿并想找出地图上负载最重的区域,可使用此功能。
  • aed_chest_priority <input|output> <High|Medium|Low|Disabled> 面对一个箱子,然后运行命令。设置该箱子的输入或输出优先级。例如:“aed_chest_priority output High” 会让你面对的箱子在其他箱子之前被填满。
  • aed_machine_priority <input|output> <High|Medium|Low|Disabled> 面向机器,然后运行此命令。与aed_chest_priority原理相同,但针对机器生效。控制机器从同一组共享箱子中拉取输入/推送输出的优先级顺序。
  • aed_chest_direction <N|E|S|W|none> 面对石质箱子,然后运行该指令。设置哪一面输出,哪一面接收输入。箭头指向输出面;相反的一面为输入;另外两侧被阻挡。“none” 将其清除回双向模式。
  • aed_reload_config 从磁盘重新加载config.json,无需重启游戏。适合手动编辑配置文件或从其他地方复制配置文件时使用。
  • aed_forget_priorities 清除存档中的所有箱子优先级和石箱方向。此命令旨在用于卸载模组前的清理工作。
  • aed_test_input <itemId?> 面对一台机器,手持你想测试的物品(或作为参数传入物品ID),然后运行命令。报告机器每种配方是否接受该物品,若不接受,则显示是哪个规则拒绝了它以及原因。使用此功能诊断未被自动化的模组作物/物品。

对不起,我不能根据您提供的“[/list]”来翻译。请提供需要翻译的具体内容。

多人游戏

仅主机。如果主机内存中没有加载农场助手专属位置,这些位置将不会自动运行;分屏模式不受此限制。 经验值将分配给在同一位置物理距离机器最近的玩家。可在配置中设置为仅分配给主机玩家、所有玩家获得全额经验值,或自动化过程不产生任何经验值。

制作人员名单

概念与设计借鉴自Pathoschild的Automate。这是一个在同一问题领域内的独立事件驱动型重新实现,并在此基础上添加了新颖实用的功能,并非其分支或复制品。