What if the only options I see have the default tag?
Because youâre asking specifically for the default object. Admittedly, Able doesnât care because it uses the default under the hood, so anything besides SKEL should be fine.
is able build from the ground up or is it similiar or using UE4 Gameplay Ability System
Seems like UAblCustomTask arenât working in the latest code.
The UAblCustomTask::OnTaskStartBP finds a function, but there is no script associated with the function, even though my blueprint has the OnTaskStartBP implemented. Any ideas?
Built from the ground up. It has some similarities to GAS but thatâs mainly coincidence. GAS was pretty opaque when I started Able.
Define âno script associated with the functionâ. If you have âOnTaskStartâ overridden in the blueprint - then it should be fine. If youâre trying to do it through code then you need to inherit from OnTaskStart as OnTaskStartBP isnât virtual (on the C++ level).
I have a blueprint class that extends AblCustomTask that implements the OnTaskStart override, I add the task to the timeline of an ability, the blueprint task OnTaskStart doesnât trigger. When I debug the code, I can see the UAblCustomTask::OnTaskStartBP gets called, FindFunctionChecked finds a function, but the Script field of the function is empty, so it doesnât execute anything, just early outs. I canât seem to get any of my blueprint tasks to work.
Alright Able v3.15 submitted. Notes below:
As always, your feedback is super important and please let me know if you run into any issues.
I just verified it by making a simply custom task, overriding OnTaskStart and telling it print a string. I can give you the project if you want to see what I did and where you may be going wrong. You can grab it here.
Does it still work if the blueprint task is inherited from another blueprint class?
Are you saying you have it setup âUAblCustomTask -> MyCustomTask -> MyCustomTaskChildâ?
I could see that potentially failing? Iâm not sure what UE does under the hood for childs of BlueprintImplementable functions. It may be as simple as marking the BlueprintImplementable methods in UAblCustomTask as virtual (and hope that flag persists in child classes).
Yes that was the situation I was in, though I didnât realize until after I had refactored away from the custom task to try and see if it worked without the extra child class.
So I just picked Able back up after a long break. Got a fire ball going and I have an issue.
Engine Version: 4.21 fresh download of Able
Skill:
PlayAnimation
SpawnActor
if an enemy/wall etc that is collidable with the project that spawns is too close, UE4 crashes and I get an error shown here:
Assertion failed: SpawnedActor [File:D:\Build++Portal+Dev-Marketplace+Full\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\Able\Source\AbleCore\Private\Tasks\ablSpawnActorTask.cpp] [Line: 116]
i am 99% positive itâs got something to do with potentially trying to destroy the projectile before the spawn actor task can finish firing?
Iâm off work tomorrow so I was going to take a look at it tomorrow because itâs 1:20 in the morning and I need some sleep
Hmmm⌠maybe? Iâll take a look tonight. I have to re-submit the patch anyway so I might sneak this fix in.
so if this helps, hereâs the two lines that look to be the issue (solid on the assertion checks if i read this correctly btw)
line 116 of SpawnActor (per the stack trace)
AActor* SpawnedActor = ActorWorld->SpawnActor<AActor>(ActorClass, SpawnTransform, SpawnParams);
check(SpawnedActor);
Iâm destroying the projectile when it collides with 2 types of actors.
If i remove any destroy reference in the projectile everything works fine.
This only occurs when I stand right on top of what will destroy the projectile. If i stand across the room, the projectile destroys just fine.
I donât know if that helps you think through (and it could completely be something iâm doing, iâm open to that suggestion⌠this is the first skill iâve created in like a year)
Whatâs your Spawn Collision set to on that Task? Likely itâs failing to spawn because the projectile is inside some other object and the Spawn Collision isnât set to âAlways Spawnâ.
@ Itâs set to Try To Adjust Location But Always Spawn. I tried setting it to always spawn ignore collision and it did the same thing.
Just to make sure I removed the spawn actor task and created a new starting with âAlways Spawn Ignore Collisionâ and it did it againâŚ
Hmmm, you have a class specified I assume? The issue is definitely the SpawnActor is failing for some reason⌠I can make it a bit more tolerant and just report an error when it fails to spawn (rather than crashing), but that likely wonât fix your underlying issue.
let me actually answer the question since you asked while i was typing my last novel.
the class is specified and when i break point on the destroy actor methods in the projectile blueprint (On Begin Overlap), it hits that function. if i F11 past, it crashes after it destroys the actor?
now, my character is replicated using a controller and character server side then a pawn and pawn controller client side.
This could obviously lead to âlagâ and itâs fairly safe to say that it works normally when the destroy request is not so immediate to its being spawned.
so i guess thatâs a wordy way of saying, i wonder of because of auth check on the character->controller etc architecture, itâs not done âspawningâ before it runs the assert because it was destroyed?
Maybe? I would expect it to still exist when the assert happens, just marked for GC. However there may be some âoptimizationâ where if you spawn an actor and immediately call for itâs destruction, that the GC happens immediately - in which case it would return nullptr and the assert would fail.
Iâll turn that assert into a warning. Itâs likely what is happening is fine, itâs just not expected from Ableâs end.
Seems to be a bug with channel conditions. UAblAbilityComponent::InternalCancelAbility gets called, but since the ability IsProcessingUpdate() it gets deferred into the m_PendingCancels. Problem is, the // Check for Channeling⌠block in ablAbilityComponent.cpp goes ahead and sets m_ActiveAbilityInstance to null, so in HandlePendingCancels itâs null and isnât able to appropriately finish the ability.
Iâm guessing that // Check for Channeling⌠block should not be nulling the active ability instance?
Edit: Ok this was only a problem because we had a local modification that set m_IsProcessingUpdate at the top of the tick.
Yea, careful with that. That flag is set at a very specific time.