PRC8_fork/nwn/nwnprc/trunk/smp/phs_s_dismissal.nss

86 lines
2.9 KiB
Plaintext
Raw Permalink Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Dismissal
//:: Spell FileName PHS_S_Dismissal
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Abjuration
Level: Clr 4, Sor/Wiz 5
Components: V, S, DF
Casting Time: 1 standard action
Range: Close (8M)
Target: One extraplanar creature
Duration: Instantaneous
Saving Throw: Will negates; see text
Spell Resistance: Yes
This spell forces an extraplanar creature (outsider) back to its proper
plane if it fails a special Will save
(DC = spell<6C>s save DC - creature<72>s HD + your caster level). If the spell
is successful, the creature is instantly whisked away, but there is a 20%
chance of actually sending the subject to a plane other than its own.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
We can't do this completely unless we know this outsider isn't already
on thier plane!
But the rest is easy enough.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check.
if(!PHS_SpellHookCheck(PHS_SPELL_DISMISSAL)) return;
// Declare Major Variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nMetaMagic = PHS_GetMetaMagicFeat();
int nCasterLevel = PHS_GetCasterLevel();
// The save DC:
// DC = spell<6C>s save DC - creature<72>s HD + your caster level
int nSpellSaveDC = PHS_GetSpellSaveDC() - GetHitDice(oTarget) + nCasterLevel;
// Declare effects
effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
// Needs to be a non-PvP person, and an outsider race
if(GetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER &&
!GetIsReactionTypeFriendly(oTarget))
{
// Signal spell cast at
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_DISMISSAL);
// Check spell resistance
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
{
// Will save against the effects
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC))
{
// Failed - send them back
if(GetIsPC(oTarget))
{
// Kill PC's (as they'll be shapechanged, most likely)
PHS_ApplyDeathByDamageAndVFX(oTarget, eVis);
}
else
{
// Destroy them for no XP
if(PHS_CanCreatureBeDestroyed(oTarget))
{
// Apply AOE visual
PHS_ApplyLocationVFX(GetLocation(oTarget), eVis);
DestroyObject(oTarget);
}
}
}
}
}
}