forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
69 lines
2.8 KiB
Plaintext
69 lines
2.8 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Unsummon
|
|
//:: prc_tn_unsum.nss
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Unsummons a True Necromancer or Hathran summon.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Stratovarius
|
|
//:: Created On: June 26 , 2004
|
|
//:://////////////////////////////////////////////
|
|
#include "prc_alterations"
|
|
#include "inc_npc"
|
|
|
|
int PRCCanCreatureBeDestroyed(object oTarget)
|
|
{
|
|
if (GetPlotFlag(oTarget) == FALSE && GetImmortal(oTarget) == FALSE)
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
object oMaster = GetMaster(oTarget);
|
|
int nDC = GetLevelByClass(CLASS_TYPE_BLIGHTER, oCaster) + 10 + GetAbilityModifier(ABILITY_WISDOM, oCaster);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
|
|
|
|
if (oMaster == OBJECT_INVALID)
|
|
{
|
|
oMaster = OBJECT_SELF; // TO prevent problems with invalid objects
|
|
// passed into GetAssociate
|
|
}
|
|
|
|
// * Is the creature a summoned associate
|
|
// * or is the creature an outsider
|
|
// * and is there enough points in the pool
|
|
if( // A familiar
|
|
GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == oTarget ||
|
|
// A Bonded Summoner familiar
|
|
GetTag(OBJECT_SELF) == "BONDFAMILIAR" ||
|
|
// An animal companion
|
|
GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) == oTarget
|
|
)// End - Target validity tests
|
|
{
|
|
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
|
{
|
|
//Apply the VFX and delay the destruction of the summoned monster so
|
|
//that the script and VFX can play.
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
|
|
if(PRCCanCreatureBeDestroyed(oTarget) == TRUE)
|
|
{
|
|
//bugfix: Simply destroying the object won't fire it's OnDeath script.
|
|
//Which is bad when you have plot-specific things being done in that
|
|
//OnDeath script... so lets kill it.
|
|
effect eKill = EffectDamage(GetCurrentHitPoints(oTarget));
|
|
//just to be extra-sure... :)
|
|
effect eDeath = EffectDeath(FALSE, FALSE);
|
|
DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
|
|
DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget));
|
|
DeathlessFrenzyCheck(oTarget);
|
|
}
|
|
}
|
|
}
|
|
}
|