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.
		
			
				
	
	
		
			201 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*:://////////////////////////////////////////////
 | 
						||
//:: Spell Name Dispel Alignment [Dispel Good, Evil, Lawful, Chaos]
 | 
						||
//:: Spell FileName PHS_S_DispelAlgn
 | 
						||
//:://////////////////////////////////////////////
 | 
						||
//:: In Game Spell desctiption
 | 
						||
//:://////////////////////////////////////////////
 | 
						||
    Example from Dispel Evil. The others are the same (except the type changes,
 | 
						||
    and the stuff dispelled/removed does too).
 | 
						||
 | 
						||
    Dispel Evil
 | 
						||
    Abjuration [Good]
 | 
						||
    Level: Clr 5, Good 5, Pal 4
 | 
						||
    Components: V, S, DF
 | 
						||
    Casting Time: 1 standard action
 | 
						||
    Range: Touch
 | 
						||
    Target: You, and touched evil creature from another plane; or an evil spell
 | 
						||
            on a touched creature
 | 
						||
    Duration: 1 round/level or until discharged, whichever comes first
 | 
						||
    Saving Throw: See text
 | 
						||
    Spell Resistance: See text
 | 
						||
 | 
						||
    Shimmering, white, holy energy surrounds you. This power has three possible
 | 
						||
    effects.
 | 
						||
 | 
						||
    If you mage a successful melee touch attack against an evil creature you
 | 
						||
    targeted from another plane, you try to drive that creature back to its home
 | 
						||
    plane. The creature can negate the effects with a successful Will save (spell
 | 
						||
    resistance applies).
 | 
						||
 | 
						||
    Else, if you touch someone with an evil spell's effects upon them, you
 | 
						||
    automatically dispel any one enchantment spell cast by an evil creature or
 | 
						||
    any one evil spell. Exception: Spells that can’t be dispelled by dispel magic
 | 
						||
    also can’t be dispelled by dispel evil. Saving throws and spell resistance
 | 
						||
    do not apply to this effect.
 | 
						||
 | 
						||
    If you do neither of the above (no presence of an evil spell), you gain a +4
 | 
						||
    deflection bonus to AC against attacks by evil creatures.
 | 
						||
//:://////////////////////////////////////////////
 | 
						||
//:: Spell Effects Applied / Notes
 | 
						||
//:://////////////////////////////////////////////
 | 
						||
    Ok, dispels a cirtain alignment.
 | 
						||
 | 
						||
    Visuals:
 | 
						||
    Dispel Evil: Shimmering, white, holy energy surrounds you.
 | 
						||
    Dispel Good: you are surrounded by dark, wavering, unholy energy,
 | 
						||
    Dispel Chaos: you are surrounded by constant, blue, lawful energy,
 | 
						||
    Dispel Law: except that you are surrounded by flickering, yellow, chaotic energy
 | 
						||
 | 
						||
    It first tries to make the outsider creature of the alignment specfied go.
 | 
						||
 | 
						||
    Then, it will attempt to dispel an evil spell.
 | 
						||
 | 
						||
    Failing that (no evil spells present) it will apply the effects.
 | 
						||
//:://////////////////////////////////////////////
 | 
						||
//:: Created By: Jasperre
 | 
						||
//::////////////////////////////////////////////*/
 | 
						||
 | 
						||
#include "PHS_INC_SPELLS"
 | 
						||
 | 
						||
