Download

Able Ability System Info and Support Thread

I have a problem with cooking the game while using Able. Apparently it makes UE4 build editor stuff when packaging a game (so no editor code there) and we get a bunch of errors.
In


Able.uplugin

Somethnig like this exists:


"Plugins": 
        {
            "Name": "GameplayTagsEditor",
            "Enabled": true
        }
    ]

And we aren’t sure if this isn’t causing the problem.
Because for example in
AbleCore.Build.cs
you have this if


if (Target.bBuildEditor == true)
{
   ...
   PrivateDependencyModuleNames.Add("GameplayTagsEditor");
}

Here is a log from Unreal Build Tool thrown out from Packaging process:

EDIT:
Additionally I just now went to editor->Settings->Plugins, Found GameplayTagsEditor plugin and clicked “Package” only to get instantly interrupted by an error saying this


UATHelper: Package Plugin Task (Windows):   ERROR: Engine module 'Engine\Plugins\Marketing\Able\Source\AbleCore\AbleCore.Build.cs' should not depend on game module 'D:\RogueOvercooked\GameplayTagsEditor\HostProject\Plugins\GameplayTagsEditor\Source\GameplayTagsEditor\GameplayTagsEditor.Build.cs'
UATHelper: Package Plugin Task (Windows):          (see D:\UE4_Projects\RogueEngine\Engine\Programs\AutomationTool\Saved\Logs\UBT-UE4Editor-Win64-Development.txt for full exception trace)
UATHelper: Package Plugin Task (Windows): Took 2,2769716s to run UnrealBuildTool.exe, ExitCode=5

You can likely just move GameplayTagsEditor to AbleEditor.build.cs. GameplayTags used to have some weird dependencies even if you were just using the simple data types.

If I remove this from AbleCore.Build.cs



PrivateDependencyModuleNames.Add("GameplayTagsEditor");


and just add that reference in AbleEditor.Build.cs



            PrivateDependencyModuleNames.AddRange(
                new string]
                {
                    // ...
                    "GameplayTagsEditor",
                }
                );


It seems to build fine. Give that a shot and let me know if you have any issues.

It builds fine by us too. It’s the packaging that’s problematic. The packaging process starts building for cooking and suddenly starts compiling editor code for no reason.

EDIT: We’re trying to cook now an empty project with just able to confirm if it really is the problem.

FALSE ALARM.
We confirmed it was one of the other plugins and NOT Able that prevented cooking our game.

Thank you for your response and sorry for the trouble.

Awesome. Glad you guys got things working.

Thanks for the elaboration @ExtraLifeMatt. I’m taking my time figuring out how I want to use this plugin, but the end goal is to use C++ and be able to create abilities at runtime. I’m hoping to use Able as an interpreter for a domain specific language. Abilities will be able to be created with that language and then executed using Able (all without recompiling).

I’m still inspecting the Able codebase and trying to figure out how I should go about constructing the DSL still. It looks like I should create some generic UAblAbility classes and then programmatically add tasks to the m_Tasks property based on what is written with the DSL. After creating the ability, it also looks like there is a validator that can be used to check for things like circular dependencies. That doesn’t seem too complicated, but as the author of the plugin do you have any tips/suggestions for my use case?

I’m probably not going to make the DSL too open ended. A single component of an ability may be a group of components that all do something. There may also be a chain of Able abilities that make up the ability that will be expressed with the DSL as well. I’d like to support things similar to the chain lightning tutorial, except the ability will be created at runtime. That’ll take a bit of thought to get figured out, but it’s probably possible.

Nope. You pretty much have it figured out. Just make sure the Hash for the ability name is being calculated properly as that is used as an identifier everywhere. If you are creating a new object and then setting the name, you’ll need to add a method or something to recalculate that hash. That’s the only “gotcha” I can think of off the top of my head.

Hey :slight_smile:
I am doing something new now.
I am gonna try and put this into AI Behaviour Toolkit So instead of play animations it will play ability
What do you think?

Jesse

Sounds good. I haven’t used that plugin myself, but it should be do-able I would imagine.

well it works now :smiley: Woop
You should check it out. Awesome and easy to use to make any AI!!! :smiley:

haha Matt,
You a Genius, doing a Lot of research and planning. Game is gonna be just all Gameplay Tags and Data tables! :smiley:
Since there is so much involved in this game, Like only certain things can kill different things
Vampires can only be decapitated and Ghosts can be attacked by Iron or salt for example, Using Gameplay Tag containers in the datatables in order to get the info on the enemies :slight_smile:
Gonna make a couple of Actor components and BPI also and base all characters including enemies and players off base character in it :smiley:

Cheers matt

Hey Matt,

How do i pass variables into the able Ability? Such as Damage i mean. Dont want to be casting inside the ability BP.
Any ideas?

Jesse

Woooo Figured it out!
Using BP Interface (Message) :smiley:

Hi Matt,

Reporting a Bug:
Made a Base Ability and everytime i make a Child of that Base, It Crashes UE4.
You know about this?

LoginId:fccb8f874804dfd45b73dd83fc7fffda
EpicAccountId:506d6d1a590d441cbefea319a8150060

You do not have any debugging symbols required to display the callstack for this crash.

Jesse

Does that Ability have a Custom Task? Or is it just a plain Ability and you’re inheriting from it?

Its got animation and stuff in no custom task

I found that a lot of function is unavailable in AblAbility’s blueprint.Is there any way to call get controller,or get all actor of class,BlueprintFunctionLibrary?

I’m looking into this. Trying to repro it locally.

You should be able to get those through the Context.

Context->GetSelfActor->GetWorld->GetAllActorsOfClass

GetWorld is not unavailable in blueprint, and I don’t want to use c++

Bah, I see how they want that setup. I’ll pass in the world context object which will expose that.

EDIT: What methods are you specifically trying to access the world from?