Able Ability System Info and Support Thread

Alright, Able v3.44 submitted. Notes below:

Iā€™m getting this same issue, ability does nothing, set as passive, on tick its supposed to print sth on activate, however nothing happens and the output is Internal Systems Errorā€¦

Also using a CPP replicated version of ALSV4ā€¦

I have noticed this plugin also crashes often when using a mesh that isnā€™t the default inherited mesh in a character class.
Any info on what to do with the internal systems error issue, or whats causing it at least?

Thanks,

EDIT:
Weird, restarted edtior, print now works. and no longer get the internal errorā€¦
Will update if it comes back

@ Just a quick follow upā€¦ Whats your recommendation for passives? Where do I call the logic I want to perform on the loop/tick?

The logic might be a bit heavy, it references the characters mesh physics offset to apply various balance algorithms. The functions are nested in the character class that is calling the passive/checkā€¦

Where do you recommend I call this within the abl system?

Thanks again in advance for any help

Hi, I found a bug, I want to play a active able looping, so I using BranchTo task at end of able, branch condition is Attack input is pressed. btw I using dedicated server. Now, I press Attack, my attack action is play again and again, is good, but when I release Attack input and press again, my client not play able but server can play (why I can know server can play? because my action has root motion, I can see my player is moving without animation). You can try it, hoping your response, thanks!

Internal Systems Error generally means the Context is in a bad state (it was somehow constructed with bad parameters or some such). I have no idea what ALSV4 does under the hood, so I canā€™t really tell you why it and Able wouldnā€™t get along.

Generally you want to avoid ā€œOn Tickā€ unless itā€™s absolutely necessary, but if you need to do it every frame - do it. General rule of thumb: Do what works, and modify things if it becomes an issue later.

Turn on the Verbose Logging in the Able Settings and itā€™ll tell you why it failed to play locally (Cooldown maybe).

Iā€™m calling my logic on a custom event as a passive task on a loop, it works on the server but not on ai.
The task is also set to server and client.

is there something specific needed to be done to get tasks to run correctly on ai across all clients?

So it only works if the game is offline, once clients join, ability no longer worksā€¦ Itā€™s set to call on server and clientā€¦ Not sure whatā€™s causing the issue with such a simple call.

Going through with breakpoints, everything is being executed correctly. Just nothing is happening on clients, and no longer works on server either once a client joins.

Set the Custom Event Task to Verbose and you should see a client line and a server line. That task is dead stupid (it just calls the blueprint function), so if the method is being called - thatā€™s all I can think of. Like I said, Iā€™d turn on Verbose in the Able settings as well and grab those logs. Itā€™ll tell you exactly whatā€™s happening.

You can also try disabling ALSV4 and see if that magically fixes things (wouldnā€™t be the first time ALS and Able didnā€™t play well together for whatever reason).

I turn on the Verbose and found nothing, maybe your plugin canā€™t use like that, but I really want use like that, so may you support that feature? please, thanks a lot :slight_smile:

You should see the Serverā€™s execution of the Ability and then why the Client didnā€™t execute it or if the channel condition failed. Post the clientā€™s logs if you have them and Iā€™ll take a look.

@ Iā€™m working on a Paper2D project and it seems like the Play Animation Task only accepts skeletal based animations. I am unable to select any sprites, flipbooks, animation sequences, or instances. Does Ableā€™s Play Animation Task support 2D or is this something I should work around?

Youā€™ll have to work around it. That method is meant specifically for 3D animation. You can make a Custom Task that does the 2D flipbooks though.

