1"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[9789],{28453:(e,i,t)=>{t.d(i,{R:()=>l,x:()=>r});var n=t(96540);const s={},a=n.createContext(s);function l(e){const i=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(a.Provider,{value:i},e.children)}},49444:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/T_AbilitySystemSetManagerInitializtion-48f61c32f0dc0df77ea5ba84773d8c86.png"},60755:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/T_AbilitySetInteractionSetExample-23d738fb3b043442c69de02af7bb9820.png"},99486:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>o,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"Easy-Ability-Set-System/AbilitySets","title":"Ability Sets","description":"Ability Sets are Data Assets that group related abilities together.","source":"@site/docs/Easy-Ability-Set-System/AbilitySets.md","sourceDirName":"Easy-Ability-Set-System","slug":"/Easy-Ability-Set-System/AbilitySets","permalink":"/docs/Easy-Ability-Set-System/AbilitySets","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"id":"AbilitySets","title":"Ability Sets","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Easy Ability Set Startup","permalink":"/docs/Easy-Ability-Set-System/EasyAbilitySetSystemStartup"},"next":{"title":"Ability To Input Mappings","permalink":"/docs/Easy-Ability-Set-System/AbilitToInputSettings"}}');var s=t(74848),a=t(28453);const l={id:"AbilitySets",title:"Ability Sets",sidebar_position:2},r="Ability Sets",o={},d=[{value:"Defining an Ability Set",id:"defining-an-ability-set",level:2},{value:"How It Works",id:"how-it-works",level:2},{value:"Why Use Ability Sets?",id:"why-use-ability-sets",level:2},{value:"Initialization",id:"initialization",level:3},{value:"Managing Ability Sets at Runtime",id:"managing-ability-sets-at-runtime",level:2}];function h(e){const i={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"ability-sets",children:"Ability Sets"})}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Ability Sets"})," are ",(0,s.jsx)(i.a,{href:"https://dev.epicgames.com/documentation/en-us/unreal-engine/data-assets-in-unreal-engine",children:"Data Assets"})," that group related abilities together.",(0,s.jsx)(i.br,{}),"\n","For example: ",(0,s.jsx)(i.em,{children:"Combat Abilities"}),", ",(0,s.jsx)(i.em,{children:"Interaction Abilities"}),", or ",(0,s.jsx)(i.em,{children:"Knockback Abilities"}),"."]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h2,{id:"defining-an-ability-set",children:"Defining an Ability Set"}),"\n",(0,s.jsxs)(i.p,{children:["When you create an ",(0,s.jsx)(i.em,{children:"Ability Set"})," Data Asset, you\u2019ll see an array of ",(0,s.jsx)(i.strong,{children:"FEasyGrantAbilityData"})," entries.",(0,s.jsx)(i.br,{}),"\n","Each entry lets you define:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Ability:"}),(0,s.jsx)(i.br,{}),"\n","The Gameplay Ability class to grant."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Input Tag:"}),(0,s.jsx)(i.br,{}),"\n","(Optional) A Gameplay Tag used to bind this ability to an input.",(0,s.jsx)(i.br,{}),"\n","If you don\u2019t set this, the ability won\u2019t be bound to any input."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Ability Level:"}),(0,s.jsx)(i.br,{}),"\n","The level or strength of the ability."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Example in the editor:"}),(0,s.jsx)(i.br,{}),"\n",(0,s.jsx)(i.img,{alt:"AbilitySetInteractionAbilitySetExample",src:t(60755).A+"",width:"1790",height:"1114"})]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h2,{id:"how-it-works",children:"How It Works"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"For each ability, you pick the class, set if it should have an input tag, and (if so) which tag, plus its level."}),"\n",(0,s.jsx)(i.li,{children:"The system uses the Gameplay Tag\u2019s hash to generate a unique input ID for each ability."}),"\n",(0,s.jsxs)(i.li,{children:["If you don\u2019t provide an Input Tag, the ability is not bound to any input (",(0,s.jsx)(i.co
1de,{children:"INDEX_NONE"}),")."]}),"\n"]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:["This data is used as input for the standard ",(0,s.jsx)(i.a,{href:"https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/GameplayAbilities/GiveAbility?application_version=5.6",children:"Give Ability Function"}),", but with a Gameplay Tag instead of a plain integer.",(0,s.jsx)(i.br,{}),"\n","The tag is converted to an integer using ",(0,s.jsx)(i.code,{children:"FGameplayTag::GetTypeHash()"}),", ensuring each tag is unique and safe to use as a key."]})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h2,{id:"why-use-ability-sets",children:"Why Use Ability Sets?"}),"\n",(0,s.jsxs)(i.admonition,{type:"tip",children:[(0,s.jsx)(i.p,{children:"Even if you only want to grant a single ability (like in example), using an Ability Set is best practice."}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"It keeps your project organized."}),"\n",(0,s.jsx)(i.li,{children:"It makes removing/clearing abilities easy: the system tracks which abilities were granted by each set, so you can clear them all at once."}),"\n"]})]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h1,{id:"easy-ability-system-set-manager",children:"Easy Ability System Set Manager"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.strong,{children:"Ability System Set Manager"})," is an ",(0,s.jsx)(i.strong,{children:"Actor Component"})," (not an Ability System Component).",(0,s.jsx)(i.br,{}),"\n","You add it to any actor that already has an Ability System Component. This keeps things modular and lets teams customize their Ability System Component as needed."]}),"\n",(0,s.jsx)(i.p,{children:"Once added, the Set Manager can handle granting and removing ability sets for that actor."}),"\n",(0,s.jsx)(i.h3,{id:"initialization",children:"Initialization"}),"\n",(0,s.jsxs)(i.p,{children:["On the component, there\u2019s a field called ",(0,s.jsx)(i.strong,{children:"Initialized Ability Sets"}),".",(0,s.jsx)(i.br,{}),"\n","Any sets you add here will be automatically granted to the Ability System Component when the game starts (on the server)."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Initialization of Ability System Set Manager",src:t(49444).A+"",width:"1854",height:"1350"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h2,{id:"managing-ability-sets-at-runtime",children:"Managing Ability Sets at Runtime"}),"\n",(0,s.jsx)(i.p,{children:"You can grant or remove ability sets at any time, either in Blueprints or C++:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Blueprint:"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Use ",(0,s.jsx)(i.strong,{children:"Give Ability Set"})," to grant all abilities/effects from a set."]}),"\n",(0,s.jsxs)(i.li,{children:["Use ",(0,s.jsx)(i.strong,{children:"Remove Ability Set"})," to remove everything previously granted by that set."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"C++:"})}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-cpp",children:"AbilitySystemSetManager->GiveAbilitySet(MyAbilitySet);\nAbilitySystemSetManager->ClearAbilitySet(MyAbilitySet);\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"This makes it easy to add or remove groups of abilities as your game changes\u2014no need to track each ability individually!"})]})}function c(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.