Able Ability System Info and Support Thread

Fantastic update, thanks for keeping the plugin going in terms of constant updates.

Thanks for update, I can get v2.1 now, the update is awosome! Here, I report PlayAnimation bug again. Because we are ACT Game, so, I really need montage, but Able’s PlayAnimation can’t switch smoothly from one montage to another montage (Your <simple combo ability> tutorial also not smoothly). I try to fix it in souce code, but i failed. Now, I use custom event like below picture, it will play smoothly.

Hmmm… I don’t see you specifying a blend time in there, I assume Play Montage is just defaulting to some blend. I’ll investigate.

Any chance to make EAblAbilityStartResult CanAbilityExecute(UAblAbilityContext& Context) const; virtual?
I have my custom Ability and would like to override basic functionality.

Since that method (on the AbilityComponent) is exposed to Blueprints, I’ll have to check if virtual causes any issues. However, each Ability has a CustomCanAbillityExecute that can be overridden in Blueprints to add any special logic.

Yes I know but I would like to override it in C++ not Blueprints. The same goes for AbilityStarted/Ended/Interupted etc I have changed it to virtual by my self and it doesn’t causing any issues for now but I don’t like to make this change with every update.

Please be aware that some of users are using C++ instead of Blueprints to have necessary references in C++. Basically with UAblAbility there aren’t any virtual C++ functions that can be override and you can imagine that OnStart/End are the most important and I needed to create this functionality by my own in AbilityInstance (just call my virtual functions before Blueprint event)

The systems was designed to be friendly towards BP users, so yea, if you’re going pure C++ then I’m not shocked you’re hitting some obstacles. But I’m glad you’re not seeing any issues making things virtual.

I’ll make a pass to toss virtual on everything that makes sense this weekend for the next update.

Thanks - basically having those virtual functions would be great! Start/End/Interrupt. Shouldn’t be hard to do. I’m not doing pure C++ - just don’t want to have cross references (BP vs C++) so most of my core stuff is in C++, blueprints are for configuration and adding task only. I’m using UE for years and BP can mess a lot.

btw: feature request: https://i.imgur.com/QGoH9dN.png It would be great to put some custom nodes which require world context objects as I can have one. For now I need to create c++ task to create user widget.

I don’t understand your feature request as that image has nothing to do with Able (from what I can see - beyond that you’re passing in an Ability). Can you elaborate?

I will try.

I’m not sure 100% but this node hides World Context Objects (which is usually hidden for latent functions for example) which is normally visible when trying put this node in UObject Blueprint (which doesn’t have world context objects - only Actor Blueprint have) but not in your Ability Blueprint. (and yours is UObject as well) Maybe something need to be added to UCLASS or there is some hidden GetWorldContextObject() function for Blueprint class which will work with this node. My future request is to be able to put this node into Ability Blueprint there might be other like this which won’t work in Abl Blueprints.

Ah, I see. I’m not sure the implications from that.

If you want to try it locally, add this:



UFUNCTION(Blah,  meta=(WorldContext="WorldContextObject", CallableWithoutWorldContext))


To whatever method you are overriding in the Blueprint. That should expose the WorldContextObject as a parameter, as well as keeping the method callable without specifying the World Context Object,

Speaking of C++ I just started looking into using Able in a C++ based project, but I am having trouble setting up Build.cs to properly reference the plugin. I think it ought to be really simple, but I can’t find any good docs or information on exactly the include paths to use. Do you mind posting the relevant part of your Build.cs intoxicat3?

If you’re going to spend a little time working on the C++ interface , it might be helpful to setup an example project based on one of Epic’s C++ templates. It would be a good way to test the interface too.

EDIT: OK I figured out that I needed to include the AbleCore module, not Able. Here’s what I have in the Build.cs file now in case someone stumbles upon this thread looking for the information:



PublicDependencyModuleNames.AddRange(new string] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "AbleCore" });
PublicIncludePaths.AddRange(new string] { "AbleCore/Classes" });


Found a bug:

If you use such filters in Collision Query it will filter everything by RogalPlayerCharacter not keeping another negate filter: RogalFriendlyAICharacter. It should negate filter both of them not only first one.

So this is an odd thing that happens when I have an ability animation set to “Single Node” play settings.
When I go to view in the AnimGraph, I see in the debug filter that there are several instances of the AnimBP, one for each time I used the ability in game:

bb79cffffdf047620093e9631c0b4c8c.png

Not sure what the deal is, perhaps this is expected behavior, but this makes debugging other things though if I have to go and select the new instance everytime I execute the ability, this doesn’t happen when I choose any other setting.

That’s not a bug from what you’re describing. Filters are executed in order. So, it would exclude everything that isn’t a RogalPlayerCharacter, and then takes the results from that and try to filter any RogalFriendlyAICharacter’s (which I assume aren’t RogalPlayerCharacters and thus don’t exist). You can use the Custom Filter option and just provide some Blueprint code to figure out which actors to keep if the base filters are being a bit too strict for your case.

That’s normal. When you modify a Blueprint - it just appends a number for the class (So MyBlueprint_C1, C2, C3, etc). They should go away once you restart the editor as only the latest is actually kept on disk - the others are just hanging out in memory or until GC gets them.

EDIT: Able v2.11 submitted, this adds an option to scale Animations with Ability Play Rate. Pretty small update, but I deemed the other things (more virtual functions, possibly exposing the World Context object on all BP calls) too risky at the moment. Going to hammer on them some more through the Holidays before I push them out.

Thank for info!

How I can get CurrentTime from running passive abilities (GetCurrentPassiveAbilities) - I would like to show TimeRatio in my HUD, and I don’t have context there to get time ratio…

There is an crash without call stack unfortunately :frowning:

  • Use SetShaderParameter on Active Ability,
  • Use SetShaderParameter on Passive Ability,
  • Run Active Ability - check if shader changes (eg. color), then activate passive ability with the same shader param name,

AblAbilityComponent::GetCurrentPassiveAbilities()
For Each Passive:
AblAbilityComponent::GetAbilityCooldownRatio (only takes in an Ability, doesn’t require a context).

Unfortunately, without a callstack it’s hard to tell what’s going on. Odds are you have an invalid shader parameter (or it could be something completely unrelated - need a callstack to figure out for sure).

yes but I don’t want to get Cooldown, but CurrentTime for Ability. I need to know TimeRatio for specific Ability.

As for crash - will try to figure this out.

Ah, I see. Yea, there’s no way to currently get that value (you could easily add it though). I’ll put it on my list.