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 JSwigart View Post
    Can you talk me through the multiplayer control flow of abilities that have branching?

    For branch conditionals like UAblBranchConditionOnInput that rely on an input component that only exists on the auth client, how are abilities with input driven branching meant to be kept in sync on the client and server in multiplayer?

    If you start ability A, and it branches to ability B, the server isn't going to be able to properly evaluate that branch if it uses input conditionals, so the ability is going to get out of wack. Is the intention that in these circumstances the auth client will act as authority and 'correct' the server when it decides to branch?
    For input conditionals, yes. You have to, for the reason you suspect.

    Effectively:

    Client tests for Input Condition and passes -> Calls ServerBranchAbility -> Server sees the Client wants to branch to that Ability and says "sure" -> Server tells the Client to branch (Client already is branching locally at this point so this is more for remote clients).

    Leave a comment:


  • replied
    Can you talk me through the multiplayer control flow of abilities that have branching?

    For branch conditionals like UAblBranchConditionOnInput that rely on an input component that only exists on the auth client, how are abilities with input driven branching meant to be kept in sync on the client and server in multiplayer?

    If you start ability A, and it branches to ability B, the server isn't going to be able to properly evaluate that branch if it uses input conditionals, so the ability is going to get out of wack. Is the intention that in these circumstances the auth client will act as authority and 'correct' the server when it decides to branch?

    Leave a comment:


  • replied
    Originally posted by JSwigart View Post
    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.

    Leave a comment:


  • replied
    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.
    Last edited by JSwigart; 09-11-2019, 02:51 PM.

    Leave a comment:


  • replied
    Originally posted by brian.boettger View Post
    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.

    Leave a comment:


  • replied
    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?
    Last edited by Mighteemouse3; 09-10-2019, 03:00 PM.

    Leave a comment:


  • replied
    Originally posted by brian.boettger View Post
    ExtraLifeMatt 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.

    Leave a comment:


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

    Leave a comment:


  • replied
    Originally posted by brian.boettger View Post

    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".

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    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)


    Leave a comment:


  • replied
    Originally posted by brian.boettger View Post
    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:\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.

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • replied
    Originally posted by JSwigart View Post
    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).

    Leave a comment:


  • replied
    Does it still work if the blueprint task is inherited from another blueprint class?

    Leave a comment:

Working...
X