Able Ability System Info and Support Thread

Yea, Inherited Tasks are objects that are still owned by the Original Ability, so you can’t modify them in child abilities. They’re meant more for logic that doesn’t need to change per Ability (including fields like animations, etc). So if you have some Attack ability that always plays “Swing 1” but the particle/sound can change - you’d want to inherit the Play Animation and then just re-create the particle / sound tasks. Child objects can’t save data in Parent Objects. I could add an option that inherited Tasks actually just copy themselves into Child Abilities, rather than just referencing the originals. There’s a small memory cost there, but it’s not much and would be a bit cleaner.

Also 4.24 has a nasty bug with recompilation that is schedule for 4.24.2, so if you’re crashing randomly in FlushCompilationMgrImpl - it will hopefully clear up in the next hotfix.

That would be great if you could add that copy methode for the Child Abilities, just an idean, but maybe you should add a checkbox option to enable this in the Project Settings > Plugins > Able, if anybody else is intrested in this, if it’s not a huge request for the next ABLE update. : )

We are using 4.22.3 for now, but at the end of january we would like to upgrade our Project to 4.24, so thank you for the notice about that nasty bug!

**Thanks in advance ! **

Thanks a lot! I’m just glad my question wasn’t completely off-topic and that I have missed something obvious :slight_smile:

Hi, I tested your plugin, and found a bug, OnAbilityStackAdded never response

Is your Ability marked as a Passive? That callback only occurs for Passives.

Yes, marked as Passive, and only response OnAbilityStackRemoved, I have tracked your source code and found it will never called by logic

Ah, I see the problem. It’s called in a number of places, but the BP version is only called in the SetPassiveStack method. I’ll toss that fix in for the next update (hoping to submit it sometime this week).

Able v3.24 has been submitted. Notes below.

[SPOILER]

  • OnAbilityStackAddedBP is now properly called when a stack is added.

  • Added SetCooldown which allows you to modify an existing cooldown, or just add one.

  • Added GetAbilityCurrentTime which allows you to pull the current time of an executing Ability (if you don’t have the context saved).

  • Added GetAbilityCurrentTimeRatio which allows you to pull the current time ratio of an executing Ability (if you don’t have the context saved).

  • TurnTo should now properly work if you pass it a blend value of 0.0

  • Blackboard name value on the AblTargetingBlackboard is no longer hidden…

  • INHERITED TASKS

    • Inherited Tasks (e.g.; Tasks marked as “Inheritable” in the Task properties panel), previously would just mark themselves as public and get pulled over during the class construction of any child classes. If you tried to modify one of those tasks, you’d likely get a “Attempted to modify a private object, etc” because the Tasks are technically owned by the original parent class. So, in practice that means they should be really treated as read only but it’s difficult to convey that and most people seem to want to use them as a way to populate new Abilities with some basic tasks that they then want to modify. So, there are some changes to help that:

      • Added a new Able Setting called Copy Inherited Tasks, it is turned ON by default. When enabled, a Child class will make copies of the Inherited Tasks that it can then modify safely. Turning the option off will enable the previous behavior. Currently you’ll have to re-make your Ability to get this behavior if you are already using Inherited Tasks (Sorry, I haven’t found a good way to let users migrate over if they want).

[/SPOILER]

When trying to launch in stand alone mode, able keeps crashing with errors like:

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x00000048

UE4Editor_Kismet
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_Engine
UE4Editor_Engine
UE4Editor_Engine
UE4Editor
UE4Editor
UE4Editor
UE4Editor
UE4Editor
kernel32
ntdll

Even tested it on the simple shooter/ce1 test project from able. No other plugins enabled, play in editor works fine though. Any Idea? :slight_smile:

UE4.24 I assume? There’s a bug with blueprints with parents where the parent isn’t compiled before the child blueprint, that is set to be fixed with 4.24.2.

4.24 Indeed, forgot to mention it :slight_smile: Thanks for the reply!

I however just updated the new 4.24.2 release (they merged an hour ago) through the epic launcher, still seems to be crashing when I try standalone mode

Side note: building for windows does however work, just not the standalone mode

Can you download the Engine debug symbols and post the callstack again? There should be an option in the launcher to grab those.

Sure thing, will grab 'm tomorrow evening and post them here

I’m not sure if this is actually the whole stack dump, let me know if this info is sufficient :slight_smile:

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x00000048

UE4Editor_Kismet!FBlueprintCompilationManager::FlushCompilationQueue() [d:\build++ue4\sync\engine\source\editor\kismet\private\blueprintcompilationmanager.cpp:2916]
UE4Editor_CoreUObject!FLinkerLoad::FinalizeBlueprint() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\blueprint\blueprintsupport.cpp:1746]
UE4Editor_CoreUObject!FLinkerLoad::Preload() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\uobject\linkerload.cpp:3851]
UE4Editor_CoreUObject!FLinkerLoad::CreateExport() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\uobject\linkerload.cpp:4558]
UE4Editor_CoreUObject!FLinkerLoad::CreateExportAndPreload() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\uobject\linkerload.cpp:3216]
UE4Editor_CoreUObject!FLinkerLoad::LoadAllObjects() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\uobject\linkerload.cpp:3380]
UE4Editor_CoreUObject!LoadPackageInternal() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1311]
UE4Editor_CoreUObject!LoadPackage() [d:\build++ue4\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1426]
UE4Editor_Engine!UEngine::LoadMap() [d:\build++ue4\sync\engine\source\runtime\engine\private\unrealengine.cpp:12537]
UE4Editor_Engine!UEngine::Browse() [d:\build++ue4\sync\engine\source\runtime\engine\private\unrealengine.cpp:11975]
UE4Editor_Engine!UGameInstance::StartGameInstance() [d:\build++ue4\sync\engine\source\runtime\engine\private\gameinstance.cpp:534]
UE4Editor!FEngineLoop::Init() [d:\build++ue4\sync\engine\source\runtime\launch\private\launchengineloop.cpp:3694]
UE4Editor!GuardedMain() [d:\build++ue4\sync\engine\source\runtime\launch\private\launch.cpp:159]
UE4Editor!GuardedMainWrapper() [d:\build++ue4\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:134]
UE4Editor!WinMain() [d:\build++ue4\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:263]
UE4Editor!__scrt_common_main_seh() [d:\agent_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

Yep, good ol’ FlushCompilationQueue. Wonderful. This was supposed to be fixed with 24.2, but obviously not. I’ll look at it and let Epic know.

Haha, ■■■■ happens :wink: Thanks for having a look at it though! I’ll just use full builds instead of standalone client in the meantime when the PIE doesn’t suffice

Alright, I found a fix. It’s fallout from the new initialization order of modules. If you change your Able.uplugin to swap “AbleEditor” from Editor to DeveloperTool, it’ll fix the standalone crash. I’ll submit a fix tonight though, so you can also just wait for that.



    {
        "Name": "AbleEditor",
        "Type": "DeveloperTool",
        "LoadingPhase": "PreDefault",
        "WhitelistPlatforms":  "Win64", "Win32", "Mac", "Linux" ]
    }


Patch submitted. There’s no new version number (since it just fixes something in 4.24), but you should get the update as soon as Epic processes things.

Cheers! :slight_smile: