Able Ability System Info and Support Thread

@ExtraLifeMatt 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]

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.

@ExtraLifeMatt 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.

Yea, that’s expected currently. I can change the default value to True globally (I don’t like making it based on some logic the user isn’t aware of), but then you open it up to being “unsafe” (hacking-wise) by default. I err’d on the side of security but it does make it seem like a bug to new users - so I may swap it back.

yeah… making it default true is fine… :slight_smile: As long as you can change some abilities to false. actually in many games buffs and positive effects are cancelable… so why not. and any responsible game dev won’t leave stuff on default but pay attention to values like this :slight_smile: By the way, thanks for the updates! I appreciate all the hard work you’re putting into this system! I encourage anyone I know that is REALLY working on a game to use this system instead of GAS.

How would i play the next ability i tried doing it i get the print with the percent so that is working. I tried using my characters play ability custom event and it does not work.

I wll give a youtube link so you can see what I have.

Not sure why calling the Event on your character wouldn’t work. But you should be able to grab your Owner Actor -> Grab your Ability Component -> Activate Ability with the one you want to use.

hey there :slight_smile:

i was wondering if there is something i have to note and check when working with particels in able? because some particelsystems seem to break when i use them in the ability
-some like in the screenshot seem to break alot and some just have certain effects gone

any idea what that may be?

Maybe its because “client can cancel ability” is false :wink: and he cancels previous ability by hand. Also in video I can see you grab “active ability” class AFTER you cancel it - so the active ability is not valid, so get class errors out.
All this conditioning should be “branch” condition inside the first ability. Can cancel is now build into ability. The way you handle it in the event is not threat-safe.

@bossexe are those particles use collision component and can collide with stuff? If so - make sure your mesh and character capsule ignore the collision channel of the particles.

i just checked. they dont use any collisions >.< i backed the project on my backup computer, when i open the project there the first time i use the skill it works fine…the second and from there on after it never does…weird.
could it be that something is saved somewhere and it wont work because of that?

I will take a look at it on our next help session :wink:

I don’t think this is the issue but if you can help me i would gladly appreciated I did PM you.

Thanks in advanced