Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
112 lines
4.0 KiB
Plaintext
112 lines
4.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Sleep
|
|
//:: NW_S0_Sleep
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Goes through the area and sleeps the lowest 4+d4
|
|
HD of creatures first.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: March 7 , 2001
|
|
//:://////////////////////////////////////////////
|
|
//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001
|
|
//:: VFX Pass By: Preston W, On: June 25, 2001
|
|
|
|
//:: modified by mr_bumpkin Dec 4, 2003
|
|
#include "prc_inc_spells"
|
|
#include "prc_alterations"
|
|
#include "inv_inc_invfunc"
|
|
#include "inv_invokehook"
|
|
|
|
void DoSleepCheck(object oTarget, int nSleepCheck, object oCaster)
|
|
{
|
|
if(nSleepCheck != GetLocalInt(oTarget, "nSleepCheck"))
|
|
return;
|
|
|
|
int nDC = GetInvocationSaveDC(oTarget, oCaster);
|
|
|
|
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (nDC), SAVING_THROW_TYPE_MIND_SPELLS))
|
|
{
|
|
DelayCommand(HoursToSeconds(24), DoSleepCheck(oTarget, nSleepCheck, oCaster));
|
|
}
|
|
else
|
|
{
|
|
DeleteLocalInt(oTarget, "PainfulSleep");
|
|
PRCRemoveSpellEffects(INVOKE_PAINFUL_SLUMBER_OF_AGES, oCaster, oTarget);
|
|
}
|
|
}
|
|
|
|
void DoDamageCheck(object oTarget, int nSleepCheck)
|
|
{
|
|
if(nSleepCheck != GetLocalInt(oTarget, "nSleepCheck"))
|
|
return;
|
|
|
|
if(!PRCGetHasEffect(EFFECT_TYPE_SLEEP, oTarget))
|
|
{
|
|
if(DEBUG) DoDebug("inv_painslumber: Target awakened unnaturally");
|
|
effect eSleepDam = EffectDamage(GetLocalInt(oTarget, "PainfulSleep"), DAMAGE_TYPE_MAGICAL);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eSleepDam, oTarget);
|
|
DeleteLocalInt(oTarget, "PainfulSleep");
|
|
}
|
|
else
|
|
DelayCommand(3.0, DoDamageCheck(oTarget, nSleepCheck));
|
|
}
|
|
|
|
void main()
|
|
{
|
|
if (!PreInvocationCastCode()) return;
|
|
|
|
//Declare major variables
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
|
|
effect eSleep = EffectSleep();
|
|
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
|
|
|
|
effect eLink = EffectLinkEffects(eSleep, eMind);
|
|
eLink = EffectLinkEffects(eLink, eDur);
|
|
|
|
// * Moved the linking for the ZZZZs into the later code
|
|
// * so that they won't appear if creature immune
|
|
|
|
int CasterLvl = GetInvokerLevel(OBJECT_SELF, GetInvokingClass());
|
|
|
|
int nPenetr = CasterLvl + SPGetPenetr();
|
|
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, PRCGetSpellTargetLocation());
|
|
string sSpellLocal = "BIOWARE_SPELL_LOCAL_SLEEP_" + ObjectToString(OBJECT_SELF);
|
|
|
|
//Get the first target in the spell area
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, INVOKE_PAINFUL_SLUMBER_OF_AGES));
|
|
//Make SR check
|
|
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, nPenetr))
|
|
{
|
|
int nDC = GetInvocationSaveDC(oTarget,OBJECT_SELF);
|
|
//Make Will save
|
|
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (nDC), SAVING_THROW_TYPE_MIND_SPELLS))
|
|
{
|
|
if (GetIsImmune(oTarget, IMMUNITY_TYPE_SLEEP) == FALSE)
|
|
{
|
|
effect eLink2 = EffectLinkEffects(eLink, eVis);
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink2, oTarget, 0.0,TRUE,-1,CasterLvl);
|
|
SetLocalInt(oTarget, "PainfulSleep", CasterLvl);
|
|
//set up the 24 hour saving throws
|
|
int nSleepCheck = GetLocalInt(oTarget, "nSleepCheck");
|
|
if(nSleepCheck > 30) nSleepCheck = 1;
|
|
DelayCommand(3.0, DoDamageCheck(oTarget, nSleepCheck));
|
|
SetLocalInt(oTarget, "nSleepCheck", nSleepCheck);
|
|
DelayCommand(HoursToSeconds(24), DoSleepCheck(oTarget, nSleepCheck, OBJECT_SELF));
|
|
}
|
|
else
|
|
// * even though I am immune apply just the sleep effect for the immunity message
|
|
{
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, oTarget, 6.0,TRUE,-1,CasterLvl);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|