TagEffect(effect, string)

From NWN Lexicon
Jump to: navigation, search
Nwnee logo.jpg Note: This article documents Neverwinter Nights: Enhanced Edition new content or changes/updates/fixes to 1.69 functions. These are all listed under the category and patches pages.
Tags the effect with the provided string.
effect TagEffect(
    effect eEffect,
    string sNewTag
);

Parameters

eEffect
The effect object to tag.
sNewTag
A string to tag the effect object with.

Description

Tags the effect with the provided string. Any other tags in the link will be overwritten.

Remarks

This function applies in a similar way to other Effect options such as SupernaturalEffect in that it does not tag eEffect passed in, but generates a new effect-with-tag "object" which must be assigned to a variable or applied.

Also similar to the effect options Magical/Supernatural/Extraordinary, only the newest tag will persist for any effect.

You need to apply this on the final effect created from EffectLinkEffects, any previous tags (or other flags such as supernatural) are lost when effects are combined. This applies the tag to every effect which is linked together.

This is used in conjuction with GetEffectTag to uniquely identify effects, such as to remove effects created by a specific non-spell interaction (see example below).

Note again that if the effect has already been applied, this will not tag that effect. The newly created, tagged effect will need to be applied to the Object/Location (presumably after removing the previous effect).

Version

1.74.8149

Example

// Applying a supernatural effect 'permanently' decreasing entering PC's strength by 1.
// Use the tag "TotallyUnique" to make this Strength decrease separate from others in effect.
void main()
{
    object oPC=GetEnteringObject();
    if(!GetIsPC(oPC)) return;
 
    effect eBad=EffectAbilityDecrease(ABILITY_STRENGTH, 1);
    eBad=SupernaturalEffect(eBad);
    eBad=TagEffect(eBad, "TotallyUnique");
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBad, oPC);
}
 
// When the PC leaves we want to remove the above effect, but leave other strength decreases intact.
// Instead of checking for effect type, simply check for the effect tag.
void main()
{
    object oPC=GetExitingObject();
    if(!GetIsPC(oPC)) return;
 
    effect eEffect = GetFirstEffect(oPC);
    while(GetIsEffectValid(eEffect))
    {
        if(GetEffectTag(eEffect) == "TotallyUnique")
            RemoveEffect(eEffect);
        eEffect = GetNextEffect(oPC);
    }
}
// Applying two linked effects to an entering object, that are removed at once from an exiting object like above.
// This is useful for applying a related visual
void main()
{
    object oPC=GetEnteringObject();
    if(!GetIsPC(oPC)) return;
 
    effect eAC = EffectACIncrease(10);
    effect eDur = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
    effect eLink = EffectLinkEffects(eAC, eDur);
 
    // Always tag or make supernatural AFTER the linking is done
    eLink = SupernaturalEffect(eLink);
    eLink = TagEffect(eLink, "AC_BUFF");
 
    // Apply the effect
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC);
}
 
// When the PC leaves we want to remove the above effect, but leave other effects unaffected.
// You could also just remove one of the two applied and tagged effects, it will automatically remove the other
void main()
{
    object oPC=GetExitingObject();
    if(!GetIsPC(oPC)) return;
 
    effect eEffect = GetFirstEffect(oPC);
    while(GetIsEffectValid(eEffect))
    {
        if(GetEffectTag(eEffect) == "AC_BUFF")
            RemoveEffect(eEffect);
        eEffect = GetNextEffect(oPC);
    }
}

See Also

functions: GetEffectTag()