Fixed missing Factions on Animated Statues. Added XP to next level for lvl 40+ characters. Added Dragon AI for CODI Core AI. Tweaked Beholders & some Dragons to use CODI Core AI. Fixed CODI Core NPC onSPawn script to run PRC scripts properly. Full compile. Updated release archive.
606 lines
22 KiB
Plaintext
606 lines
22 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: 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);
|
|
//:: Execute CODI AI OnSpawn script.
|
|
ExecuteScript(sSpawnType, OBJECT_SELF);
|
|
}
|
|
else
|
|
{
|
|
//:: Execute CODI AI OnSpawn script.
|
|
ExecuteScript(sSpawnType, OBJECT_SELF);
|
|
//:: Execute PRC OnSpawn module hook script.
|
|
ExecuteScript("prc_pwonspawn", OBJECT_SELF);
|
|
//:: Execute PRC OnSpawn script.
|
|
ExecuteScript("prc_npc_spawn", OBJECT_SELF);
|
|
}
|
|
|
|
//:: Set or Randomize name
|
|
ms_Nomenclature(OBJECT_SELF);
|
|
|
|
//:: Post Spawn event requested
|
|
if (nSpecEvent == 2 || nSpecEvent == 3)
|
|
{
|
|
SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN));
|
|
}
|
|
} |