Able Ability System Info and Support Thread

Thanks, I appreciate it :smiley:

Whoops, I broke something :

This is what it said in the crash:

I know what NOT to do though, this is what caused it:
AbleJumpBP_04.jpg

I kind of figured that I wasn’t supposed to be able to select ā€œAbl Ability Blueprintā€ in that field, but I wanted to see what would happen…which was crash to desktop xD.
Hopefully I’m not a pest, I seem to be that guy whose accidental finger-slips always manage to find the death button somehow :confused:

I don’t even know how you did that, but I’ll add a check to make sure that’s handled properly.

The realm is set to Server on all Play Animation tasks.

Ah, that makes sense. You should only set an animation to be played on Server if you need animation related data on the server (i.e. you have collision that follows an animation or some such). 99.9% of the time, you’ll want your animations as client only (or Client/Server). There really shouldn’t be any case where you have Server only animation tasks. I’d swap to Client or Client/Server depending on the logic you are doing and see what that gets you.

I’ve been working on v1.6 which has a few bug fixes and I’m trying to support Blend In on external animations (and not just the ones passed into the node) in the Play Ability Animation Node (you’ll have to pass in a pose for it to work), I’m still testing things but so far so good.

That didnt seem to work :frowning:
I went ahead and unchecked the Play on Server option for the Play Animation Tasks.
On a cooked build I hosted a listen server and had the following results:Server:

Plays own animations correctly, Can see all connected client’s animations play correctly, and branched ability animations play correctly

Client 1 & Client 2:

Plays own animations correctly, Can see all connected client’s animations play correctly, does not see any branched ability animations play.

Let me know if you need any additional info, or a link to the latest build.

Edit: The Realm on the Play Animation Task by default is Client, and if I tick on ā€˜Play on Server’, the realm changes to Client and Server, however both options result in the other connected client not seeing branched ability Play Animation Tasks play.

And to verify, it’s simply the animation not playing? Are other tasks in the Branched Ability executing properly? What are you using as the branch conditional (I assume just an input check)? Are you seeing any output in the Able log on the server? Does this happen in an uncooked build as well?

  • it’s simply the animation not playing? / Are other tasks in the Branched Ability executing properly?

  • Correct, I have other tasks that are custom events that are executing correctly on the sever and all connected clients (Those tasks have the Client & Server Realm

  • What are you using as the branch conditional (I assume just an input check)?

  • Correct, Its just an input check

  • Are you seeing any output in the Able log on the server?

  • The only thing I see in the output log is pasted below, however its only logged after the ability completed. I would expect to see something else when the animation failed to play.

[INDENT=2]


LogNet:Warning: UIpNetDriver::ProcesRemoteFunction: No owning connection for actor CombatCharacter_C_2. Function ServerCancelAbility will not be processed.

[/INDENT]

  • Does this happen in an uncooked build as well?

  • I just tested this, and yes, it can be replicated with a Play in Editor session. The problem can be seen on the connected clients only. The listen server will always see all animations play from all clients.

Thanks @Hitsugen, I’ll dig into this and let you know what I find.

@Hitsugen,

So I’ve tried to repro this locally and everything is working properly for me.

Here’s my setup:

  • Play Animation Tasks are set to Client Only and are using the Ability Animation Node.
  • Branch is set to Input Condition (I have mine bound to LMB).
  • My Character’s Skeletal Mesh component is NOT set to replicate, merely the main actor and the Ability component are set to replicate (this could cause the issue you’re seeing if the server was somehow stomping your client value).

I tried it on a fresh project with the setup as you described, and I’m still having the same issue.
Only thing that might differ from yours (That I know of)

  • Project is a c++ project using the ThirdPersonTemplate.

If it helps here’s a link to the fresh zipped up test project.
https://www.dropbox.com/s/mup6c2si1u2iw0y/AbleTest.zip?dl=0

Are you testing with the Number of Players set to at least 3?

I’ve been using 2. Not sure why that would make a difference. I’ll check out your test project and let you know (been slammed at work so I didn’t get to mess with it tonight).

EDIT: Was able to repro things using your test project. I believe I see the problem and why I didn’t see it locally (it appears to be related to the name of your Abilities generating the same CRC internally). I’m going to dig into that and see A.) why that is occurring and B.) is there a better identifier to use internally.

Thanks for checking it out :slight_smile:
Also, I havent heard that term before, whats a CRC?

A CRC is just a nice way to take any form of data (the name of an Ability for example), and turn it into a unique integer which makes comparisons and such incredibly fast.

I fixed the issue, I’m not sure why your Abilities caused this issue (it appears to be a race condition of some sort), but it’s fixed and will be in the 1.6 update (which I’ll submit to Epic tonight/tomorrow and should be released sometime in the week).

Awesome, thanks !

Able v1.6 has been submitted to Epic:

  • Fixed a crash that can be caused by selecting a non-Ability blueprint in the Get Ability Object From Class method.
  • Fixed an issue where looping would improperly end/reset Tasks outside of the loop range.
  • Fixed an issue where Animation Blending could get stomped if the Animation Node’s Initialization method was called multiple times before a blend finished.
  • Fixed an issue where internal CRCs could be incorrectly calculated (leading to issues where various systems like Cooldowns and Branching broke).

[MENTION=33476]Aumaan Anubis[/MENTION], Regarding the Ability Animation Node supporting blending in from the character’s current pose - I actually had some code written for this, but in my testing - the Animation Blend nodes (which are already available) seemed to do exactly what I was doing but without a ton of complexity. I kept running into nasty edge cases since I was trying to manage all of that state internally. I’d have completely given up on adding that feature, but for the moment - I would suggest looking into the Blend Animation Nodes and trying to structure your Animation State machine in a way that you can setup the blend that way.

I also looked into the customizing the Branch Conditions display name and they ARE setup properly internally - so I’m still trying to figure out if this is just a bug in UE, or if I really do need to write customized property viewers.

@

Thanks for looking into it though, at least there’s a workaround. Thanks for posting it, I’ll make the changes to my statemachine.
I’m looking forward to v1.6.

Thanks again :slight_smile:

Just a bump to let people know that things are probably a bit busy at Epic due to E3 shenanigans, so hopefully v1.6 will be out soon.

@

Just a quick update, you said you weren’t sure why the internal CRC’s were coming up the same, and in case you weren’t handling this already, I’m pretty confident it happens when duplicating abilities. (Even if the name’s are different)

Yea, it’s an order of operations thing / race case it seems. Moving the CRC generation to PostLoad instead of in the constructor (which happens before data is actually loaded for a class) fixes it which is in 1.6.