92 lines
2.5 KiB
Plaintext
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);
|
||
|
}
|