PRC8_fork/trunk/smp/phs_s_magiccirc.nss

77 lines
3.0 KiB
Plaintext
Raw Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Magic Circle against Chaos
//:: Spell FileName PHS_S_MagicCirC
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Abjuration [Lawful]
Level: Clr 3, Law 3, Pal 3, Sor/Wiz 3
Components: V, S, DF
Casting Time: 1 standard action
Range: Touch
Area: 3.33-M.-radius emanation from touched creature
Duration: 10 min./level
Saving Throw: Will negates (harmless)
Spell Resistance: No; see text
All creatures within the area gain the effects of a protection from chaos
spell, gaining +2 AC, +2 saves and immunity to possession by chaotic
creatures.
In addition, no nonlawful summoned creatures can enter the area either.
You must overcome a creature<72>s spell resistance in order to keep it at bay,
but the deflection and resistance bonuses and the protection from mental
control apply regardless of enemies<65> spell resistance. If the summoned
creature is already in the area when the spell then they ignore the
resistance check. The protection against summoned creatures ends if the
warded creature makes an attack against or tries to force the barrier
against the blocked creature.
This spell is not cumulative with protection from chaos and vice versa.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
AOE placed on the target.
The On Enter will do pushback and apply effects. It applies it to ALL creatures.
Only outsiders and summoned creatures will be affected by the pushback.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check.
if(!PHS_SpellHookCheck(PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS)) return;
//Declare major variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
// 10 minutes/level duration
float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel * 10, nMetaMagic);
// Declare effects
effect eAOE = EffectAreaOfEffect(PHS_AOE_MOB_MAGCIR_CHAOS);
// Signal spell cast at event
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS, FALSE);
// Remove previous castings
PHS_RemoveSpecificEffectFromSpell(EFFECT_TYPE_AREA_OF_EFFECT, PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS, oTarget);
// Set local integer so that the first ones will not be affected, which
// is removed after 1.0 seconds.
string sLocal = PHS_MOVING_BARRIER_START + IntToString(PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS);
SetLocalInt(oCaster, sLocal, TRUE);
DelayCommand(1.0, DeleteLocalInt(oCaster, sLocal));
// Apply effects
PHS_ApplyDuration(oTarget, eAOE, fDuration);
}