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.
		
			
				
	
	
		
			104 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////
 | 
						|
//
 | 
						|
// Panacea - Heals 1d8+1/lvl (max 1d8+20) hp, cures the following
 | 
						|
// conditions: blinded, confused, dazed, deafened, diseased,
 | 
						|
// frightened, paralyzed, poisoned, sleep, and stunned.
 | 
						|
//
 | 
						|
/////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#include "prc_inc_sp_tch"
 | 
						|
#include "prc_add_spell_dc"
 | 
						|
void main()
 | 
						|
{
 | 
						|
    // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
 | 
						|
    if (!X2PreSpellCastCode()) return;
 | 
						|
 | 
						|
    PRCSetSchool(SPELL_SCHOOL_CONJURATION);
 | 
						|
 | 
						|
    // Get the target and raise the spell cast event.
 | 
						|
    object oTarget = PRCGetSpellTargetObject();
 | 
						|
    // Compute the damage to add to the dice roll.
 | 
						|
    int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF);
 | 
						|
    int nAdd = nCasterLvl;
 | 
						|
    if (nAdd > 20) nAdd = 20;
 | 
						|
    int nPenetr = nCasterLvl + SPGetPenetr();
 | 
						|
 | 
						|
    // If the target is not undead then heal it and remove all harmfull effects.  If
 | 
						|
    // the target is undead then check for SR.
 | 
						|
    if (RACIAL_TYPE_UNDEAD != MyPRCGetRacialType(oTarget)
 | 
						|
    && !(GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD))
 | 
						|
    {
 | 
						|
        PRCSignalSpellEvent(oTarget, FALSE);
 | 
						|
 | 
						|
        // Look for detrimental effects and remove them.  Removes the following effects:
 | 
						|
        // blinded, confused, dazed, deafened, diseased, frightened, paralyzed,
 | 
						|
        // poisoned, sleep, and stunned.
 | 
						|
        effect eEffect = GetFirstEffect(oTarget);
 | 
						|
        while (GetIsEffectValid(eEffect))
 | 
						|
        {
 | 
						|
            // GetIsValidEffect() appears to be returning TRUE sometimes even for invalid effects so
 | 
						|
            // catch that here.
 | 
						|
            int nEffectType = GetEffectType(eEffect);
 | 
						|
            if (EFFECT_TYPE_INVALIDEFFECT == nEffectType)
 | 
						|
            {
 | 
						|
                PrintString("****EFFECT_TYPE_INVALIDEFFECT returned but GetIsValidEffect() returns TRUE");
 | 
						|
                break;
 | 
						|
            }
 | 
						|
 | 
						|
            // catch all of the detrimental effects and remove them.
 | 
						|
            if (EFFECT_TYPE_BLINDNESS == nEffectType ||
 | 
						|
                EFFECT_TYPE_CONFUSED == nEffectType ||
 | 
						|
                EFFECT_TYPE_DAZED == nEffectType ||
 | 
						|
                EFFECT_TYPE_DEAF == nEffectType ||
 | 
						|
                EFFECT_TYPE_DISEASE == nEffectType ||
 | 
						|
                EFFECT_TYPE_FRIGHTENED == nEffectType ||
 | 
						|
                EFFECT_TYPE_PARALYZE == nEffectType ||
 | 
						|
                EFFECT_TYPE_POISON == nEffectType ||
 | 
						|
                EFFECT_TYPE_SLEEP == nEffectType ||
 | 
						|
                EFFECT_TYPE_STUNNED == nEffectType)
 | 
						|
                RemoveEffect(oTarget, eEffect);
 | 
						|
 | 
						|
            eEffect = GetNextEffect(oTarget);
 | 
						|
        }
 | 
						|
 | 
						|
        // Roll the healing 'damage'.
 | 
						|
        int nHeal = PRCGetMetaMagicDamage(DAMAGE_TYPE_POSITIVE, 1, 8, 0, nAdd);
 | 
						|
        if (GetLevelByClass(CLASS_TYPE_HEALER, OBJECT_SELF))
 | 
						|
            nHeal += GetAbilityModifier(ABILITY_CHARISMA, OBJECT_SELF);
 | 
						|
 | 
						|
        // Apply the healing and VFX.
 | 
						|
        SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nHeal, oTarget), oTarget);
 | 
						|
        SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEALING_M), oTarget);
 | 
						|
    }
 | 
						|
    else if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
 | 
						|
    {
 | 
						|
        PRCSignalSpellEvent(oTarget);
 | 
						|
 | 
						|
        if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nPenetr))
 | 
						|
        {
 | 
						|
            int nTouch = PRCDoMeleeTouchAttack(oTarget);;
 | 
						|
            if (nTouch > 0)
 | 
						|
            {
 | 
						|
                // Roll the damage (allowing for a critical) and let the target make a will save to
 | 
						|
                // halve the damage.
 | 
						|
                int nDamage = PRCGetMetaMagicDamage(DAMAGE_TYPE_POSITIVE, 1 == nTouch ? 1 : 2, 8, 0, nAdd);
 | 
						|
                nDamage += SpellDamagePerDice(OBJECT_SELF, 1);
 | 
						|
                if (PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget,OBJECT_SELF)))
 | 
						|
                {
 | 
						|
                    nDamage /= 2;
 | 
						|
                        if (GetHasMettle(oTarget, SAVING_THROW_WILL)) // Ignores partial effects
 | 
						|
                        {
 | 
						|
                        nDamage = 0;
 | 
						|
                        }
 | 
						|
                }
 | 
						|
 | 
						|
                // Apply damage and VFX.
 | 
						|
                SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_POSITIVE), oTarget);
 | 
						|
                SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SUNSTRIKE), oTarget);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    PRCSetSchool();
 | 
						|
}
 |