@ Mate - honestly the spawn actor task is giving me the worst time ever! The targeting logic doesnā€™t do what I would expect it to do, even when reading the documentation and description tooltip of the nodes and variables directly. the target logic camera doesnā€™t seem to workā€¦ always returns 1,0,0. Custom location is giving me a hard time. And when I finally was able to spawn the actor where I wanted, Now I have no freaking idea how to setup rotation to a custom calculated rotation I want it to be. Especially that the event takes place only on the server, so my camera rotation is not reliable on the serverā€¦ My controller rotation only the Y-axis is reliable on the server. But target logic is set on the client and replicated? or it runs when the ability triggers and can vary from client to server? It seems I can only use actor not scene component as any target referenceā€¦ scene component can be literally anything with a transform. and any scene component can have a socket and uses ā€œget socket location/rotationā€ function. As an actorā€¦ well is inconsistent. I didnā€™t think spawning a projectile in the left hand and orienting it toward ā€œcalculate rotationā€ by default would be such a challenge. I would very much appreciate some tips on how to spawn projectile in specific rotation from the specific point! :frowning:

I managed to work around it by using custom event task, but itā€™s not how properly it should be set up :smiley: and not something I would like to feature in a tutorial.

Both Client and Server each run their own targeting logic, so itā€™s possible they donā€™t match 1:1. I try to trust the Client as little as possible, especially when it comes to Targeting. However, the server should have your camera transform. When I did the Shooter tutorial, I used the camera transform to aim towards the eye point of a character and it worked with the Server.

Granted that was a while ago, but I doubt that logic has changed. I can verify however. You can kind of skip all that however and just spawn the projectile at one spot (left hand, like you mention). Ignore the socket rotation. Then in OnSpawnedActor, set the Actor rotation there to point towards your target, along with any velocity information or what not.

I cant set rotation of the actorā€¦ but it might be to the nature of projectile movement and how itā€™s rotating the projectile toward the velocity. after spawned it is just impossible to rotate. The camera as a spawn point is pointless in top-down view, where the rotation of the camera is not even aligned with the rotation of both the actor nor its controller. What I would wish to be able to pick separately spawn location origin, and rotation origin.
The character could have multiple cameras! And one for aiming could not be the one that is active at the moment. nor first inside the actor components list.
Right now I made a hack. There is a virtual bone that is being set as the proper view to spawnā€¦ and virtual bones can be read like ā€œsocketā€ but adding special points for every weapon type would be annoying. I could as well do an invisible WEAPON actor that has ability component, it could be the ā€œtargetā€ and players active ability plays animation etc, and a passive spawn projectile ability on the ā€œtargetā€ that is the weapon.
There are multiple workarounds for thatā€¦ But best would be a possibility to do a BINDING for the spawn transform altogether (so location rotation and scale) like you can bind multiple other values in tasks. And do a custom spawn point inside the ability itself so itā€™s safe to use. Also, I see you allow to spawn actor only on the server. Many games have this approach of non-replicated projectiles with replicated just the spawn event in exact same location and time, but I think ā€œonly serverā€ is for the best forcing any spawns to be replicated actor.

Bindable Spawn Locations is on my TODO list. It just requires a bit of tricky-ness because the underlying object is a simple struct and not a UObject like most the other things that are bindable. But, feedback noted and Iā€™ll try and bump it up the priority list.

Ok I will do hack for now and do another one once its updated :slight_smile:
By the way I also had terrible problems using ā€œTargetā€ or ā€œlocationā€ as spawn point. as target is an actor I guess? so good for ā€œhackā€ way to go around precise spawn point and orientation, but the location - whatever I push into it it just spawned at 0,0,0.

Hi, Unreal editor is going to crash very often when i switch from Character BP to Able Components. It freezes and then crashes. I using ALS for Character BP, some mentioned bugs with ALS here also, but i dont know whats causing some editor bugs with ALS. I would not mentioned if it isnt very annoying crashing every 2 or 5 minute. Maybe there is some ASync Problem. Here is a Crash Report i recently got, maybe there is some way to getting the system more robust.




Unhandled Exception: EXCEPTION_ACCESS_VIOLATION writing address 0x000002e0

