//::///////////////////////////////////////////////
//:: Name codi_spawn
//::
//:://////////////////////////////////////////////
/*
    NPC OnSpawn event script caller to run
    CODI AI & PRC events.
*/
//:://////////////////////////////////////////////
/*
    2003-07-28: Georg Zoeller:

    If you set a ninteger on the creature named
    "X2_USERDEFINED_ONSPAWN_EVENTS"
    The creature will fire a pre and a post-spawn
    event on itself, depending on the value of that
    variable
    1 - Fire Userdefined Event 1510 (pre spawn)
    2 - Fire Userdefined Event 1511 (post spawn)
    3 - Fire both events

    2007-12-31: Deva Winblood
    Modified to look for X3_HORSE_OWNER_TAG and if
    it is defined look for an NPC with that tag
    nearby or in the module (checks near first).
    It will make that NPC this horse's master.

    20221201: Jaysyn
    Modified to read desired CODI AI spawner
    from string var "SPAWN_TYPE" set on the NPC,
    defaults to fighter.

*/
//:://////////////////////////////////////////////
//:: Created By: Keith Warner, Georg Zoeller
//:: Created On: June 11/03
//:: Modified By: Jaysyn
//:: Modified On: 20240331
//:://////////////////////////////////////////////

const int EVENT_USER_DEFINED_PRESPAWN = 1510;
const int EVENT_USER_DEFINED_POSTSPAWN = 1511;

#include "ms_name_inc"
#include "x2_inc_switches"

void Embiggen(object oNPC, float fIncrease);

void Embiggen(object oNPC, float fIncrease)
{
    SetObjectVisualTransform(OBJECT_SELF, OBJECT_VISUAL_TRANSFORM_SCALE, fIncrease);
}


void main()
{
//:: User defined OnSpawn event requested?
    int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS");
	
//:: Pre Spawn Event requested
    if (nSpecEvent == 1  || nSpecEvent == 3  )
    {
    SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN ));
    }	

//:: Declare major variables	
	object oNPC;

	string sTag;
	string sResRef 		= GetResRef(OBJECT_SELF);
    string sSpawnType 	= "no_spn_ftr";

    sSpawnType = GetLocalString(OBJECT_SELF,"SPAWN_TYPE");

    if (sSpawnType == "")
    {
        sSpawnType = "no_spn_ftr";
    }	

    sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
    if (GetStringLength(sTag)>0)
    { // look for master
        oNPC=GetNearestObjectByTag(sTag);
        if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
        { // master found
            AddHenchman(oNPC);
        } // master found
        else
        { // look in module
            oNPC=GetObjectByTag(sTag);
            if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
            { // master found
                AddHenchman(oNPC);
            } // master found
            else
            { // master does not exist - remove X3_HORSE_OWNER_TAG
                DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
            } // master does not exist - remove X3_HORSE_OWNER_TAG
        } // look in module
    } // look for master


