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 OneSaltyBoi View Post
    Hi there Matt, thanks for the plugin. I got it during the sale, and have been enjoying using it so far. I've run into one repeating issue - it's kind of a two-parter, so bare with me. When I create a custom task, add it to an ability, and attempt to use that ability, the editor crashes with this log:

    Fatal error: [File:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/Templates/Casts.cpp] [Line: 10] Cast of nullptr to AblAbilityTaskScratchPad failed

    After this, oddly enough, the task will work fine during gameplay. Ordinarily I'd just move on, except after that initial crash, any time I compile an edit to the custom task while it's added to an ability, I get a crash with this log: [/FONT]

    Assertion failed: bCustomPropertyListForPostConstructionInitialized [File:/Build/++UE4/Sync/Engine/Source/Runtime/Engine/Private/BlueprintGeneratedClass.cpp] [Line: 618]

    As you may imagine, removing my custom ability from every ability I have an instance on and then adding it back after just to compile an edit is a bit much. I must be missing something. I re-created this consistently with the example custom task you made in the documentation, following all the correct procedures for the custom scratch pad. Thanks in advance for your help.[/FONT]
    Hey there Salty,

    For the 1st error, it's complaining that you don't have the CreateScratchPad Blueprint method overloaded. It expects some scratchpad, you can just create a simple UAblAbilityTaskScratchPad object and return that. Admittedly that should probably just be a warning since your task may not need a scratchpad.

    For the 2nd error, that one is a bit more confusing. So Able is trying to replace the old custom task with your newly compiled one (so you don't have to replace all your Ability tasks manually), but the BP compiler is saying it didn't finish initializing the properties yet. Maybe because of the crash in the 1st error? I'd try and fix that and see if it improves things, otherwise see if you can get me a full callstack for that 2nd error - the one you posted doesn't have where it failed in the UObject creation.

    Leave a comment:


  • replied

    Hi there Matt, thanks for the plugin. I got it during the sale, and have been enjoying using it so far. I've run into one repeating issue - it's kind of a two-parter, so bare with me. When I create a custom task, add it to an ability, and attempt to use that ability, the editor crashes with this log:

    Fatal error: [File:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/Templates/Casts.cpp] [Line: 10] Cast of nullptr to AblAbilityTaskScratchPad failed

     
    Spoiler


    After this, oddly enough, the task will work fine during gameplay. Ordinarily I'd just move on, except after that initial crash, any time I compile an edit to the custom task while it's added to an ability, I get a crash with this log:


    Assertion failed: bCustomPropertyListForPostConstructionInitialized [File:/Build/++UE4/Sync/Engine/Source/Runtime/Engine/Private/BlueprintGeneratedClass.cpp] [Line: 618]

     
    Spoiler


    As you may imagine, removing my custom ability from every ability I have an instance on and then adding it back after just to compile an edit is a bit much. I must be missing something. I re-created this consistently with the example custom task you made in the documentation, following all the correct procedures for the custom scratch pad. Thanks in advance for your help.
    Last edited by Its-Alf; 03-05-2020, 11:39 PM.

    Leave a comment:


  • replied
    Oh, I understand now. Thanks for clarifications!

    Leave a comment:


  • replied
    Originally posted by icehowler View Post
    Thank you for help!

    I managed to solve the 1st issue. Indeed, I had to add the component to the preview actor.
    However, I am not sure how to fix the 2nd one. I have a targeting logic set. I also tried to add a dependency to the animation task but I still receive the same error.

    Here is a screenshot

    Click image for larger version  Name:	ability.png Views:	0 Size:	286.8 KB ID:	1725250
    Yea, I thought about adding a big message on the viewport if it doesn't find the Ability Component on the Preview Actor. The Output log spits out an error, but a lot of people don't seem to run with the output log opened.

    Two options for the other issue:

    1.) Just click the "Require Target" option on the Ability, although that will prevent it from firing if it doesn't have a target.
    or
    2.) Setup a Collision Query with the same parameters you are using in the Targeting, mark it as "Copy to Context", mark Apply Damage as a dependent of that Collision Query, and finally you can clear out the old targeting logic.

    The point of that assert is to make sure if you are trying to apply Damage to a Target, that you have some form of targeting setup. Arguably it shouldn't need the "Require Target" check - instead it should just check that you have some targeting setup, so I can get a fix out for that.
    Last edited by ExtraLifeMatt; 02-24-2020, 11:45 AM.

    Leave a comment:


  • replied
    Thank you for help!

    I managed to solve the 1st issue. Indeed, I had to add the component to the preview actor.
    However, I am not sure how to fix the 2nd one. I have a targeting logic set. I also tried to add a dependency to the animation task but I still receive the same error.

    Here is a screenshot

    Click image for larger version

