Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • replied
    Goal: Whenever an actor takes damage, evaluate the type of damage and react accordingly for that actor.

    First thought is to use UE4's TakeDamage's event "OnTakeAnyDamage" as a launching point for logic to respond to damage types for differing responses and logging. I would like to pass in a custom DamageType to have the different actors make decisions as this is a parameter of the TakeDamage actor method I am overriding and is included in the event being raised. Sadly, I see DamageTypes have to be a class and cannot be an instance.

    Alternatives:

    1 - add my own events in the blueprintlibrary call where damage is being calculated and pass the gameplay tag.

    2 - I see you set gameplay tag task could work, but it does not fire off any event that I could respond to.

    3 - Hmmm...maybe use the custom event task and have to remember to set it after every set gameplay tag is set?

    I think I am going to try for the (1) alternative. Make a delegate off my class that inherits from actor and have the bluprintlibrary broadcast it.

    Leave a comment:


  • replied
    Originally posted by TheNoontide View Post
    Hi Matt, revisiting Able after half a year of learning more UE4 Blueprinting. Finally understand the beauty of Gameplay Abilities! Is your dedicated server Example up to date?
    It needs to be converted to the latest, but it should still work.Let me know otherwise and I'll do the conversion myself and update it.

    Leave a comment:


  • replied
    Hi Matt, revisiting Able after half a year of learning more UE4 Blueprinting. Finally understand the beauty of Gameplay Abilities! Is your dedicated server Example up to date?

    Leave a comment:


  • replied
    Able v2.24 has been submitted.

    - Fixed a crash caused by Animation Interrupts where there were no Animations queued up.

    - When the Ability Component is Garbage Collected, it will now shut down all active Abilities / Tasks with the Successful result. Giving things a clean ending. (h/t Ruyi)

    Leave a comment:


  • replied
    Edit: Solved. GeneratedClass is the answer. I was simply casting incorrectly.

    Is there a way to get a BlueprintGeneratedClass from a UBlueprint that is a UAblAbility?

    When using TSubclassOf<UAblAbility> in a UDataTable, the entry can look like:

    Code:
    BlueprintGeneratedClass'Game/Player/Reactions/ABL_Flinch.ABL_Flinch_C'
    Is it possible to get this in C++ from a UBlueprint?

    Something along the lines of what I've tried so far is:

    Code:
    UBlueprint* FlinchBlueprint = GetFlinchBlueprint();
    TSubclassOf<UAblAbility> Flinch = Cast<UAblAbility>(FlinchBlueprint)->GetClass();
    or

    Code:
    UBlueprint* FlinchBlueprint = GetFlinchBlueprint();
    TSubclassOf<UAblAbility> Flinch = Cast<UAblAbility>(FlinchBlueprint)->GetBlueprintClass();
    or

    Code:
    UBlueprint* FlinchBlueprint = GetFlinchBlueprint();
    TSubclassOf<UAblAbility> Flinch = Cast<UAblAbility>(FlinchBlueprint)->GeneratedClass;
    However, in all of these cases the result of Flinch is:

    Code:
    Class'Script/AbleCore.AblAbilityBlueprint'
    Is it possible to have Flinch be the same as the BlueprintGeneratedClass like above?
    Last edited by Divistri; 05-18-2018, 06:15 PM.

    Leave a comment:


  • replied
    I had a bug report come in on email with a crash related to Animation Interrupts, it's a stupid error on my part and I'll get a fix out - but in the meantime, if you want to apply the change locally you can:

    AnimNode_AbilityAnimationPlayer.cpp
    void FAnimNode_AbilityAnimPlayer::OnAbilityInterrupted(bool clearQueue)
    {
    if (clearQueue)
    {
    m_AnimationQueue.Empty();
    }
    else if (m_AnimationQueue.Num()) // This is the line to fix the crash.
    {
    m_AnimationQueue.RemoveAt(0);
    }
    }
    Sorry for the hiccup.

    Leave a comment:


  • replied
    All good now. I deleted the UE4Editor-Able.dll and recompiled. The other dll's compiled so I assumed the one in error did to. It didn't.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post
    Able v2.23 Submitted

    Notes:
    I updated the plugin from the launcher to the 4.19.2 binary engine after getting notified of an update available. Copied over the plugin directory to my source build. Compiled successfully.

    Went over to my project. Deleted the Intermediate and Binaries directories (habit after I recompile the engine). It compiles with no error. Try to run the editor and I get an error of

    LogModuleManager: Warning: Found module file ../../../Engine/Plugins/Able/Binaries/Win64/UE4Editor-Able.dll (API version 3944462), but it was incompatible with the current engine API version (0). This is likely a stale module that must be recompiled.
    LogModuleManager: Display: Found up-to-date module file ../../../Engine/Plugins/Able/Binaries/Win64/UE4Editor-AbleCore.dll (API version 0).
    LogModuleManager: Display: Found up-to-date module file ../../../Engine/Plugins/Able/Binaries/Win64/UE4Editor-AbleEditor.dll (API version 0).


    This is the first time applying an updated plugin. I tried searching to see if I needed to do something else but so far not finding anything.

    Leave a comment:


  • replied
    Able v2.23 Submitted

    Notes:
    - Fixed Play Single Node Animation not working with a modified Play rate.

    - Rewrote Ability Animation Node to be cleaner. Functionality should be the same, if not more predictable / better.

    - Fixed an issue where blending sometimes wouldn't occur when using Ability Animation Node.

    - Blend Out has been disabled for Ability Animation Node (it doesn't look like it ever worked in the first place). Currently exploring a few ideas.

    - Force Ability Editor Preview Actors out of the world before cleanup. This should fix the duplicates hanging around for no reason.

    - Fixed an issue where the current time marker in the Ability Preview would show up even if the Ability had branched and wasn't playing the currently opened preview anymore.

    - Dynamic Montage Slot can now be specified (previously it always used "Ability" - which is instead now the default value).

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post
    Ah, yea. The "Events" aren't events in the BP sense. They're merely methods that are called. So, all Custom Events come through the OnCustomEvent callback. You can use the name parameter to define which event is doing the calling, that's the entire purpose of that parameter.

    Actual BP event creation based on a Task name would be a bit tricky (but it might be do-able, haven't looked into it honestly).
    Ok, thanks. That clears it up a bit. Still have no idea how to trigger an actual BP custom event from that function override (that probably has to do something with me being not so enlightened). It says that I can't use reference to self in a custom event and fails to compile

    Leave a comment:


  • replied
    Ah, yea. The "Events" aren't events in the BP sense. They're merely methods that are called. So, all Custom Events come through the OnCustomEvent callback. You can use the name parameter to define which event is doing the calling, that's the entire purpose of that parameter.

    Actual BP event creation based on a Task name would be a bit tricky (but it might be do-able, haven't looked into it honestly).

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post
    That's the plan. It's on my list.
    Cool, thanks. The blending thing so far is the biggest issue since it ruins the setup for me completely.

    Originally posted by ExtraLifeMatt View Post
    Custom Event Task takes in a name parameter, you can use that to identify what event is firing - rather than using two different events. Or am I misunderstanding your question?
    I'm trying to make a custom event fire an event from graph. I feel that I'm missing something - does a custom event named Test1 suppose to fire when a custom event with a name Test1 is triggered on timeline?

    Leave a comment:


  • replied
    Originally posted by Roland_Price View Post
    Any chance of blending issues and broken preview fix will make it to nearest update?
    That's the plan. It's on my list.

    And maybe some info on this one?
    Custom Event Task takes in a name parameter, you can use that to identify what event is firing - rather than using two different events. Or am I misunderstanding your question?

    I guess it's my sacred duty to welcome you in a FullHD world (as the one that had this procedure ~5 years ago). I can imagine what a tough decision that was, so congrats on doing that.
    Yea, it's never a "fun" thing to mess with your eye sight (particularly when I was doing fine with contacts for 20+ years), but I'm glad I did it and the recovery is going smoothly.

    Also, if anyone here is going to be at DevCon, I'll be wandering around in a PanicButton (rep'ing my day job) T-shirt - feel free to say hi. I love meeting people.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post
    Aiming for the next update for Able to hit around the 13th.
    Any chance of blending issues and broken preview fix will make it to nearest update?

    Originally posted by Roland_Price View Post
    Also one more thing - can I get a custom event from the time line to fire a custom event from the ability's BP Graph? Naming them the same would me my first guess, but that didn't work. All I found was a "function override way" from your lightning tutorial, but that is something I can't get to work either. All I need is to fire a custom event in graph once a custom event in the Timeline is fired.
    And maybe some info on this one?

    Originally posted by ExtraLifeMatt View Post
    I had LASIK done on Friday
    I guess it's my sacred duty to welcome you in a FullHD world (as the one that had this procedure ~5 years ago). I can imagine what a tough decision that was, so congrats on doing that.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    You can have CalculateDamageForActor call a Blueprint Library Function or some damage calculation you create and pass all the info to and then simply return a value - that would allow you to keep all your damage calculations in one place. I avoid using the FDamageEvent scheme because it feels fairly limited (radial vs point) and I only piggy back off it since so many people use the TakeDamage callback.

    The actors not cleaning up may be due to the blueprint compile needing it to clear our the actor and recreate it. Closing the editor does just that. I'll look into that.

    Aiming for the next update for Able to hit around the 13th. I had LASIK done on Friday so I'm avoiding the computer (beyond this quick post) and then I'll be out at Playstation DevCon all week, so the earliest I can get some work done is likely Friday night.

    Cheers!
    Good point on the library function. Congrats on the LASIK and have fun at the Con!

    Leave a comment:

Working...
X