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.
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’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);
|
||
}
|
||
}
|