---
title: "Core"
description: "初始化、世界就绪检测。"
---

---
title: Core
description: 初始化、世界就绪检测。
---

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

## 初始化与领域所有权

```cpp
void Init(DomainMask enabledDomains = 0);
void SetEnabledDomains(DomainMask enabledDomains);
DomainMask GetEnabledDomains();
bool IsDomainEnabled(Domain domain);
```

领域定义（每个领域一个位）：

```cpp
enum class Domain : std::uint32_t {
    Player = 1u << 0,
    Ped = 1u << 1,
    Vehicle = 1u << 2,
    World = 1u << 3,
    Weapon = 1u << 4,
    Teleport = 1u << 5,
    Scene = 1u << 6,
    Visual = 1u << 7,
    BulletAssist = 1u << 8,
    Overlay = 1u << 9,
    Camera = 1u << 10,
    Cheats = 1u << 11,
    VehicleEffects = 1u << 12,
};

constexpr DomainMask DomainBit(Domain domain);
```

`Init()` 默认不启用任何领域。宿主必须显式移交领域；掩码会过滤当前静态库不支持的领域。`SetEnabledDomains()` 支持运行时增减所有权：撤销领域时先执行该领域的 `Shutdown()`，晚启用 Player 且游戏已初始化时会补发初始化通知。

## Process

```cpp
void Process();
```

宿主每帧调用一次。Core 只向已启用且已完成后端实现的领域分发，宿主不得再并行调用同一领域的 `Process()`。

## 世界就绪

```cpp
bool IsWorldReady();
```

检测当前游戏世界是否已创建本地玩家对象。SA 后端使用真实世界状态；VC/III 通过 `Player::IsAvailable()` 验证玩家池与本地玩家是否可用，portable 后端同样访问真实游戏对象。

## 新游戏、读档与关闭

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

`NotifyGameInit()` 用于新游戏或读档：领域丢弃旧对象快照，不把旧存档状态写回新对象。`Shutdown()` 在卸载或领域撤销时恢复由 XBase 管理的运行时效果，并清理内部状态。
