Originally posted by Tetsumori
View Post
Announcement
Collapse
No announcement yet.
Able Ability System Info and Support Thread
Collapse
X
-
ExtraLifeMatt replied
-
A7426764001 repliedIs there a way I can send a reference to character class in Ability Context to minimize casting?
Leave a comment:
-
ExtraLifeMatt repliedOriginally posted by acxsasx View Post
Yep, did that. When I look for all the references for the CharacterTag variable, it only shows Gets and no sets in the blueprint. Only reason I am bringing it up is to see where I am missing something where it gets set. I see the IncommingTag off the DamageByAbility class variable and I see where the comparison is done in the CheckBurning method.
One thing to note is I opened up the example in 4.19.2 and I am seeing some weirdness in BurnPassive where all the custom events end in "_1". So maybe something is getting lost in the conversion.
The principle flow is still the same: When Damage is about to occur, pass in the tags for the incoming Ability. When damage does occur, check the Ability tags against the player tags, and do whatever combinations you want.
Leave a comment:
-
acxsasx repliedYou can also download the example and see how things work in more details.
One thing to note is I opened up the example in 4.19.2 and I am seeing some weirdness in BurnPassive where all the custom events end in "_1". So maybe something is getting lost in the conversion.
Leave a comment:
-
ExtraLifeMatt repliedOriginally posted by acxsasx View PostRegarding your burning man example, the BurnPassive ability sets gameplay tag "Status.Burning" which is done to the gameplaytag container on the ability component(?).
On the targetmannequiun, off the "Event AnyDamage" event, in the Check Burning method, the CharacterTags variable is checked for the above gameplay tag.
I don't see where CharacterTags gets the "Status.Burning" tag.
I am assuming the abilitycomponent's gameplay tag variable should be used to look for the Status.Burning? (GetGameplayTagContainer)
You can also download the example and see how things work in more details.
Leave a comment:
-
acxsasx repliedRegarding your burning man example, the BurnPassive ability sets gameplay tag "Status.Burning" which is done to the gameplaytag container on the ability component(?).
On the targetmannequiun, off the "Event AnyDamage" event, in the Check Burning method, the CharacterTags variable is checked for the above gameplay tag.
I don't see where CharacterTags gets the "Status.Burning" tag.
I am assuming the abilitycomponent's gameplay tag variable should be used to look for the Status.Burning? (GetGameplayTagContainer)
Leave a comment:
-
ExtraLifeMatt repliedOriginally posted by acxsasx View PostThanks. I watched the video again and picked up a bit more. I think that was the last video I watched when I was deciding on buying the plugin and was a bit glass eyed at that point.
I shied away from changing state in the calc dmg for actor method due to your warning about making it thread safe.
In your example you are setting Damage by Ability on the actor and I think I heard something to the effect if that is the only ability(?) that sets that variable then it should be safe? So if I have another ability, I would need to have a second (and so on) variable on the actor for the second ability to be setting in order to maybe(?) take advantage of async?
I am not really interested in trying async at the stage I am at, however I may want to not have abilities reuse the same ability variable on the actor for sanity sake. If having separate variables on that actor lends itself to using async in the future it would be good to start it now.
It looks like Queue isn't exposed to blueprints by default, but there's a good step-by-step tutorial on adding that here: https://www.parallelcube.com/2017/10...to-blueprints/
- 1 like
Leave a comment:
-
acxsasx repliedThanks. I watched the video again and picked up a bit more. I think that was the last video I watched when I was deciding on buying the plugin and was a bit glass eyed at that point.
I shied away from changing state in the calc dmg for actor method due to your warning about making it thread safe.
In your example you are setting Damage by Ability on the actor and I think I heard something to the effect if that is the only ability(?) that sets that variable then it should be safe? So if I have another ability, I would need to have a second (and so on) variable on the actor for the second ability to be setting in order to maybe(?) take advantage of async?
I am not really interested in trying async at the stage I am at, however I may want to not have abilities reuse the same ability variable on the actor for sanity sake. If having separate variables on that actor lends itself to using async in the future it would be good to start it now.
Leave a comment:
-
ExtraLifeMatt repliedOriginally posted by acxsasx View PostGoal: Whenever an actor takes damage, evaluate the type of damage and react accordingly for that actor.
First thought is to use UE4's TakeDamage's event "OnTakeAnyDamage" as a launching point for logic to respond to damage types for differing responses and logging. I would like to pass in a custom DamageType to have the different actors make decisions as this is a parameter of the TakeDamage actor method I am overriding and is included in the event being raised. Sadly, I see DamageTypes have to be a class and cannot be an instance.
Alternatives:
1 - add my own events in the blueprintlibrary call where damage is being calculated and pass the gameplay tag.
2 - I see you set gameplay tag task could work, but it does not fire off any event that I could respond to.
3 - Hmmm...maybe use the custom event task and have to remember to set it after every set gameplay tag is set?
I think I am going to try for the (1) alternative. Make a delegate off my class that inherits from actor and have the bluprintlibrary broadcast it.
I basically handle this in the Burning Man example ( https://www.youtube.com/watch?v=-cAP5eqTb2Y ) by explicitly passing the Gameplay Tags during CalculateDamageForActor, so when the Actor actually receives the OnTakeAnyDamage callback - they can then look at the incoming tags for that damage.
While not 100% ideal, since those calls happen back to back, you don't have to worry about some other damage call coming along and stomping your incoming tags (and if you are that worried, you could always store them as a queue).
Leave a comment:
-
acxsasx repliedGoal: Whenever an actor takes damage, evaluate the type of damage and react accordingly for that actor.
First thought is to use UE4's TakeDamage's event "OnTakeAnyDamage" as a launching point for logic to respond to damage types for differing responses and logging. I would like to pass in a custom DamageType to have the different actors make decisions as this is a parameter of the TakeDamage actor method I am overriding and is included in the event being raised. Sadly, I see DamageTypes have to be a class and cannot be an instance.
Alternatives:
1 - add my own events in the blueprintlibrary call where damage is being calculated and pass the gameplay tag.
2 - I see you set gameplay tag task could work, but it does not fire off any event that I could respond to.
3 - Hmmm...maybe use the custom event task and have to remember to set it after every set gameplay tag is set?
I think I am going to try for the (1) alternative. Make a delegate off my class that inherits from actor and have the bluprintlibrary broadcast it.
Leave a comment:
Leave a comment: