PRC8/nwn/nwnprc/trunk/spells/sp_danclight.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

133 lines
4.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:://////////////////////////////////////////////
//:: Spell Name Dancing Lights
//:: Spell FileName sp_Danclight
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Dancing Lights
Evocation [Light]
Level: Brd 0, Sor/Wiz 0
Components: V, S
Casting Time: 1 standard action
Range: Medium (100 ft. + 10 ft./level)
Effect: Up to four lights, all within a 10-ft.-radius area
Duration: 1 minute (D)
Saving Throw: None
Spell Resistance: No
You create up to four glowing spheres of light (which look like will-o-wisps).
The dancing lights must stay within a 10-foot-radius area in relation to each
other. A light winks out if the distance between you and it
exceeds the spells range.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Gone for the wisp version.
4 wisps, with ghost effect, which stay around the caster if they can,
each 1.5M from the caster in each direction (each gets a set direction).
The distance thing easily works as dimension door, and suchlike, could be
used.
Oh, and why have tihs instead of the longer duration "light"? well, basically,
it is a lot more light :-) but only 1 minute's worth (or 2 extended)
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "prc_inc_spells"
void DestroyLights(object oTarget)
{
MyDestroyObject(GetLocalObject(oTarget, "DANCING_LIGHT"));
MyDestroyObject(GetLocalObject(oTarget, "DANCING_LIGHT_SET1"));
MyDestroyObject(GetLocalObject(oTarget, "DANCING_LIGHT_SET2"));
MyDestroyObject(GetLocalObject(oTarget, "DANCING_LIGHT_SET3"));
MyDestroyObject(GetLocalObject(oTarget, "DANCING_LIGHT_SET4"));
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
//Declare major variables
object oCaster = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
object oLight;
location lTarget;
string sResRef;
int bTargeted = FALSE;
int nMetaMagic = PRCGetMetaMagicFeat();
float fDuration = TurnsToSeconds(1); // Duration is 1 minute
if(nMetaMagic & METAMAGIC_EXTEND)
fDuration *= 2;
// Declare effect for the caster to check for and the light effect
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20);
eLight = EffectLinkEffects(eLight, EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE));
eLight = EffectLinkEffects(eLight, EffectCutsceneGhost());
eLight = SupernaturalEffect(eLight);
if(GetIsObjectValid(oTarget))
bTargeted = TRUE;
else
oTarget = oCaster;
lTarget = bTargeted ? GetLocation(oTarget) : PRCGetSpellTargetLocation();
// Remove previous castings
PRCRemoveEffectsFromSpell(oTarget, SPELL_DANCING_LIGHTS);
DestroyLights(oTarget);
// Signal Event
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_DANCING_LIGHTS, FALSE));
// New eDur effect on you
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, fDuration);
if(bTargeted)
{
sResRef = "prc_danclights";
string DANCING_LIGHT_SET = "DANCING_LIGHT_SET";
int nCnt;
// Create the 4 creatures (and set them in locals)
for(nCnt = 1; nCnt <= 4; nCnt++)
{
// Create the light
oLight = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lTarget);
// Set local on target (self)
SetLocalObject(oTarget, DANCING_LIGHT_SET + IntToString(nCnt), oLight);
// Set local on light for caster
SetLocalObject(oLight, "Caster", oCaster);
// Set local on light for target object
SetLocalObject(oLight, "Target", oTarget);
// Set local for the light number (1 = north, Etc, see "C" script)
SetLocalInt(oLight, DANCING_LIGHT_SET, nCnt);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oLight);
SetPlotFlag(oLight, TRUE);
// Force first heartbeat
ExecuteScript("sp_danclightcs", oLight);
}
}
else
{
sResRef = "prc_danclighth";
oLight = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lTarget);
SetLocalObject(oLight, "Caster", oCaster);
SetLocalObject(oCaster, "DANCING_LIGHT", oLight);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oLight);
SetPlotFlag(oLight, TRUE);
// Force first heartbeat
ExecuteScript("sp_danclightch", oLight);
AssignCommand(oLight, ActionRandomWalk());
}
PRCSetSchool();
}