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.
		
			
				
	
	
		
			130 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						|
//:: Death Knell
 | 
						|
//:: sp_deathknell.nss
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
/*
 | 
						|
Death Knell
 | 
						|
Necromancy [Death, Evil]
 | 
						|
Level:            Clr 2, Death 2
 | 
						|
Components:       V, S
 | 
						|
Casting Time:     1 standard action
 | 
						|
Range:            Touch
 | 
						|
Target:           Living creature touched
 | 
						|
Duration:         Instantaneous/10 minutes per HD
 | 
						|
                  of subject; see text
 | 
						|
Saving Throw:     Will negates
 | 
						|
Spell Resistance: Yes
 | 
						|
 | 
						|
 | 
						|
You draw forth the ebbing life force of a creature
 | 
						|
and use it to fuel your own power. Upon casting
 | 
						|
this spell, you touch a living creature that has
 | 
						|
-1 or fewer hit points. If the subject fails its
 | 
						|
saving throw, it dies, and you gain 1d8 temporary
 | 
						|
hit points and a +2 bonus to Strength.
 | 
						|
Additionally, your effective caster level goes up
 | 
						|
by +1, improving spell effects dependent on caster
 | 
						|
level. (This increase in effective caster level
 | 
						|
does not grant you access to more spells.) These
 | 
						|
effects last for 10 minutes per HD of the subject
 | 
						|
creature.
 | 
						|
*/
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: Stratovarius
 | 
						|
//:: Created On: Sept 13, 2004
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
 | 
						|
#include "prc_inc_sp_tch"
 | 
						|
#include "prc_sp_func"
 | 
						|
#include "prc_add_spell_dc"
 | 
						|
 | 
						|
int DoSpell(object oCaster, object oTarget, int nCasterLevel)
 | 
						|
{
 | 
						|
    int iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
 | 
						|
 | 
						|
    if(iAttackRoll)
 | 
						|
    {
 | 
						|
        int nMetaMagic = PRCGetMetaMagicFeat();
 | 
						|
        int nPenetr = nCasterLevel + SPGetPenetr();
 | 
						|
 | 
						|
        float fDuration = TurnsToSeconds(GetHitDice(oTarget));
 | 
						|
        if(nMetaMagic & METAMAGIC_EXTEND)
 | 
						|
            fDuration *= 2;
 | 
						|
 | 
						|
        int nBonus = d8(1);
 | 
						|
        if(nMetaMagic & METAMAGIC_MAXIMIZE)
 | 
						|
            nBonus = 8;
 | 
						|
        if(nMetaMagic & METAMAGIC_EMPOWER)
 | 
						|
            nBonus += (nBonus / 2);
 | 
						|
 | 
						|
        effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
 | 
						|
        effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 2);
 | 
						|
        effect eHP = EffectTemporaryHitpoints(nBonus);
 | 
						|
 | 
						|
        effect eVis2 = EffectVisualEffect(VFX_IMP_DEATH_L);
 | 
						|
        effect eVis = EffectVisualEffect(VFX_IMP_HOLY_AID);
 | 
						|
 | 
						|
        effect eLink = EffectLinkEffects(eStr, eDur);
 | 
						|
 | 
						|
        //Fire cast spell at event for the specified target
 | 
						|
        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_DEATH_KNELL));
 | 
						|
 | 
						|
        if(GetCurrentHitPoints(oTarget) < 10 && PRCGetIsAliveCreature(oTarget))
 | 
						|
        {
 | 
						|
            if(!PRCDoResistSpell(oCaster, oTarget, nPenetr))
 | 
						|
            {
 | 
						|
                if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_DEATH))
 | 
						|
                {
 | 
						|
                    //Apply the VFX impact and effects
 | 
						|
                    DeathlessFrenzyCheck(oTarget);
 | 
						|
                    SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
 | 
						|
                    SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
 | 
						|
 | 
						|
                    if(GetIsDead(oTarget))
 | 
						|
                    {
 | 
						|
                        //Remove previous bonuses
 | 
						|
                        PRCRemoveEffectsFromSpell(oCaster, SPELL_DEATH_KNELL);
 | 
						|
                        //Apply the bonuses to the PC
 | 
						|
                        SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCaster);
 | 
						|
                        SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oCaster, fDuration, TRUE, SPELL_DEATH_KNELL, nCasterLevel);
 | 
						|
                        SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oCaster, fDuration, TRUE, SPELL_DEATH_KNELL, nCasterLevel);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            FloatingTextStringOnCreature("*Death Knell failure: The target isn't weak enough*", oCaster, FALSE);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return iAttackRoll;    //return TRUE if spell charges should be decremented
 | 
						|
}
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
    if (!X2PreSpellCastCode()) return;
 | 
						|
    PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
 | 
						|
    object oCaster = OBJECT_SELF;
 | 
						|
    object oTarget = PRCGetSpellTargetObject();
 | 
						|
    int nCasterLevel = PRCGetCasterLevel(oCaster);
 | 
						|
    int nEvent = GetLocalInt(oCaster, PRC_SPELL_EVENT); //use bitwise & to extract flags
 | 
						|
    if(!nEvent) //normal cast
 | 
						|
    {
 | 
						|
        if(GetLocalInt(oCaster, PRC_SPELL_HOLD) && oCaster == oTarget)
 | 
						|
        {   //holding the charge, casting spell on self
 | 
						|
            SetLocalSpellVariables(oCaster, 1);   //change 1 to number of charges
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        DoSpell(oCaster, oTarget, nCasterLevel);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        if(nEvent & PRC_SPELL_EVENT_ATTACK)
 | 
						|
        {
 | 
						|
            if(DoSpell(oCaster, oTarget, nCasterLevel))
 | 
						|
                DecrementSpellCharges(oCaster);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    PRCSetSchool();
 | 
						|
} |