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.
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						||
//:: Name      Ray of Exhaustion
 | 
						||
//:: FileName  sp_ray_exhst.nss
 | 
						||
//:://////////////////////////////////////////////
 | 
						||
/**@file Ray of Exhaustion
 | 
						||
Necromancy
 | 
						||
Level: 	Sor/Wiz 3, Duskblade 3
 | 
						||
Components: 	V, S, M
 | 
						||
Casting Time: 	1 standard action
 | 
						||
Range: 	Close (25 ft. + 5 ft./2 levels)
 | 
						||
Effect: 	Ray
 | 
						||
Duration: 	1 min./level
 | 
						||
Saving Throw: 	Fortitude partial; see text
 | 
						||
Spell Resistance: 	Yes
 | 
						||
 | 
						||
A black ray projects from your pointing finger. You
 | 
						||
must succeed on a ranged touch attack with the ray 
 | 
						||
to strike a target.
 | 
						||
 | 
						||
The subject is immediately exhausted for the spell’s 
 | 
						||
duration. A successful Fortitude save means the 
 | 
						||
creature is only fatigued.
 | 
						||
 | 
						||
A character that is already fatigued instead becomes
 | 
						||
exhausted.
 | 
						||
 | 
						||
This spell has no effect on a creature that is 
 | 
						||
already exhausted. Unlike normal exhaustion or fatigue,
 | 
						||
the effect ends as soon as the spell’s duration expires.
 | 
						||
Material Component
 | 
						||
 | 
						||
A drop of sweat.
 | 
						||
 | 
						||
**/
 | 
						||
//::////////////////////////////////////////////////
 | 
						||
//:: Author: Tenjac
 | 
						||
//:: Date  : 29.9.06
 | 
						||
//::////////////////////////////////////////////////
 | 
						||
 | 
						||
#include "prc_inc_sp_tch"
 | 
						||
#include "prc_sp_func"
 | 
						||
#include "prc_add_spell_dc"
 | 
						||
int DoSpell(object oCaster, object oTarget, int nCasterLevel, int nEvent)
 | 
						||
{
 | 
						||
	int nMetaMagic = PRCGetMetaMagicFeat();
 | 
						||
	int nSaveDC = PRCGetSaveDC(oTarget, oCaster);
 | 
						||
	int nPenetr = nCasterLevel + SPGetPenetr();
 | 
						||
    effect eLink = EffectExhausted();
 | 
						||
	float fDur = (60.0f * nCasterLevel); 
 | 
						||
	
 | 
						||
	if(nMetaMagic & METAMAGIC_EXTEND)
 | 
						||
	{
 | 
						||
		fDur += fDur;
 | 
						||
	}
 | 
						||
	
 | 
						||
	PRCSignalSpellEvent(oTarget, TRUE);
 | 
						||
	
 | 
						||
	//INSERT SPELL CODE HERE
 | 
						||
	int iAttackRoll = PRCDoRangedTouchAttack(oTarget);
 | 
						||
	
 | 
						||
	//Beam
 | 
						||
	SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_BLACK, oCaster, BODY_NODE_HAND, !iAttackRoll), oTarget, 1.0f); 
 | 
						||
	
 | 
						||
	if (iAttackRoll > 0 && PRCGetIsAliveCreature(oTarget))
 | 
						||
	{
 | 
						||
		//Touch attack code goes here
 | 
						||
		if(!PRCDoResistSpell(OBJECT_SELF, oTarget, nPenetr))
 | 
						||
		{
 | 
						||
			effect eSpeed = EffectMovementSpeedDecrease(50);
 | 
						||
			int nDrain = 6;
 | 
						||
			
 | 
						||
			//Fort save
 | 
						||
			if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_SPELL))
 | 
						||
			{
 | 
						||
				if(GetHasMettle(oTarget, SAVING_THROW_FORT))
 | 
						||
				{
 | 
						||
					PRCSetSchool();
 | 
						||
					return iAttackRoll;
 | 
						||
				}
 | 
						||
				
 | 
						||
				else
 | 
						||
				{
 | 
						||
					eLink = EffectFatigue();
 | 
						||
				}
 | 
						||
			}
 | 
						||
			
 | 
						||
			eLink = MagicalEffect(eLink);
 | 
						||
			
 | 
						||
			SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);			    
 | 
						||
		}
 | 
						||
	}
 | 
						||
	return iAttackRoll;    //return TRUE if spell charges should be decremented
 | 
						||
}
 | 
						||
 | 
						||
void main()
 | 
						||
{
 | 
						||
	object oCaster = OBJECT_SELF;
 | 
						||
	int nCasterLevel = PRCGetCasterLevel(oCaster);
 | 
						||
	PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
 | 
						||
	if (!X2PreSpellCastCode()) return;
 | 
						||
	object oTarget = PRCGetSpellTargetObject();
 | 
						||
	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, nEvent);
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		if(nEvent & PRC_SPELL_EVENT_ATTACK)
 | 
						||
		{
 | 
						||
			if(DoSpell(oCaster, oTarget, nCasterLevel, nEvent))
 | 
						||
			DecrementSpellCharges(oCaster);
 | 
						||
		}
 | 
						||
	}
 | 
						||
	PRCSetSchool();
 | 
						||
} |