CS2 Fog Of War: 服务器端反透视作弊遮挡剔除插件,适用于CS2服务器

Hacker News Top 工具

摘要

CS2FOW 是一个针对《反恐精英2》的服务器端插件,它利用遮挡剔除技术,通过不发送隐藏的敌人位置给客户端,来防止透视作弊。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/06 20:06

karola3vax/CS2FOW 源码: https://github.com/karola3vax/CS2FOW

[CS2FOW] (Counter-Strike 2 战争迷雾)

面向《反恐精英2》服务器的服务端反透视遮挡剔除

版本(https://github.com/karola3vax/CS2FOW/releases/latest) 下载(https://github.com/karola3vax/CS2FOW/releases) 问题反馈(https://github.com/karola3vax/CS2FOW/issues) 许可证 最后提交(https://github.com/karola3vax/CS2FOW/commits/main)

CS2FOW 演示

常见问题

本 FAQ 回答了来自 Reddit、Discord、GitHub 以及实际服务器测试中反复出现的问题。

CS2FOW 是什么?

CS2FOW 是一个面向《反恐精英2》社区服务器(community servers)的服务端反透视插件。如果一名敌人完全隐藏在实体地图几何体后方,CS2FOW 可以停止向客户端发送该敌人的实时实体数据。如果客户端从未收到隐藏敌人的位置,那么透视作弊程序可用来绘制数据的价值就大大降低。

这是视觉滤镜吗?

不是。CS2FOW 不会在玩家电脑上模糊、隐藏或修改任何内容。它在服务器上运行,控制哪些敌方实体被传输到每个客户端。

这能在 Valve 匹配中使用吗?

不能。CS2FOW 是一个面向社区和专用服务器的 Metamod 服务器插件。玩家无需安装它,并且除非 Valve 在游戏内部实现类似功能,否则无法在 Valve 官方匹配中使用。

加入 CS2FOW 服务器的玩家会被 VAC 封禁吗?

CS2FOW 本身不会带来预期风险。它在服务器上运行,不会修改客户端文件、注入客户端或要求玩家安装任何东西。

作弊程序能绕过这个吗?

不能以通常的“更新作弊“方式绕过。如果服务器发送敌人位置,作弊程序就能读取到。如果服务器不发送隐藏敌人的位置,作弊程序就无法恢复其从未收到的确切实时数据。作弊程序仍然可以使用较弱的信号,比如声音事件、最后已知位置、常见的预瞄点、队友信息或游戏意识。CS2FOW 减少了透视作弊的主要数据来源,但不能让作弊完全不可能。

这会把玩家从服务器中移除吗?

不会。敌人在服务器上仍然正常存在。命中判定、子弹穿透、伤害、移动和游戏规则仍然在服务器端进行。CS2FOW 只改变那个敌人实体是否被传输到特定客户端。

我还能穿墙射击隐藏的敌人吗?

可以。如果你正确穿过墙壁或门射击,服务器仍然可以判定命中。你的客户端不需要知道敌人的精确位置,服务器就能处理子弹。

具体隐藏了什么?

在当前预览版中,CS2FOW 对存活的 T/CT 玩家过滤了存活的敌方角色(pawn)及其当前持有的武器。它不会过滤队友、自身、死亡玩家、观察者、HLTV、投掷物、掉落物、粒子、特效或声音。

人机(bot)会受影响吗?

会,如果它们是存活的敌方角色。人机在可见性计算中与普通玩家同等对待。死亡人机、被观察的玩家、队友和观察者不会被过滤。

为什么观察者仍然能看到一切?

这是设计如此。CS2FOW 只对存活的 T/CT 玩家进行过滤。死亡玩家、观察者和 HLTV 保持未过滤状态,因为观察者的行为与实时游戏不同,更容易导致破坏。

它能阻止雷达作弊吗?

部分阻止。如果雷达作弊依赖于服务器发送的敌方实体位置,CS2FOW 也会减少这部分数据。隐藏的敌人不会被传输,因此可绘制的实时位置数据更少。目前它不会隐藏声音事件、队友信息、炸弹信息或所有可能的世界线索。

声音 ESP 和脚步声呢?

声音与玩家实体是分开的。玩家位置是实体数据。脚步声、枪声和其他音频提示是声音事件。CS2FOW 目前专注于实体可见性,不会随机化或剥离声音。声音过滤需要谨慎设计,因为服务器不知道谁在作弊。任何声音的改动也会影响合法玩家,而脚步声是 CS 的核心机制。

烟雾呢?

当前预览版不使用烟雾作为遮挡物。CS2FOW 使用静态地图几何体。烟雾是动态的,需要不同的处理方式。一个简单的未来版本可以大致用体积来模拟主动烟雾,但真正的烟雾行为需要更多研究,以免破坏正常游戏。

门、可破坏物、道具或移动遮挡物呢?

当前预览版未涵盖。CS2FOW 使用静态烘焙好的地图几何体。诸如门、可破坏物、道具、烟雾、粒子和投掷物等动态遮挡物目前有意排除在范围之外。

掉落的武器呢?

掉落的武器是真正的信息泄露,应该稍后处理。它们不是持续的玩家 ESP,但在残局中可能泄露决策信息。例如,一把武器出现、消失或移动可以揭示玩家可能转移到了哪里。未来的干净修复是对掉落武器实体也进行可见性过滤。

为什么武器枪口会在墙角处出现?

预览版检查的是玩家身体周围的点,而不是每个持有的武器枪口。如果枪在身体可见之前先露出墙角,则当该玩家被传输时,武器会弹出。可能的修复方法是添加武器枪口或武器边界可见性采样,使得当持有的武器变得可见时,玩家提前被揭示。

可见性检查有多精确?

在空间上,它使用真实的 CS2 地图物理资源,而不是手工制作的地图。烘焙器从已加载的地图中提取静态世界碰撞三角形,构建 BVH8 加速结构,运行时针对该几何体检查多个观察点和目标点。对于坚固的静态墙壁、地板、角落和正常地图掩体是精确的。它不是对每个动态游戏对象的完整模拟。

它在窥探时会导致弹出(pop-in)吗?

目标是提前揭示,而不是精确到最后一毫秒的揭示。CS2FOW 利用移动和延迟进行预测,在精确可见之前稍早地揭示敌人,并使已揭示的敌人短暂保持可见。这有意泄露一个靠近墙角的小窗口,以避免延迟弹出。预览版仍需要针对边缘情况在真实服务器上测试。

CS2FOW 使用什么延迟?

玩家网络延迟,而非服务器帧时间。CS2FOW 使用接收方的 RTT/ping 加上工作线程更新间隔来决定提前多少揭示。高 ping 玩家可以接收更大的提前揭示缓冲区,上限由配置决定。

高 ping 会使情况更糟吗?

高 ping 通过稍早揭示来处理。这并不能让网络完美,但 CS2FOW 不会等待客户端说“我过了这堵墙“。服务器已经知道玩家位置和地图几何体。

CS2FOW 每 tick 都运行可见性检查吗?

不是。一个工作线程按间隔刷新可见性矩阵。默认为 10ms。CheckTransmit 只读取已完成的矩阵,不执行 BVH 遍历、射线计算、文件 I/O、锁或烘焙。

这对服务器负载重吗?

测试中未观察到明显开销。昂贵的地图工作要么提前完成,要么在低优先级的后台烘焙中进行。运行时检查使用预烘焙的 BVH8 数据和 AVX 数学,而非引擎 TraceRay 的滥用。在测试的 12v12 最坏情况下,旧的基于 trace 的方法可能需要大约 60ms。CS2FOW 平均大约 1ms,最坏情况大约 8ms。

32 人死斗模式呢?

最坏情况是更多定向的敌我对,特别是当每个人都是敌人时。CS2FOW 就是为此类工作负载设计的:预烘焙地图数据、BVH8 遍历、AVX 数据包数学、工作线程、提前退出和缓存的三角形数据包。服务器管理员仍应在自己的地图和玩家人数上使用 cs2fow_status 进行测试。

为什么它这么快?

因为它不要求引擎追踪每个线段。烘焙器将地图几何体转换为运行时就绪的 BVH8。在运行时,AVX 并行检查多个子包围盒或三角形。大多数可见性检查在证明敌人应该可见的一个清晰线段后立即提前退出。

为什么用 AVX 而不是 AVX2?

AVX 是运行时基线,以便更多服务器可以运行它。BVH8 格式仍然使用八路浮点向量。这与 AVX 兼容。AVX2 主要对整数/向量操作有用,而 CS2FOW 在当前遍历路径中并不严重依赖这些。预览版中没有标量回退方案。

为什么我的 VDS 显示缺少 AVX?

一些 VDS 提供商从虚拟机中隐藏了 CPU 特性。即使物理 CPU 支持 AVX,客户操作系统也可能不暴露 AVX 或 OS AVX 状态。请使用 CPU-Z、lscpu 或向您的主机提供商查询。

自动地图烘焙是做什么的?

如果当前地图没有有效的 .bvh8 文件,CS2FOW 会在后台以低优先级启动内置的烘焙器。在烘焙过程中,服务器保持可玩且采用故障开放(fail-open)模式。烘焙验证通过后,CS2FOW 可在同一地图会话期间激活。

自动烘焙支持创意工坊地图吗?

支持,只要 CS2 已加载该地图且服务器可以读取 VPK。CS2FOW 解析已加载的地图 VPK,包括包含嵌套 maps/.vpk 的创意工坊附加 VPK,然后从该源进行烘焙。

为什么附带可选的官方地图预烘焙?

为了方便和适应不友好的托管环境。自动烘焙应该适用于正常安装,但某些 Linux 权限、面板设置或 VDS 策略可能会阻止后台可执行文件。可选的预烘焙让服务器管理员无需在首次加载时运行烘焙器即可安装官方地图数据。

如果 Valve 更新了地图怎么办?

CS2FOW 在使用烘焙之前会验证地图源。烘焙存储了源物理 CRC 和大小。在地图加载时,CS2FOW 将当前地图源与烘焙源进行比较。如果不匹配,则拒绝烘焙,CS2FOW 采用故障开放模式,直到生成新的烘焙。对于嵌套的创意工坊地图包,也会跟踪嵌套的地图 VPK 源。

“故障开放” 是什么意思?

如果 CS2FOW 不确定,它会正常显示玩家。缺失地图数据、损坏的烘焙、错误的 CRC、不支持的 CPU 特性、过时的工作线程结果、失败的 hook 以及烘焙进行中的状态,都不应错误地隐藏玩家。

为什么 Linux 报告 GLIBCXX_3.4.32 not found?

较旧的 Linux 包是针对比某些 SteamRT3 服务器提供的 libstdc++ 更新的版本构建的。v0.1.1-preview 将 Linux 构件重新针对 Valve 的 SteamRT3 Sniper SDK 构建,并为该运行时基线添加了 ABI 检查。

为什么 Linux 报告 automatic bake failed: Permission denied?

服务器可能无法执行打包的烘焙器或 VRF 二进制文件。检查 Linux 上的可执行权限:

chmod +x game/csgo/addons/cs2fow/bin/cs2fow_baker
chmod +x game/csgo/addons/cs2fow/tools/vrf/*

还要检查托管面板、容器、挂载选项或提供商策略是否阻止从服务器目录执行文件。

gamedata 是做什么用的?

Gamedata 存储插件使用的小型平台相关偏移量。CS2FOW 需要这些来读取 CheckTransmit 接收槽和解析实体系统。如果 CS2 更改了这些布局,gamedata 可能需要更新。

在 bug 报告中应该包含什么?

包括:

  • CS2FOW 版本。
  • Windows 还是 Linux。
  • 专用服务器、面板、容器或 VDS 提供商。
  • 地图名称。
  • cs2fow_status 输出。
  • 插件加载和地图启动时的服务器控制台日志。
  • 问题发生在存活、死亡、观察还是人机上。
  • 如果报告涉及弹出或可见性,请附上简短片段。

工作原理

如果敌人完全隐藏在实体地图几何体后面,作弊程序就没有敌人数据可绘制。

CS2FOW 不是视觉滤镜。它是服务端可见性剔除。该插件使用真实的 CS2 地图物理资源,将静态世界三角形烘焙成 BVH8 加速结构,然后在一个工作线程上使用 AVX 数学来决定每个玩家应该传输哪些敌方角色(pawn)。CheckTransmit 只读取已完成的可见性矩阵。

flowchart LR
A["已加载的地图 VPK"] --> B["world_physics.vmdl_c"]
B --> C["CS2FOW 烘焙器"]
C --> D["过滤后的静态三角形"]
D --> E["BVH8 地图数据"]
E --> F["运行时工作线程"]
G["玩家快照"] --> F
F --> H["可见性矩阵"]
H --> I["CheckTransmit"]
I --> J["隐藏的敌人不被发送"]

CS2FOW 所见的静态地图几何体

为什么选择 CS2FOW

传统的服务端反透视方法通常依赖昂贵的引擎 TraceRay 检查。CS2FOW 通过将繁重的地图工作离线完成或以低优先级后台烘焙进行,然后在运行时使用烘焙好的 BVH8 数据,避免了这种运行时开销。在 12v12 最坏情况测试中,旧的基于 trace 的方法可能达到大约 60ms。CS2FOW 平均大约 1ms,最坏情况大约 8ms。在测试场景中快达 50 倍。

快速开始

  1. 选择您的核心包
    Windows: cs2fow-0.1.1-preview-windows-x86_64.zip
    Linux: cs2fow-0.1.1-preview-linux-x86_64.zip
  2. 解压到 CS2
    将包解压到您的服务器目录:game/csgo
    必须已安装 CS2 的 Metamod:Source。
  3. 启动并检查
    启动服务器,加载地图,然后运行:
    cs2fow_status

从最新发布版下载:https://github.com/karola3vax/CS2FOW/releases/latest

v0.1.0-preview 中的可选官方地图预烘焙仍然兼容:

cs2fow-0.1.0-preview-official-maps.zip

如果您希望官方地图无需首次加载烘焙即可激活,请将该 zip 解压到 game/csgo。

自动地图烘焙

如果地图数据缺失或过时,CS2FOW 会为当前加载的地图启动一个低优先级后台烘焙。在此期间服务器保持可玩。烘焙验证通过后,CS2FOW 将在同一会话期间为该地图激活。这支持官方地图、自定义地图和创意工坊地图,只要 CS2 已加载该地图且 addons/cs2fow/data/maps 文件夹可写。

硬件要求

CS2FOW 需要 CPU 支持 AVX 以及操作系统 AVX 状态支持。大多数 2012 年及以后的 CPU 都支持 AVX,但某些 VDS 提供商在虚拟机内隐藏或禁用了它。如果 CS2FOW 未激活,请使用 CPU-Z 或类似工具检查 AVX 支持。

配置

默认配置位于 cfg/cs2fow.cfg:

cs2fow_enable 1
cs2fow_update_interval_ms 10
cs2fow_max_lookahead_ms 210
cs2fow_min_lookahead_ms 120
cs2fow_peek_margin_units 21
cs2fow_visibility_hold_ms 150
cs2fow_debug 0

cs2fow_status 报告激活或禁用状态、地图 CRC、烘焙版本、三角形数量、工作线程时序、结果年龄、评估的配对、可见总数、隐藏总数以及自动烘焙进度。

手动烘焙器

内置烘焙器可由插件自动使用,也可以手动运行:

cs2fow_baker --game --map de_dust2 --output de_dust2.bvh8

对于已加载的自定义或创意工坊附加 VPK,使用 --vpk <path>。包含 maps/.vpk 的创意工坊附加包会被自动提取。

生成的地图数据来源于《反恐精英2》游戏数据,受 DATA_NOTICE 覆盖,而非 MIT 项目许可证。

从源码构建

构建需要 Metamod:Source 和 HL2SDK CS2 引用。本地默认值与此工作区布局匹配:

mkdir build
cd build
python ../configure.py
ambuild

然后打包:

python package.py

GitHub Actions 在每次推送时构建并测试 Windows 和 Linux 包。

已知限制

  • 仅支持静态地图几何体。
  • 不支持烟雾、门、可破坏物、投掷物、粒子、道具或其他动态遮挡物。
  • 没有标量回退;需要 AVX。
  • CS2 更新可能需要 gamedata 更新。

支持

使用 GitHub Issues 进行错误报告和功能请求:https://github.com/karola3vax/CS2FOW/issues

许可证

项目代码采用 MIT 许可。请参阅 LICENSE、THIRD_PARTY_NOTICES 和 DATA_NOTICE。

相似文章

Game Demon:CS2的AI教练工具

Reddit r/AI_Agents

Game Demon是一款AI教练工具,旨在通过提供实时分析和反馈来帮助玩家在CS2中提升水平。

Block Game中的软件遮挡剔除

Hacker News Top

本文阐述了在Block Game中采用软件遮挡剔除技术的实现方法,用于优化弱硬件环境下的渲染性能,并取得了显著的区块剔除效果与帧率提升。

CoW — 一个用于 Wayland 的堆叠式窗口管理器

Lobsters Hottest

CoW 是一个用于 Wayland 的堆叠式窗口管理器,旨在复制 FVWM 和 MWM 的外观和感觉,同时提供现代功能,如 IPC 脚本和可定制的服务器端装饰。它使用 C 语言开发,并托管在 Codeberg 上。