GameplayAbilities questions

I don’t think you’ll see any fixes to the ability system getting added to 4.7 at this point. Once we’ve branched a build for a major release we generally want to minimize the additional changes that we bring into the branch. Every change that gets merged brings some risk that it will break something. When things like bug fixes get merged in we need to weigh the benefits with the potential for creating new problems. Because the ability system isn’t considered ready for outside use we don’t generally want to absorb much risk to bring in fixes late in the game. Any fixes you do see in the main branch at this point you can safely expect in 4.8.

Iniside

For most cases I’d recommend calling MatchesAny or MatchesAll on the gameplay tag container instead of calling HasTag directly. Exact matches always return true. If the tag to be matched is a subset of a tag in the container then it will return true if TagMatchType is set to IncludeParentTags. If the tag container contains a tag that is a subset of the tag to be matched then it will return true if TagToCheckMatchType is IncludeParentTags.

Here are some examples to illustrate the possible results. Let’s assume that our tag container contains exactly one tag, “A.B.C”.

HasTag(“A.B.C”, Explicit, Explicit) returns true.
HasTag(“A.B”, Explicit, Explicit) returns false.
HasTag(“A.B.C.D”, Explicit, Explicit) returns false.
HasTag(“E.B.C”, Explicit, Explicit) returns false.
HasTag(“A.B.C”, IncludeParentTags, IncludeParentTags) returns true.
HasTag(“A.B”, IncludeParentTags, IncludeParentTags) returns true.
HasTag(“A.B.C.D”, IncludeParentTags, IncludeParentTags) returns true.
HasTag(“E.B.C”, IncludeParentTags, IncludeParentTags) returns false.
HasTag(“A.B.C”, IncludeParentTags, Explicit) returns true.
HasTag(“A.B”, IncludeParentTags, Explicit) returns true.
HasTag(“A.B.C.D”, IncludeParentTags, Explicit) returns false.
HasTag(“E.B.C”, IncludeParentTags, Explicit) returns false.
HasTag(“A.B.C”, Explicit, IncludeParentTags) returns true.
HasTag(“A.B”, Explicit, IncludeParentTags) returns false.
HasTag(“A.B.C.D”, Explicit, IncludeParentTags) returns true.
HasTag(“E.B.C”, Explicit, IncludeParentTags) returns false.

In your example where you want to compare Damage.Fire against a container that contains Condition.Fire.Something you would always return false. Explicit means to check the whole tag for an exact match.