forked from Jaysyn/PRC8
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);
|
||
}
|
||
}
|
||
}
|