UE4Editor_ALSV4_CPP_0006!AALSBaseCharacter::SetAcceleration() [G:\UnrealEngine\Projekte\_Prototype01\Prototype_01\Plugins\ALSV4_CPP-main\Source\ALSV4_CPP\Private\Character\ALSBaseCharacter.cpp:697]
UE4Editor_ALSV4_CPP_0006!AALSBaseCharacter::SetEssentialValues() [G:\UnrealEngine\Projekte\_Prototype01\Prototype_01\Plugins\ALSV4_CPP-main\Source\ALSV4_CPP\Private\Character\ALSBaseCharacter.cpp:956]
UE4Editor_ALSV4_CPP_0006!AALSBaseCharacter::Tick() [G:\UnrealEngine\Projekte\_Prototype01\Prototype_01\Plugins\ALSV4_CPP-main\Source\ALSV4_CPP\Private\Character\ALSBaseCharacter.cpp:188]
UE4Editor_ALSV4_CPP_0006!AALSCharacter::Tick() [G:\UnrealEngine\Projekte\_Prototype01\Prototype_01\Plugins\ALSV4_CPP-main\Source\ALSV4_CPP\Private\Character\ALSCharacter.cpp:117]
UE4Editor_Engine!AActor::TickActor() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:1009]
UE4Editor_Engine!FActorTickFunction::ExecuteTick() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:171]
UE4Editor_Engine!FTickFunctionTask: :DoTask() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:283]
UE4Editor_Engine!TGraphTask<FTickFunctionTask>::ExecuteTask() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:849]
UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:692]
UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:587]
UE4Editor_Core!FTaskGraphImplementation::WaitUntilTasksComplete() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:1478]
UE4Editor_Engine!FTickTaskSequencer::ReleaseTickGroup() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:558]
UE4Editor_Engine!FTickTaskManager::RunTickGroup() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:1523]
UE4Editor_Engine!UWorld::RunTickGroup() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\LevelTick.cpp:783]
UE4Editor_Engine!UWorld::Tick() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Engine\Private\LevelTick.cpp:1558]
UE4Editor_AbleEditor!FAbilityEditorViewportClient::Tick() [D:\Build\++Portal+Promotion\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\Able\Source\AbleEditor\Private\AbilityEditor\ablAbilityEditorViewportClient.cpp:229]
UE4Editor_UnrealEd!UEditorEngine::Tick() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:1770]
UE4Editor_UnrealEd!UUnrealEdEngine::Tick() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:414]
UE4Editor!FEngineLoop::Tick() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:4850]
UE4Editor!GuardedMain() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:169]
UE4Editor!GuardedMainWrapper() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137]
UE4Editor!WinMain() [D:\Build\++UE4+Licensee\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:268]
UE4Editor!__scrt_common_main_seh() [d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

Hello, can someone please post a tutorial even on text, pictures or video how to do a charge shot like megaman that you can continue holding.

I have search this post but the explanations are over the surface and not good enough for my knowledge Iā€™m sorry :frowning:

Yea, ALS is crashing inside itself. It doesnā€™t like the Ability Editor. Youā€™ll need to set your preview actor to something that doesnā€™t use the ALSCharacter as the base.

  1. Make an Ability, call it something like ChargedShot. Set it to channeling -> Input Channel Condition -> Fire or whatever button you want bound to it. This makes it so you have to hold the button for the Ability to continue playing.
  2. Set the Ability to looping and set the loop window to some small section at the end of the Ability (If youā€™re ability is 3 seconds, set the loop segment from 2.8 - 3.0, or something similar). This makes it so as long as you hold the button, the Ability will loop over and over at the end without exiting.
  3. In the Ability Blueprint, OnAbilityEnd -> Call the GetAbilityCurrentTimeRatio -> If the ratio is less than 0.33, activate the small blast, if itā€™s less than 0.66 activate the medium blast, otherwise activate the large blast.

So, the general flow is you have 1 Ability that will activate 1 of 3 different Abilitys depending on when it ends.

@ The ā€œcan client cancelā€ default value ā€œfalseā€ makes ā€œon inputā€ channel to stop working, as breaking the input condition is doing on client-side cancel. IT probably need some extra condition, as debuffs are usually not channelled. Or it should change the default value to true if the ability uses input channel condition.