Able Ability System Info and Support Thread

1.How can i play a Particle Effect in random point beside player character.Then make a Capsule Collision Query at this point.
2.In the CanBranchTo function,the BranchAbility argument,if i call Get Display Name,it always return current ability name not the branch to ability name.Is it a bug?
3.Is it possible to call a Collision Query Task in blueprint and write result to the target?

  1. You can’t. If you’re trying to randomly fire off a particle / query, I’d just make an ability that is just those two items and then randomly spawn that Ability at those locations (You can use a hidden actor or something). I do want to look into targeting locations as a Task Target, which would make your scenario easier.

  2. Yup. Good Catch. I’ll put in a fix locally for the 3.0 update. If you want to fix it yourself, on Line 46 of ablBranchTask.cpp just make this change:

    ScratchPad->BranchAbility = <s>Context->GetAbility();</s> m_BranchAbility->GetDefaultObject();

  1. You can use the Custom Target type which basically just passes you an array to fill with Targets (it’ll call “Find Targets” on the Ability Blueprint), so, yes, you could do it that way.

Any plans to add GAS (Gameplay Ability System) integration?

Not really, given that Able is meant to replace GAS. What specifically would you want with integration? The ability to call GAS abilities?

I have a couple problems with particles. When I attach to socket, the preview still shows it appearing at the base of my character. However, in game it works fine. In addition, changing the scale while the particle is attached to a socket does not affect it at all. The particle will still have the default look of a 1.0 scale. These problems only occur when I check the “attach to socket.”

The preview actor is likely not using the correct skeleton as your in-game version. That’s likely the discrepancy there. As for the scale with Attach To Socket, I’ll look into that (not sure why that would affect it - but you never know).

Thank you. The preview actor really was the problem, and now it properly shows the particle attached to the socket. However, I still have the scale problem while attached to a socket.

@ExtraLifeMatt Hi, I just wanted to tell you that I figured out the bad animation blending for montages. Still got issues working with anim graph node, but it doesn’t matter as montages give a lot more flexibility regard looping, reusing same animations etc.
ABLE is an incredible solution. How you can use it is just to your imagination, as you can implement any mana system, any category triggers. and the new rewritten networking and event execution triggers perfectly.

I have only one question I cant find answer on the help website: does “can execute ability” is being triggered and checked on authority or whatever trigger Im checking it must be replicated to actually work properly and be cheat-proof?
Im doing a melee combat system for FP, and Im checking on stamina, that does replenish on tick. I don’t want to replicate a value that is replanishing on tick, however I wish to check the value on server to see if ability should be triggered.
Are there any tips and tricks for multiplayer use?

Can Execute Ability will only be executed on the Server if you’re using a networked game. My background is in MMOs (I worked on both Star Wars Galaxies and Star Wars: The Old Republic, not to mention a few other multiplayer titles) so I’m paranoid about that stuff. :slight_smile:

Able will forward all ability requests to the server for validation before replicating things out. At worst case, if you have someone cheating or altering memory values, they would see themselves do an Ability but the server would throw it away and all remote clients wouldn’t see it - so, only the cheater is getting a bad experience.

Hi, Able is fantastic, thank you for making that! I have a question to ask regarding combining Able with player stats/attributes.
In my understanding, Able is very suitable for making skills, and in MMO/MOBA/RPG, skills are often interacting with stats, and it’s deep interwining. For example, we have 2 Buffs(or 2 passive abilities), one add to stat by percentage, another add to stat by linear value. Here comes several insteresting things, such as who calculate first, and how to preview the stats on client, and how they affect damage calculations.
I’m assuming Able doesn’t come with a stats system, so in your opinion, what’s the best practice of doing that?
For example, Unreal has a built in Gameplay Ability system, including “attribute set”, and “effect” which can modify them.
For example, there could be other assets on Marketplace for attributes, although I didn’t search for it.

I don’t have deep understanding of Able yet, so I’m hoping maybe you can give some directions on that. Thanks in advance!

Correct, Able doesn’t come with a stat system but is written to hook into any stat system rather painlessly. Able simply asks you for the final value to apply as damage, or cooldown reduction, etc - and you can do whatever math your stats system requires.

