# GAS Ability Task Registry

## GAS Ability Task Registry – Unreal Engine Plugin

Welcome to the **GAS Ability Task Registry**, a free, open-source plugin for Unreal Engine 5. This plugin provides a growing library of reusable, community-driven `UGameplayTask`-based ability tasks designed specifically for the **Gameplay Ability System (GAS)**.

***

### 📦 Plugin Overview

Many GAS developers often recreate the same `AbilityTasks` across projects. This plugin solves that by offering a centralized, plug-and-play library of useful tasks.

#### ✅ Key Features

* 📚 Collection of reusable GAS `AbilityTasks`
* 🔁 Minimize redundancy across projects
* 🧰 Blueprint & C++ ready
* 🤝 Open for community contributions
* 🧩 100% plugin-based – easy to integrate
* 🎯 Fully compatible with **Unreal Engine 5.x**

***

### 🚀 Getting Started

You have three options for installing and using the plugin:

***

#### 🔹 Option 1: **Download from the Unreal Marketplace** (Recommended)

1. Go to the **Unreal Marketplace page** for **GAS Ability Task Registry**\
   \&#xNAN;*(Marketplace link will be available once published)*
2. Click **"Add to Project"**
3. Open your Unreal project and go to `Edit > Plugins`
4. Ensure **GAS Ability Task Registry** is **enabled**
5. Restart the editor if prompted

***

#### 🔹 Option 2: **Clone the GitHub Repository**

```bash
git clone https://github.com/m-ahmed-elbeskeri/GAS-Ability-Task-Registry.git
```

* Place it inside your project's `Plugins/` folder
* Regenerate project files (for C++ projects)
* Rebuild and enable the plugin in Unreal Editor

***

#### 🔹 Option 3: **Download ZIP from GitHub**

