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 ExtraLifeMatt View Post

    You could make a small/medium/large burn ability and choose which one to apply when you go to apply it. You could also just modify the AblPlayParticleEffectTask (or duplicate it and make a AblAutoScalePlayParticleEffect) and have it query table somewhere with the size (or do some simple math) when it goes to scale the particle template.

    Honestly, I'd go with the 1st approach - no particle effect is going to be 100% perfect for all body types (even if scaled perfectly), so breaking it up into simple categories and using a "best fit" approach is probably the best.
    I might end up going with the first approach, but the second approach sounds a bit cleaner to me so I want to try to it out (might even do both). I created the C++ task and I more or less duplicated the contents of AblPlayParticleEffectTask but I can't get it to work. I can't #include AbleCorePrivate.h, so I tried moving the logging Macros you set up in it into the task itself but I get compiler errors. Is there a specific way I should approach this? Thanks.

    Leave a comment:


  • replied
    Originally posted by fernmerc View Post
    Another question if you don't mind... Something I completely missed was the scaling of particle effects for status damages (burn, poison) depending on the actor's size. Is there any recommended way of approaching this? Not all burnable actors are the same size, and some are drastically different in size; how can I scale the particle system in the passive ability according to the actor's size? Thanks again!
    You could make a small/medium/large burn ability and choose which one to apply when you go to apply it. You could also just modify the AblPlayParticleEffectTask (or duplicate it and make a AblAutoScalePlayParticleEffect) and have it query table somewhere with the size (or do some simple math) when it goes to scale the particle template.

    Honestly, I'd go with the 1st approach - no particle effect is going to be 100% perfect for all body types (even if scaled perfectly), so breaking it up into simple categories and using a "best fit" approach is probably the best.

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    To be honest, I've never dug into Blueprint Function Libraries (I simply make C++ versions). I'm not sure how you would reference one blueprint to a BP library function. Also I'm not sure what you mean by "having to set the Ability's physical location".


    Right now Stacks have 3 different rules:

    - Refresh Duration (resets the Ability time back to 0, effectively playing it again).
    - Increase Stack Count (increases an internal counter for that Ability. You can get that value when calculating damage via GetCurrentStackCountForPassiveAbility on the Ability Component).
    - Refresh Duration and Increase Stack Count (does both of the previous options).

    There is no way to dynamically increase the iterations in a exponential (or whatever) way, if you wanted that you'd need to cancel the current passive Ability and apply a new one with the loop count you want.

    I can see about adding a more dynamic loop count that lets you script how many loops you want an Ability to play for. That's an easy add.
    Thanks for the stack explanation! Blueprint Function Libraries in blueprint are the same thing as the C++ ones. After you make the function it's pretty much accessible within any Blueprint. And in my case it is for all blueprints except Able ones. By the Ability's physical location I mean having to use FindObject and include the path to the physical Blueprint location in Content. I just made a parent Able class that has the function and it works just fine, so thanks anyways.

    I would really appreciate it if you add the dynamic loop count!

    Another question if you don't mind... Something I completely missed was the scaling of particle effects for status damages (burn, poison) depending on the actor's size. Is there any recommended way of approaching this? Not all burnable actors are the same size, and some are drastically different in size; how can I scale the particle system in the passive ability according to the actor's size? Thanks again!
    Last edited by fernmerc; 02-16-2018, 02:30 PM.

    Leave a comment:


  • replied
    Originally posted by duke22 View Post
    How would I use this as a passive timer that increases hunger over time?
    I'm not sure I would. It's a bit like using a tank to shoot a fly (unless you wants particles and animations tied into that counter). But, if you wanted to you could simply create an infinite looping passive, set the length of the Ability to your tick rate, add logic in OnAbilityStart that gets the SelfActor, casts it to your character class, and then increments your hunger variable.

    But again, if it's something constant like that, I'd likely just make a timer in my Character Blueprint that calls every X seconds/milliseconds and do it that way.

    Leave a comment:


  • replied
    How would I use this as a passive timer that increases hunger over time?

    Leave a comment:


  • replied
    Originally posted by fernmerc View Post
    Hello,

    I'm trying to create a blueprint function library to apply a passive ability for status effects. In C++ I already created my function that decides whether or not the proc occured, but in order to avoid having to strictly say where the blueprint ability is located, I made another proc function in blueprint that branches out depending on what tag (fire, ice, poison, etc.) was applied and gives the target actor that passive ability. Unfortunately, in the "CalculateDamageForActor" function (or anywhere that derives from any able ability) my function does not show up. The C++ blueprint function library one does, but the blueprint-only function library one does not, even though it shows up everywhere else in the editor that's not Able-related.

    How should I be handling this? Is there any way of applying my passive status effects from within C++ without having to set the Ability's physical location? I'm using GameplayTags if that helps.

    Thanks!
    To be honest, I've never dug into Blueprint Function Libraries (I simply make C++ versions). I'm not sure how you would reference one blueprint to a BP library function. Also I'm not sure what you mean by "having to set the Ability's physical location".
    Originally posted by fernmerc View Post
    Sorry for bothering you again, but how exactly do stacks work? I have a passive burn ability and if it's triggered twice I want it to last twice as long (loop twice the number of iterations). I tried enabling stacks and messing with the settings but I couldn't get it to work. Thanks again!
    Right now Stacks have 3 different rules:

    - Refresh Duration (resets the Ability time back to 0, effectively playing it again).
    - Increase Stack Count (increases an internal counter for that Ability. You can get that value when calculating damage via GetCurrentStackCountForPassiveAbility on the Ability Component).
    - Refresh Duration and Increase Stack Count (does both of the previous options).

    There is no way to dynamically increase the iterations in a exponential (or whatever) way, if you wanted that you'd need to cancel the current passive Ability and apply a new one with the loop count you want.

    I can see about adding a more dynamic loop count that lets you script how many loops you want an Ability to play for. That's an easy add.
    Originally posted by jfaztk View Post
    Hey again,

    How do I go about deactivating an ability? I couldn't find any functions related to it. I tried disabling the component but that didn't work. When my character dies I want to stop/deactivate all abilities (passives, and the active one); how can I do this?

    Thank you!
    CancelAbility on the Ability Component. You can ask the Ability Component for the Current Active as well as all Passives and just loop through and cancel them all. I'll make a note to add a "CancelAllPassiveAbilities" or some such to make it a bit easier.

    Leave a comment:


  • replied
    Hey again,

    How do I go about deactivating an ability? I couldn't find any functions related to it. I tried disabling the component but that didn't work. When my character dies I want to stop/deactivate all abilities (passives, and the active one); how can I do this?

    Thank you!

    Leave a comment:


  • replied
    Sorry for bothering you again, but how exactly do stacks work? I have a passive burn ability and if it's triggered twice I want it to last twice as long (loop twice the number of iterations). I tried enabling stacks and messing with the settings but I couldn't get it to work. Thanks again!

    Leave a comment:


  • replied
    Hello,

    I'm trying to create a blueprint function library to apply a passive ability for status effects. In C++ I already created my function that decides whether or not the proc occured, but in order to avoid having to strictly say where the blueprint ability is located, I made another proc function in blueprint that branches out depending on what tag (fire, ice, poison, etc.) was applied and gives the target actor that passive ability. Unfortunately, in the "CalculateDamageForActor" function (or anywhere that derives from any able ability) my function does not show up. The C++ blueprint function library one does, but the blueprint-only function library one does not, even though it shows up everywhere else in the editor that's not Able-related.

    How should I be handling this? Is there any way of applying my passive status effects from within C++ without having to set the Ability's physical location? I'm using GameplayTags if that helps.

    Thanks!

    Leave a comment:


  • replied
    Originally posted by ExtraLifeMatt View Post

    Can you elaborate? You mean Dynamic Montage blending?
    yes.. please. using montages for abilities is essential. as montages can have additional level of complexity and can be made with more then one animation, have internal loops etc.
    Also I had problems with detecting "ability use animation" and "is playing animation" inside the anim graph.

    Leave a comment:


  • replied
    spawning the invisible actor is what I was going to try to do, it was the threadsafe getting of the mouse position that I ran into a snafu with. I can do it in a regular blueprint so I'll see what I can come up with.

    Leave a comment:


  • replied
    Originally posted by brian.boettger View Post
    Ok, so I've tried to read through all the posts, all the documentation (which the activity level of everything is part of the reason why I bought able) and maybe I missed something but, what would be the best way to have an ability spawn at the current mouse position? (Think flamestrike from WoW?)
    Matt, this plug in is by far the very best i've bought. Thank you for all of the time you saved me!
    Thanks for the kind words.

    For something like that, you'd need to write some code that does a raytrace to the world using the mouse position (pretty sure there's a method for that somewhere in UE4), and then you could spawn some invisible dummy actor that just plays the Ability.

    That's probably the easiest way.

    Leave a comment:


  • replied
    Ok, so I've tried to read through all the posts, all the documentation (which the activity level of everything is part of the reason why I bought able) and maybe I missed something but, what would be the best way to have an ability spawn at the current mouse position? (Think flamestrike from WoW?)
    Matt, this plug in is by far the very best i've bought. Thank you for all of the time you saved me!

    Leave a comment:


  • replied
    Originally posted by fernmerc View Post

    Ahh so you mean like a separate line trace from the tip of the sword to the hit actor, and then spawn it on that location?
    Correct. Or you could just fake it easily by something like:

    - Create a Vector going from the Actor who caused our damage, to the Actor who was hit by the damage.
    - Normalize that vector then scale it by our Hit Actor's bounds size (XY).
    - Set the Z to whatever the Component who hit us Z is.
    - Spawn the particle at that location.

    Something like that. The trace is probably easier, at the cost of a bit more performance (but again, it's not even fired unless you know the trace will hit something so that will help).
    Originally posted by duke22 View Post
    Sorry if this has already been asked, but can you do damage over time effects?
    Sure. I actually do that in the Burning Man video. Basically I just create a passive with a damage task and set it to loop X times. The length of the passive Ability is the length of a single damage "tick".

    Leave a comment:


  • replied
    Sorry if this has already been asked, but can you do damage over time effects?

    Leave a comment:

Working...
X