void main()
 | 
						||
{
 | 
						||
    // Get what spell is being cast
 | 
						||
    int nSpellId = GetSpellId();
 | 
						||
    int nAlignment, bGoodEvil, nVFX, nSaveType;
 | 
						||
 | 
						||
    if(nSpellId == PHS_SPELL_DISPEL_CHAOS)
 | 
						||
    {
 | 
						||
        nAlignment = ALIGNMENT_CHAOTIC;
 | 
						||
        bGoodEvil = FALSE;
 | 
						||
        nVFX = PHS_VFX_DUR_DISPEL_CHAOS;
 | 
						||
        nSaveType = SAVING_THROW_TYPE_CHAOS;
 | 
						||
    }
 | 
						||
    else if(nSpellId == PHS_SPELL_DISPEL_EVIL)
 | 
						||
    {
 | 
						||
        nAlignment = ALIGNMENT_EVIL;
 | 
						||
        bGoodEvil = TRUE;
 | 
						||
        nVFX = PHS_VFX_DUR_DISPEL_EVIL;
 | 
						||
        nSaveType = SAVING_THROW_TYPE_EVIL;
 | 
						||
    }
 | 
						||
    else if(nSpellId == PHS_SPELL_DISPEL_GOOD)
 | 
						||
    {
 | 
						||
        nAlignment = ALIGNMENT_GOOD;
 | 
						||
        bGoodEvil = TRUE;
 | 
						||
        nVFX = PHS_VFX_DUR_DISPEL_GOOD;
 | 
						||
        nSaveType = SAVING_THROW_TYPE_GOOD;
 | 
						||
    }
 | 
						||
    else if(nSpellId == PHS_SPELL_DISPEL_LAW)
 | 
						||
    {
 | 
						||
        nAlignment = ALIGNMENT_LAWFUL;
 | 
						||
        bGoodEvil = FALSE;
 | 
						||
        nVFX = PHS_VFX_DUR_DISPEL_LAW;
 | 
						||
        nSaveType = SAVING_THROW_TYPE_LAW;
 | 
						||
    }
 | 
						||
    else
 | 
						||
    {
 | 
						||
        return;
 | 
						||
    }
 | 
						||
 | 
						||
    // Spell Hook Check.
 | 
						||
    if(!PHS_SpellHookCheck(nSpellId)) return;
 | 
						||
 | 
						||
    // Declare Major Variables
 | 
						||
    object oCaster = OBJECT_SELF;
 | 
						||
    object oTarget = GetSpellTargetObject();
 | 
						||
    int nCasterLevel = PHS_GetCasterLevel();
 | 
						||
    int nSpellSaveDC = PHS_GetSpellSaveDC();
 | 
						||
    int nMetaMagic = PHS_GetMetaMagicFeat();
 | 
						||
 | 
						||
    // Duration in rounds
 | 
						||
    float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
 | 
						||
 | 
						||
    // Make sure they are not immune to spells
 | 
						||
    if(PHS_TotalSpellImmunity(oTarget)) return;
 | 
						||
 | 
						||
    // Delcare effects
 | 
						||
    effect eUnsummonVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
 | 
						||
    effect eDispelVis = EffectVisualEffect(VFX_IMP_DISPEL);
 | 
						||
    effect eAC = EffectACIncrease(4, AC_DEFLECTION_BONUS);
 | 
						||
    effect eDur = EffectVisualEffect(nVFX);
 | 
						||
    effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
 | 
						||
 | 
						||
    effect eLink = EffectLinkEffects(eAC, eDur);
 | 
						||
    eLink = EffectLinkEffects(eAC, eCessate);
 | 
						||
 | 
						||
    // VS what alignment to make eLink?
 | 
						||
    if(bGoodEvil == TRUE)
 | 
						||
    {
 | 
						||
        eLink = VersusAlignmentEffect(eLink, ALIGNMENT_ALL, nAlignment);
 | 
						||
    }
 | 
						||
    else
 | 
						||
    {
 | 
						||
        eLink = VersusAlignmentEffect(eLink, nAlignment, ALIGNMENT_ALL);
 | 
						||
    }
 | 
						||
 | 
						||
    // Signal Spell cast at the target
 | 
						||
    PHS_SignalSpellCastAt(oTarget, nSpellId);
 | 
						||
 | 
						||
    // Check if they are an outsider of the specfified alignment
 | 
						||
    if(GetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
 | 
						||
    {
 | 
						||
        // We always try and "unsummon" even if they are not the correct alignment,
 | 
						||
        // as we don't want our paladin going up to a reformed demon, trying to
 | 
						||
        // dispel evil and actually dispelling an spell effect from them.
 | 
						||
 | 
						||
        if(bGoodEvil == TRUE)
 | 
						||
        {
 | 
						||
            if(GetAlignmentGoodEvil(oTarget) != nAlignment) return;
 | 
						||
        }
 | 
						||
        else
 | 
						||
        {
 | 
						||
            if(GetAlignmentLawChaos(oTarget) != nAlignment) return;
 | 
						||
        }
 | 
						||
 | 
						||
        // No special visual
 | 
						||
 | 
						||
        // PvP Check and touch result
 | 
						||
        // Touch attack required
 | 
						||
        if(!GetIsReactionTypeFriendly(oTarget) && PHS_SpellTouchAttack(PHS_TOUCH_MELEE, oTarget, TRUE))
 | 
						||
        {
 | 
						||
            // Spell Resistance + Immunity check
 | 
						||
            if(!PHS_SpellResistanceCheck(oCaster, oTarget))
 | 
						||
            {
 | 
						||
                // Saving throw check vs. will.
 | 
						||
                if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, nSaveType))
 | 
						||
                {
 | 
						||
                    // Um, go
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
    else
 | 
						||
    {
 | 
						||
        // Attempt to dispel evil naughty spells or those cast by evil casters
 | 
						||
        int bResult = FALSE;
 | 
						||
        if(bGoodEvil == TRUE)
 | 
						||
        {
 | 
						||
            bResult = PHS_DispelBestSpellFromGoodEvilAlignment(oTarget, nCasterLevel, nAlignment);
 | 
						||
        }
 | 
						||
        else
 | 
						||
        {
 | 
						||
            bResult = PHS_DispelBestSpellFromLawChaosAlignment(oTarget, nCasterLevel, nAlignment);
 | 
						||
        }
 | 
						||
        if(bResult == TRUE)
 | 
						||
        {
 | 
						||
            // Dispel VFX and thats it
 | 
						||
            PHS_ApplyVFX(oTarget, eDispelVis);
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        else if(bResult == 2)
 | 
						||
        {
 | 
						||
            // Failed to dispel
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        else
 | 
						||
        {
 | 
						||
            // We'll else apply the AC as normal
 | 
						||
            PHS_ApplyDuration(oTarget, eDur, fDuration);
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |