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);
 | ||
|         }
 | ||
|     }
 | ||
| }
 |