Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

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

    #91
    Originally posted by Antony Jones View Post
    Crash Win64 4.15.2

    Assertion failed: ScratchPad [File:\Build\++Portal+Main+Full\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\Able\Source\AbleCore\Private\Tasks\ablPlayParticleEffectTask.cpp] [Line: 135]



    UE4Editor_Core!FDebug::AssertFailed() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:349]
    UE4Editor_AbleCore!UAblPlayParticleEffectTask::OnTaskEnd() [d:\build\++portal+main+full\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\tasks\ablplayparticleeffecttask.cpp:138]
    UE4Editor_AbleCore!UAblAbilityInstance::InternalUpdateTasks() [d:\build\++portal+main+full\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilityinstance.cpp:410]
    UE4Editor_AbleCore!TGraphTask<FAsyncAbilityInstanceUpdaterTask>::ExecuteTask() [d:\build\++portal+main+full\sync\rocketsync\engine\source\runtime\core\public\async\taskgraphinterfaces.h:883]
    UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\core\private\async\taskgraph.cpp:954]
    UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilIdle() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\core\private\async\taskgraph.cpp:716]
    UE4Editor_Engine!FTickTaskSequencer::ReleaseTickGroup() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\engine\private\ticktaskmanager.cpp:555]
    UE4Editor_Engine!FTickTaskManager::RunTickGroup() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\engine\private\ticktaskmanager.cpp:1450]
    UE4Editor_Engine!UWorld::RunTickGroup() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\engine\private\leveltick.cpp:758]
    UE4Editor_Engine!UWorld::Tick() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\engine\private\leveltick.cpp:1384]
    UE4Editor_AbleEditor!FAbilityEditorViewportClient::Tick() [d:\build\++portal+main+full\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ableeditor\private\abilityeditor\ablabilityeditorviewportclient.cpp:220]
    UE4Editor_UnrealEd!UEditorEngine::Tick() [d:\build\++ue4+release-4.15+compile\sync\engine\source\editor\unrealed\private\editorengine.cpp:1698]
    UE4Editor_UnrealEd!UUnrealEdEngine::Tick() [d:\build\++ue4+release-4.15+compile\sync\engine\source\editor\unrealed\private\unrealedengine.cpp:391]
    UE4Editor!FEngineLoop::Tick() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\launch\private\launchengineloop.cpp:3025]
    UE4Editor!GuardedMain() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\launch\private\launch.cpp:166]
    UE4Editor!GuardedMainWrapper() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:134]
    UE4Editor!WinMain() [d:\build\++ue4+release-4.15+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:210]
    UE4Editor!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:264]
    kernel32
    ntdll
    Hey Antony,

    That crash means something went really wrong. Looks like it happened in the editor, do you see this crash in a normal game?
    Able Ability System - A high performance, robust ability system for UE4. Now Available!

    Comment


      #92
      Originally posted by ExtraLifeMatt View Post
      Just a heads up, I think the sale ends in < 24 hours. So, if you're on the fence - you gotta decide soon.
      Thought it ends end of day 5/21 - my bad. Any plans for a summer sale later?

      Comment


        #93
        I'm struggling to making the "cool down" work as expected, perhaps I'm misunderstanding the usage, but I would like a screenshot example of a blueprint that uses this effectively.

        Just for an experiment, I'm using Able to for a basic Jump ability, and I want to use "cool down" to prevent players from spamming the button (because doing so wastes the double jump due to my physics set-up), so to mitigate player error, I want to use "cool down" to prevent successive Jumps from happening so soon after the initial jump.

        But so far I can't figure out how to make the BP respect cool down.
        Last edited by Aumaan Anubis; 05-21-2017, 01:41 PM.

        Comment


          #94
          Hello, i can't seem to apply damage whatsoever.
          I even used the TargetMannquiun from your shooter example, along with the combo tutorial. and on (Event AnyDamage) doesn't even activate.
          Last edited by IronSuit; 05-21-2017, 03:47 PM.

          Comment


            #95
            Originally posted by morbidipus View Post
            Thought it ends end of day 5/21 - my bad. Any plans for a summer sale later?
            Possibly, but it'll be a bit.

            Originally posted by Aumaan Anubis View Post
            I'm struggling to making the "cool down" work as expected, perhaps I'm misunderstanding the usage, but I would like a screenshot example of a blueprint that uses this effectively.

            Just for an experiment, I'm using Able to for a basic Jump ability, and I want to use "cool down" to prevent players from spamming the button (because doing so wastes the double jump due to my physics set-up), so to mitigate player error, I want to use "cool down" to prevent successive Jumps from happening so soon after the initial jump.

            But so far I can't figure out how to make the BP respect cool down.
            You just want to use a BP to see if an Ability is on Cooldown? Sure.

            Click image for larger version

