/* obiekt zegara napisany przez:
 * Sir Elvarona zbojcerza z Krainy Zgromadzenia
 */


inherit "/std/object";

#include <macros.h>
#include "/d/Imperium/sys/alarm.h"

/*
string *anoc=({ });
string *awczesny_ranek=({ });
string *aranek=({ });
string *apoludnie=({ });
string *apopoludnie=({ });
string *awieczor=({ });
string *apwieczor=({});
string *apolnoc=({});
string *aswit=({});
*/

#define PSWIT 0
#define PWRANEK 1
#define PRANEK 2
#define PPOLUDNIE 3
#define PPOPOLUDNIE 4
#define PWIECZOR 5
#define PPWIECZOR 6
#define PPOLNOC 7
#define PNOC 8


mixed t_pora_dnia = ({});

void dodaj_obiekt(string path, int znacznik);

public void
create_zegar()
{
  /*
    * zegar wywoluje w obiektach funkcje czas przy zmianie por dnia.
    * w obiekcie musi byc zdefiniowana funkcja:
    *   void czas(string str) { }
    * obiekt zegara jako parametr funkcji podaje stringa okreslajacego pore dnia
    * aby w obiekcie byla wywolywana funkcja czas naezy go tutaj dodac funkcja:
    *   dodaj_obiekt(obiekt,wrano,rano,poludnie,popoludnie,wieczor,noc);
    *      obiekt - sciezka do obiektu.
    *      pozostale flagi do wywolywania-> jezeli ktoras z nich zostanie
    *      ustawiona na 1 to przy zmianie na ta pore obiekcie bedzie
    *      wywolywana funkcja czas .
    * btw zegar moze wywolywac nastepny zegar.
    */
}


nomask void
create_object()
{
   int i;
   
   t_pora_dnia = allocate(9);
   for (i=0; i < 9; i++)
     t_pora_dnia[i] = ({});
   
   create_zegar();
}

void lista()
{
/*
 set_this_player(find_player("elvaron"));
 dump_array(anoc);
 dump_array(awczesny_ranek);
 dump_array(aranek);
 dump_array(apoludnie);  
 dump_array(apopoludnie);
 dump_array(awieczor);
 */
 dump_array(t_pora_dnia);
} 

void ping(string ob,string pora)
{

    int b = 0;
    object *clony, obiekt;
    obiekt = find_object(ob);
    
    if (!objectp(obiekt))
        return ;

    clony = object_clones(obiekt);
    clony+=({obiekt});
 

    while(b < sizeof(clony))
    {
        clony[b]->czas(pora);
        b++;
    }


}

void
czas(string str)
{
  mapping tmp = ([	"swit"		: PSWIT,
  			"ranek"		: PRANEK,
  			"wczesny ranek" : PWRANEK,
  			"poludnie"	: PPOLUDNIE,
  			"popoludnie"	: PPOPOLUDNIE,
  			"wieczor"	: PWIECZOR,
  			"pozny wieczor" : PPWIECZOR,
  			"polnoc"	: PPOLNOC,
  			"noc"		: PNOC,	]);
  			
 mixed pom = t_pora_dnia[tmp[str]];
 int i = 0, il = sizeof(pom);
 
 while (i < il)
 {
   set_alarm(0.3, 0.0, "ping", pom[i], str);
   i++;
 }
 
  /*
  switch(str) {

    case "wczesny ranek":
      while(a<sizeof(awczesny_ranek)) {
        set_alarm(0.3,0.0,"ping",awczesny_ranek[a],str);
        a++;
      }
    break;

    case "ranek":
      while(a<sizeof(aranek)) {
        set_alarm(0.3,0.0,"ping",aranek[a],str);
        a++;
      }
    break;    

    case "poludnie":
      while(a<sizeof(apoludnie)) {
        set_alarm(0.3,0.0,"ping",apoludnie[a],str);
        a++;
      }
    break;

    case "popoludnie":
      while(a<sizeof(apopoludnie)) {
        set_alarm(0.3,0.0,"ping",apopoludnie[a],str);
        a++;
      }
    break;

    case "wieczor":
      while(a<sizeof(awieczor)) {
        set_alarm(0.3,0.0,"ping",awieczor[a],str);
        a++;
      }
    break;

    case "noc":
      while(a<sizeof(anoc)) {
        set_alarm(0.3,0.0,"ping",anoc[a],str);
        a++;
      }
    break;
    
    case "swit":
      while(a<sizeof(aswit)) {
        set_alarm(0.3,0.0,"ping",aswit[a],str);
        a++;
      }
    break;
    
    case "pozny wieczor":
      while(a<sizeof(apwieczor)) {
        set_alarm(0.3,0.0,"ping",apwieczor[a],str);
        a++;
      }
    break;
    
    case "polnoc":
      while(a<sizeof(apolnoc)) {
        set_alarm(0.3,0.0,"ping",apolnoc[a],str);
        a++;
      }
    break;
  }    
  */
  
    log_file("alarm", ctime(time()) + ": to[" + sprintf("%O",this_object())
           + "], przez[" + sprintf("%O",previous_object()) + "], pora = "
           + str + "\n");
          
}


void dodaj_obiekt(mixed path, int znacznik)
 { 
   int *tmp = ({ A_SWIT, A_RANEK, A_WCZRANEK, A_POLUDNIE, 
   		 A_POPOLUDNIE, A_WIECZOR, A_PWIECZOR, A_POLNOC, A_NOC });
   int il = sizeof(tmp);
   mixed str;
   
     setuid();
     seteuid(getuid());
     
     
     //     path->zaladuj_sie();
     if (!objectp(path))
       if (!find_object(path))
       {
         log_file("BAD_OB_PING", ctime(time()) + ": " + path + "\n");
         if ((str=LOAD_ERR(path)))
           throw(str);
         path = find_object(path);
       }
   /*  
     if (znacznik & A_NOC) 	anoc += ({ path });
     if (znacznik & A_WCZRANEK) awczesny_ranek += ({ path });
     if (znacznik & A_RANEK)	aranek += ({ path });
     if (znacznik & A_POLUDNIE)	apoludnie += ({ path });
     if (znacznik & A_POPOLUDNIE) apopoludnie += ({ path });
     if (znacznik & A_WIECZOR)	awieczor += ({ path });
   */
   
    while (--il>=0)
      if (znacznik & tmp[il])
        t_pora_dnia[il] += ({ path });

    log_file("alarm", ctime(time()) + ": dodanie ob ="+
       sprintf("%O\n",path));
 } 


void
usun_obiekt(mixed path)
{
  int il = sizeof(t_pora_dnia);
  
  if (!path)
    return ;
    
  while (--il>=0)
    if (-1!=member_array(path, t_pora_dnia[il]))
    {
      t_pora_dnia[il] -= ({ path  });
      log_file("alarm",ctime(time()) + ": usuniecie ob ="+
        sprintf("%O",path)+"\n");
    }
}
