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.
133 lines
4.7 KiB
Plaintext
133 lines
4.7 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: 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 spell’s 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();
|
||
}
|