PageSourceSearch

https://elmarathstudio.netlify.app/assets/js/c0321edb.457151b7.js

js elmarathstudio.netlify.app collected 2026-10-03 10:42:11 UTC 7,395 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4521],{19129:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});const i=JSON.parse('{"id":"Ability-Queue-Task-System/Startup","title":"Startup","description":"Once you installed your plugin with your desired method we can start using it. If you are not sure how to work with plugins make sure to look at this documentation.","source":"@site/docs/Ability-Queue-Task-System/Startup.md","sourceDirName":"Ability-Queue-Task-System","slug":"/Ability-Queue-Task-System/Startup","permalink":"/docs/Ability-Queue-Task-System/Startup","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Overview of Ability Queue Task System","permalink":"/docs/Ability-Queue-Task-System/Overview"},"next":{"title":"Add Abilities to the Queue","permalink":"/docs/Ability-Queue-Task-System/AddAbilitiesToTheQueue"}}');var s=n(74848),o=n(28453);const a={sidebar_position:2},r="Startup",l={},u=[{value:"Ability Queue Manager Component",id:"ability-queue-manager-component",level:2},{value:"Queue Enter Condition",id:"queue-enter-condition",level:3},{value:"Delegates",id:"delegates",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"startup",children:"Startup"})}),"\n",(0,s.jsxs)(t.p,{children:["Once you installed your plugin with your desired method we can start using it. If you are not sure how to work with plugins make sure to look at this ",(0,s.jsx)(t.a,{href:"https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine",children:"documentation"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"ability-queue-manager-component",children:"Ability Queue Manager Component"}),"\n",(0,s.jsxs)(t.p,{children:["Attach the ",(0,s.jsx)(t.strong,{children:"Ability Queue Manager"})," Actor Component to any actor that already has an ",(0,s.jsx)(t.strong,{children:"Ability System Component"})," (for example a Pawn or Player State). After attaching, abilities can call the supplied ",(0,s.jsx)(t.code,{children:"Add Ability To Queue"})," task \u2014 the manager evaluates the request and enqueues abilities as appropriate. When whenever abilities gets refreshed (Ability state change, new ability gets added to the queue or manually (By using ",(0,s.jsx)(t.code,{children:"Check for Queued Task Activation"})," function.)) it tries to play the most prior ability."]}),"\n",(0,s.jsx)(t.h3,{id:"queue-enter-condition",children:"Queue Enter Condition"}),"\n",(0,s.jsxs)(t.p,{children:["You can optionally provide a ",(0,s.jsx)(t.strong,{children:"Queue Enter Condition"})," to allow or block abilities from entering the queue. This is a Blueprintable class based on ",(0,s.jsx)(t.code,{children:"Ability Queue Enter Condition Base"})," that receives the ability context and returns true to allow queueing or false to block it. You can add your ",(0,s.jsx)(t.em,{children:"Conditions"})," from the details panel of the ",(0,s.jsx)(t.em,{children:"Ability Queue Manager Component"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Quick Blueprint setup"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Create a Blueprint that inherits ",(0,s.jsx)(t.code,{children:"Ability Queue Enter Condition Base"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Implement the ",(0,s.jsx)(t.code,{children:"IsConditionMet"})," event and return true/false."]}),"\n",(0,s.jsxs)(t.li,{children:["Assign the Blueprint to the ",(0,s.jsx)(t.code,{children:"Queue Enter Condition"})," property on your ",(0,s.jsx)(t.code,{children:"Ability Queue Manager"})," component."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Common uses: disable queueing during cutscenes, block specific ability tags, or require a resource threshold (stamina, etc.) before allowing enqueue."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"Queue Enter Condition List View",src:n(41546).A+"",width:"632",height:"150"}),"\n",(0,s.jsx)(t.img,{alt:"IsConditionMet",src:n(87618).A+"",width:"7
170",height:"311"})]}),"\n",(0,s.jsxs)(t.admonition,{type:"tip",children:[(0,s.jsx)(t.mdxAdmonitionTitle,{children:(0,s.jsx)(t.strong,{children:"Use Case"})}),(0,s.jsx)(t.p,{children:"Keep reusable enqueueing rules in a single Blueprint condition (for example: disable queueing during cutscenes). This avoids duplicating checks inside many abilities."})]}),"\n",(0,s.jsx)(t.h2,{id:"delegates",children:"Delegates"}),"\n",(0,s.jsxs)(t.p,{children:["There are some delegates that is called whenever the ",(0,s.jsx)(t.em,{children:"Queue Manager"})," gets an update."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"AbilityQueueManagerEvents",src:n(86842).A+"",width:"1206",height:"474"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"On Playing Ability Task Updated"})," : Called whenever the playing ability on the queue gets changed."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"On Playing Ability Task State Updated"})," : Called whenever the playing ability's task updates it's ",(0,s.jsx)(t.em,{children:"Queue State"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"On Queued Ability Task Updated"})," Called whenever the queued ability task gets changed."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.admonition,{title:"Where to Use Them?",type:"note",children:[(0,s.jsx)(t.p,{children:"I personally don't use them in a gameplay scenerio. But they are helpful if you want to debug the Ability Queue."}),(0,s.jsx)(t.p,{children:"Though you can always type on the console to enable debug view."}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.code,{children:"AbilityQueue.EnableDebugMode 1"})})]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:["That is for the setup. We just needed the ",(0,s.jsx)(t.em,{children:"Ability Queue Manager"})," Component to be on the Actor that has the ",(0,s.jsx)(t.em,{children:"Ability System Component"}),". We can continue with our ",(0,s.jsx)(t.em,{children:"Abilities"}),"!"]})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>r});var i=n(96540);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}},41546:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_QueueEnterConditionListView-f7129beddc111b17f31495f472761ebb.png"},86842:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_AbilityQueueManagerEvents-fbcc6437d98411f243f6f8deabfca59f.png"},87618:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_IsConditionMet-c41670c75655ee772a16bc27b00bcd56.png"}}]);

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.