You are viewing a potentially older version of this package. View all versions.
un1eagle-BattlefieldAnalysisBaseDeliver-2.1.3 icon

BattlefieldAnalysisBaseDeliver

Allow battlefield analysis base to deliver items to mech, courier, and logistic tower.

Date uploaded 6 months ago
Version 2.1.3
Download link un1eagle-BattlefieldAnalysisBaseDeliver-2.1.3.zip
Downloads 371
Dependency string un1eagle-BattlefieldAnalysisBaseDeliver-2.1.3

README

戴森球计划 - 战场分析基站配送支持 Mod

简介

本 Mod 让战场分析基站能够直接派遣无人机机甲物流配送器物流塔配送战利品,实现全自动化战利品物流。

✨ 核心特性

  • 🚀 战场基站直接派遣:每个基站拥有独立的 20 个 2 倍速无人机(可配置)
  • 📦 智能优先级调度:优先配送给库存紧急的配送器
  • ✈️ 完整的飞行动画:无人机可见,视觉效果完整
  • 💾 存档安全:自动兼容旧版本,支持无缝升级
  • 🎯 零性能损耗:基于事件驱动,只在需要时工作
  • 🔧 零 UI 干扰:不修改任何 UI,不影响游戏体验

使用场景

战场分析基站在击败敌人后会积累大量战利品(硅块、晶格硅、电路板等)。使用本 Mod 后:

基站会自动派出无人机给以下目标送货:

  1. 机甲:在配送栏设置了物品需求;
  2. 配送器:设置了物品需求;
  3. 物流塔:行星或者星际,设置了物品本地需求;

安装

  1. 确保已安装 BepInEx 5.x (x64)
  2. BattlefieldAnalysisBaseDeliver.dll 放入 BepInEx\plugins\ 文件夹
  3. 启动游戏

配置选项

BepInEx\config\com.yourname.battlefieldanalysisbasedeliver.cfg 中:

[General]
## 启用调试日志(排查问题时使用)
EnableDebugLog = false

技术说明

v2.0 全新架构:基站直接派遣

本 Mod 采用基站直接派遣架构,完全不同于传统的物流配送器逻辑:

核心设计

  1. 每个战场基站拥有独立的 20 个无人机

    • 存储在 BaseLogisticSystem
    • 无人机状态:空闲 / 飞行中(去程 / 回程)
  2. 基于事件驱动的派遣逻辑

    • Hook: BattleBaseComponent.InternalUpdate
    • 检测:基站物品变化时触发扫描
    • 派遣:找到最优配送器并派遣无人机
  3. 智能调度算法

    // 紧急度 = 当前库存 / 最大库存
    urgency = currentStock / maxStock
    
    // 排序:紧急度优先,距离次之
    demands.Sort((a, b) => {
        if (a.urgency != b.urgency)
            return a.urgency.CompareTo(b.urgency);
        return a.distance.CompareTo(b.distance);
    });
    
  4. 无人机飞行与送货

    • 飞行:courier.t += deltaT * direction
    • 到达:t >= maxt 时送货
    • 返回:direction = -1,回到基站
  5. 渲染支持

    • Hook: LogisticCourierRenderer.Update
    • 将基站的无人机数据注入游戏渲染系统
    • 无人机完全可见,视觉效果与游戏原生一致

存档安全机制

  1. 存档前GameData.Export

    • 返还所有在途物品到基站
    • 清空无人机状态
  2. 存档加载后GameData.Import

    • 自动检测基站物品变化
    • 重新派遣无人机
  3. 旧版本兼容PlanetFactory.Import

    • 自动识别并删除旧方案遗留的虚拟配送器
    • 避免坏档

项目结构

BattlefieldAnalysisBaseDeliver/
├── Plugin.cs                                        # 主插件入口 + DebugLog()
├── PluginInfo.cs                                   # 插件信息(版本号等)
├── Patches/
│   ├── BattleBaseComponent_InternalUpdate_Patch.cs  # [核心] 派遣、飞行、送货逻辑
│   ├── BattleBaseLogisticsManager.cs                # [核心] 全局管理器
│   ├── LogisticCourierRenderer_Update_Patch.cs      # [核心] 无人机渲染支持
│   ├── GameData_ExportImport_Patch.cs               # [核心] 存档安全
│   └── PlanetFactory_Lifecycle_Patch.cs             # [核心] 资源清理 + 旧数据清理
└── GameCodeReference/                              # 反编译的游戏代码(参考)

总计:5 个核心 Patch 文件 + 1 个主类


开发和调试

查看日志

日志位置:BepInEx\LogOutput.log

启用调试日志:

[General]
EnableDebugLog = true

调试日志会输出:

  • 🚀 无人机派遣信息
  • 📬 送货成功信息
  • 🏠 无人机返回信息
  • 💾 存档操作信息

