Skip to content

friendlyPMC v4.5.0 更新日志

字数
1406 字
阅读时间
6 分钟

性能优化版 | 基于 v4.4.12 (Pit Alex) | 发布日期: 2026-06-05 议会共识审查 | 22 项优化 | 双端交付


交付架构

v4.5.0 通过三层组件协同工作:

+----------------------------------+
| friendlyPMC-Optimizer.dll (新增)  |  ← Harmony 运行时补丁,增强原 DLL
+----------------------------------+
| friendlyPMC.dll (v4.4.12 原版)    |  ← 保留原版,未修改
+----------------------------------+
| user/mods/friendlyPMC/src/*.ts    |  ← 服务端全面重构
+----------------------------------+
组件状态说明
friendlyPMC-Optimizer.dll编译交付 (~22 KB)10 个 Harmony Prefix 补丁,0 错误 0 警告编译
friendlyPMC.dll保留原版不直接修改,由 Optimizer 运行时增强
服务端 TypeScript源码交付消息队列、索引、配置化、清理等 8 项优化
客户端 C# 源码参考交付完整优化源码在 decompiled-client/ (共 22,134 行)

Optimizer 补丁清单 (5 项)

每个补丁 < 60 行,通过 Harmony Prefix 在运行时拦截原始 DLL 的热路径:

补丁目标策略效果
FollowerPatrolOptimizerFollowerPatrol.Patrol()LRU 缓存 + 空间哈希 + 迭代 30→10CPU -8~15%
BotActivateOptimizerBotOwnerActivatePatch.PatchPostfixHashSet O(1) 跳过已注册 FollowerCPU -5~10%
BeingHitOptimizerFollowerCommonLayer.BeingHitAction每 Bot 200ms 节流GC -3~5% (战斗时)
BulletImpactOptimizerBulletImpactPatch.PatchPostfix无 Follower 时完全拦截单人 Raid 0ms 开销
JsonCacheOptimizerNpcMessage.NpcSendThankYou双检锁全局缓存UI 响应 +200ms

Optimizer 战术重构补丁 (5 项,新增于 2026-06-06)

基于 SAIN 算法移植,增强 Follower 战斗行为:

补丁目标策略效果
TacticalSearchPatchFollowerFightLayer.GetDecision()4 状态搜索机 (DirectMove→Wait→Advance)Follower 丢失敌人后主动搜索
TacticalCoverSortPatchCovers.GetClosestCoverPoint()方向感知掩体排序桩掩体选取 Hooks 就绪
TacticalSprintPatchFollowerGoToEnemy.UpdateNodeByBrain被压制/腿部受伤禁止冲刺冲刺行为更智能
TacticalRushPatchFollowerPusherLayer.EngageEnemy()敌人重伤自动突进判定Pusher 主动抓时机冲锋
BossProtectPatchFollowerFightLayer.GetDecision() + DefaultTactic()Boss被攻击时强制protection + 远距离coverBoss→EngageEnemy50-100m外Boss受击时Follower主动推进反击

可调参数 (TacticalParams): 搜索基础时间、等待倍率、冲刺距离限制、突进血量阈值等 9 项可配置参数。


服务端优化清单 (8 项)

所有修改在 user/mods/friendlyPMC/src/ 中,直接生效:

#优化文件效果
1MessageQueue 消息队列SquadChat.ts替换 33 处 setTimeout,指令响应 -0.5~1s
2Profile 索引SquadChat.ts8 处 find() → O(1) Map 查找
3技能 JSON 化Squad.ts + config/skills.json150 行硬编码 → 30 行配置驱动
4Session TTL 清理Squad.ts每 30 分钟清理 24h 未用 session 数据
5SPTAdapter 参考实现SptAdapter.ts (新建)16 个方法封装私有 API 访问
6装备 Set 优化SquadChat.tsArray.includes → Set.has
7命令参数验证SquadChat.ts防止无效命令崩溃
8JSON Schemaconfig/*.schema.json (3 新建)防止手动编辑配置损坏

客户端源码优化 (9 项,参考交付)

完整 C# 源码在 decompiled-client/friendlyPMC/,154 个文件,22,134 行。以下优化在源码层面已完成,未来可重新编译替代 Optimizer + 原始 DLL:

#优化文件说明
1FollowerPatrol 缓存 + 迭代削减FollowerPatrol.cs巡逻点 LRU 缓存,NavMeshPath 池化
2BeingHitAction 环形缓冲区FollowerCommonLayer.csList → 固定 8 槽环形缓冲区
3BotOwnerActivatePatch HashSet 跳过BotOwnerActivatePatch.cs27 方法 ReaderWriterLockSlim
4BossPlayers 线程安全BossPlayers.cs防止主线程/回调线程并发崩溃
5JSON Converter 全局缓存JsonHelper.cs (新建)8 处反射 → 1 次
6Covers 空间哈希CoverSpatialGrid.cs (新建)50m 网格 + fallback 安全
7统一对象池PooledObjects.cs (新建)NavMeshPath/List/Vector3 池化
8GetDecision 战术缓存FollowerFightLayer.cs200ms 决策缓存,5Hz 刷新
9CheckSeenEnemies 节流InteractableObjects.csSphereCast 每帧 → 500ms

新增文件

文件组件说明
BepInEx/plugins/friendlyPMC/friendlyPMC-Optimizer.dllOptimizerHarmony 运行时补丁 (~22 KB)
decompiled-client/Utils/JsonHelper.cs源码参考JSON Converter 全局缓存
decompiled-client/Utils/CoverSpatialGrid.cs源码参考50m 网格空间分区
decompiled-client/Utils/PooledObjects.cs源码参考统一对象池系统
user/mods/friendlyPMC/src/SptAdapter.ts服务端SPT API 适配层
user/mods/friendlyPMC/config/skills.json服务端技能配置数据
user/mods/friendlyPMC/config/settings.schema.json服务端设置 JSON Schema
user/mods/friendlyPMC/config/progress.schema.json服务端任务进度 Schema
user/mods/friendlyPMC/config/squad-profile.schema.json服务端Follower 档案 Schema
friendlyPMC-Optimizer/Patches/TacticalSearchPatch.csOptimizer搜索状态机补丁
friendlyPMC-Optimizer/Patches/TacticalSprintPatch.csOptimizer冲刺判断补丁
friendlyPMC-Optimizer/Patches/TacticalRushPatch.csOptimizer突进判定补丁
friendlyPMC-Optimizer/Patches/BossProtectPatch.csOptimizerBoss保护反应补丁
friendlyPMC-Optimizer/Patches/TacticalParams.csOptimizer可调参数类

性能基准

场景v4.4.12v4.5.0 (预期)主要贡献
单人 Raid (无 Follower)基线+5~10%BulletImpactOptimizer 守卫
闲置巡逻 (4 Follower)40-50 FPS50-65 FPSPatrol 缓存 + Activate 跳过
轻度战斗 (4 Follower)30-40 FPS40-55 FPSBeingHit 节流 + 消息队列
重度战斗 (8 Follower)20-30 FPS30-45 FPS综合效果

升级说明

  1. 备份 BepInEx/plugins/friendlyPMC/friendlyPMC.dll
  2. 备份 user/mods/friendlyPMC/ 目录
  3. 解压 release 包覆盖到 SPT 根目录
  4. 删除 user/mods/friendlyPMC/database/settings.json (自动重建)
  5. 新增的 config/skills.json 可按需自定义技能数值
  6. friendlyPMC-Optimizer.dll 会自动加载,无需额外配置

安装后验证:

  • BepInEx 控制台应显示 friendlyPMC-Optimizer: Applying performance patches...
  • BepInEx 控制台应显示 friendlyPMC-Optimizer: All patches applied (10 total).

回滚

  1. 删除 BepInEx/plugins/friendlyPMC/friendlyPMC-Optimizer.dll
  2. 恢复备份的 friendlyPMC.dll
  3. 恢复备份的 user/mods/friendlyPMC/ 目录

已知限制

  • Optimizer 通过反射访问原始 DLL 的内部字段,极端情况下 BepInEx 加载顺序可能导致反射失败 (Harmony 会自动跳过失败补丁)
  • 客户端 C# 源码因 IL 反编译语法问题无法直接 dotnet build,需原作者源码环境重新编译
  • FollowerCombatManager、CheckSeenEnemies 节流和掩体方向排序完整实现等部分优化仅存在于源码参考中,Optimizer 未覆盖

Vault-Tec Optimizer Terminal | v4.5.0 | 议会共识审查通过
编译环境: .NET SDK 10.0.300 | BepInEx 5.4.22 | Harmony 2.x
Remember: A well-optimized Vault is a happy Vault.

贡献者

The avatar of contributor named as SamuelNOTCuriousMeow SamuelNOTCuriousMeow

文件历史

撰写