---
title: "BulletAssist"
description: "子弹追踪、坐标透视、强制锁定与开火抑制。"
---

---
title: BulletAssist
description: 子弹追踪、坐标透视、强制锁定与开火抑制。
---

`include/XBase/BulletAssist.h` · `XBase::BulletAssist`

> 追踪计算、射线重定向和绘制由 XBase 后端持有，宿主只设置 `Config` 并决定 UI 开关。命中重定向只发生在本地玩家的开火作用域内，相机专用射线不参与改写。

## 配置

```cpp
enum class AimPart {
    Head,
    Chest,
    Abdomen,
    Legs,
};

struct Config {
    bool tracking = false;
    bool throughWalls = false;
    bool hardLock = false;
    bool trackCivilian = true;
    bool trackFriend = false;
    bool trackHostile = true;
    bool trackNeutral = true;
    AimPart aimPart = AimPart::Chest;
    float lockRange = 100.0f;
    int maxTargets = 4;
    bool drawPedBounds = false;
    bool drawPedCollision = false;
    bool drawPedSkeleton = false;
    bool drawVehicleBounds = false;
    bool drawVehicleCollision = false;
};

void SetConfig(const Config& config);
Config GetConfig();
```

`lockRange` 下限为 10，`maxTargets` 限定 1~16，越界值由 XBase 在 `SetConfig()` 内收敛。

## 生命周期

```cpp
void Init();
bool IsInitialized();
void Process();
void Shutdown();
void Draw();
```

`Init()`、`Process()`、`Shutdown()` 由 `Core` 领域分发，宿主不要绕过 Core 建立第二套 `Process()`。`Draw()` 由宿主在绘制回调中调用，只负责 ESP 显示，不驱动目标搜索。

## 开火抑制

```cpp
bool ShouldSuppressPedFire(PedId ped);
```

只提供开火抑制判断，不暴露 `CPed*`；分类过滤按 `XBase::Ped::NoFireOptions` 的优先级在 XBase 内部完成，宿主只通过 Ped 域设置选项，见 [Ped](/docs/xbase/ped)。

## 行为边界

- 目标搜索基于相机前向与距离评分，关系过滤使用任务关系（平民/友军/敌对/中立），被锁定目标在每次开火时轮询。
- 追踪命中重定向只作用于本地玩家的开火调用栈；相机专用射线（`cameraIgnore`）始终按原参数放行。
- 追踪命中时只强制开启行人碰撞；只有启用 `throughWalls` 才关闭建筑、物体与假对象碰撞。
- 已损毁载具不会作为有效命中实体返回。
- `hardLock` 需要同时开启 `tracking` 并按住瞄准输入（瞄准键或鼠标键）才生效；锁定目标具有粘性，目标失效后才切换到准星最优目标，不会随多发轮询跳视角。
- 剧情、过场动画、相机过渡、玩家控制被脚本禁用、玩家死亡或濒死、相机缓冲或行人池不可用时，追踪计算、射线重定向与 ESP 绘制同时停止，并持续清空候选列表、本次射击目标与强锁目标；离开阻断状态后延迟 750 毫秒自动恢复，不需要宿主重新开关功能。

## 版本能力

| FeatureCapability | SA | VC | III |
|---|:-:|:-:|:-:|
| BulletAssistTracking / ThroughWalls / HardLock / PedBounds / VehicleBounds | ✅ | ✅ | ✖ |
| BulletAssistPedCollision / PedSkeleton / VehicleCollision / FireSuppression | ◐ | ◐ | ✖ |

标注 ◐ 表示同领域内仍有部分动作受限。页面必须逐项查询 `FeatureCapability`，不能因为 `Capability::BulletAssist` 可链接就启用全部开关；III 当前没有可用的追踪后端。