//:: Handles various Aura effects
    int nAtropal = GetTag(OBJECT_SELF) == "ATROPAL001" ? TRUE : FALSE;
    if(nAtropal)ExecuteScript("atropal_aura",OBJECT_SELF);
	
    int AtropalScion = GetTag(OBJECT_SELF) == "ATROPALSCION001" ? TRUE : FALSE;
    if(AtropalScion)ExecuteScript("neaura",OBJECT_SELF);	

    int nBleakborn = GetStringLeft(GetTag(OBJECT_SELF), 9) == "BLEAKBORN" ? TRUE : FALSE;
    if(nBleakborn)ExecuteScript("bleakaura",OBJECT_SELF);

    int nCryptChanter = GetStringLeft(GetTag(OBJECT_SELF), 12) == "CRYPTCHANTER" ? TRUE : FALSE;
    if(nCryptChanter)ExecuteScript("drainingmelody",OBJECT_SELF);
	
	int nNWalker = GetStringLeft(GetTag(OBJECT_SELF), 11) == "NIGHTWALKER" ? TRUE : FALSE;
    if(nNWalker)ExecuteScript("desecrating_aura",OBJECT_SELF);
	
	int nNCrawler = GetStringLeft(GetTag(OBJECT_SELF), 12) == "NIGHTCRAWLER" ? TRUE : FALSE;
    if(nNCrawler)ExecuteScript("desecrating_aura",OBJECT_SELF);

    int nVoidWraith = GetStringLeft(GetTag(OBJECT_SELF), 10) == "VOIDWRAITH" ? TRUE : FALSE;
    if(nVoidWraith)ExecuteScript("airlessaura",OBJECT_SELF);

    int nGhast1 = GetStringLeft(GetTag(OBJECT_SELF), 5) == "GHAST" ? TRUE : FALSE;
    if(nGhast1)ExecuteScript("ghast_stench",OBJECT_SELF);
	if(nGhast1)ExecuteScript("zombie_feed",OBJECT_SELF);
	
    int nGhast2 = GetStringLeft(GetTag(OBJECT_SELF), 8) == "NW_GHAST" ? TRUE : FALSE;
    if(nGhast2)ExecuteScript("ghast_stench",OBJECT_SELF);
	if(nGhast2)ExecuteScript("zombie_feed",OBJECT_SELF);	
	
    int nGhoul = GetStringLeft(GetTag(OBJECT_SELF), 5) == "GHOUL" ? TRUE : FALSE;
	if(nGhoul)ExecuteScript("zombie_feed",OBJECT_SELF);	
    
	int nGhoul2 = GetStringLeft(GetTag(OBJECT_SELF), 8) == "NW_GHOUL" ? TRUE : FALSE;
	if(nGhoul2)ExecuteScript("zombie_feed",OBJECT_SELF);	
	
    int nZombie = GetStringLeft(GetTag(OBJECT_SELF), 7) == "NW_ZOMB" ? TRUE : FALSE;
	if(nZombie)ExecuteScript("zombie_feed",OBJECT_SELF);
	
    int nDecay = GetStringLeft(GetTag(OBJECT_SELF), 12) == "ANGELOFDECAY" ? TRUE : FALSE;
    if(nDecay)ExecuteScript("rotura",OBJECT_SELF);
	
    int nDecay1 = GetStringLeft(GetTag(OBJECT_SELF), 13) == "DS_YELMUSKCRP" ? TRUE : FALSE;
    if(nDecay1)ExecuteScript("consume_int",OBJECT_SELF);

    int nPrisma = GetStringLeft(GetTag(OBJECT_SELF), 12) == "PRISMASAURUS" ? TRUE : FALSE;
    if(nPrisma)ExecuteScript("prism_aura",OBJECT_SELF);
	
	int nDream = GetStringLeft(GetTag(OBJECT_SELF), 12) == "DREAMVESTIGE" ? TRUE : FALSE;
    if(nDream)ExecuteScript("desecrating_aura",OBJECT_SELF);
	
	int nWinter = GetStringLeft(GetTag(OBJECT_SELF), 11) == "WINTERWIGHT" ? TRUE : FALSE;
    if(nWinter)ExecuteScript("ww_aura",OBJECT_SELF);
	
	int nPlague = GetStringLeft(GetTag(OBJECT_SELF), 12) == "PLAGUEBLIGHT" ? TRUE : FALSE;
    if(nPlague)ExecuteScript("plagueaura",OBJECT_SELF);	
	
	int nHunefer = GetStringLeft(GetTag(OBJECT_SELF), 7) == "HUNEFER" ? TRUE : FALSE;
    if(nHunefer)ExecuteScript("fear2_aura",OBJECT_SELF);		
	

//:: Make a creature a little bigger.	
    int nEmbiggen = GetLocalInt(OBJECT_SELF,"EMBIGGEN");
    if (nEmbiggen > 0)
    {
        float fIncrease = (IntToFloat(nEmbiggen)+100.0) / 100.0;
		DelayCommand(0.0f, Embiggen(OBJECT_SELF, fIncrease));
    }	