You can use Gameplay Ability System’s Attribute sets, but if you want to modify those attributes from within Able, you’d need to craft a special task that allows you to apply GAS effects to those stats.

You can also find a stat system on the marketplace you like and that should work just as well.

In my own projects, I just have a very simple stat system since my games don’t require anything crazy.

I absolutely ,love everything about that answer :> It nulls my next question regard instant execution on the owning client :slight_smile:

I run a D20 game so all my stats are integers and working with game-play stats and gameplay.abilities require working with floats that are not very precise when it comes down to comparing values.

Where were you all my life! :smiley:

I’m testing this on the impropable GDK
It should work :slight_smile:

With floats, you generally want to compare two values using an epsilon (just some very small value, FMath has a IsNearlyEqual method that does just that).

For example,


int a = 20;
int b = 20;
if (a == b) // This is fine, because integers are always whole numbers.
   // Stuff.


float a = 20.0f;
float b = 20.0f;
if (FMath::IsNearlyEqual(a, b, 0.000001f)) // This is equivalent to the integer version, but allows for floating point error to not become an issue.
  // Stuff

I know how to get it working. It’s just that entire system revolts around integers. Have no percentage values. And only floats im using is stamina. And its a tick inreamenting value, but not replicates. One might think that time flows the same on dedicated server and client but unfortunately it is not so and from time time to time values are out of sync for a small window of time. I wish to have as little replicated values as possible as any real relevant actions take place on the server i may want to replicate values only if i need to rep notify user that there was a change in value. In general i dislike working with floats.

Thanks for explaining : )
I’m guessing it could be a very common use case that maybe you can consider to teach users how to do. But I’m just one user, so I’m not sure I can say that.

I have a few questions.
Is there a way to get the ability length for branching abilities? I get the first ability length to stop moving until done, but I don’t know how to get the length of branching abilities if they are played. With the way I have it set up right now, it sometimes works depending on when I press my attack button to go the next branch, but I want it to work all the time.

Could you also elaborate on the possession task? I am able to possess fine, but unpossessing does not return to my original character. Do I need to add more logic for this to happen?

I think a better way of doing what you’re trying to do is to simply set some tags on the Ability itself (e.g. “Status.NoMovement”), and then in your character’s tick method, simply grab the currently active ability (if there is one), and check for that tag. If you’re playing an Ability with that tag - don’t allow movement or what not.

The possession someone recently reported as broken. I’m not sure what’s going on there yet since I merely call “Unpossess” which is supposed to magically handle things - but I’ll dig into it.

I have a question.
Can I handle input inside an ability? Preferably on Even graph?
My thing is that I have an ability that uses an animation with root motion but I want to rotate the character towards the input from analog stick while performing this animation.
There would be different kind of abilities that need to interpret input differently - so I assumed the best option is to just implement input interpretation in abilities since doing it inside the character and remembering all different input interpretations for abilities there just sounds horrible.
Is it possible?

Also there is a horrible bug. IF you create custom task using blueprints, any time you recompile that blueprint it will mess up the instance of that task on any ability timeline that uses it.
The most nasty part however is launching the editor once you add custom bp task, as in ablAbility.cpp : 232 when Able tries to build dependancy list, your blueprint task isn’t initialized yet or something in this line:

if (Task->HasDependencies())

Task is still null so you won’t be able to launch editor.

I would use tags for this. Tag the abilities you want to allow input during and then in your character simply check if your active ability has that tag and do whatever input logic you need to do.

Yup. That’s fixed in 3.0 (which is slowly plugging along). In the mean time you can fix that error by modifying two lines:

ablAbility.cpp Line 232:

if (**Task && **Task->HasDependencies)

ablAbilityInstance Line 54:

if (**Task && **Task->IsValidForNetMode(NetMode))

I’d release the bug fix early if I could, but 3.0 changes so much that it’s difficult to pull out just that fix.

EDIT: To be clear, this fix will let you get back into the editor and such, but will NOT properly copy over the newly compiled BP Task. That is the change in 3.0.