Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Hi there, first of all great product. However i've ran into an issue. I cant get the move to and turn to nodes to work. I tried to use Able to implement a dodge roll like Dark Souls.
    Is it possible to get an working example for those or an updated documentation?
    I figured out most of functionality of the plugin (e.g how location or Targets are set), but for me "turn to" always turns towards the global x-Axis and "Move to" simply does nothing although the values i entered look correct for me.
    Apologies if i missed something obvious
    Regards

    Comment


      Submitted Able v3.31:

      • Fixed a crash when trying to allocate "Set Vector Parameter" on the Set Material Parameter Task.
      • Fixed Vector Parameters dropping the alpha/w channel.
      • Changed the CastChecked in the Custom Task to just a Cast with a warning. Still not sure how this can occur, but if your BP is somehow returning nullptr - it will no longer crash you. Obviously you'll need to check your ScratchPad IsValid when grabbing it.
      Originally posted by Abarudra View Post
      Hi there, first of all great product. However i've ran into an issue. I cant get the move to and turn to nodes to work. I tried to use Able to implement a dodge roll like Dark Souls.
      Is it possible to get an working example for those or an updated documentation?
      I figured out most of functionality of the plugin (e.g how location or Targets are set), but for me "turn to" always turns towards the global x-Axis and "Move to" simply does nothing although the values i entered look correct for me.
      Apologies if i missed something obvious
      Regards
      Move To requires the Player Movement Component IIRC (or a Nav agent). Turn to should work as expected, I know some people are using it as expected. You should be able to turn on Verbose mode for Turn To and Move To and see if you get more info.

      As for a Dark Souls-style dodge, I would actually make that as a new Custom Movement state (again, assuming you're using the Character Movement Component). That way you can tweak a lot of things and the check for if you should play your dodge roll animation / ignore damage or whatever - simply becomes "Am I in the Dodge movement state?". It also works will roll backs and all that fun networking stuff.

      Able Ability System - A high performance, robust ability system for UE4. Now Available!

      Comment


        Changed the CastChecked in the Custom Task to just a Cast with a warning. Still not sure how this can occur, but if your BP is somehow returning nullptr - it will no longer crash you. Obviously you'll need to check your ScratchPad IsValid when grabbing it.
        Thanks so much!

        I'm not sure how helpful this will be, but the issue seems to be branching out for me. I'm running into another problem where new custom tasks I've created (to replace the crashy ones) don't even execute until I open the ability in the editor and save it. Not sure if it's just a compounding issue with creating new assets after this crash started to occur or it's something with how it interacts with source control. I'm using Perforce.
        I inserted an IsValid check in CreateScratchPad with a breakpoint for one of my tasks, but it doesn't even make it to that. The game crashes before that function runs.

        Comment


          Originally posted by ExtraLifeMatt View Post

          Turn to should work as expected, I know some people are using it as expected. You should be able to turn on Verbose mode for Turn To and Move To and see if you get more info.
          It works for Actors, but TurnTo had no Implementation for TargetType Location.

          Also, variables set for Blueprint CustomTasks (haven't tried cpp ones yet) in Ability->TaskProperties keep getting reset to defaults after recompilation of said Task.

          Comment


            Originally posted by Pwnographyzqt View Post

            It works for Actors, but TurnTo had no Implementation for TargetType Location.

            Also, variables set for Blueprint CustomTasks (haven't tried cpp ones yet) in Ability->TaskProperties keep getting reset to defaults after recompilation of said Task.
            Ah, that could be. Location Target Type came in pretty late.

            C++ variables should be fine. Blueprint variables are a different cat. The class gets re-instantiated after recompile, so it's possible it could lose properties. I would definitely suggest C++ tasks over Custom Tasks if possible, or use a "Measure twice, cut once" approach to custom tasks (use one Ability to hammer out all the required changes to your custom task - then use it in other Abilities, so you aren't constantly recompiling the task).
            Able Ability System - A high performance, robust ability system for UE4. Now Available!

            Comment


              Hi there, thanks in advanced for any help on this, i'm getting a crash when querying for targets during a melee animation, if multiple targets are in sight usually.
              Code:
              Unhandled Exception: EXCEPTION_ACCESS_VIOLATION writing address 0x00000028
              
              UE4Editor_Engine
              UE4Editor_Engine
              UE4Editor_Engine
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_CoreUObject
              UE4Editor_AbleCore!UAblAbility::CalculateDamageForActorBP() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\intermediate\build\win64\ue4editor\inc\ablecore\ablability.gen.cpp:483]
              UE4Editor_AbleCore!<lambda_bc0e834bf2a1af60dbceb985d90ac1e5>::operator()() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\tasks\abldamageeventtask.cpp:67]
              UE4Editor_AbleCore!SetPromise<float,TUniqueFunction<float __cdecl(void)> &>() [d:\rocketsync\4.24.0-10570792+++ue4+release-4.24\working\engine\source\runtime\core\public\async\async.h:50]
              UE4Editor_AbleCore!TGraphTask<TAsyncGraphTask<float> >::ExecuteTask() [d:\rocketsync\4.24.0-10570792+++ue4+release-4.24\working\engine\source\runtime\core\public\async\taskgraphinterfaces.h:847]
              UE4Editor_Core
              UE4Editor_Core
              UE4Editor_Core
              UE4Editor_Core
              UE4Editor_Core
              kernel32
              ntdll
              Any ideas?

              Also cone query seems to yield no results, but switching to box or capsule or sphere , works again.

              Thanks again
              Last edited by thelazylion; 05-27-2020, 06:14 PM.

              Comment


                Originally posted by thelazylion View Post
                Hi there, thanks in advanced for any help on this, i'm getting a crash when querying for targets during a melee animation, if multiple targets are in sight usually.
                Code:
                Unhandled Exception: EXCEPTION_ACCESS_VIOLATION writing address 0x00000028
                
                UE4Editor_Engine
                UE4Editor_Engine
                UE4Editor_Engine
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_CoreUObject
                UE4Editor_AbleCore!UAblAbility::CalculateDamageForActorBP() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\intermediate\build\win64\ue4editor\inc\ablecore\ablability.gen.cpp:483]
                UE4Editor_AbleCore!<lambda_bc0e834bf2a1af60dbceb985d90ac1e5>::operator()() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\tasks\abldamageeventtask.cpp:67]
                UE4Editor_AbleCore!SetPromise<float,TUniqueFunction<float __cdecl(void)> &>() [d:\rocketsync\4.24.0-10570792+++ue4+release-4.24\working\engine\source\runtime\core\public\async\async.h:50]
                UE4Editor_AbleCore!TGraphTask<TAsyncGraphTask<float> >::ExecuteTask() [d:\rocketsync\4.24.0-10570792+++ue4+release-4.24\working\engine\source\runtime\core\public\async\taskgraphinterfaces.h:847]
                UE4Editor_Core
                UE4Editor_Core
                UE4Editor_Core
                UE4Editor_Core
                UE4Editor_Core
                kernel32
                ntdll
                Any ideas?

                Also cone query seems to yield no results, but switching to box or capsule or sphere , works again.

                Thanks again
                Looks like something is going on in your CalculateDamageForBP method. You can also try turning off Async in the Able options as you may be doing something unsafe there (you can turn it back on once you figure out what's going on).

                You can set Cone to verbose and see what's going on.
                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                Comment


                  Originally posted by ExtraLifeMatt View Post

                  Looks like something is going on in your CalculateDamageForBP method. You can also try turning off Async in the Able options as you may be doing something unsafe there (you can turn it back on once you figure out what's going on).

                  You can set Cone to verbose and see what's going on.
                  Verbose results in nothing being printed..
                  Im doing a raycast to determine bone that was hit during the collision detection.. Then multiplying damage up or down based on that, feeding the float into the output.

                  Just a quick theoretical. If a character had 2 swords in their hands.. a flaming one on the right, and an ice one on the left. During the melee, how would one determine damage type based on weapon in hand, when weapons are dynamic? How would one spawn and attach the correct particles onto the correct bone that was hit?

                  thanks again for the prompt reply

                  Comment


                    Originally posted by thelazylion View Post

                    Verbose results in nothing being printed..
                    Im doing a raycast to determine bone that was hit during the collision detection.. Then multiplying damage up or down based on that, feeding the float into the output.

                    Just a quick theoretical. If a character had 2 swords in their hands.. a flaming one on the right, and an ice one on the left. During the melee, how would one determine damage type based on weapon in hand, when weapons are dynamic? How would one spawn and attach the correct particles onto the correct bone that was hit?

                    thanks again for the prompt reply
                    You can grab this collision test map (it was built for 4.24 but it should be fine for 4.25) and check the cone settings there versus your own:
                    https://www.dropbox.com/s/zlwu2ixgmp...onTest.7z?dl=0

                    You'd have to tie some rotating number to your animation / attack so that you know if you hit with your left or right hand (maybe use animation notifies), then when go to apply your damage, ask the character which weapon is in that hand and what the element is.
                    Able Ability System - A high performance, robust ability system for UE4. Now Available!

                    Comment


                      Originally posted by ExtraLifeMatt View Post

                      You can grab this collision test map (it was built for 4.24 but it should be fine for 4.25) and check the cone settings there versus your own:
                      https://www.dropbox.com/s/zlwu2ixgmp...onTest.7z?dl=0

                      You'd have to tie some rotating number to your animation / attack so that you know if you hit with your left or right hand (maybe use animation notifies), then when go to apply your damage, ask the character which weapon is in that hand and what the element is.
                      Thanks for the sample map, i'll check it out, i'm on .24 as well.

                      As for that solution, it makes sense, what would be the most efficient way to read notifies on an ability/timeline?
                      Also, i'm still getting crashes during that raycast call and setting a couple variables onto the hit target actor.. Is there a specific way to get which bone was struck during the collision query?
                      And thanks again for the prompt reply.

                      Comment


                        Originally posted by thelazylion View Post

                        Thanks for the sample map, i'll check it out, i'm on .24 as well.

                        As for that solution, it makes sense, what would be the most efficient way to read notifies on an ability/timeline?
                        Also, i'm still getting crashes during that raycast call and setting a couple variables onto the hit target actor.. Is there a specific way to get which bone was struck during the collision query?
                        And thanks again for the prompt reply.
                        Notifies should just be reading/writing to the owning actor. The Timeline shouldn't care. When you go to calculate damage, or apply a particle effect - you can use the Dynamic Bindings on those tasks (the + sign on some of the fields), to ask the owning Actor what weapon/effect/damage to use.

                        As for the raycast call, I'm not sure what's going on there without a callstack (if you turned off the Async behavior, then it should be a new callstack). Likely you're either accessing a null component / actor (meaning you aren't checking the results with an IsValid check), or you're trying to set a property on an object that doesn't want to be written to. There should be a Blueprint helper node to get the closest bone to a ray hit - but I don't remember the name off hand. Queries can't get closest bone (as they just determine if something is in/out of a volume), Raycasts can as they are more precise and determine the point of a collision.
                        Able Ability System - A high performance, robust ability system for UE4. Now Available!

                        Comment


                          Aight. I'm slowly starting to love the System, even though I keep getting stuck on some basics.

                          Before I try to implement it, there's currently no way to specify a Task TargetActor?
                          E.g. the first ApplyDamage Task is supposed to hit TargetActor[0], the next [1] and so on.

                          I tried to use the Custom Target Logic, but this will only be called initially. (which also would be my first idea, to add an additional Ability TargetType that reruns the Custom Target Logic)

                          Or maybe adding a BP overridable TargetSelection function that gets run on Actor TargetTypes.

                          Am I missing something, or am I thinking too far out of the box again?

                          Comment


                            Originally posted by Pwnographyzqt View Post
                            Aight. I'm slowly starting to love the System, even though I keep getting stuck on some basics.

                            Before I try to implement it, there's currently no way to specify a Task TargetActor?
                            E.g. the first ApplyDamage Task is supposed to hit TargetActor[0], the next [1] and so on.

                            I tried to use the Custom Target Logic, but this will only be called initially. (which also would be my first idea, to add an additional Ability TargetType that reruns the Custom Target Logic)

                            Or maybe adding a BP overridable TargetSelection function that gets run on Actor TargetTypes.

                            Am I missing something, or am I thinking too far out of the box again?
                            You can add targets during an Ability using the Query tasks with "Copy to Context" turned on. If you want to specify a Target, you would have to set it up through the "Custom Target" option on the Ability itself (which just runs once, as you point out).
                            Able Ability System - A high performance, robust ability system for UE4. Now Available!

                            Comment


                              Hi Matt,

                              Superb plugin! I'm making a multiplayer RPG and am wondering how you would implement haste that affects the Ability playrate? This would be per character, ie if one person buffed themselves with a haste buff and then wanted to cast a hastened fireball.

                              From what I can see I can set the cooldown of an ability once I've created an ability context, perhaps it would be possible to modify the playrate here? Sorry if I missed something obvious

                              Cheers

                              Comment


                                Originally posted by Rush3rx View Post
                                Hi Matt,

                                Superb plugin! I'm making a multiplayer RPG and am wondering how you would implement haste that affects the Ability playrate? This would be per character, ie if one person buffed themselves with a haste buff and then wanted to cast a hastened fireball.

                                From what I can see I can set the cooldown of an ability once I've created an ability context, perhaps it would be possible to modify the playrate here? Sorry if I missed something obvious

                                Cheers
                                You can override the Ability Play Rate / Cooldown and mark the Cooldown to be updated in real time (so, if you cast a normal fireball, but then buff yourself - you can retroactively decrease the in-progress cooldown). So when you cast Haste, just put a tag on the Player "Effect.Haste" or something like that, and in the Play Rate you can check for that flag and modify the play rate as you wish.
                                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                                Comment

                                Working...
                                X