1. Visit [GAS Ability Task Registry on GitHub](https://github.com/m-ahmed-elbeskeri/GAS-Ability-Task-Registry)
2. Click **“Code” > “Download ZIP”**
3. Extract to your project’s `Plugins/` folder
4. Restart the editor and enable the plugin

***

### 📘 How to Use

After enabling the plugin:

1. In your GAS ability class, call `SpawnAbilityTask<>` using any available task
2. Bind events like `OnCompleted`, `OnCancelled`, or custom delegates
3. Tasks are available in both **Blueprint** and **C++**

> 🧠 Tip: Each task includes in-code documentation and Blueprint nodes

***

### 📂 Plugin Directory Structure

```
markdownCopyEditYourProject/
└── Plugins/
    └── GASAbilityTaskRegistry/
        ├── Source/
        │   └── GASAbilityTaskRegistry/
        └── GASAbilityTaskRegistry.uplugin
```

***

### 📋 Included Tasks

| Task                           | Input Pins                                                                                                                                                                                                                                                                                  | Output Pins                                                                                                                                                                                              | Description                                                | Key Features                                                                                                                |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **OnTickEvent**                | <p>• OwningAbility: Self reference<br>•TaskInstanceName: Optional name</p>                                                                                                                                                                                                                  | <p>•TickEventReceived: Event with DeltaTime parameter<br>• Return Value: Task reference</p>                                                                                                              | Fires an event every frame while the ability is active     | <p>• Precise timing for continuous effects<br>• Lightweight alternative to timelines<br>• Ideal for incremental changes</p> |
| **SetInputLockState**          | <p>• OwningAbility: Self reference<br>• bShouldLock: Toggle input lock<br>• LockType: Timed/Permanent<br>• Duration: Lock time in seconds<br>• bLockMove: Block movement<br>• bLockLook: Block camera</p>                                                                                   | <p>•OnInputLockStateChanged: Fired when lock state changes<br>• Return Value: Task referenc</p>                                                                                                          | Controls player input access during ability execution      | <p>• Independent control of move/look inputs<br>• Auto-releasing timed mode<br>• Perfect for channeled abilities</p>        |
| **InstantMoveToLocation**      | <p>• OwningAbility: Self reference<br>•TargetLocation: Destination vector<br>•TargetRotation: New rotation<br>• bSweep: Check for collisions<br>•bStopAtCollision: Halt on impact<br>• bSetRotation: Apply rotation</p>                                                                     | <p>•OnInstantMoveCompleted: Success event<br>• OnFail: Failed teleport event<br>• Return Value: Task reference</p>                                                                                       | Teleports actor to location with optional collision checks | <p>• Built-in collision handling<br>• Vector-based targeting<br>• Success/failure feedback</p>                              |
| **MoveInDirectionTask**        | <p>• OwningAbility: Self reference<br>•TaskInstanceName: Optional name<br>• Direction: Movement vector<br>• Interval: Input frequency<br>• Duration: Total movement time</p>                                                                                                                | • Return Value: Task reference                                                                                                                                                                           | Applies continuous movement input in specified direction   | <p>• Automatic vector normalization<br>• Configurable duration<br>• Timer-based movement pulses</p>                         |
| **MoveRandomlyTask**           | <p>• OwningAbility: Self reference<br>• TaskInstanceName: Optional name<br>•DirectionChangeInterval: Time between direction changes<br>• TotalDuration: Total movement time</p>                                                                                                             | <p>•OnMoveRandomlyEnd: Completion event<br>• Return Value: Task reference</p>                                                                                                                            | Makes character move in changing random directions         | <p>• Randomized direction generation<br>• Configurable direction change timing<br>• Great for disorientation effects</p>    |
| **PlayMontageAndWaitForEvent** | <p>• OwningAbility: Self reference<br>•TaskInstanceName: Optional name<br>• MontageToPlay: Animation<br>• EventTags: Tags to listen for<br>• Rate: Playback speed<br>• StartSection: Named section<br>•bStopWhenAbilityEnds: Auto-stop<br>•AnimRootMotionTranslationScale: Motion scale</p> | <p>• OnCompleted: Normal end<br>• OnBlendOut: Blend finished<br>• OnInterrupted: Premature stop<br>• OnCancelled: Manual cancel<br>• EventReceived: Gameplay event<br>• Return Value: Task reference</p> | Coordinates animation playback with gameplay events        | <p>• Complete montage lifecycle events<br>• Gameplay event filtering<br>• Perfect for attack combos</p>                     |
| **MoveToTarget**               | <p>• OwningAbility: Self reference<br>•TaskInstanceName: Optional name<br>• TargetActor: Destination actor<br>•AcceptableRadius: Completion distance</p>                                                                                                                                    | <p>• OnSuccess: Reached target<br>• OnFailure: Path unavailable<br>• Return Value: Task reference</p>                                                                                                    | Uses pathfinding to navigate to target actor               | <p>• NavMesh integration<br>• Automatic path recalculation<br>• Distance-based completion</p>                               |

> More tasks are actively being added!

***

### 🙌 Contributing

Want to share your own custom `AbilityTask`?

1. Fork the GitHub repo
2. Add your task to `Source/GASAbilityTaskRegistry/`
3. Submit a Pull Request

No need to fully polish your submission — consistency tweaks will be handled during review.

***

### 🧪 Testing

To test any task:

* Add it to a `UGameplayAbility` via `SpawnAbilityTask`
* Use print/logs or delegate bindings to verify expected behavior
* Tasks are Blueprint-exposed by default for quick prototyping

***

### 🧾 License

This project is licensed under the **MIT License** – free to use in any commercial or personal project.

> Full license text available on GitHub.

***

### 📬 Support & Feedback

* GitHub Issues: [Report bugs or request features](https://github.com/m-ahmed-elbeskeri/GAS-Ability-Task-Registry/issues)
* Pull Requests: [Contribute your tasks](https://github.com/m-ahmed-elbeskeri/GAS-Ability-Task-Registry/pulls)

***

#### 🔗 Links

* 🌐 GitHub: [GAS Ability Task Registry](https://github.com/m-ahmed-elbeskeri/GAS-Ability-Task-Registry)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mohamed-elbeskeri.gitbook.io/gas-ability-task-registry/gas-ability-task-registry.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