构建

dotnet build -c Release

输出:bin\Release\net472\BattlefieldAnalysisBaseDeliver.dll

反编译工具

  • dnSpy:推荐,支持调试
  • ILSpy:仅查看代码

反编译目标:DSPGAME_Data\Managed\Assembly-CSharp.dll


兼容性

  • 完全兼容现有存档
  • 可与其他 Mod 共存(除非该 Mod 也修改了 BattleBaseComponentLogisticCourierRenderer
  • 移除 Mod 后不会影响存档(无人机数据不保存到存档)
  • 自动兼容旧版本(v1.x 的虚拟配送器会自动清理)

如遇到问题,请:

  1. 启用 EnableDebugLog = true
  2. 查看 BepInEx\LogOutput.log
  3. 提交 Issue 并附上日志

CHANGELOG

Changelog

[4.0.2] - 2026-03-14

Added

  • 新增配置 BattleBasePickupPartitionStackSize:默认 2000,用于统一设置基站拾取分区(输出分区)槽位 stackSize;设为 0 时不修改原值。
  • 新增配置 BattleBaseCourierCarryCapacity:默认 100,用于控制基站无人机单次运载量(送货与拉货逻辑统一使用)。

Changed

  • AutoPickTrash 相关补丁改为在原版逻辑上增强:部分拾取后延长掉落寿命,且剩余寿命封顶为 60 秒,避免无限叠加。
  • 修改送货优先级:机甲 -> 配送器 -> 物流塔 -> 取货

[4.0.0] - 2026-03-09

Added

  • 基站从供应配送器拉货到输入区:当基站输入分区某格设置了物品(如信号塔)且未满时,自动派无人机到供应该物品的配送器取货,并放入基站输入区(与爪子放入行为一致)。
  • 在途数量:基站侧按 (基站, 物品) 维护拉货在途数量,生成需求时扣减,避免重复过量取货;供应端使用游戏原有 storageOrdered(派遣时 -= 预留量,取货失败或差额时回退),供应配送器 UI 会显示「-xx 待取货」,游戏自有供需匹配会识别预留而不重复分配。

Changed

  • 派遣优先级:机甲 > 物流塔 > 需求配送器 > 拉货。

[3.1.8] - 2026-03-08

Fixed

  • 物流塔翘曲器在途显示错误:修复基站向物流塔翘曲器小格送货时,翘曲器普通槽位 localOrder 被误扣导致显示「-50」「-52」等负数在途的问题。原因:到达/返还/存档时无法区分无人机目标是普通槽位还是翘曲器小格,一律执行了 localOrder -= amount,而派遣时翘曲器小格并未增加过 localOrder。现改为用不同 endId 编码(普通槽位 20000+、翘曲器小格 30000+)区分两类目标,仅对普通槽位维护 localOrder

Changed

  • 配送器送货目标错误:修复向需求配送器送货时物品被放入错误箱子的问题。原因:InsertIntoStorage 第一个参数应为箱子的实体 ID (entityId),之前误传了 storage 池的 id,导致游戏按错误实体查找存储链。现改为使用 dispenser.storage.bottomStorage.entityId,物品只会进入该配送器连接的箱堆。

Added

  • 物流塔普通槽位在途数量显示:基站向物流塔本地需求槽位送货时,与原生逻辑一致维护目标槽位的 localOrder(派遣时 +、到达/返还/存档时 -),点击物流塔打开的详情界面会正确显示「在途 +xxx」,与物流无人机/飞船送货时的显示一致。翘曲器小存储点不在此列。

[3.1.5] - 2026-03-08

Changed

  • 配送器需求判断:取消 80% 限制,改为「只有当前库存 + 在途已满(连接箱堆无空位)才跳过」,未满则持续配送。
  • 配送器库存/容量:按整条箱堆链统计(支持配送器下方 1 到多个堆叠箱子),避免多箱时只算最底一箱导致误判已满。
  • 在途数量:配送器「是否已满」与紧急度排序均考虑在途数量(storageOrdered),减少过量派遣;物流塔沿用原有「当前 + localOrder」逻辑。

[3.1.4] - 2026-02-15

Changed

  • 打包 zip 包含根目录 CHANGELOG.md,Thunderstore 可显示更新说明。

[3.1.3] - 2026-02-15

Added

  • 配送器在途数量显示:基站向配送器/机甲送货时,与原生逻辑一致维护目标配送器的 storageOrdered(派遣时 +、送达/存档时 -),点击配送器打开的详情界面会正确显示「即将收到」的在途数量。
  • 机甲配送槽位在途数量显示:基站向机甲配送栏送货时,与原生逻辑一致维护 deliveryPackage.grids[slot].ordered(派遣时 +、到达/存档时 -),配送栏 UI 会正确显示即将送达数量。