PRC8/nwn/nwnprc/trunk/spells/sp_danclightcs.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.5 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Dancing Lights - Heartbeat
//:: Spell FileName sp_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 "prc_inc_spells"
//#include "PHS_AI_INCLUDE"
void main()
{
// Check if caster is valid and in range
object oCaster = GetLocalObject(OBJECT_SELF, "Caster");
object oTarget = GetLocalObject(OBJECT_SELF, "Target");
// Check if valid & in 20M & still got spell effects
if(!GetIsObjectValid(oCaster) || (GetIsObjectValid(oTarget) &&
(GetDistanceToObject(oTarget) > 20.0 ||
!GetHasSpellEffect(SPELL_DANCING_LIGHTS, oTarget))) ||
!GetHasSpellEffect(SPELL_DANCING_LIGHTS, OBJECT_SELF))
{
SetPlotFlag(OBJECT_SELF, FALSE);
MyDestroyObject(OBJECT_SELF);
return;
}
// If valid and so forth, move to respective position
int nNumber = GetLocalInt(OBJECT_SELF, "DANCING_LIGHT_SET");
vector vCaster = GetPosition(oTarget);
float fNewX;
float fNewY;
// Check iNumber
if(nNumber == FALSE)
{
SetPlotFlag(OBJECT_SELF, FALSE);
MyDestroyObject(OBJECT_SELF);
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
{
SetPlotFlag(OBJECT_SELF, FALSE);
MyDestroyObject(OBJECT_SELF);
return;
}
vector vTotal = Vector(fNewX, fNewY, vCaster.z);
// Finalise location
location lMove = Location(GetArea(OBJECT_SELF), vTotal, 0.0);
// Move to location
ClearAllActions();
ActionMoveToLocation(lMove, TRUE);
//Follow the target
ActionForceFollowObject(oTarget, 1.5f);
}