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.
124 lines
4.7 KiB
Plaintext
124 lines
4.7 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Calm Emotions
|
|
//:: Spell FileName SMP_S_CalmEmot
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Calm Emotions
|
|
Enchantment (Compulsion) [Mind-Affecting]
|
|
Level: Brd 2, Clr 2, Law 2
|
|
Components: V, S, DF
|
|
Casting Time: 1 standard action
|
|
Range: Medium (20M)
|
|
Area: All Creatures in a 6.67-M.-radius spread
|
|
Duration: Concentration, up to 1 round/level (D)
|
|
Saving Throw: Will negates
|
|
Spell Resistance: Yes
|
|
|
|
This spell calms agitated creatures. You have no control over the affected
|
|
creatures, but calm emotions can stop raging creatures from fighting or
|
|
joyous ones from reveling. Creatures so affected cannot take violent actions
|
|
or do anything destructive, and act as if dazed by sudden calmness. Any
|
|
aggressive action against or damage dealt to a calmed creature immediately
|
|
breaks the spell on all calmed creatures.
|
|
|
|
This spell automatically suppresses any fear or confusion condition on all
|
|
targets. While the spell lasts, a suppressed spell or effect has no effect.
|
|
When the calm emotions spell ends, the original spell or effect takes hold
|
|
of the creature again, provided that its duration has not expired in the
|
|
meantime.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
NOTE: Concentration not tested!
|
|
|
|
Uses a Dazed effect.
|
|
|
|
Confusion is NOT removed, nor is Fear.
|
|
|
|
This uses new calm functions to make sure the targets are not attacked (and
|
|
if are, the spell effects are removed).
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "SMP_INC_CONCENTR"
|
|
#include "SMP_INC_CALM"
|
|
|
|
void main()
|
|
{
|
|
// If we are concentrating, and cast at the same spot, we set the integer
|
|
// for the hypnotic pattern up by one.
|
|
object oCaster = OBJECT_SELF;
|
|
location lTarget = GetSpellTargetLocation();
|
|
|
|
// Check the function
|
|
if(SMP_ConcentatingContinueCheck(SMP_SPELL_CALM_EMOTIONS, lTarget, SMP_AOE_TAG_PER_CALM_EMOTIONS, 18.0, oCaster)) return;
|
|
|
|
// Else, new spell!
|
|
|
|
// Spell Hook Check.
|
|
if(!SMP_SpellHookCheck()) return;
|
|
|
|
// Declare major variables
|
|
object oTarget;
|
|
int nCasterLevel = SMP_GetCasterLevel();
|
|
int nSpellSaveDC = SMP_GetSpellSaveDC();
|
|
int nMetaMagic = SMP_GetMetaMagicFeat();
|
|
float fDelay, fDistance;
|
|
|
|
// We set the "Concentration" thing to 18 seconds
|
|
// This also returns the array we set people affected to, and does the new
|
|
// action.
|
|
string sArrayLocal = SMP_ConcentatingStart(SMP_SPELL_CALM_EMOTIONS, nCasterLevel, lTarget, SMP_AOE_PER_CALM_EMOTIONS);
|
|
int nArrayCount;
|
|
|
|
// Note on duration: We apply it permamently, however, it will definatly
|
|
// be removed by the AOE.
|
|
|
|
// Declare Effects
|
|
effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S);
|
|
effect eDaze = EffectDazed();
|
|
effect eDazeDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
|
|
// Link effects
|
|
effect eLink = EffectLinkEffects(eDaze, eDazeDur);
|
|
eLink = EffectLinkEffects(eLink, eCessate);
|
|
|
|
// Get the first target in the spell area
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 6.67, lTarget, TRUE);
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// Make faction check to ignore allies
|
|
if(!GetIsReactionTypeFriendly(oTarget) &&
|
|
// Make sure they are not immune to spells
|
|
!SMP_TotalSpellImmunity(oTarget))
|
|
{
|
|
// Fire cast spell at event for the specified target
|
|
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_CALM_EMOTIONS);
|
|
|
|
// Make SR check
|
|
if(!SMP_SpellResistanceCheck(oCaster, oTarget, fDelay) &&
|
|
!SMP_ImmunityCheck(oTarget, IMMUNITY_TYPE_DAZED, fDelay) &&
|
|
!SMP_ImmunityCheck(oTarget, IMMUNITY_TYPE_MIND_SPELLS, fDelay))
|
|
{
|
|
// Will saving throw
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_MIND_SPELLS, oCaster, fDelay))
|
|
{
|
|
// Add to the array
|
|
nArrayCount++;
|
|
SetLocalObject(oCaster, sArrayLocal + IntToString(nArrayCount), oTarget);
|
|
|
|
// Apply effects
|
|
SMP_SetCalm(oTarget);
|
|
SMP_ApplyPermanentAndVFX(oTarget, eVis, eLink);
|
|
}
|
|
}
|
|
}
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 6.67, lTarget, TRUE);
|
|
}
|
|
// Set the max people in the array
|
|
SetLocalInt(oCaster, sArrayLocal, nArrayCount);
|
|
}
|