forked from Jaysyn/PRC8
113 lines
4.4 KiB
Plaintext
113 lines
4.4 KiB
Plaintext
|
/*:://////////////////////////////////////////////
|
|||
|
//:: Spell Name Song of Discord
|
|||
|
//:: Spell FileName PHS_S_SongOfDisc
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: In Game Spell desctiption
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
Enchantment (Compulsion) [Mind-Affecting, Sonic]
|
|||
|
Level: Brd 5
|
|||
|
Components: V, S
|
|||
|
Casting Time: 1 standard action
|
|||
|
Range: Medium (20M)
|
|||
|
Area: Creatures within a 6.67-M.-radius spread
|
|||
|
Duration: 1 round/level
|
|||
|
Saving Throw: Will negates
|
|||
|
Spell Resistance: Yes
|
|||
|
|
|||
|
This spell causes those within the area to turn on each other rather than
|
|||
|
attack their foes, applying a confusion-like effect onto thier minds. Each
|
|||
|
affected creature has a 50% chance to attack the nearest target each round.
|
|||
|
(Roll to determine each creature<72>s behavior every round at the beginning of
|
|||
|
its turn.) A creature that does not attack its nearest neighbor is free to
|
|||
|
act normally for that round.
|
|||
|
|
|||
|
Creatures forced by a song of discord to attack their fellows employ all
|
|||
|
methods at their disposal, choosing their deadliest spells and most
|
|||
|
advantageous combat tactics. They do not, however, harm targets that have
|
|||
|
fallen unconscious.
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Spell Effects Applied / Notes
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
Uses EffectConfusion and changes the confusion heartbeat.
|
|||
|
|
|||
|
50% chance of them attacking the nearest target - uses another script to
|
|||
|
choose either ranged attacks, melee attacks, or thier best spell to cast
|
|||
|
against the nearest target (dispite if it'll affect them or not)
|
|||
|
|
|||
|
Can affect allies!
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Created By: Jasperre
|
|||
|
//::////////////////////////////////////////////*/
|
|||
|
|
|||
|
#include "PHS_INC_SPELLS"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
// Spell Hook Check
|
|||
|
if(!PHS_SpellHookCheck(PHS_SPELL_SONG_OF_DISCORD)) return;
|
|||
|
|
|||
|
// Declare major variables
|
|||
|
object oCaster = OBJECT_SELF;
|
|||
|
location lTarget = GetSpellTargetLocation();
|
|||
|
object oTarget;
|
|||
|
int nCasterLevel = PHS_GetCasterLevel();
|
|||
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|||
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|||
|
float fDelay;
|
|||
|
|
|||
|
// 1 round/level duration.
|
|||
|
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
|
|||
|
|
|||
|
// Declare effects
|
|||
|
effect eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S);
|
|||
|
effect eConfuse = EffectConfused();
|
|||
|
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
|||
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|||
|
|
|||
|
// Link duration VFX and confusion effects
|
|||
|
effect eLink = EffectLinkEffects(eDur, eConfuse);
|
|||
|
eLink = EffectLinkEffects(eLink, eCessate);
|
|||
|
|
|||
|
// Apply AOE visual
|
|||
|
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
|
|||
|
PHS_ApplyLocationVFX(lTarget, eImpact);
|
|||
|
|
|||
|
// Search through target area
|
|||
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 6.67, lTarget);
|
|||
|
while(GetIsObjectValid(oTarget))
|
|||
|
{
|
|||
|
// PvP check
|
|||
|
if(GetIsReactionTypeHostile(oTarget))
|
|||
|
{
|
|||
|
// Fire cast spell at event for the specified target
|
|||
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_SONG_OF_DISCORD);
|
|||
|
|
|||
|
// Must be able to hear
|
|||
|
if(PHS_GetCanHear(oTarget))
|
|||
|
{
|
|||
|
// Get a random short delay
|
|||
|
fDelay = PHS_GetRandomDelay(0.1, 0.5);
|
|||
|
|
|||
|
// Check spell resistance and immunity
|
|||
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|||
|
{
|
|||
|
// Check mind immunity and confusion immunity
|
|||
|
if(!PHS_ImmunityCheck(oTarget, IMMUNITY_TYPE_CONFUSED, fDelay, oCaster) &&
|
|||
|
!PHS_ImmunityCheck(oTarget, IMMUNITY_TYPE_MIND_SPELLS, fDelay, oCaster))
|
|||
|
{
|
|||
|
// Make Will Save against Mind spells
|
|||
|
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_MIND_SPELLS, oCaster, fDelay))
|
|||
|
{
|
|||
|
// Apply effecs
|
|||
|
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eVis));
|
|||
|
PHS_ApplyDuration(oTarget, eLink, fDuration);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
// Get next target in the shape
|
|||
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 6.67, lTarget);
|
|||
|
}
|
|||
|
}
|