跳至主要內容

LAB设计

原创Xenny约 1284 字大约 5 分钟ScreepsVenture

LAB设计

布局

  • 这里的布局可以参考hoho建筑布局教程open in new window中的内容,不同的布局方式将应用不同的工作流程,例如,你也可以规划出一种多级布局,即上一级化工厂使用下一级化工厂作为底物化工厂进行合成。

    Venture中,我选择使用常规的中心布局以及固定底物化工厂的模式,将中间两个化工厂作为底物化工厂,其他化工厂处理合成和BOOST工作,优点是设计简单,流程清晰。

生命周期

  • 当有三个及以上化工厂时便可以开始化合物合成工作,首先我们需要明确我们需要合成哪些化合物:

    1. 冗余资源——合成化合物出售
    2. 战斗化合物——战斗相关化合物
    3. 用户指定——用于特殊任务的化合物

    在不同阶段指定何种化合物也是一项大工程,所以这里只介绍化工厂的工作流程,化合物任务指派将在单独的运维篇中介绍。

  • 我们将化工厂的化合物合成分为4个阶段,此外我们还单独使用一个字段来控制化工厂集群是否运行。

    整个数据结构设计如下

    lab?: {                                             // 化工厂信息
        open: boolean,                                  // 是否工作
        index?: number,                                 // 索引
        state: number,                                  // 工作阶段
        labA?: Id<StructureLab>,                        // 底物化工厂A
        labB?: Id<StructureLab>,                        // 底物化工厂B
        labAType?: MineralConstant | MineralCompoundConstant,                        // 底物B类型
        labBType?: MineralConstant | MineralCompoundConstant,                        // 底物B类型
        labAmount?: number,                             // 底物数量
        nextRunTime?: number,                           // 下次运行时间
        BOOST?: {                                       // 强化任务
            [labId: Id<StructureLab>]: {                // 化工厂ID
                mineral: MineralBoostConstant,          // 化合物类型
                amount: number                          // 可强化数量
            }
        },
        boostQueue?: {                                  // 强化等待队列
            [m: MineralBoostConstant]: number           // 化合物类型:需求数量
        },
        autoQueue?: {                                   // 合成队列
            target: MineralCompoundConstant,            // 化合物类型
            amount: number,                             // 合成阈值
            manual?: boolean,                           // 是否手动设置(不会被自动清理)
        }[]
    },
    

初始化

  • 当开启化工厂集群工作时,首先寻找中心两个化工厂作为底物化工厂,如果顺利寻找到便开启化工厂集群工作。

寻找任务

  • 此时首先查看autoQueue中用户指定的合成任务是否已达到阈值,若没有则将对应任务的化合物合成底料分别指派给两个底物化工厂,统计计算能够合成的最大底物数量。 否则则查看index索引对应的化合物列表阈值是否已达到,若无法合成或已达到则移动索引,重新执行这一步。

    完成这一步骤之后便进入装填底物阶段。

装填底物

  • 查看两个底物化工厂是否装填完毕,若没有则发布传输任务装填对应底物。

    同时这里还应检查化工厂矿物类型是否为指定类型,若不是指定类型先搬走剩余矿物。

    完成这一步骤之后便进入反应合成阶段。

反应合成

  • 运行前检查底物化工厂是否类型正确,不正确则回到装填底物状态

    选择其他非底物化工厂且非BOOST指定化工厂进行合成,同时若遇到冷却未完成则记录下冷却完成时间,等待冷却完成再进行反应,减少CPU无用消耗。

    当返回底物不足时则反应完毕,完成这一步骤之后便进入取走资源阶段。

取走资源

  • 遍历所有非底物化工厂,如果存在资源则发布传输任务取走资源。

强化任务

  • 安装合成化合物的思路,强化任务也可以分解成装填化合物和强化爬爬两个步骤,同时强化还需要给化工厂装填能量,不过能量流转将不由LAB模块负责,会在单独的能量篇介绍,并且具体要使用何种化合物进行强化同样将在运维篇幅中介绍。

指定任务

  • BOOST任务不关心使用哪一个化工厂进行强化(底物化工厂除外),当我们发布了一个BOOST任务后,只会检查是否有空闲的化工厂,如果有则使用一个空闲的化工厂作为该任务的工作化工厂。

    如果没有则将任务添加到boostQueue中,将在后续运维期间轮询检查boostQueue一旦有空闲化工厂则重新指定任务并。

装填化合物

  • 当一个化工厂被指定BOOST任务之后,将会发布搬运任务,将指定数量的化合物搬运至化工厂。

强化爬爬

  • 强化爬爬不由化工厂模块触发,而是由爬爬需要被强化时被动触发,当爬爬成功被强化时将会减少化合物可强化数量,当可强化数量降至0则取消当前化工厂BOOST任务。