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.
140 lines
4.2 KiB
Plaintext
140 lines
4.2 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name Sarcophagus of Stone
|
|
//:: FileName sp_sarc_stone.nss
|
|
//:://////////////////////////////////////////////
|
|
/**@file Sarcophagus of Stone
|
|
Conjuration (Creation) [Earth]
|
|
Level: Clr 6
|
|
Components: V S M DF
|
|
Casting Time: 1 standard action
|
|
Duration: Instantaneous
|
|
Range: Close (25 ft + 5 ft/2 lvls)
|
|
Target: 1 medium or smaler creature
|
|
Spell Resistance: No
|
|
Saving Throw: Reflex negates
|
|
|
|
This spell creates an airtight
|
|
stone coffin that forms around
|
|
the target. The stone is 1 inch thick, has
|
|
hardness 8, and requires 15 points of
|
|
damage to break through. Decreasing
|
|
its size does not change the thickness
|
|
of the walls; the coffin is always just
|
|
large enough to hold the subject. This
|
|
coffin is sealed upon formation and
|
|
completely impervious to air and gas. A
|
|
creature trapped within a sarcophagus of
|
|
stone has 1 hour worth of air, and after
|
|
that time will begin to suffocate. A creature
|
|
that has no need to breathe needs not
|
|
fear suffocation, but it remains trapped
|
|
within the sarcophagus until it breaks
|
|
free or is freed.
|
|
|
|
A creature within the coffin can
|
|
attack the stone with a natural weapon
|
|
or light melee weapon. A creature can
|
|
attempt a DC 26 Strength check to
|
|
break free of the stone, and allies can
|
|
also help to break the trapped creature
|
|
free.
|
|
|
|
Material Component: A fragment of a
|
|
sarcophagus.
|
|
|
|
Author: Tenjac
|
|
Created: 6/25/06
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_spells"
|
|
#include "inc_dynconv"
|
|
#include "prc_add_spell_dc"
|
|
|
|
void GaspGaspCroak(object oTarget, int nCounter);
|
|
|
|
void SarcMonitor(object oSarc, object oTarget);
|
|
|
|
void main()
|
|
{
|
|
if(!X2PreSpellCastCode()) return;
|
|
|
|
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
|
|
|
object oPC = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
string sSarc = "prc_sarc_stone";
|
|
int nDC = PRCGetSaveDC(oTarget, oPC);
|
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|
|
|
//Save
|
|
if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_SPELL))
|
|
{
|
|
effect eHide = EffectLinkEffects(EffectCutsceneGhost(), EffectCutsceneImmobilize());
|
|
eHide = EffectLinkEffects(eHide, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY));
|
|
eHide = EffectLinkEffects(eHide, EffectVisualEffect(VFX_DUR_BLIND));
|
|
|
|
location lLoc = GetLocation(oTarget);
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHide, oTarget, HoursToSeconds(24), FALSE, SPELL_SARCOPHAGUS_OF_STONE, nCasterLvl);
|
|
|
|
///Create the sarcophagus
|
|
object oSarc = CreateObject(OBJECT_TYPE_PLACEABLE, sSarc, lLoc, FALSE);
|
|
|
|
//Make sure it's locked
|
|
SetLocked(oTarget, TRUE);
|
|
|
|
//Watch for sarcophagus destruction
|
|
SarcMonitor(oSarc, oTarget);
|
|
|
|
AssignCommand(oTarget, ClearAllActions(TRUE));
|
|
|
|
//Start convo for Str check
|
|
StartDynamicConversation("sarc_stone", oTarget, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
|
|
|
|
//Set up 1 hour counter
|
|
int nCounter = FloatToInt(HoursToSeconds(1) + RoundsToSeconds(3));
|
|
|
|
//Start Suffocation function
|
|
GaspGaspCroak(oTarget, nCounter);
|
|
}
|
|
PRCSetSchool();
|
|
}
|
|
|
|
void GaspGaspCroak(object oTarget, int nCounter)
|
|
{
|
|
if(nCounter <1)
|
|
{
|
|
//If living
|
|
if(PRCGetIsAliveCreature(oTarget) && !GetHasFeat(FEAT_BREATHLESS, oTarget))
|
|
{
|
|
//Kill it.
|
|
effect eDeath = EffectDeath();
|
|
eDeath = SupernaturalEffect(eDeath);
|
|
DeathlessFrenzyCheck(oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
|
return;
|
|
}
|
|
}
|
|
nCounter--;
|
|
DelayCommand(RoundsToSeconds(1),GaspGaspCroak(oTarget, nCounter));
|
|
}
|
|
|
|
void SarcMonitor(object oSarc, object oTarget)
|
|
{
|
|
//if sarc is destroyed
|
|
if(GetCurrentHitPoints(oSarc) < 1)
|
|
{
|
|
//remove spell effects
|
|
effect eTest = GetFirstEffect(oTarget);
|
|
while(GetIsEffectValid(eTest))
|
|
{
|
|
if(GetEffectSpellId(eTest) == SPELL_SARCOPHAGUS_OF_STONE)
|
|
{
|
|
RemoveEffect(oTarget, eTest);
|
|
}
|
|
eTest = GetNextEffect(oTarget);
|
|
}
|
|
}
|
|
else DelayCommand(3.0f, SarcMonitor(oSarc, oTarget));
|
|
} |