> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 创建基于事件的成就的场景

> 基于事件的 XBOX Live 成就的常见模式,涵盖 AND/OR 逻辑、重复操作、集合、个人最佳成绩和布尔标志。

本主题介绍了一些创建成就的常见场景。

<Note>如果您目前正在使用基于事件的成就(Achievements 2013)并希望继续使用跨进度,则本主题适用。否则,我们建议使用[基于游戏管理的成就](/services/xbox-services/player-data/achievements/title-managed/live-achievements-tm-overview)。</Note>

* [多条件的 AND/OR 逻辑](#scenario-1)
* [重复操作](#scenario-2)
* [操作集合](#scenario-3)
* [个人最佳](#scenario-4)
* [表示满足条件的二进制值](#scenario-5)

<a id="scenario-1" />

## 多条件的 AND/OR 逻辑

成就有两种常见的 AND 场景:同步 AND 和异步 AND。

### 异步 AND

异步 AND 逻辑定义了一个成就,当所有成就规则都满足时才解锁。用户可以在不同的时间点独立地满足每个规则。

这种成就的一个示例是"消灭 10 只僵尸和 20 个幽灵"。要定义此成就,请配置多个成就规则,如下表所示。

| 字段           | 值                      |
| ------------ | ---------------------- |
| **规则 #1 名称** | **消灭 10 只僵尸**          |
| 统计           | Kills.EnemyType.Zombie |
| 操作           | SUM                    |
| 阈值           | 10                     |
| **规则 #2 名称** | **消灭 20 个幽灵**          |
| 统计           | Kills.EnemyType.Ghost  |
| 操作           | SUM                    |
| 阈值           | 20                     |

### 同步 AND

同步 AND 逻辑定义了一个成就,当所有成就规则都满足时才解锁,其中用户必须同时满足每个条件。这种成就的一个示例是"以 Johnny 身份游戏时用球棒消灭 10 只僵尸"。

同步 AND 规则不能简单地通过多个分别捕获每个条件的成就规则来定义。这种方法不能按需工作,因为每个成就规则都可以独立满足。如果用户执行以下操作,示例成就将被错误地解锁:

* 星期一:以 Johnny 身份游戏并获得零个击杀。
* 星期二:以 Sam 身份游戏并获得 10 个僵尸击杀。
* 星期五:以 Tim 身份游戏并用球棒获得五个骷髅击杀。

要定义这样的成就,您必须定义一个涵盖每个条件的统计规则。只有事件包含用户活动的完整上下文,因为它们精确地表达了游戏中在给定时刻发生的事情。统计信息继承自事件,成就继承自统计信息。您必须将成就条件定义为统计信息以保留与成就相关的任何上下文。只有当阈值通过包含您所需精确值的特定统计实例被满足时,成就才会被解锁。以下配置定义了示例成就。

| 字段           | 值                                                            |
| ------------ | ------------------------------------------------------------ |
| **规则 #1 名称** | 以 Johnny 身份游戏时用球棒消灭 10 只僵尸                                   |
| 统计           | Kills.EnemyType.Zombie.WeaponType.Bat.PlayerCharacter.Johnny |
| 操作           | SUM                                                          |
| 阈值           | 10                                                           |

### 成就的 OR 逻辑

成就最常见的 OR 场景是将特定目标描述为一组不同的、明确枚举的可能方式。成就可以通过这种方式或那种方式解锁。

您不能通过为每个目标定义多个成就规则来实现这种场景。成就上的多个规则作为逻辑 AND 起作用,因此必须满足每个规则才能解锁成就。使用一个成就规则"在赛道 A 上以少于三分钟完成比赛",另一个成就规则"在赛道 B 上行驶 1,000 英里",将产生一个仅当用户满足这两个目标时才解锁的成就。

相反,要定义具有 OR 逻辑的成就,您必须配置单个成就规则以基于多个统计实例,其中每个统计实例跟踪一种可接受的方式。

#### 使用 MIN 或 MAX 规则

这种情况的一个示例是"在赛道 A、赛道 B 或赛道 F 上以少于三分钟完成比赛"。此项的成就配置如下表所示。

| 字段           | 值                             |
| ------------ | ----------------------------- |
| **规则 #1 名称** | 在赛道 A、B 或 F 上以少于三分钟完成比赛       |
| 统计           | FinishTimeInSeconds.TrackId.A |

FinishTimeInSeconds.TrackId.B

FinishTimeInSeconds.TrackId.F
操作 | MIN
阈值 | 180

因为此成就规则使用 MIN 规则操作,所以当任何列出的统计实例满足阈值时,成就将被解锁。例如,如果 `FinishTimeInSeconds.TrackId.A is 220`,`FinishTimeInSeconds.TrackId.B is 163`,`FinishTimeInSeconds.TrackId.F` 为 199,则成就将被解锁,因为用户在赛道 B 上的完成时间优于阈值。

#### 使用 SUM 规则

这种情况的一个示例是"在赛道 A、赛道 B 或赛道 F 上累计行驶 1,000 英里"。此项的成就配置如下表所示。

| 字段           | 值                          |
| ------------ | -------------------------- |
| **规则 #1 名称** | 在赛道 A、B 或 F 上行驶 1,000 英里以上 |
| 统计           | MilesDriven.TrackId.A      |

MilesDriven.TrackId.B

MilesDriven.TrackId.F
操作 | SUM
阈值 | 1000

因为此成就规则使用 SUM 规则操作,所以当所列统计实例的聚合组合满足阈值时,成就将被解锁。例如,如果 `MilesDriven.TrackId.A is 900`,`MilesDriven.TrackId.B is 115`,`MilesDriven.TrackId.F is 0`,则成就将被解锁,因为用户在所有三个统计信息中的聚合总数优于阈值。

#### 达到此目标或那个目标

不受支持的成就场景是要求用户完成几个不同目标中的一个。例如:"在赛道 A 上以少于 3 三分钟完成比赛,或在赛道 B 上行驶 1000 英里"。

此成就场景目前在成就逻辑中不受支持。您不能通过为每个目标定义多个成就规则来完成此操作。成就上的多个规则作为逻辑 AND 起作用,因此必须满足每个规则才能解锁成就。使用一个成就规则"在赛道 A 上以少于三分钟完成比赛",另一个成就规则"在赛道 B 上行驶 1,000 英里",将产生一个仅当用户满足这两个规则时才解锁的成就。

<a id="scenario-2" />

## 重复操作

使用此模式定义一个需要用户多次重复某项操作的成就。

### 示例 1:赢得 50 场多人比赛

| 字段       | 值                                          |
| -------- | ------------------------------------------ |
| **规则名称** | 赢得 50 场多人比赛                                |
| 统计       | MatchesCompleted.Result.1.Mode.Multiplayer |
| 操作       | SUM                                        |
| 阈值       | 50                                         |

### 示例 2:上传 10 个视频并评价 100 个视频

| 字段           | 值              |
| ------------ | -------------- |
| **规则 #1 名称** | **上传 10 个视频**  |
| 统计           | VideosUploaded |
| 操作           | SUM            |
| 阈值           | 10             |
| **规则 #2 名称** | **评价 100 个视频** |
| 统计           | VideosRated    |
| 操作           | SUM            |
| 阈值           | 100            |

有关设计用户统计信息的详细信息,请参阅[使用计数器进行累计值](/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-user-stats-scenarios#ucfcv)。

<a id="scenario-3" />

## 操作集合

### 目标:找到 Y 个项目中的 X 个

使用此模式定义一个需要用户对特定集合中的所有(或子集)成员进行操作的成就。

### 示例 1:在硬核难度下完成所有级别

| 字段           | 值                               |
| ------------ | ------------------------------- |
| **规则 #1 名称** | **在硬核下完成级别 1**                  |
| 统计           | LevelCompleted.Mode.3.LevelId.1 |
| 操作           | SUM                             |
| 阈值           | 1                               |
| **规则 #2 名称** | **在硬核下完成级别 2**                  |
| 统计           | LevelCompleted.Mode.3.LevelId.2 |
| 操作           | SUM                             |
| 阈值           | 1                               |
| **规则 #3 名称** | **在硬核下完成级别 3**                  |
| 统计           | LevelCompleted.Mode.3.LevelId.3 |
| 操作           | SUM                             |
| 阈值           | 1                               |

### 示例 2:在三分钟内完成任何欧洲赛道

此成就可以定义为个人赛道完成时间的最小值,或使用一组赛道的最佳完成时间。使用以下任一方法,但不能同时使用。

#### 方法 1

| 字段       | 值                                  |
| -------- | ---------------------------------- |
| **规则名称** | 在三分钟内完成任何欧洲赛道                      |
| 统计       | LastFinishTimeInSeconds.TrackId.21 |

LastFinishTimeInSeconds.TrackId.22

LastFinishTimeInSeconds.TrackId.23

LastFinishTimeInSeconds.TrackId.24

LastFinishTimeInSeconds.TrackId.25

LastFinishTimeInSeconds.TrackId.26
操作 | MIN
阈值 | 180

#### 方法 2

| 字段       | 值                                       |
| -------- | --------------------------------------- |
| **规则名称** | 在三分钟内完成任何欧洲赛道                           |
| 统计       | BestFinishTimeInSeconds.TrackSet.Europe |
| 操作       | MIN                                     |
| 阈值       | 180                                     |

要设计相关的用户统计信息,请参阅[跟踪最近的](/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-user-stats-scenarios#ttmr)和[跟踪个人最佳](/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-user-stats-scenarios#tapb)。

<a id="scenario-4" />

## 个人最佳

使用此模式定义一个要求用户在单个会话或游戏过程中超越目标的成就。此成就无法通过多次运行等聚合工作来达到。

#### 示例 1:以五次或更少的死亡完成游戏

| 字段       | 值                                |
| -------- | -------------------------------- |
| **规则名称** | 以五次或更少的死亡完成游戏                    |
| 统计       | PlaythroughDeaths.GameResultId.1 |
| 操作       | MIN                              |
| 阈值       | 5                                |

#### 示例 2:以 Lebron James 身份至少得 50 分赢得一场比赛

| 字段       | 值                                       |
| -------- | --------------------------------------- |
| **规则名称** | 赢得比赛并以 Lebron 身份出场并且至少得 50 分            |
| 统计       | BestScore.PlayerId.3056.MatchResultId.1 |
| 操作       | SUM                                     |
| 阈值       | 10                                      |

<a id="scenario-5" />

## 表示满足条件的二进制值

使用此模式定义一个成就,该成就要求用户执行复杂的活动,该活动无法通过 XBOX 服务统计信息轻松跟踪,或不受其他 XBOX 服务成就配置选项支持。

### 示例:用霰弹枪获得 90 个击杀或用狙击步枪获得 10 个击杀

| 字段       | 值                                 |
| -------- | --------------------------------- |
| **规则名称** | 90 个霰弹枪击杀或 10 个狙击步枪击杀             |
| 统计       | AchievementUnlocked.UnlockId.9010 |
| 操作       | SUM                               |
| 阈值       | 1                                 |

<Info>此成就配置不跟踪霰弹枪击杀或狙击步枪击杀。它仅记录满足这两个条件之一的事实。该成就必须由游戏设置,因为数据平台不支持此场景。</Info>


## Related topics

- [基于事件的成就概念](/zh-CN/services/xbox-services/player-data/achievements/event-based/concepts/live-achievements-eb-concepts-nav.md)
- [概念](/zh-CN/services/xbox-services/player-data/achievements/event-based/concepts/index.md)
- [基于事件的成就的门户配置](/zh-CN/services/xbox-services/player-data/achievements/event-based/config/live-achievements-eb-portal.md)
- [基于事件的成就](/zh-CN/services/xbox-services/player-data/achievements/event-based/live-achievements-eb-nav.md)
- [获取基于事件的成就](/zh-CN/services/xbox-services/player-data/achievements/event-based/how-to/live-getting-event-based-achievements.md)
