Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

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

  • replied
    Originally posted by Pwnographyzqt View Post
    How would I go about instantiating a Context / Ability with additional / pre-set variables? Currently, I need the Player to be able to set the Target beforehand, which would work in a Singleplayer environment since I could just retrieve it from any Blueprint. Looking at 3.29, this should be possible now? But I also cannot renounce client-side prediction. What's the reasoning for Replicated Instances to break prediction?
    There's an "Target Custom" which asks BP for the targets, or you can use scene query tasks to add them. If you have the Player settings the Target on their end, just forward that Target to the server so the Server can also use it.

    Replicated Instances are replicated from the server down to the client. They are one object shared between both (so server writes to Targets or such, will be visible to the client). They can't be predicted because of that. They came from a request to allow instancing like GAS, which has the same options. I could see it being useful if you wanted to replicate down all the info from the server to display on some UI, but even that seems a bit heavy handed IMO.

    Leave a comment:


  • replied
    How would I go about instantiating a Context / Ability with additional / pre-set variables? Currently, I need the Player to be able to set the Target beforehand, which would work in a Singleplayer environment since I could just retrieve it from any Blueprint. Looking at 3.29, this should be possible now? But I also cannot renounce client-side prediction. What's the reasoning for Replicated Instances to break prediction?

    Leave a comment:


  • replied
    Ty for fast reply ! ExtraLifeMatt

    Leave a comment:


  • replied



    Originally posted by JimPhoenix View Post
    Hey there Matt,

    the Output Log gives me these warnings from a while now, can you look at it please?

    HTML Code:
    LogClass: Warning: FAblCompactTaskData::StartTime is not initialized properly
    LogClass: Warning: FAblCompactTaskData::EndTime is not initialized properly
    LogClass: Warning: BoolProperty FAblCompactTaskData::Verbose is not initialized properly
    LogClass: Warning: BoolProperty FAblCompactTaskData::Disabled is not initialized properly
    LogClass: Warning: BoolProperty FAblCompactTaskData::OverrideTaskColor is not initialized properly
    LogClass: Warning: FAblCompactTaskData::UserTaskColor is not initialized properly
    I've tried the project building with a fresh TPS 4.25.0 project too with the plugin enabled, but the result is the same, so the warnings are still there.
    Sure, I'll look at that. Those warnings shouldn't stop you or anything, but yea, I'll clean them up.
    Originally posted by GeoBoyka View Post

    Are you able to share the demo video content with a download link ?
    That project is so old at this point, that I don't think so. The flow was this:

    1.) Create a "Fireball" actor which just has a Projectile Movement Component.
    2.) In Able, make a "Cast Fireball" Ability which uses the Spawn Actor Task to spawn the Fireball, make sure to enable "Fire Event" in the Task.
    3.) In the Ability Blueprint for "Cast Fireball", Overload On Spawned Actor, cast the Actor to your Fireball Actor, get the Projectile Movement Component, and set the homing target to whatever you want (You could grab that target using Able's Targeting Code, Queries, etc).

    Pretty simple overall. The Projectile Movement Component does all the work. Able just feeds it a few parameters.

    Leave a comment:


  • replied
    Hey there Matt,

    the Output Log gives me these warnings from a while now, can you look at it please?

    HTML Code:
    LogClass: Warning: FAblCompactTaskData::StartTime is not initialized properly
    LogClass: Warning: FAblCompactTaskData::EndTime is not initialized properly
    LogClass: Warning: BoolProperty FAblCompactTaskData::Verbose is not initialized properly
    LogClass: Warning: BoolProperty FAblCompactTaskData::Disabled is not initialized properly
    LogClass: Warning: BoolProperty FAblCompactTaskData::OverrideTaskColor is not initialized properly
    LogClass: Warning: FAblCompactTaskData::UserTaskColor is not initialized properly
    I've tried the project building with a fresh TPS 4.25.0 project too with the plugin enabled, but the result is the same, so the warnings are still there.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    Yea, I did that in the demo video. All it was a SpawnActor Task with me setting the homing target and activating the projectile movement component in the "On Actor Spawned" callback on the Ability.
    Are you able to share the demo video content with a download link ?

    Leave a comment:


  • replied
    Originally posted by GeoBoyka View Post
    Are we able to make something like projectiles following the target actor , like rpg style fireball spell chasing the target and hitting it basicly. @ExtraLifeMatt
    Yea, I did that in the demo video. All it was a SpawnActor Task with me setting the homing target and activating the projectile movement component in the "On Actor Spawned" callback on the Ability.

    Leave a comment:


  • replied
    Are we able to make something like projectiles following the target actor , like rpg style fireball spell chasing the target and hitting it basicly. @ExtraLifeMatt

    Leave a comment:


  • replied
    Originally posted by Contractchiller View Post

    Running this:
    Code:
    UE_LOG(LogTemp, Warning, TEXT("%d"), GetOwner()->GetWorld()->WorldType.GetValue());
    inside the component does actually work. Some Illuminati-Stuff is going on here ...

    Since this Code is running inside the LogHelper, could I somehow disable Logging in the meantime somehow?
    Yup, just turn off "Log Ability Failures" in the Able plugin settings.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    That crash is because the GetOwner()->GetWorld() is returning null. I can make that code a bit more resilient, but I'm curious why moving it to an actor component is making the world null. Your overall code looks fine to me.
    Running this:
    Code:
    UE_LOG(LogTemp, Warning, TEXT("%d"), GetOwner()->GetWorld()->WorldType.GetValue());
    inside the component does actually work. Some Illuminati-Stuff is going on here ...

    Since this Code is running inside the LogHelper, could I somehow disable Logging in the meantime somehow?

    Leave a comment:


  • replied
    Originally posted by Contractchiller View Post
    Hey,

    I've come across a strange behaviour when using Able inside an ActorComponent.

    UCombatComponent
    Code:
    void UCombatComponent::PerformBasicAttack()
    {
    UAblAbilityComponent* AbilityComponent = MyCharacterOwner->GetAbilityComponent();
    if (!ensure(AbilityComponent != nullptr)) return;
    
    // Create Able Context
    UAblAbility* attack = BasicAttack->GetDefaultObject<UAblAbility>();
    if(attack == nullptr) { UE_LOG(LogTemp, Error, TEXT("BasicAttack couldn't get Ability Object from given class")); return; }
    
    UAblAbilityContext* context = UAblAbilityContext::MakeContext(attack, AbilityComponent, GetOwner(), GetOwner());
    if(context == nullptr) { UE_LOG(LogTemp, Error, TEXT("Couldn't create AbleAbilityContext")); return; }
    
    // Execute Ability
    AbilityComponent->ActivateAbility(context);
    }
    Log
    Code:
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffa30811387 UE4Editor-AbleCore.dll!FAbleLogHelper::GetWorldName() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilityutilities.cpp:103]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffa30814c51 UE4Editor-AbleCore.dll!UAblAbilityComponent::InternalStartAbility() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilitycomponent.cpp:1042]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffa307e5fae UE4Editor-AbleCore.dll!UAblAbilityComponent::ActivateAbility() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilitycomponent.cpp:427]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffab49035f7 UE4Editor-....dll!UCombatComponent::PerformBasicAttack() [E:\...\Core\Character\CombatComponent.cpp:68]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffab4907bc1 UE4Editor-....dll!AMyDefaultController::BasicAttack() [E:\...\Core\Character\MyDefaultController.cpp:88]
    Basically moved the code from the Character to it's own Component. Using it directly from the Character worked fine, but calling it on an ActorComponant results in a crash.

    I couldn't find a flaw in my code (yet), maybe you know more than I do

    Greetings
    That crash is because the GetOwner()->GetWorld() is returning null. I can make that code a bit more resilient, but I'm curious why moving it to an actor component is making the world null. Your overall code looks fine to me.

    Leave a comment:


  • replied
    Hey,

    I've come across a strange behaviour when using Able inside an ActorComponent.

    UCombatComponent
    Code:
    void UCombatComponent::PerformBasicAttack()
    {
        UAblAbilityComponent* AbilityComponent = MyCharacterOwner->GetAbilityComponent();
        if (!ensure(AbilityComponent != nullptr)) return;
    
        // Create Able Context
        UAblAbility* attack = BasicAttack->GetDefaultObject<UAblAbility>();
        if(attack == nullptr) { UE_LOG(LogTemp, Error, TEXT("BasicAttack couldn't get Ability Object from given class")); return; }
    
        UAblAbilityContext* context = UAblAbilityContext::MakeContext(attack, AbilityComponent, GetOwner(), GetOwner());
        if(context == nullptr) { UE_LOG(LogTemp, Error, TEXT("Couldn't create AbleAbilityContext")); return; }
    
        // Execute Ability
        AbilityComponent->ActivateAbility(context);
    }
    Log
    Code:
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffa30811387 UE4Editor-AbleCore.dll!FAbleLogHelper::GetWorldName() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilityutilities.cpp:103]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffa30814c51 UE4Editor-AbleCore.dll!UAblAbilityComponent::InternalStartAbility() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilitycomponent.cpp:1042]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffa307e5fae UE4Editor-AbleCore.dll!UAblAbilityComponent::ActivateAbility() [d:\build\++portal+promotion\sync\localbuilds\plugintemp\hostproject\plugins\able\source\ablecore\private\ablabilitycomponent.cpp:427]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffab49035f7 UE4Editor-....dll!UCombatComponent::PerformBasicAttack() [E:\...\Core\Character\CombatComponent.cpp:68]
    [2020.05.10-12.51.56:607][344]LogWindows: Error: [Callstack] 0x00007ffab4907bc1 UE4Editor-....dll!AMyDefaultController::BasicAttack() [E:\...\Core\Character\MyDefaultController.cpp:88]
    Basically moved the code from the Character to it's own Component. Using it directly from the Character worked fine, but calling it on an ActorComponant results in a crash.

    I couldn't find a flaw in my code (yet), maybe you know more than I do

    Greetings

    Leave a comment:


  • replied
    Able v3.30 has been submitted:

    • Added 4.25 support
    • Re-wrote prediction system to use key values. This should allow Able to support higher lag situations and better avoid falsely playing the same Ability that a client has already played. I've run it through its paces locally, but obviously keep an eye out for any weird prediction issues and let me know.
    • Fix to Input Conditional not working as expected in networked titles. (h/t Jeremy).
    • Added "DecrementAndReset" option for Stacks when they complete. This decrements the stack count and resets the Ability time.
    • Added "Team Attitude" filter to collision filters. (h/t Jeremy).
    • Fix to 2D Cone debug rendering in the editor (h/t Jeremy).

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    Sure, I can add that option.
    that would be amazing!

    Leave a comment:


  • replied
    Originally posted by AngeIV View Post
    ExtraLifeMatt For stacking passive abilities I managed to refresh ability time when applied new stack etc... However is it possible to when ability end remove one stack, instead of all at once? For example I have a channeled ability... the longer you hold it - the more stacks of something you gain.... when you stop channeling the stacks of passive decay - however one every 6 seconds... Now they all end in 6 seconds.
    Sure, I can add that option.

    Leave a comment:

Working...
X