inherit "/std/creature";
inherit "/std/combat/unarmed";
inherit "/std/act/attack";
inherit "/std/act/action";
inherit "/std/act/domove";

#include <stdproperties.h>
#include <macros.h>
#include <pl.h>
#include <filter_funs.h>
#include "/d/Imperium/sys/alarm.h"

#define TO  this_object()
#define TP  this_plyer()

private static mixed kiedy_npc = ({});
private mixed stare_miejsce = VOID;

int czy_npc_nie_wystepuje(string pora_d, string pora_r);

string jak_zpw = " umyka w poplochu.";
string jak_ps  = " przybywa.";
string jak_z   = " znika w poplochu.";

void
ustaw_stare_miejsce(mixed l)
{
  stare_miejsce = l;
}

mixed
query_stare_miejsce()
{
  return stare_miejsce;
}


int
czy_npc_nie_wystepuje(string pora_d, string pora_r)
{
  int i=0, il = sizeof(kiedy_npc);
  mapping pom = ([	"polnoc"	: A_POLNOC,
  			"swit"	 	: A_SWIT,
  			"ranek"         : A_RANEK,
  			"wczesny ranek" : A_WCZRANEK,
  			"poludnie"	: A_POLUDNIE,
  			"popoludnie"	: A_POPOLUDNIE,
  			"wieczor"	: A_WIECZOR,
  			"pozny wieczor"	: A_PWIECZOR,
  			"noc"		: A_NOC,		]);
  
  if (!il)
    return 0;
  
  while ((--il >= 0)&&(kiedy_npc[il][0] != pora_r));
  if (il<0)
    return 1;
  return !(pom[pora_d]&kiedy_npc[il][1]);
}

void
jak_pojawiac_sie(string jak)
{
    jak_ps = jak;
}

void
jak_znikac(string jak)
{
    jak_z = jak;
}

void
jak_znikac_podczas_walki(string jak)
{
    jak_zpw = jak;
}            

void
pora_znikac(string pora_d, mixed skad)
{
  // powiadommy innych ze nasz npc sie zbiera ....
  // miejmy nadzieje, ze z nikim nie walczy
  if (!query_attack())
  {
    tell_room(environment(this_object()), QCIMIE(this_object(), PL_MIA) +
        jak_z + "\n");
  }
  else
  {
    tell_room(environment(this_object()), QCIMIE(this_object(), PL_MIA) +
        jak_zpw + "\n");    
  }
  // przesuwamy naszego npc'a do pustki
  this_object()->move(VOID);
}

void
pora_pojawic_sie(string pora_d, mixed gdzie)
{
  // zawiadamiamy istoty w lokacji do ktorej przybedziemy....
  tell_room(gdzie, QCIMIE(this_object(), PL_MIA) + " " + jak_ps + "\n");
  this_object()->move(gdzie);
}

public void 
czas(string s)
{
  object ob = environment(this_object());
  if (czy_npc_nie_wystepuje(s, VOID->pora_roku()))
  {
    if ((ob!=VOID)&&ob)
    {
      stare_miejsce = ob;
      pora_znikac(s, ob);
    }
  }
  else
    if ((ob!=stare_miejsce)&&ob)
    {
      pora_pojawic_sie(s, stare_miejsce);
      stare_miejsce = VOID;
    }
}



void
ustaw_czas_wystepowania(mixed kiedy)
{
    kiedy_npc = kiedy;
    if (sizeof(kiedy))
      ALARM->dodaj_obiekt(this_object(), A_CALY_DZIEN);
}



int
remove_object()
{
  if (sizeof(kiedy_npc))
    ALARM -> usun_obiekt(this_object());
  return ::remove_object();
}

mixed
query_czas_wystepowania()
{
  return kiedy_npc + ({});
}

void
create_zwierze()
{
}

void
jakie_resztki()
{
    if (!random(5))
	add_leftover("/std/leftover", ({ "zab", "zeba", "zebowi", "zab",
	    "zebem", "zebie" }), ({ "zeby", "zebow", "zebom", "zeby", "zebami",
	    "zebach" }), PL_MESKI_NOS_NZYW, random(5) + 1, 0, 1, 0);	  
    if (!random(5))
	add_leftover("/std/leftover", ({ "czaszka", "czaszki", "czaszce", 
	    "czaszke", "czaszka", "czaszce" }), ({ "czaszki", "czaszek",
	    "czaszkom", "czaszki", "czaszkami", "czaszkach" }), PL_ZENSKI,
	    1, 0, 1, 1);
    if (!random(5))
	add_leftover("/std/leftover", ({ "kosc", "kosci", "kosci", "kosc",
	    "koscia", "kosci" }), ({ "kosci", "kosci", "kosciom", "kosci", 
	    "koscmi", "kosciach" }), PL_ZENSKI, 2, 0, 1, 1);	    
    if (!random(5))
        add_leftover("/std/leftover", ({ "ucho", "ucha", "uchu", "ucho",
            "uchem", "uchu" }), ({ "uszy", "uszu", "uszom", "uszy", 
            "uszami", "uszach" }), PL_NIJAKI_OS, 2, 0, 0, 0);
    if (!random(5))
	add_leftover("/std/leftover", ({ "serce", "serca", "sercu", "serce",
	    "sercem", "sercu" }), ({ "serca", "serc", "sercom", "serca",
	    "sercami", "sercach" }), PL_NIJAKI_NOS, 1, 0, 0, 1);
    if (!random(5))
	add_leftover("/std/leftover", ({ "nerka", "nerki", "nerce", "nerke",
	    "nerka", "nerce" }), ({ "nerki", "nerek", "nerkom", "nerki",
	    "nerkami", "nerkach" }), PL_ZENSKI, 2, 0, 0, 1);
    add_leftover("/std/leftover", ({ "oko", "oka", "oku", "oko", "okiem",
        "oku" }), ({ "oczy", "oczu", "oczom", "oczy", "oczami", "oczach" }),
        PL_NIJAKI_OS, 2, 0, 0, 0);
}

void
create_creature()
{
    jakie_resztki();
    dodaj_nazwy( ({"zwierze","zwierzecia","zwierzeciu","zwierze",
                   "zwierzeciem","zwierzeciu"}), 
                 ({"zwierzecia","zwierzeci","zwierzeciom","zwierzecia",
                   "zwierzeciami","zwierzeciach"}),
                 PL_NIJAKI_NOS);
    
    add_prop(LIVE_I_NEVERKNOWN,1);

    create_zwierze();
}