Name:	AblCooldown.png
Views:	1
Size:	217.2 KB
ID:	1128374

            Originally posted by IronSuit View Post
            Hello, i can't seem to apply damage whatsoever.
            I even used the TargetMannquiun from your shooter example, along with the combo tutorial. and on (Event AnyDamage) doesn't even activate.
            Make sure the Character is marked as "Can be Damaged" in their properties, otherwise they won't get the event. If that doesn't work - then disable that Hunger BP that was causing issues previously and see if that helps.
            Able Ability System - A high performance, robust ability system for UE4. Now Available!

            Comment


              #96
              On the topic of cooldowns, could you map these to a hotbar that would display the cooldown similar to arpgs and mmos?

              Comment


                #97
                Originally posted by TheQuiet1994 View Post
                On the topic of cooldowns, could you map these to a hotbar that would display the cooldown similar to arpgs and mmos?
                Yup. You can get all the information you need to display that. You would need to wrap the Ability in some simple struct that had stuff like an Icon, maybe some text when you hover over it - but you can get all the info you need to do a cooldown widget/spinner thing.
                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                Comment


                  #98
                  Originally posted by ExtraLifeMatt View Post

                  Make sure the Character is marked as "Can be Damaged" in their properties, otherwise they won't get the event. If that doesn't work - then disable that Hunger BP that was causing issues previously and see if that helps.
                  I was able to get everything working again by using a backup I've created earlier.
                  I'm now able to perform combos and I've hooked each attack with the stamina system, so far everything working good.

                  Thank you for your continuous support.

                  Comment


                    #99
                    So, I'm struggling again. I can't seem to make this work while getting the variable.

                    Click image for larger version

Name:	c5a0ebecd4d417d71a7799924071b34a.png
Views:	1
Size:	193.6 KB
ID:	1128431

                    This one (above) doesn't work. No matter how I set it up.

                    Click image for larger version

Name:	fb9c667767c31500ff8a6242a5f4b327.png
Views:	1
Size:	189.2 KB
ID:	1128432

                    This one works perfectly fine. All I did was remove the get variable node.
                    The first picture returns the error, "LogAble:Error: GetAbilityObjectFromClass was passed a null class. Check your parameters!"

                    Comment


                      Originally posted by TheQuiet1994 View Post
                      So, I'm struggling again. I can't seem to make this work while getting the variable.

                      This one (above) doesn't work. No matter how I set it up.

                      This one works perfectly fine. All I did was remove the get variable node.
                      The first picture returns the error, "LogAble:Error: GetAbilityObjectFromClass was passed a null class. Check your parameters!"
                      Internally, those two images are the same. They call the same method (GetAbilityObjectFromClass), one just has a parameter hard coded - the other doesn't. I don't know why that Stamina blueprint system breaks such a simple feature, we saw the same thing when you just set a simple float value, so it's not an Able thing. If you're inheriting your blueprint from this Stamina blueprint system, it may be causing some values to not be properly inherited (i.e. any new variable). You could try adding your test variable on the Stamina Blueprint system base blueprint, but other than that - I have no idea. You'd have to ask the author of that system if he's seen this behavior before.
                      Able Ability System - A high performance, robust ability system for UE4. Now Available!

                      Comment


                        Originally posted by ExtraLifeMatt View Post
                        Internally, those two images are the same. They call the same method (GetAbilityObjectFromClass), one just has a parameter hard coded - the other doesn't. I don't know why that Stamina blueprint system breaks such a simple feature, we saw the same thing when you just set a simple float value, so it's not an Able thing. If you're inheriting your blueprint from this Stamina blueprint system, it may be causing some values to not be properly inherited (i.e. any new variable). You could try adding your test variable on the Stamina Blueprint system base blueprint, but other than that - I have no idea. You'd have to ask the author of that system if he's seen this behavior before.
                        It doesn't seem that [MENTION=56356]TheQuiet1994[/MENTION] uses the Stamina hunger system because it's not added in their component list. so it's must be something else. [MENTION=56356]TheQuiet1994[/MENTION] i was able to determine the source of the problem by deleting chunks of my blueprints in my character and controller, after each chunk deleted i did a quick test by using a editable variable with a default value of 5 and a print string to print the value each time i press the letter "N". I change the value for the variable from the details screen from 5 to lets say 9. so each time after deleting chunks of blueprints i try and see if the value is changed from 5 to 9. if not, then i restore the deleted chunk and delete another. Using this way i was able to determine a function that was in my blueprints that was initializing my character attributes from the server, so it was the one that prevent me from successfully changing the variable. After disconnecting the function Able was working fine.

                        Anyway [MENTION=172958]ExtraLifeMatt[/MENTION] , i have another question.
                        So i was able to successfully override the Damage function.
                        But in my game i need to apply physical and elemental damage, this where I've faced a problem.
                        Basically i need to return two values as a damage, one is physical damage and the other one is elemental damage.

                        Right now there're two options that comes to my mind

                        First, i do all the damage calculations in the damage override damage function by casting the actor to my current target and getting the armor and resistance values and do the required math.
                        This solution works if i have small number of enemies, but in case i have something like 100 enemies in the game its not a practical solution.

                        Second, is that i return the elemental and physical damage as a floats to my target and i do the resistance calculations in the target blueprint. (I prefer this one)

                        Click image for larger version