Name:	ability.png
Views:	100
Size:	286.8 KB
ID:	1725250

    Leave a comment:


  • replied
    Originally posted by icehowler View Post
    Hello,

    This plugin looks great!
    I try using it on UE 4.24.2 but I am having 2 issues so far:
    1. Preview animation for Play Animation task doesn't seem to work for me. The character remains in idle animation from the animation blueprint file even if the Animation Mode is set the "Single Node". A workaround is to hit the "Step Back" button and then "Resume" so it would play, but it will not display the progress on the timeline. It was also reported on one of your tutorials on youtube a few months ago
    2. Tried adding an "Apply Damage" task by following "Able Tutorial #1 - Creating a Simple Ability" tutorial. I set "Target Logic" and "Targeting" properties but after clicking Save, a dialog is displayed with the following error: "No Query Dependency Defined: BasicMelee with GetCopyResultsToContext".
    I will appreciate it if you can help me with those 2 issues!
    1.) Make sure you have the Able Ability Component on your preview character. Otherwise you get weirdness when trying to execute Abilities. You can also turn on Verbose for the Animation task and it'll tell you whats going on under the hood. See if that pops up anything weird.

    2.) That error is complaining that you have an Apply Damage Task, but you have either No Targeting logic on the Ability itself, or you don't have a dependency defined for a query to populate who/what you'll be applying damage to. If you have an query earlier on in the Ability, just add a dependency (Click on your Apply Damage Task, then right click on the query and click "add dependency").

    Leave a comment:


  • replied
    Hello,

    This plugin looks great!
    I try using it on UE 4.24.2 but I am having 2 issues so far:
    1. Preview animation for Play Animation task doesn't seem to work for me. The character remains in idle animation from the animation blueprint file even if the Animation Mode is set the "Single Node". A workaround is to hit the "Step Back" button and then "Resume" so it would play, but it will not display the progress on the timeline. It was also reported on one of your tutorials on youtube a few months ago
    2. Tried adding an "Apply Damage" task by following "Able Tutorial #1 - Creating a Simple Ability" tutorial. I set "Target Logic" and "Targeting" properties but after clicking Save, a dialog is displayed with the following error: "No Query Dependency Defined: BasicMelee with GetCopyResultsToContext".
    I will appreciate it if you can help me with those 2 issues!

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    It's in there already, under Able Settings just toggle off "Copy Inherited Tasks". However, it won't work if the Ability is already created (and Tasks that are simply inherited through normal means, e.g., without the copy, cannot be modified). Previously Able would go and ask the Parent for the Tasks every time an Ability loaded, which lead to some nasty bookkeeping and overhead (every Ability had two Task arrays and it would have to do a "if X, return this one, else return the other" every time an Ability was asked for its tasks, which happens anytime an Ability is executed) - so I moved to simplify that.

    Like I said, you're in a bit of a rock and a hard place. I could add an option to the editor to forcefully re-copy the Parent tasks, but you will likely get dupes that you have to clean up manually.
    Gotcha. I don't know that the force update route is worth the effort. Seems like some extra care on my part in the planning stages is probably the way forward, and probably the right way in any case.

    Leave a comment:


  • replied
    Originally posted by soctty View Post

    I was afraid that was gonna be the case. Would it be feasible to put the old inheritance functionality on a toggle?
    It's in there already, under Able Settings just toggle off "Copy Inherited Tasks". However, it won't work if the Ability is already created (and Tasks that are simply inherited through normal means, e.g., without the copy, cannot be modified). Previously Able would go and ask the Parent for the Tasks every time an Ability loaded, which lead to some nasty bookkeeping and overhead (every Ability had two Task arrays and it would have to do a "if X, return this one, else return the other" every time an Ability was asked for its tasks, which happens anytime an Ability is executed) - so I moved to simplify that.

    Like I said, you're in a bit of a rock and a hard place. I could add an option to the editor to forcefully re-copy the Parent tasks, but you will likely get dupes that you have to clean up manually.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    Not currently. They're copied when the Ability is initially created and there is no great way to determine later if we should recopy the base level Tasks again (you'd end up with dupes for anything you slightly changed). So your options are to re-create the Ability, or just manually add the new Task.

    Being able to Copy / Paste Tasks between Abilities would help this quite a bit, but it's not a trivial thing to add unfortunately and I haven't quite thought of a good way to go about it just yet.
    I was afraid that was gonna be the case. Would it be feasible to put the old inheritance functionality on a toggle?

    Leave a comment:


  • replied
    Originally posted by soctty View Post
    Hey Matt,

    Is there a way to push a refresh down to child classes after adding a new inheritable task to their parent? Only thing that seems to be doing it at present is recreating the child class. Recompile, reload, project reload.. nothing else seems to do it.
    Not currently. They're copied when the Ability is initially created and there is no great way to determine later if we should recopy the base level Tasks again (you'd end up with dupes for anything you slightly changed). So your options are to re-create the Ability, or just manually add the new Task.

    Being able to Copy / Paste Tasks between Abilities would help this quite a bit, but it's not a trivial thing to add unfortunately and I haven't quite thought of a good way to go about it just yet.

    Leave a comment:


  • replied
    Hey Matt,

    Is there a way to push a refresh down to child classes after adding a new inheritable task to their parent? Only thing that seems to be doing it at present is recreating the child class. Recompile, reload, project reload.. nothing else seems to do it.

    Leave a comment:


  • replied
    Originally posted by schmozzzle View Post
    Has anyone found a way to deal with the system playing abilites twice when a player has high ping?

    it starts to happen around Net PktLag=550

    any insight would be geat!
    550ms of lag is pretty brutal. Is your Ability less than .5 seconds long? I could definitely see that causing a double play.

    Leave a comment:


  • replied
    Has anyone found a way to deal with the system playing abilites twice when a player has high ping?

    it starts to happen around Net PktLag=550

    any insight would be geat!

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    There is a callback when using the Spawn Actor task that lets you set some properties on the spawned actor, so you can do it there. I would likely just have a "Owner" property on my projectiles, set it to the caster, and then when the overlap happens, use an Ability that just does the explosion vfx/sfx, and calls CalculateDamage which then passes in the owner and you can grab all the owner properties in the OnCalculateDamageForActor callback.

    Heal would be the same thing. Just pass along the Caster either as owner or instigator, and then either use a custom event or Damage Task (which should work for negative damage...) and pull the stats there.
    Ah alright! cheers

    Leave a comment:

Working...
X