/* Plik:     npc_seq.c
 * Autor:    Borzoj
 * Data:     2.4.98
 * Last update:  17.6.98 by Tigr (kontynuowanie przerwanej sekwencji)
 * Opis:     npc dzialajacy wedlug sekwencji
*/

inherit "/d/Imperium/std/monster.c";
#include "macros.h"
#include "ss_types.h"
#include "/sys/stdproperties.h"
#define DELAY_STD 15.0
      
void seq_alarm();
int seq_init(int ilosc, float interwal, int powtarzac, string *czynnosci);
int seq_stop(int skonczone);
int seq_on();
void attacked_by(object ob);
int query_koniec();

int seq_id=0;
int seq_num=1;
int seq_pow=0;
int koniec=1;
float delay;
mixed *seq_array=({}); 
  
void 
seq_alarm()
{
  command(seq_array[seq_num]);
  if ((++seq_num)>seq_array[0]) 
  {
    seq_num=1;
    if (!seq_pow)
     {
       seq_stop(1);
     }
  }
}//seq_alarm

int 
seq_init(int ilosc, float interwal, int powtarzac, string *czynnosci)
{
  int i;
  if (koniec)
    {
      seq_array=allocate(ilosc+1);
      seq_array[0]=ilosc;
      for (i=0;i<ilosc;i++) seq_array[i+1]=czynnosci[i];
      seq_id=set_alarm(interwal,interwal,"seq_alarm");
      delay=interwal;
      seq_pow=powtarzac;
    }
  else
    {
      seq_restart();
    }
}//seq_init

void
seq_restart()
{
   if (!sizeof(seq_array)) return;
   if(!delay) delay = DELAY_STD;
   seq_id=set_alarm(0.0,delay,"seq_alarm");
}

int
query_koniec()
{
   return koniec;
}

int 
seq_stop(int skonczone)
{
  koniec = skonczone;
     if (seq_id) 
        {
          remove_alarm(seq_id);
          seq_id=0;
          return 1;
        }
      else
        {
          return 0;
        }      
}//seq_stop

int
seq_on()
{
  return seq_id;
}//seq_on

void
attacked_by(object ob)
{
  seq_stop(0);
  ::attacked_by(ob);
} //attacked_by

