Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
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);
|
|
}
|