Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Just added code block macros

...

Copy the line below and append it to the bottom of your spreadsheet:

Code Block
324 <new_vfx_label_here> D 0 <new_vfx_filename_here> **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1


Note the ID number given here is 324. Replace that with whatever your new line ID would be. (tip: in Notepad++ usually equals line number minus 4)

...

That switch can be enabled by setting a module INT of name "X2_SWITCH_ENABLE_TAGBASED_SCRIPTS" to 1, or by calling one of the following on module load:

Code Block
SetLocalInt (GetModule(), "X2_SWITCH_ENABLE_TAGBASED_SCRIPTS", 1);

...


SetLocalInt (GetModule(), MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS, 1);

...


SetModuleSwitch("X2_SWITCH_ENABLE_TAGBASED_SCRIPTS", TRUE);

...


SetModuleSwitch(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS, TRUE);

If you are using the default module OnModuleLoad script "x2_mod_def_load", you'll notice that on line 89, tag-based scripts are already enabled by default, so none of the above would be needed.

To use this power, simply set the item TAG equal to the name of the script to call. For example if you have an item called Hat01 that applies a special hat appearance, then you might want to make a script named "ITit_HAT01"hat01" and set the tag on the hat to the same.

On-Use Unique Item Properties

As another option, you can give the host item the property "Cast Spell > Unique Power Self Only". When cast, this item power will call the event X2_ITEM_EVENT_ACTIVATE which can also be handled in your tag-based script.

...

The toolset already comes with an example script showing all the events that will run to the tag-based item script. You can open "X2_IT_EXAMPLE" in the toolset script editor.

...

In your event-handling tag-based script, you might use a script like this, which stores an effect tag on the effect and in a "slot" variable on the PC.

Code Block
#include "x2_inc_switches"

...



// This script runs when a pc activates an item with the tag IT_HAT01

...


// The script toggles the visual effect IT_HAT01 on the activator

...



//Applies the specified Fashion VFX to oTarget in slot sEffectSlotName, and tags the effect with sEffectTag

...


void ApplyFashionEffectToObject(object oTarget, int nEffectID, string sEffectSlotName, string sEffectTag);

...


void ApplyFashionEffectToObject(object oTarget, int nEffectID, string sEffectSlotName, string sEffectTag)

...


{
    effect eEffect = EffectVisualEffect(nEffectID);

...


    eEffect = SupernaturalEffect(eEffect);

...


    eEffect = TagEffect(eEffect, sEffectTag);

...


    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget);

...


    SetLocalString(oTarget, sEffectSlotName, sEffectTag);

...


}

...



//Removes all visual effects from oTarget having tag equal to sEffectTag

...


void RemoveFashionEffectFromObjectByTag(object oTarget, string sEffectTag);

...


void RemoveFashionEffectFromObjectByTag(object oTarget, string sEffectTag)

...


{

...


    if (sEffectTag != "")

...


    {

...


        effect eLoop = GetFirstEffect(oTarget);

...


        while (GetIsEffectValid(eLoop)) {

...


            if (GetEffectType(eLoop) == EFFECT_TYPE_VISUALEFFECT)

...


                if (GetEffectTag(eLoop) == sEffectTag)

...


                    RemoveEffect(oTarget, eLoop);

...


                eLoop = GetNextEffect(oTarget);

...


        }

...


    }

...


}

...



//Removes all visual effects from oTarget having the tag associated with the

...


//Fashion VFX applied in slot sEffectSlotName on oTarget

...


void RemoveFashionEffectFromObjectBySlot(object oTarget, string sEffectSlotName);

...


void RemoveFashionEffectFromObjectBySlot(object oTarget, string sEffectSlotName)

...


{

...


    string sEffectTag = GetLocalString(oTarget, sEffectSlotName);

...


    RemoveFashionEffectFromObjectByTag(oTarget, sEffectTag);

...


}

...



//Removes all visual effects from oTarget having the specified tag sEffectTag,

...


//or the tag associated with the Fashion VFX applied in slot sEffectSlotName on oTarget,

...


//then applies the specified Fashion VFX nEffectID to oTarget in slot sEffectSlotName,

...


//and tags the effect with sEffectTag

...


void SafeApplyFashionEffectToObject(object oTarget, int nEffectID, string sEffectSlotName, string sEffectTag);

...


void SafeApplyFashionEffectToObject(object oTarget, int nEffectID, string sEffectSlotName, string sEffectTag)

...


{
    RemoveFashionEffectFromObjectBySlot(oTarget, sEffectSlotName);

...


    RemoveFashionEffectFromObjectByTag(oTarget, sEffectTag);

...


    ApplyFashionEffectToObject(oTarget, nEffectID, sEffectSlotName, sEffectTag);

...


}

...




void main()

...


{
    int nEvent = GetUserDefinedItemEventNumber();

...


    object oPC;

...


    object oItem;

...



    if (nEvent == X2_ITEM_EVENT_ACTIVATE) {

...


        oPC = GetItemActivator();

...


        oItem = GetItemActivated();

...



        string sTag = GetTag(oItem);

...


        int nEffectID = 324; //modify this to reflect your new visualeffect line number

...


        string sEffectSlotName = "FASHION_SLOT_HEAD"; //customize this to fit your needs

...


        

...


        SafeApplyFashionEffectToObject(oPC, nEffectID, sEffectSlotName, sTag);

...


    }

...


}

Conclusion

A script like this could be used to designate many Fashion VFX slots, such as eyes, horns, or even beard.

...