---
title: "Ped"
description: "Ped 生成、作弊、帮派控制。"
---

---
title: Ped
description: Ped 生成、作弊、帮派控制。
---

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

> Ped 的生成、删除、属性和持续状态由 XBase 管理。XMenu 只负责参数转换和 UI；VC/III 只启用已确认 backend 与能力矩阵支持的对象级能力，不能把可链接桩当作支持。

## 生命周期

`Ped::Process()` 由 `Core::Process()` 唯一调用，宿主不得直接调用。`NotifyGameInit()` 会清理上一局的对象追踪状态；`Shutdown()` 会恢复由 XBase 管理的持续状态并清理生成会话。

```cpp
void NotifyGameInit();
void Shutdown();
```

## 安全控制

```cpp
struct NoFireOptions {
    bool enable = false;
    bool civilians = true;
    bool gangs = true;
    bool cops = true;
    bool mission = false;
};

void SetNoFire(bool enable);
void SetNoFire(const NoFireOptions& options);
bool GetNoFire();
NoFireOptions GetNoFireOptions();
void SetSpawnLimits(bool limitPolice, bool limitGangs, int maxPolice, int maxGangs);
void SetSmokingEffect(bool enable);
void SetFliesEffect(bool enable);
```

`NoFireOptions` 按 Ped 分类决定是否抑制开火，分类判定与抑制逻辑在 XBase 后端完成，宿主只推送选项：

| 字段 | 默认 | 作用 |
|---|---|---|
| `enable` | `false` | 总开关，关闭时任何分类都不抑制 |
| `civilians` | `true` | 平民 |
| `gangs` | `true` | 帮派 |
| `cops` | `true` | 警察 |
| `mission` | `false` | 任务 Ped |

一个 Ped 同时满足多个分类时按 任务、警察、帮派、平民 的顺序取第一个命中项，例如任务警察只受 `mission` 控制。

- `SetNoFire(bool)` — 只改总开关，分类保持当前值
- `SetNoFire(const NoFireOptions&)` — 整组写入，宿主控制器每帧按自身状态推送
- `GetNoFireOptions()` — 读回当前整组选项
- 能力项为 `BulletAssistFireSuppression`；查询为 `Unsupported` 的版本必须禁用入口
- `SetSpawnLimits` — 限制警察/帮派最大生成数量
- `SetSmokingEffect` / `SetFliesEffect` — 在玩家身上循环播放香烟/苍蝇特效；仅 SA 实现，能力项为 `PedSmokeFlies`

## 生成与删除

```cpp
struct PedSnapshot {
    bool valid;
    PedId id;
    unsigned int modelId;
    Vec3 position;
    float health;
    float armour;
    bool player;
    bool mission;
    bool cop;
    bool gang;
};

PedId GetLastSpawnedId();
PedSnapshot GetLastSpawnedSnapshot();
bool SpawnNearPlayer(unsigned int modelId, const Types::PedSpawnOptions& options);
bool SpawnAtMarker(unsigned int modelId, const Types::PedSpawnOptions& options);
void DeleteLastSpawned();
```

`GetLastSpawnedId()` 返回 XBase 的强类型 `PedId`。默认构造值或 `value == 0` 表示无效对象；XMenu 不保存游戏对象指针，也不参与 pool 生命周期管理。

`GetLastSpawnedSnapshot()` 在 XBase 内验证 pool 生命周期，返回模型、位置、生命、护甲和分类等纯值数据。对象不存在或已失效时返回 `valid == false` 的默认快照。

- `SpawnNearPlayer` — 在玩家面前 3 米生成 Ped，支持选项（血量、护甲、武器、敌对）
- `SpawnAtMarker` — 在雷达标记点位置生成 Ped（需放置标记）
- `DeleteLastSpawned` — 删除上次生成的 Ped

## 帮派控制

```cpp
void SetGangsControl(bool enable);      // 帮派控制街道
bool IsGangsControl();
void SetGangsEverywhere(bool enable);   // 帮派无处不在
bool IsGangsEverywhere();
void SetGangWarsActive(bool enable);    // 开启/关闭帮派战争
bool IsGangWarsActive();
void StartGangWar(bool offensive);      // 主动/防守触发帮战
void EndGangWar();

int  GetGangZoneDensity(int gangId);         // 获取帮派区域密度
void SetGangZoneDensity(int gangId, int density);
unsigned int GetGangMemberModel(unsigned int gangId, unsigned int slot);
void SetGangMemberModel(unsigned int gangId, unsigned int slot, unsigned int modelId);
void ResetGangModels();
void SetGangWeapons(unsigned int gangId, int weapon1, int weapon2, int weapon3);
```

## Ped 作弊

```cpp
void SetElvisEverywhere(bool enable);  bool IsElvisEverywhere();
void SetEveryoneArmed(bool enable);    bool IsEveryoneArmed();
void SetPedsMayhem(bool enable);       bool IsPedsMayhem();
void SetPedsAtkRocket(bool enable);    bool IsPedsAtkRocket();
void SetPedsRiot(bool enable);         bool IsPedsRiot();
void SetSlutMagnet(bool enable);       bool IsSlutMagnet();
void SetBigHead(bool enable);          bool IsBigHead();
void SetThinBody(bool enable);         bool IsThinBody();
void SetNastyLimbs(bool enable);       bool IsNastyLimbs();
void SetNoProstitutes(bool enable);    bool IsNoProstitutes();
```

`Ped::Process()` 维护由 XBase 接管的持续状态；XMenu 不得在页面或控制器中每帧重复写入游戏对象。
