Able Ability System Info and Support Thread

ARGGHHH, I see the problem. That field isn’t hooked up internally. I’ll get a bug fix submitted.

Awesome glad to know I’m not just being a moron. If it’s a small change would you mind letting me know what the code change is so I can make the adjustment locally?

Sure, it’s a trivial code change. Just add the following line to ablSpawnActorTask.cpp:



void UAblSpawnActorTask::BindDynamicDelegates(UAblAbility* Ability)
{
   Super::BindDynamicDelegates(Ability);

   ABL_BIND_DYNAMIC_PROPERTY(Ability, m_ActorClass, TEXT("Actor Class"));
   ABL_BIND_DYNAMIC_PROPERTY(Ability, m_AmountToSpawn, TEXT("Amount to Spawn"));
   **ABL_BIND_DYNAMIC_PROPERTY(Ability, m_Location, TEXT("Location"));**
}



Awesome thanks much, just got around to looking at this. Im not seeing a member variable m_location. I do see m_SpawnLocation though. Just in case someone else runs into this in the future.

Sorry you are probably sick of me by now. I have been wrestling with this for a couple of days and I just can’t figure out the source of my issue here.

Some background on my setup:
Using MoveIt plugin for character movement. *this may or may not have bearing on my issue
This is a first person project so my character has a separate 3rd person model and 1st person.
The camera is tied to this first person view model.
I am currently manually synching the camera pitch via SetWorldRotation in replicated events based on player input in blueprint.
This is using PIE Listen server with 2 players.

What I am seeing:
When I use an ability that uses the Camera as source for a raycast or spawn actor the raycast & spawn ent both work as expected. However the client will see the raycast and spawned entity but at the default pitch of the camera rather than the updated angles.
The camera & viewarm pitch appear to update for the client and server as expected.

What I have done:
I have ensured that neither of my raycast or spawn entity have an overridden Binding on location.
Realm is set to Client And Server
I have created multiple abilities to ensure it wasn’t some kind of data corruption
Tried a couple half cocked work arounds like making my 1st person gun an actor with an able component. Couldn’t figure out how to link an actor to an actor efficiently, but may go back to this method to see if i have better luck.

I don’t know much about network replication in Unreal so I’m struggling to find a good way to debug the actual source of this issue. If you have any pointers here I would greatly appreciate it.

Thanks much,

Jordan

You may need to make sure your Player Controller is sync’ing pitch. The Camera Target Type uses the following code (you can place a breakpoint in ablAbilityTypes.cpp if you want to step through things):



if (m_Source == EAblAbilityTargetType::ATT_Camera && !TargetActor->IsA<ACameraActor>())
{
   FVector ActorEyes;
   FRotator ActorEyesRot;
   TargetActor->GetActorEyesViewPoint(ActorEyes, ActorEyesRot);
   OutTransform = FTransform(FQuat(ActorEyesRot), ActorEyes);
}


So likely GetActorEyesViewPoint (which uses the controller pitch/rotation IIRC) isn’t returning what you expect.

Yeah, pretty sure

Thank you much. That is the case, now to figure out why its not replicating…

Able 3.53 submitted. Notes below!

Another quick note: I’ve gotten the “We want a Discord!” a ton lately, so I’m going to look at setting that up this weekend. Once I do, I’ll add the link to the OP here and on the store page.

Did that solve the channeling active issue I was having? :smiley:

Hey and Friends. While wrestling with getting Able working properly on a FPS project, I decided to get the community shooter project up and running to see if it could solve any of my problems. (there was a bunch of weird data field settings that needed adjustment and the OnRayCastEvent function needed to be deleted and *re-added no clue why).
Once resolved I tested and the community shooter project and it also doesn’t properly handle player pitch.

The simulation will properly take into account your yaw, but not pitch. I have been banging my head against the right way to solve this. I would love to use the controller rotation pitch values, but enabling player control rotation pitch also pitches the root component (collision capsule). Would love to talk this through with someone and hopefully I’m just missing something obvious.

A problem: How to change preview asset without opening the ability editor - my preview character (move it character) crushes the engine if used inside the able editor. Due to private functions and variables.
Is there any place like project settings / plugins or someplace I can reset it to default? or in file?

Should. I did miss one case in another area that I have to submit a new patch for (found it right after I submitted - which is how it goes).

Should be in one of your Config.ini files in your Project/Config directory. If you find that entry and nuke it, it’ll reset to default.

It previously handled pitch just fine - that project is definitely out of date though. Have you created a new Shooter Project based game and seen if you can build on top of that? Rather than attempting to update the older project (which may flip out as UE likes to re-organize whole systems between engine versions).

@ thank you! Alife saver as usual!

I have tried building from the ground up. The issue is that the client will never see the hosts camera pitch (or other clients). The pitch is not replicated unless replicated manually or the pawn is using Use Controller Rotation Pitch (which causes a lot of oddness with pitching the pawn collision cylinder when the player pitches view). I honestly don’t know the right way to go about solving the raycast abilities. I believe the launcher ability works properly because of the spawned entities replication status and movement component.

I’m also trying using MoveIt. The best way to fix that crash is to update MICharacterMovmentComponent.cpp.

Just add the following to Void UMICharacterMovementComponent::TickComponent

Line:1042


 
if (CharacterOwner == nullptr)
{
    // Standalone support
    CurrentServerMoveTime = GetWorld()->GetTimeSeconds();
    return;
}


Honestly, if you want a quick way, you can just manually replicate the pitch and then simply add a runtime binding to the Raycast transform and construct that one from the Controller Yaw + the Camera Pitch you’re sync’ing manually. TONS of youtube tutorials on replicating camera pitch out there.

Thanks, I tend to overcomplicate things sometimes. I do think this will still pose a bit of a problem if I want the raycast to end center camera. Unless I can properly calculate the pitch from the center of players camera. Control rotation pitch is likely going to be from center of root character component (which would be angled to higher(abs) values as the function recedes from zero). I’ll try to figure this out and report back in case anyone else cares. :stuck_out_tongue:

@

New video around ABLE. However, I had a strange problem. When checking for channel condition being one input pressed and another NOT pressed - and meet all conditions - it always failed and exited the ability immediately. Yes - they were 2 separate conditions, not 2 inputs of a single condition. Can I have more than one condition of the same type?
Oh and channeling for active works :slight_smile:

You can have as many conditions as you want, they are all individually checked. Turn on Verbose and you should see why it failed (if it was a bad input it’ll say the input condition XYZ failed).

Able Discord server is up (still tweaking things): https://discord.gg/zH7cAyMPNX

Able v3.54 submitted, notes below:

Hiya! Could I get an invite? That one has expired.
EDIT: nvm, found it on the store page