GameplayAbilities and you

Oh you could probably make a quite powerful multiplayer skill/buff-system in blueprints if you got the patience, skills and time for it, but this is a code plugin that’s included in the engine by default and contains code that has been tried and tested quite well due to Epic themselves using it for their games. It is fast, replicates efficiently, it’s powerful and flexible, and it’s free, so what’s not to like?

This guide’s topic concerns the basic comprehension of the system, and that’s what you will find here. The main objective of my post is to get people acquainted with C++ to tinker with the system, partially because I think it’s dumb that previously there were no useful ressources regarding how to make use of this system(an annoying trend that actually affects a lot of built-in C++ functionalities and systems, GameplayAbilities just has the added bonus of being quite obtuse in its initial setup, as well), partially because I am actually quite lazy, and I like having people do the work analyzing this behemoth for me so when I have issues myself, I can ask them. It’s a good plan, in theory, if I do say so myself.

You could actually expose most functions and useful tidbits of the system to Blueprints quite easily if you know the C++ basics and know which functions to look out for, but this is a guide, not a blueprint function library plugin, and making a function library for the system is, to put it blunt, not my job, and would probably get obsoleted anyway the moment Epic decides that they want to make the plugin a full-fledged, officially supported plugin for aspiring devs, with some proper blueprint exposure, some polish work to make the system as a whole less mindnumbingly confusing, and some other stuff. Maybe someone else can be arsed to do it.

On a different, slightly less snarky note, I’ve decided to tinker around with AbilityTasks over the course of the last week a little bit, because I thought it’d be kinda neat to have a specialized montage ability task that spawns a special component that plays an attack animation with hitbox and combo data(basically, I can define which attacks can cancel into each other and which can’t, and when, using tags). I even added a little input buffer-kinda thing where I can queue a new attack a little before the current attack becomes cancelable, actually quite proud of how well I managed to make the thing turn out in such a short time.
But, uh, back to topic. AbilityTasks, they don’t make a lick of sense, they somehow have exec output pins for each multicast delegate variable you add to them and tag as BlueprintAssignable in the UPROPERTY(even providing variable outputs to use alongside these exec paths if your multicast delegate has parameters) when you spawn them with their dedicated static spawn function and I eventually concluded that the way they do it is pretty much just magic, because I couldn’t tell you how that works(I kept looking for a variable or something to define which delegates it should use, but it turns out it just picks any variable that’s marked as BlueprintAssignable, so good grief, I guess).
Now that I had a first taste of them I kinda want to update me old wall of text in the first post to include a little paragraph about them because I do feel like making your personal AbilityTask might be useful for functions specific to your game, but I’m not sure if my understanding of them is sufficient for such a thing.