PRC8_fork/nwn/nwnprc/trunk/smp/phs_s_danclightc.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

92 lines
2.4 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Dancing Lights - Heartbeat
//:: Spell FileName PHS_S_DanclightC
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Moves them to a cirtain place depending on their tag.
Basically, 1 is north, 2 east, 3 south, 4 west.
Moves there. If caster gets out of 20M away, it winks out.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
#include "PHS_AI_INCLUDE"
void main()
{
// Check if caster is valid and in range
object oCaster = GetLocalObject(OBJECT_SELF, PHS_MASTER);
// Check if valid & in 20M & still got spell effects
if(!GetIsObjectValid(oCaster) || GetDistanceToObject(oCaster) > 20.0 ||
!GetHasSpellEffect(PHS_SPELL_DANCING_LIGHTS, oCaster))
{
PHSAI_DestroySelf();
return;
}
// Set up us if not already
if(!GetLocalInt(OBJECT_SELF, "DO_ONCE"))
{
SetLocalInt(OBJECT_SELF, "DO_ONCE", TRUE);
// Ghost effect
effect eGhost = SupernaturalEffect(EffectCutsceneGhost());
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF);
}
// If valid and so forth, move to respective position
int nNumber = GetLocalInt(OBJECT_SELF, "PHS_DANCING_LIGHT_SET");
vector vCaster = GetPosition(oCaster);
float fNewX;
float fNewY;
// Check iNumber
if(nNumber == FALSE)
{
PHSAI_DestroySelf();
return;
}
// Move to position 1 = north
else if(nNumber == 1)
{
// +1.5 in Y /\
fNewX = vCaster.x;
fNewY = vCaster.y + 1.5;
}
// 2 = east
else if(nNumber == 2)
{
// +1.5 in X ->
fNewX = vCaster.x + 1.5;
fNewY = vCaster.y;
}
// 3 = south
else if(nNumber == 3)
{
// -1.5 in Y \/
fNewX = vCaster.x;
fNewY = vCaster.y - 1.5;
}
// 4 = west
else if(nNumber == 4)
{
// -1.5 in X <-
fNewX = vCaster.x - 1.5;
fNewY = vCaster.y;
}
else // Invalid if over 4
{
PHSAI_DestroySelf();
return;
}
vector vTotal = Vector(fNewX, fNewY, vCaster.z);
// Finalise location
location lMove = Location(GetArea(oCaster), vTotal, 0.0);
// Move to location
ClearAllActions();
ActionMoveToLocation(lMove, TRUE);
}