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