> For the complete documentation index, see [llms.txt](https://soulslike-framework.isik.vip/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://soulslike-framework.isik.vip/components-managers/player-specific-components/progress-manager.md).

# Progress Manager

<div align="left"><figure><img src="/files/P7SrYbuEtd8dGRQFg26x" alt=""><figcaption></figcaption></figure></div>

The **Progress Manager (AC\_ProgressManager)** is a simple yet powerful component that tracks player progress using a **Gameplay Tag | EProgress** map. It integrates seamlessly with the [**AI Interaction Manager** component](/components-managers/ai-only-components/ai-interaction-manager.md), allowing dialogues to dynamically adjust based on the player's progress. Additionally, it includes a **Gameplay Event System** that can be triggered from AI dialogues or other gameplay events.

It is added to the **PlayerController** class by default **(PC\_SoulslikeFramework).**

### **How It Works**

* **Storing & Managing Progress**
  * The component maintains a **map of Progress Tags | EProgress**. Each progress state is stored persistently, allowing the system to track **which objectives, quests, or interactions** have been completed.
* #### **Adjusting Progress States**
  * `SetProgress(ProgressTag, EProgressState)`
    * Updates the current progress of a given tag.
  * `GetProgress(ProgressTag)`
    * Returns the **current progress state** of a given tag.
* **Executing Gameplay Events**
  * **`ExecuteGameplayEvents(EventsArray)`**
    * This function processes a struct (`FDialogGameplayEvent`), which contains:
      * `EventTag`: Identifies what type of gameplay event it is.
      * `AdditionalTag`: Provides extra context for event handling.
      * `Custom Data`: A flexible **Instanced Struct** that can store **any type of data** dynamically.
    * When triggered, iterates through the **array of events**, extracting necessary data and routing them accordingly.
    * Using a switch statement, determines the **type of event**, executing the desired logic according to event tag.

### Example Usage

<figure><img src="/files/8XSqzhVgIHABk62WN3G8" alt=""><figcaption></figcaption></figure>

### Example Usage with the NPC Dialogues

<figure><img src="/files/MYnpsfd81uYm65bw9kx5" alt=""><figcaption></figcaption></figure>

### Example on Triggering Gameplay Events through Dialogue Tables

<figure><img src="/files/F0uHeXLRZk7aW3LFWiTu" alt=""><figcaption></figcaption></figure>
