Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

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

    Alright v1.90 has been submitted. Notes below:

    - Fixed an issue where Passives would crash if you tried to cancel them.
    - Fixed an issue where sometimes Passives would not fire OnAbilityEnd.
    - Added C++ Delegates for OnAbilityStart/OnAbilityEnd (these are called before the Blueprint versions). You can find them on the Ability Component.
    - Added GetAbilityCooldownRatio and GetAbilityCooldownTotal to the Ability Component, these methods return the ratio of the provided Ability's cooldown and what the actual cooldown value that was calculated is. If you want the current Cooldown time in seconds, just multiply them together.
    - Selecting a Preview Asset will now try to preload things before loading the window. This will at least give you a warning if you are about to load a lot of assets so you know what to expect.
    - Few Non-Unity build fixes.
    Able Ability System - A high performance, robust ability system for UE4. Now Available!

    Comment


      Alright v1.90 has been submitted
      Big thanks! Any chace you can let us know here when update will be live? I can't find a method to find plugin version in Marketplace (maybe update description so we will know which version is live?)
      How to create first person shooter game from scratch. Lots of tutorials: http://www.shootertutorial.com - celebrating 50th Tutorial!

      My Marketplace Assets

      Comment


        Originally posted by intoxicat3 View Post
        Big thanks! Any chace you can let us know here when update will be live? I can't find a method to find plugin version in Marketplace (maybe update description so we will know which version is live?)
        You'll likely know as soon as I do. The marketplace should tell you there are updates available. Right now it's still in processing and there was an issue with the submission for 4.15 that Epic is looking at (bug in the submission page it seems).
        Able Ability System - A high performance, robust ability system for UE4. Now Available!

        Comment


          Two questions:
          1) Can I modify single ability or all ability cooldowntime by a ratio? In example if I have a talent or item that reduces cooldowns by 10% or 0.5 sec for all active?
          2) Can I in any way modify the playrate of the entire ability? For example If I have an ability with anim montage, 3 sounds timed to that montage, and a custm event (reload) - can I make a quick reload by playing this ability 1.2x ? Would it still be in sync?

          I'm afraid that answer for both is no

          Comment


            Originally posted by AngeIV View Post
            Two questions:
            1) Can I modify single ability or all ability cooldowntime by a ratio? In example if I have a talent or item that reduces cooldowns by 10% or 0.5 sec for all active?
            2) Can I in any way modify the playrate of the entire ability? For example If I have an ability with anim montage, 3 sounds timed to that montage, and a custm event (reload) - can I make a quick reload by playing this ability 1.2x ? Would it still be in sync?

            I'm afraid that answer for both is no
            The first answer is yes, there is a Blueprint method called GetCooldown which you can override with whatever logic you want. You can use GetBaseCooldown to return the value you have set on the Ability itself, then check stats/logic/whatever on how you want to modify that value.

            The second answer is no, but you could create a quick load version and just have some logic that says "If I have this buff/stat/whatever, then play the quick reload - otherwise play the normal reload". I can look at making that more dynamic in the meantime.
            Able Ability System - A high performance, robust ability system for UE4. Now Available!

            Comment


              Another issue. In BTTask_PlayAbility you aren't passing Owning Pawn (which is actually running ability) to Context. That's why you can't target Self in tasks that are played in Behavior Tree. Fixed by just passing Pawn Owner to MakeContext in ExtecuteTask function. Any chance you can fix it as well?
              How to create first person shooter game from scratch. Lots of tutorials: http://www.shootertutorial.com - celebrating 50th Tutorial!

              My Marketplace Assets

              Comment


                Originally posted by intoxicat3 View Post
                Another issue. In BTTask_PlayAbility you aren't passing Owning Pawn (which is actually running ability) to Context. That's why you can't target Self in tasks that are played in Behavior Tree. Fixed by just passing Pawn Owner to MakeContext in ExtecuteTask function. Any chance you can fix it as well?
                Sure thing. Thanks for the report.
                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                Comment


                  Thanks. Another thing can you make:
                  Code:
                  private:
                      /* The Ability being executed. */
                      UPROPERTY(Transient)
                      const UAblAbility* m_Ability;
                  
                      /* The Ability Component running this Ability. */
                      UPROPERTY(Transient)
                      UAblAbilityComponent* m_AbilityComponent;
                  
                      /* The Stack Count. */
                      UPROPERTY(Transient)
                      int32 m_StackCount;
                  
                      /* The Current Time of the Ability. */
                      UPROPERTY(Transient)
                      float m_CurrentTime;
                  
                      /* The Last delta value used to update the Ability. */
                      UPROPERTY(Transient)
                      float m_LastDelta;
                  
                      /* The "Owner" of this ability (may or may not be the same as the AbilityComponent owner).*/
                      UPROPERTY(Transient)
                      TWeakObjectPtr<AActor> m_Owner;
                  
                      /* The Actor that caused this Ability to occur (if there is one).*/
                      UPROPERTY(Transient)
                      TWeakObjectPtr<AActor> m_Instigator;
                  
                      /* The Actor Targets of the Ability. */
                      UPROPERTY(Transient)
                      TArray<TWeakObjectPtr<AActor>> m_TargetActors;
                  
                      /* Map of Task Unique IDs to ScratchPads. */
                      UPROPERTY(Transient)
                      TMap<uint32, class UAblAbilityTaskScratchPad*> m_TaskScratchPadMap;
                  
                      /* Used if our targeting call uses Async instead of Sync queries. */
                      FTraceHandle m_AsyncHandle;
                  
                      /* Cached Transform used for our Async transform in case we need to do extra processing once our results come in. Currently only Cone check uses this. */
                      UPROPERTY(Transient)
                      FTransform m_AsyncQueryTransform;
                  protected instead of private in ablAbilityContext.h ? We are extending contexts and will be nice to have access to those variables.

                  And still something is wrong with playing passive abilities in active abilities:
                  Code:
                  LogBlueprintUserMessages: [DefaultTestMap] OnTaskStart called for Task AblPlayAbilityTask_0 at time 0.03.
                  LogBlueprintUserMessages: [DefaultTestMap] Calling ActivateAbility with Actor AICharacter_Regular_Ranged_C_0 with Ability Ability_AttackNotify, Owner AICharacter_Regular_Ranged_C_0, Instigator AICharacter_Regular_Ranged_C_0.
                  LogBlueprintUserMessages: [DefaultTestMap] OnTaskEnd called for Task AblPlayAbilityTask_0 at time 0.03. Task Result = Successful
                  My passive ability takes 1 second to complete and here as you can see it's completing in one frame...I have added breakpoint OnEnd to my custom task in passive ability and it's still not calling. Tick is calling for like 3 frames.

                  So basically I have passive ability with one custom task made in c++. This passive ability takes 1 second to complete.
                  I have active ability that takes 2 second and have Play Ability task with passive ability selected. Only OnTaskStarted is Called, Tick is called for 3 frames. OnTaskEnd isn't called.

                  Any chance you can tell me how to fix this internally? I have attack notify passive ability to just spawn "notify" mesh before actual attack and this is critical for my prototype.
                  Last edited by intoxicat3; 11-22-2017, 07:21 AM.
                  How to create first person shooter game from scratch. Lots of tutorials: http://www.shootertutorial.com - celebrating 50th Tutorial!

                  My Marketplace Assets

                  Comment


                    Sure, I can make those fields protected - I don't think that will hurt anything.

                    With regard to your other issue, Play Ability Task is always one frame IIRC (I can check later tonight) - so that's as expected. The OnEnd should be getting called (there had been an issue were Passives were updated and then removed before getting the OnEnd call), you can place a breakpoint in the AblAbilityContext::FinishAbility (or search for those new C++ delegates) and see where that code is fired from.

                    I'm in the midst of a new PC build (yay faster compile times) so I won't be up and running again till probably late tonight, but if you want to send me a small project with the issue you're seeing - I'd be more than happy to look things over. Otherwise I'll try and repro it myself probably Friday (since Thursday is a holiday).
                    Able Ability System - A high performance, robust ability system for UE4. Now Available!

                    Comment


                      Project sent.

                      Can you please tell me why cooldown is starting on ability start not end? Any chance to make option to start it on end instead?

                      And I found another issue.
                      If you interupt active ability which have collision (copying context) and apply damage on collision context it will be called number of times you have interupted ability earlier. So if you interrupt 3 times active ability next time ability will play it will call 3 times damage.
                      Last edited by intoxicat3; 11-22-2017, 01:33 PM.
                      How to create first person shooter game from scratch. Lots of tutorials: http://www.shootertutorial.com - celebrating 50th Tutorial!

                      My Marketplace Assets

                      Comment


                        Originally posted by intoxicat3 View Post
                        Project sent.

                        Can you please tell me why cooldown is starting on ability start not end? Any chance to make option to start it on end instead?

                        And I found another issue.
                        If you interupt active ability which have collision (copying context) and apply damage on collision context it will be called number of times you have interupted ability earlier. So if you interrupt 3 times active ability next time ability will play it will call 3 times damage.
                        Cooldown has always been on start in most frameworks I've used (and most games, if you look at League or PoE you'll see the cooldown starts the moment you hit the button so it's running even while you are still animating the Ability). You can always adjust your cooldown time to be execution time + whatever you want the cooldown to be.

                        The interrupt makes no sense to me. If you interrupt an Ability, it's instantly killed. So you shouldn't be able to interrupt the same Ability multiple times...
                        Able Ability System - A high performance, robust ability system for UE4. Now Available!

                        Comment


                          The interrupt makes no sense to me.
                          - Create Active ability which is taking 2 seconds, doing collision check (with copy to context) and doing damage for those actors,
                          - Then when this ability is active, cancel it and run another active ability (different than this)
                          - Then run again first ability you will see that damage is dealt 2 times,
                          - If you cancel this ability once again after running again it will do 3 times damage task,

                          Hope you understand now. If not I can send you update of my project to check it out.
                          How to create first person shooter game from scratch. Lots of tutorials: http://www.shootertutorial.com - celebrating 50th Tutorial!

                          My Marketplace Assets

                          Comment


                            When building package:
                            Code:
                             E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingSphere.cpp(35): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingSphere.cpp(35): error C2227: left of '->AsyncOverlapByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingSphere.cpp(41): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingSphere.cpp(41): error C2227: left of '->QueryOverlapData' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingSphere.cpp(58): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingSphere.cpp(58): error C2227: left of '->OverlapMultiByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   ablTargetingCapsule.cpp
                            UATHelper: Packaging (Windows (64-bit)):   ablTargetingBox.cpp
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(37): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(37): error C2227: left of '->AsyncLineTraceByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(43): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(43): error C2227: left of '->QueryTraceData' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(64): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(64): error C2227: left of '->LineTraceSingleByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(71): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingRaycast.cpp(71): error C2227: left of '->LineTraceMultiByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   ablBranchCondition.gen.cpp
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCone.cpp(48): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCone.cpp(48): error C2227: left of '->AsyncOverlapByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCone.cpp(55): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCone.cpp(55): error C2227: left of '->QueryOverlapData' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCone.cpp(79): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCone.cpp(79): error C2227: left of '->OverlapMultiByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   ablTargetingBase.gen.cpp
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingBox.cpp(43): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingBox.cpp(43): error C2227: left of '->AsyncOverlapByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingBox.cpp(49): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingBox.cpp(49): error C2227: left of '->QueryOverlapData' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingBox.cpp(74): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCapsule.cpp(36): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingBox.cpp(74): error C2227: left of '->OverlapMultiByChannel' must point to class/struct/union/generic typec:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of
                             'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCapsule.cpp(36): error C2227: left of '->AsyncOverlapByChannel' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCapsule.cpp(42): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCapsule.cpp(42): error C2227: left of '->QueryOverlapData' must point to class/struct/union/generic type
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCapsule.cpp(59): error C2027: use of undefined type 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\GenericPlatform/GenericPlatformMisc.h(817): note: see declaration of 'UWorld'
                            UATHelper: Packaging (Windows (64-bit)):   E:\Azure\Rogal\Plugins\Able\Source\AbleCore\Private\Targeting\ablTargetingCapsule.cpp(59): error C2227: left of '->OverlapMultiByChannel' must point to class/struct/union/generic type
                            How to create first person shooter game from scratch. Lots of tutorials: http://www.shootertutorial.com - celebrating 50th Tutorial!

                            My Marketplace Assets

                            Comment


                              I assume you modified something in those files? If so, yea, you may run into these issues where headers are missing when those files aren't in the Unity build file. I'll add fixes for those, but otherwise you can simply just make sure the files are marked as read only / checked in to whatever source control you are using - and UBT will put them back in the unity build.
                              Able Ability System - A high performance, robust ability system for UE4. Now Available!

                              Comment


                                Alright, v1.91 has been submitted. I missed one a couple cases on the passives but that's fixed now. Also fixed the unity build issues in the collision queries, and moved Instance properties to protected. Should be live soon-ish.
                                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                                Comment

                                Working...
                                X