1729 字
9 分钟
[EFT]塔科夫更新游戏后进不去战局解决方案one or more errors occurred

结论#

Escape from Tarkov 更新版本后进不去战局,报错提示:

  • 中文:发生一个或多个错误
  • 英文:one or more errors occurred

并且局内有概率看到紫色渲染(缺失贴图的占位色)。

如果同时满足「单人不触发 / 组队才炸」,那基本可以确定是跨版本残留着色器缓存的问题。

解决方案#

完全退出游戏和启动器,然后删掉这三个目录的内容:

%LOCALAPPDATA%\NVIDIA\DXCache
%LOCALAPPDATA%\NVIDIA\GLCache
%LOCALAPPDATA%\D3DSCache

一键脚本#

先完全退出游戏和启动器,然后以 PowerShell 执行:

Terminal window
$targets = @(
"$env:LOCALAPPDATA\NVIDIA\DXCache",
"$env:LOCALAPPDATA\NVIDIA\GLCache",
"$env:LOCALAPPDATA\D3DSCache"
)
# 安全护栏:只允许操作这三个解析后的绝对路径(自动取当前用户,无需手改)
$allowed = @(
(Join-Path $env:LOCALAPPDATA 'NVIDIA\DXCache'),
(Join-Path $env:LOCALAPPDATA 'NVIDIA\GLCache'),
(Join-Path $env:LOCALAPPDATA 'D3DSCache')
) | ForEach-Object { (Get-Item -LiteralPath $_ -Force -ErrorAction SilentlyContinue).FullName } |
Where-Object { $_ }
foreach ($t in $targets) {
$full = (Get-Item -LiteralPath $t -Force).FullName
if ($allowed -notcontains $full) { "ABORT: 意外路径 $full"; continue }
$before = (Get-ChildItem -LiteralPath $full -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum)
"--- $full : 清理前 {0:N1} MB / {1} 个文件" -f ($before.Sum/1MB), $before.Count
# 只删目录内容,保留目录本身,让驱动自行重建
Get-ChildItem -LiteralPath $full -Force -ErrorAction SilentlyContinue | ForEach-Object {
Remove-Item -LiteralPath $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
$after = (Get-ChildItem -LiteralPath $full -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum)
$rem = if ($null -eq $after.Sum) { 0 } else { $after.Sum }
" 清理后 {0:N1} MB / {1} 个文件 | 释放 {2:N1} MB" -f ($rem/1MB), $after.Count, (($before.Sum - $rem)/1MB)
}

脚本无需任何手改,路径自动按当前用户解析。$allowed 只是防手滑的护栏,不想要可以直接删掉那几行。

实测效果#

目标清理前清理后释放
NVIDIA DXCache4783.7 MB / 436 文件17.8 MB / 19 文件4765.9 MB
NVIDIA GLCache162.5 MB / 32 文件0 MB162.5 MB
D3DSCache7.9 MB / 112 文件0 MB7.9 MB
合计≈ 4.93 GB

清理后组队进战局恢复正常,紫色渲染不再出现。

修复速查表#

项内容
触发条件游戏版本更新后未清缓存 + 多人组队
报错关键词发生一个或多个错误 / one or more errors occurred
伴随症状局内紫色渲染、缺失贴图
根因跨版本残留着色器缓存与新版引擎不兼容,prewarm 失败导致组队路径 profile 重建崩溃
修复清理 NVIDIA\DXCache、NVIDIA\GLCache、D3DSCache
代价首次进图重新编译着色器,前几局略卡,之后恢复

别删错东西#

下面这些不是缓存,不要动:

路径说明
build\EscapeFromTarkov_Data\...\shaders游戏资源文件,不是缓存
BsgLauncher\CefCache启动器内嵌浏览器缓存,含登录态,删了要重新登录

删不干净是正常的#

DXCache 里会剩下十几个 .nvph 文件(本次是 19 个 / 17.8 MB)删不掉,因为被这些正在跑的进程占用着:

dwm 桌面窗口管理器
explorer 资源管理器
nvcontainer / NVDisplay.Container
NVIDIA Overlay
steamwebhelper

它们时刻在用 GPU,句柄不会释放。占比极小,不用管;下次重启后想删再删一次即可。

养成习惯:每次 EFT 大版本更新后,先清一次着色器缓存再进游戏。


事件报告#

下面是完整的复现条件与排查过程,留档备查。

问题现象#

Escape from Tarkov 更新到 1.2.5.0.48146 之后,出现了一个很恶心的故障:

  • 单人进战局正常,不触发
  • 多人组队进战局必炸,弹出「一个或者更多的错误」
  • 局内有概率看到紫色渲染(缺失贴图的经典表现)

复现条件很明确:更新游戏后没有清理缓存。

组合起来就是:单人不触发 + 组队必触发 + 紫块。看起来很像网络问题或者服务端问题,其实都不是。

日志位置#

EFT 如果是 Steam 装的,日志不在 Battlestate 目录下,而是在游戏根目录:

C:\Program Files (x86)\Steam\steamapps\common\Escape from Tarkov\build\Logs\

每次启动会生成一个 log_日期_时间_版本号 的目录,里面最有用的是:

文件作用
*errors_000.log错误与异常堆栈
*backend_000.log所有 HTTP 请求/响应
*output_000.log主日志(很大,用 grep 捞)
*files-checker_000.log文件一致性校验

关键证据#

在 output_000.log 里按时间捞出失败瞬间的上下文:

17:52:28 WebSocket: payloadType=groupMatchStartGame ← 服务器让进战局
17:52:29 files-checker: Consistency ensurance is succeed
17:52:33 MatchingCompleted / scene preset: factory_day ← 匹配成功,目标地图 Factory
17:52:56 LocationLoaded ← 地图已加载完
17:52:56 Network game matching aborted. ErrorCode: 0 ← 崩在这
17:52:57 Error| AggregateException
17:53:13 ArgumentNullException: Value cannot be null.
Parameter name: source
at EFT.EftClientBackendSession.SetProfiles (EFT.ProfileDescriptor[] profilesData)

这里有个反直觉的点:报错信息长得像网络故障,但 backend_000.log 里整场请求全部 200,耗时 0.3~1.5 秒,一切正常:

<--- Response HTTPS, id [35]: /client/game/profile/select, SumSeconds: 0.976
<--- Response HTTPS, id [70]: /client/match/raid/ready, SumSeconds: 1.052

网络层是干净的,锅不在网络。

为什么单人不炸、组队才炸#

这才是定位的关键。

  • 单人:进图流程简单,直接由本地会话接管,不经过完整的 group matching 状态机。
  • 组队:要走 NetworkGameMatching,服务器下发 groupMatchStartGame 之后,客户端需要在加载地图的同时重建整份 profile 数据(队友信息、战局池、场景预设)。这条路径更长,会去读着色器缓存。

而 SetProfiles 收到的是 null 数组,随后在 System.Linq.Enumerable.Select 上直接炸掉——profile 重建失败,于是弹错误屏。

再往前追,17:52:36 其实已经埋了雷:

Warn|output| Failed prewarm shot delegate because System.NullReferenceException

prewarm(预渲染)已经出问题了 —— 这正是着色器缓存出问题的直接信号。

紫色渲染的解释#

紫色 = Shader 编译失败 / 贴图缺失 的经典占位色。

版本更新后,旧的着色器缓存二进制与新版引擎不兼容,但游戏仍然尝试复用:

  • 能读的旧缓存 → 硬用 → 渲染异常/紫块
  • 读不了的旧缓存 → 抛异常 → prewarm 失败 → 继续往上冒泡 → 组队路径的 profile 重建崩掉

所以紫块和进不去战局是同一个根因的两个症状,不是两个独立问题。

相关但无关的现象#

日志里会刷屏:

Warn|output| Renderer 'shadow' is registered with more than one LODGroup

这是地图资源注册的已知老噪音,跟本故障无关,不用理会。

为什么单人不触发#

再强调一次,因为这点最容易误导排查方向:单人进图走的是短路径,不经过完整的 group matching 状态机,所以即使缓存是坏的也可能侥幸进图。别因为”单人能进”就排除缓存问题。

检索关键词#

方便日后搜索,本故障的常见表述:

発生一個或多個錯誤、发生一个或多个错误、一个或多个错误、one or more errors occurred、An error occurred、进不去战局、无法进入战局、匹配成功但进不去、组队进不去、单人正常组队报错、紫色渲染、紫色贴图、缺失贴图、紫块、着色器缓存、ShaderCache、DXCache、D3DSCache、SetProfiles、ArgumentNullException、Network game matching aborted、prewarm shot delegate、EFT 更新后进不去、Tarkov 更新后报错、Escape from Tarkov 缓存清理。

[EFT]塔科夫更新游戏后进不去战局解决方案one or more errors occurred
https://blog.shiraneko.com/posts/eft更新游戏后进不去战局-清理着色器缓存/
作者
ShiraNeko
发布于
2026-10-16
许可协议
CC BY-NC-SA 4.0