Name:	Capture.PNG
Views:	2
Size:	165.7 KB
ID:	1128452

                        This picture shows my setup for the first option, which is currently working for me. But for a lot of enemies it's not very good.
                        Last edited by IronSuit; 05-23-2017, 12:58 PM.

                        Comment


                          Originally posted by IronSuit View Post
                          It doesn't seem that [MENTION=56356]TheQuiet1994[/MENTION] uses the Stamina hunger system because it's not added in their component list. so it's must be something else. [MENTION=56356]TheQuiet1994[/MENTION] i was able to determine the source of the problem by deleting chunks of my blueprints in my character and controller, after each chunk deleted i did a quick test by using a editable variable with a default value of 5 and a print string to print the value each time i press the letter "N". I change the value for the variable from the details screen from 5 to lets say 9. so each time after deleting chunks of blueprints i try and see if the value is changed from 5 to 9. if not, then i restore the deleted chunk and delete another. Using this way i was able to determine a function that was in my blueprints that was initializing my character attributes from the server, so it was the one that prevent me from successfully changing the variable. After disconnecting the function Able was working fine.

                          Anyway [MENTION=172958]ExtraLifeMatt[/MENTION] , i have another question.
                          So i was able to successfully override the Damage function.
                          But in my game i need to apply physical and elemental damage, this where I've faced a problem.
                          Basically i need to return two values as a damage, one is physical damage and the other one is elemental damage.

                          Right now there're two options that comes to my mind

                          First, i do all the damage calculations in the damage override damage function by casting the actor to my current target and getting the armor and resistance values and do the required math.
                          This solution works if i have small number of enemies, but in case i have something like 100 enemies in the game its not a practical solution.

                          Second, is that i return the elemental and physical damage as a floats to my target and i do the resistance calculations in the target blueprint. (I prefer this one)
                          Ah, my mistake. Sorry [MENTION=56356]TheQuiet1994[/MENTION] / [MENTION=764407]IronSuit[/MENTION]. Got confused. [MENTION=56356]TheQuiet1994[/MENTION], follow [MENTION=764407]IronSuit[/MENTION] 's advice - disable portions of your blueprint and try to find out where it's failing. The variables being stomped by the server is a good catch, I hadn't thought of that but that could totally do it. IronSuit and I were tracking down a similar issue and it's (so far) always been some other blueprint system or logic that is causing the issue.
                          [MENTION=764407]IronSuit[/MENTION], regarding your question. There's actually a big difference in your two approaches. Both require the same amount of math, but if you use the first approach and set Able to do "Async Damage Calculate" (it's an option on the Apply Damage Task), Able will evenly distribute the damage calculations across the cores on your CPU. So, if you have to calculate damage for 100 actors, and you have 4 cores (most systems are 4 core systems now a days), then each core will do 25 actors. In your second option, it's single threaded so one core is going to do all 100 calculations. As long as your Enemies have a common interface for getting their armor/resistence - it's super simple.
                          Able Ability System - A high performance, robust ability system for UE4. Now Available!

                          Comment


                            Originally posted by ExtraLifeMatt View Post
                            Ah, my mistake. Sorry [MENTION=56356]TheQuiet1994[/MENTION] / [MENTION=764407]IronSuit[/MENTION]. Got confused. [MENTION=56356]TheQuiet1994[/MENTION], follow [MENTION=764407]IronSuit[/MENTION] 's advice - disable portions of your blueprint and try to find out where it's failing. The variables being stomped by the server is a good catch, I hadn't thought of that but that could totally do it. IronSuit and I were tracking down a similar issue and it's (so far) always been some other blueprint system or logic that is causing the issue.
                            [MENTION=764407]IronSuit[/MENTION], regarding your question. There's actually a big difference in your two approaches. Both require the same amount of math, but if you use the first approach and set Able to do "Async Damage Calculate" (it's an option on the Apply Damage Task), Able will evenly distribute the damage calculations across the cores on your CPU. So, if you have to calculate damage for 100 actors, and you have 4 cores (most systems are 4 core systems now a days), then each core will do 25 actors. In your second option, it's single threaded so one core is going to do all 100 calculations. As long as your Enemies have a common interface for getting their armor/resistence - it's super simple.
                            I didn't explain my problem clearly, my mistake.
                            I won't be calculating the damage for 100 actors at the same time, because i won't be finghting them all at the same time.
                            Imagine that i have 100 different bosses at the game, and i will be fighting the bosses seperatly. So at each ability i only require 1 target only, not 100.

                            If i used first approach, then i need to cast to all of the bosses and calculate for all of them, even when fighting one boss alone. Which is waste of resources.
                            So if there's a way that i can get the parameters of targets in able without casting to the individual actors all at once it would be perfect. if you have any hints here i really appreciate it.

                            And for the second approach, i don't really know how can i return two damage values and pass them to the actors. (I only know how to return 1 value only).

                            Thanks.

                            Comment


                              Originally posted by IronSuit View Post
                              I didn't explain my problem clearly, my mistake.
                              I won't be calculating the damage for 100 actors at the same time, because i won't be finghting them all at the same time.
                              Imagine that i have 100 different bosses at the game, and i will be fighting the bosses seperatly. So at each ability i only require 1 target only, not 100.

                              If i used first approach, then i need to cast to all of the bosses and calculate for all of them, even when fighting one boss alone. Which is waste of resources.
                              So if there's a way that i can get the parameters of targets in able without casting to the individual actors all at once it would be perfect. if you have any hints here i really appreciate it.

                              And for the second approach, i don't really know how can i return two damage values and pass them to the actors. (I only know how to return 1 value only).

                              Thanks.
                              You can use a shared base class for all your Bosses/Enemies and just cast to that.

                              ACharacter -> AStatsCharacter (Resistances, stats, etc) -> WhateverBoss

                              Then you just cast to AStatsCharacter within Able, do your math, and return the result.

                              Unfortunately, Epic's Damage system is limited to 1 damage value at a time. So, you'd either have to create a 2nd Apply Damage task for the elemental damage (which is a bit wasteful), or manually call ApplyDamage on your actor (in which case you likely don't want it to use Async Calculate since that's no longer thread safe behavior, or keep it Async but add a Custom Event that actually applies the damage), or create your own Damage method (DamageCreature(float damage, float elementalDamage, etc) on some base class and manually call that using a similar setup to the 2nd option.

                              I actually plan on showing how to setup a more diverse damage option in the next video that will likely touch on these various approaches.
                              Able Ability System - A high performance, robust ability system for UE4. Now Available!

                              Comment


                                I'm currently at work so I can't test any fixes just yet but both of my pictures are from a freshly made top down template project. So unless the default code it starts with has issues that I couldn't catch, it would be something else.

                                Comment

                                Working...
                                X