//:: Handle various onspawn immunities & buffs

//:: Shadows should be unaffected by darkness
	int nShadow1 = GetStringLeft(GetTag(OBJECT_SELF), 9) == "NW_SHADOW" ? TRUE : FALSE;
    if(nShadow1)
    {
        effect eUltraVis 	= EffectUltravision();
        eUltraVis 			= SupernaturalEffect(eUltraVis);
        eUltraVis 			= ExtraordinaryEffect(eUltraVis);
		eUltraVis 			= UnyieldingEffect(eUltraVis);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eUltraVis,OBJECT_SELF));
    }

	int nShadow2 = GetStringLeft(GetTag(OBJECT_SELF), 6) == "SHADOW" ? TRUE : FALSE;
    if(nShadow2)
    {
        effect eUltraVis 	= EffectUltravision();
        eUltraVis 			= SupernaturalEffect(eUltraVis);
        eUltraVis 			= ExtraordinaryEffect(eUltraVis);
		eUltraVis 			= UnyieldingEffect(eUltraVis);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eUltraVis,OBJECT_SELF));
    }	
	
	int nNoStun = GetLocalInt(OBJECT_SELF,"NOSTUN");
    if (nNoStun > 0)
    {
        effect eNoStun = EffectImmunity(IMMUNITY_TYPE_STUN);
        eNoStun = SupernaturalEffect(eNoStun);
        eNoStun = ExtraordinaryEffect(eNoStun);
		eNoStun = UnyieldingEffect(eNoStun);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoStun,OBJECT_SELF));
    }

    int nNatInvis1 = GetLocalInt(OBJECT_SELF,"NATURAL_INVIS");
    if (nNatInvis1 == 1)
    {
        effect eNatInvis = EffectInvisibility(4);
        eNatInvis = SupernaturalEffect(eNatInvis);
        //eNatInvis = ExtraordinaryEffect(eNatInvis);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNatInvis,OBJECT_SELF));
    }

    int nNatInvis2 = GetLocalInt(OBJECT_SELF,"NATURAL_INVIS");
    if (nNatInvis2 == 2)
    {
        effect eNatInvis = EffectInvisibility(4);
        eNatInvis = SupernaturalEffect(eNatInvis);
        eNatInvis = ExtraordinaryEffect(eNatInvis);
		eNatInvis = UnyieldingEffect(eNatInvis);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNatInvis,OBJECT_SELF));
    }

    int nSeeInvis = GetLocalInt(OBJECT_SELF,"SEE_INVIS");
    if (nSeeInvis > 0)
    {
        effect eSeeInvis = EffectSeeInvisible();
        eSeeInvis = SupernaturalEffect(eSeeInvis);
        eSeeInvis = ExtraordinaryEffect(eSeeInvis);
		eSeeInvis = UnyieldingEffect(eSeeInvis);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSeeInvis,OBJECT_SELF));
    }

    int nNoSleep = GetLocalInt(OBJECT_SELF,"NOSLEEP");
    if (nNoSleep > 0)
    {
        effect eNoSleep = EffectImmunity(IMMUNITY_TYPE_SLEEP);
        eNoSleep = SupernaturalEffect(eNoSleep);
        eNoSleep = ExtraordinaryEffect(eNoSleep);
		eNoSleep = UnyieldingEffect(eNoSleep);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoSleep,OBJECT_SELF));
    }

    int nNoDaze = GetLocalInt(OBJECT_SELF,"NODAZE");
    if (nNoDaze > 0)
    {
        effect eNoDaze = EffectImmunity(IMMUNITY_TYPE_DAZED);
        eNoDaze = SupernaturalEffect(eNoDaze);
        eNoDaze = ExtraordinaryEffect(eNoDaze);
		eNoDaze = UnyieldingEffect(eNoDaze);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoDaze,OBJECT_SELF));
    }

    int nNoBlind = GetLocalInt(OBJECT_SELF,"NOBLIND");
    if (nNoBlind > 0)
    {
        effect eNoBlind = EffectImmunity(IMMUNITY_TYPE_BLINDNESS);
        eNoBlind = SupernaturalEffect(eNoBlind);
        eNoBlind = ExtraordinaryEffect(eNoBlind);
		eNoBlind = UnyieldingEffect(eNoBlind);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoBlind,OBJECT_SELF));
    }

    int nNoDeaf = GetLocalInt(OBJECT_SELF,"NODEAF");
    if (nNoDeaf > 0)
    {
        effect eNoDeaf = EffectImmunity(IMMUNITY_TYPE_DEAFNESS);
        eNoDeaf = SupernaturalEffect(eNoDeaf);
        eNoDeaf = ExtraordinaryEffect(eNoDeaf);
		eNoDeaf = UnyieldingEffect(eNoDeaf);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoDeaf,OBJECT_SELF));
    }

    int nDeaf = GetLocalInt(OBJECT_SELF,"IS_DEAF");
    if (nDeaf > 0)
    {
        effect eDeaf = EffectDeaf();
        eDeaf = SupernaturalEffect(eDeaf);
        eDeaf = ExtraordinaryEffect(eDeaf);
		eDeaf = UnyieldingEffect(eDeaf);
        DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDeaf,OBJECT_SELF));
    }

    /*  Fix for the new golems to reduce their number of attacks */

    int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS);
    if (nNumber >0 )
    {
        SetBaseAttackBonus(nNumber);
    }

    int nVFX = GetLocalInt(OBJECT_SELF,"SpawnVFX");
    if(nVFX)
	{
		ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(nVFX)),OBJECT_SELF);
	}

    int nRegen = GetLocalInt(OBJECT_SELF,"FAST_HEALING");
    if(nRegen)
	{
		effect eRegen = EffectRegenerate(nRegen, 6.0f);
		eRegen = SupernaturalEffect(eRegen);
		eRegen = ExtraordinaryEffect(eRegen);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eRegen, OBJECT_SELF));
	}

    int nShadowy = GetLocalInt(OBJECT_SELF,"SHADOWY");
    if (nShadowy)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis); 
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}

    int nStony = GetLocalInt(OBJECT_SELF,"STONY");
    if (nStony)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis);
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}
    int nFirey = GetLocalInt(OBJECT_SELF,"FIREY");
    if (nFirey)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_INFERNO_NO_SOUND);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis);
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}
    int nWoody = GetLocalInt(OBJECT_SELF,"WOODY");
    if (nWoody)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis);
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}

    int nConcealed20 = GetLocalInt(OBJECT_SELF,"CONCEALED20");
    if (nConcealed20)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_BLUR );
		effect eConceal = EffectConcealment(20, 0);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis);
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}

    int nConcealed50 = GetLocalInt(OBJECT_SELF,"CONCEALED50");
    if (nConcealed50)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_BLUR );
		effect eConceal = EffectConcealment(50, 0);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis);
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}

        int nIcy = GetLocalInt(OBJECT_SELF,"ICY");
    if (nIcy)
	{
		effect eVis = EffectVisualEffect(VFX_DUR_ICESKIN);
		eVis = SupernaturalEffect(eVis);
		eVis = ExtraordinaryEffect(eVis);
		eVis = UnyieldingEffect(eVis);
		DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
	}

    int nSR = GetLocalInt(OBJECT_SELF,"SPELL_RESISTANCE");
    if ( nSR )
    {
        effect eSR = EffectSpellResistanceIncrease(nSR);
        eSR = SupernaturalEffect(eSR);
        eSR = ExtraordinaryEffect(eSR);
		eSR = UnyieldingEffect(eSR);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSR,OBJECT_SELF);
    }

    int nAttackBonus = GetLocalInt(OBJECT_SELF,"ATTACK_BONUS");
    if ( nAttackBonus )
    {
        effect eAttack = EffectAttackIncrease(nAttackBonus);
        eAttack = SupernaturalEffect(eAttack);
        eAttack = ExtraordinaryEffect(eAttack);
		eAttack = UnyieldingEffect(eAttack);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eAttack,OBJECT_SELF);
    }

    int nIceShield = GetLocalInt(OBJECT_SELF,"FROST_SHIELD");
    if ( nIceShield )
    {
        effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d6,DAMAGE_TYPE_COLD);
        eShield = SupernaturalEffect(eShield);
        eShield = ExtraordinaryEffect(eShield);
        eShield = UnyieldingEffect(eShield);		
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF);
    }

    int nAcidShield = GetLocalInt(OBJECT_SELF,"ACID_SHIELD");
    if ( nAcidShield )
    {
        effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d8,DAMAGE_TYPE_ACID);
        eShield = SupernaturalEffect(eShield);
        eShield = ExtraordinaryEffect(eShield);
        eShield = UnyieldingEffect(eShield);		
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF);
    }

    int nSerratedEdge = GetLocalInt(OBJECT_SELF,"SERRATED_EDGE");
    if ( nSerratedEdge )
    {
        effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d6,DAMAGE_TYPE_SLASHING);
        eShield = SupernaturalEffect(eShield);
        eShield = ExtraordinaryEffect(eShield);
        eShield = UnyieldingEffect(eShield);		
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF);
    }

    int nSpikedArmor = GetLocalInt(OBJECT_SELF,"SPIKED_ARMOR");
    if ( nSpikedArmor )
    {
        effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d4,DAMAGE_TYPE_PIERCING);
        eShield = SupernaturalEffect(eShield);
        eShield = ExtraordinaryEffect(eShield);
        eShield = UnyieldingEffect(eShield);		
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF);
    }

