Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

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

  • replied
    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).

    Leave a comment:


  • replied
    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?

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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).

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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.

    Leave a comment:


  • replied
    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

    Leave a comment:


  • replied
    DrTasty Looks like it's failing to cast your scratch pad. I've seen this crash before, but never been able to repro it. I'll see if I can't through some extra info and try and make that code a bit more flexible in the meantime (I'm working on an update for later today).
    Originally posted by bruize10 View Post
    Hello,

    How would you go about setting up "multiple branches" based on target distance (or any other variable other than a bool)?
    For instance, if distance is less than 400, branch to ability A; if distance is greater than 400 but less than 600, branch to ability B; If distance is greater than 600, do nothing.

    My second question is if there's a way to determine the end of a combo and feed that info into a behavior tree?
    My current behavior tree set up gets the length of the chosen ability and delays by that length and finish execute after.
    The problem I'm having with that set up is it leaves no room for branching combo abilities since the behavior tree will move on to the next thing.
    I was hoping to use "On ability end" as a delegate of some kind, but i cannot bind to it. I'm pretty sure It's just me being ignorant about the system.
    You can add a Custom Branch condition and just get the distance, or add a dynamic delegate to the Custom Branch Ability, and do the distance check there and return the appropriate ability.
    There is a Behavior Tree "Is Playing Ability" decorator you can use which would work in your case. There is also a "On Ability End" delegate on the Able Ability System Component that you should be able to hook into.

    Leave a comment:


  • replied
    Hello,

    How would you go about setting up "multiple branches" based on target distance (or any other variable other than a bool)?
    For instance, if distance is less than 400, branch to ability A; if distance is greater than 400 but less than 600, branch to ability B; If distance is greater than 600, do nothing.

    My second question is if there's a way to determine the end of a combo and feed that info into a behavior tree?
    My current behavior tree set up gets the length of the chosen ability and delays by that length and finish execute after.
    The problem I'm having with that set up is it leaves no room for branching combo abilities since the behavior tree will move on to the next thing.
    I was hoping to use "On ability end" as a delegate of some kind, but i cannot bind to it. I'm pretty sure It's just me being ignorant about the system.

    Leave a comment:

Working...
X