//:: OnSpawn Glow effects
    int nGlow = GetLocalInt (OBJECT_SELF,"GLOW_COLOR");
    if (nGlow == 1)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BLUE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);			
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 2)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BROWN);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 3)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREEN);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 4)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREY);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 5)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 6)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BROWN);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 7)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 8)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_ORANGE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 9)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_PURPLE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
			eVis = UnyieldingEffect(eVis);		
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 10)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 11)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_YELLOW);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 12)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_ORANGE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 13)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_PURPLE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 14)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 15)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }
    else if (nGlow == 16)
        {
            effect eVis = EffectVisualEffect(VFX_DUR_GLOW_YELLOW);
            eVis = SupernaturalEffect(eVis);
            eVis = ExtraordinaryEffect(eVis);
            eVis = UnyieldingEffect(eVis);					
            DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF));
        }	

//:: If Incorporeal, apply changes
    if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) == TRUE)
        {
            effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL);
            eConceal = ExtraordinaryEffect(eConceal);
            effect eGhost = EffectCutsceneGhost();
            eGhost = ExtraordinaryEffect(eGhost);
            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, OBJECT_SELF);
            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF);
        }
		
//:: Execute OnSpawn script.
	int nSpider = GetStringLeft(GetTag(OBJECT_SELF), 12) == "MONST_SPIDER" ? TRUE : FALSE;
	if(nSpider)
    {
    //:: Execute drop in from above spawn.
        ExecuteScript("nw_c2_dropin9", OBJECT_SELF);
    }
    else
    {
    //:: Execute CODI AI OnSpawn script.
        ExecuteScript(sSpawnType, OBJECT_SELF);

    //:: Execute default OnSpawn script.
        //ExecuteScript("nw_c2_default9", OBJECT_SELF);
    }

//:: Set or Randomize name
    ms_Nomenclature(OBJECT_SELF);
	
//:: Execute PRC OnSpawn script.
    ExecuteScript("prc_npc_spawn", OBJECT_SELF);

	
//:: Post Spawn event requested
    if (nSpecEvent == 2 || nSpecEvent == 3)
    {
    SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN));
    }

}