inherit "/std/creature";
//inherit "/std/combat/unarmed";
inherit "/std/act/attack";
inherit "/std/act/action";
inherit "/std/act/domove";
inherit "/std/act/add_things";
inherit "/std/act/chat";
inherit "/std/act/asking";
//inherit "/std/combat/humunarmed";
inherit "/std/act/ranpick";

#include <stdproperties.h>
#include <macros.h>
#include <money.h>
#include <pl.h>
#include <filter_funs.h>
#include "/d/Imperium/sys/alarm.h"

#define TO  this_object()
#define TP  this_plyer()

#define IMPERIUM_I_STWOR_CHAOSU		"_imperium_i_stwor_chaosu"

mixed kiedy_npc = ({});
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.";

int ile_uciekamy, czy_chowac_sie;


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 j=0, jl, i=0, il = sizeof(kiedy_npc);
  if (!il)
    return 0;

  while ((--il >= 0)&&(kiedy_npc[il][0] != pora_r));
  if (il<0) return 1;
  jl = sizeof(kiedy_npc[il][1]);
  while ((--jl >=0)&&(kiedy_npc[il][1][jl] != pora_d));
  if (jl<0) return 1;
  return 0;
}

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 == VOID)&&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());
}



int
remove_object()
{
  if (sizeof(kiedy_npc))
    ALARM -> usun_obiekt(this_object());
  return ::remove_object();
}


mixed
query_czas_wystepowania()
{
  return kiedy_npc;
}

int
query_czy_dni_noce()
{
  if(sizeof(kiedy_npc[0][1]) == 9) return 1;
  if(sizeof(kiedy_npc) != 4) return 0;
  if(sizeof(kiedy_npc[3][1]) == 5) return 1;
  if(sizeof(kiedy_npc[3][1]) == 4) return 1;
  return 0;
}  

void
create_undead()
{
}

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", ({ "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( ({"nieumarly","nieumarlego","nieumarlemu","nieumarlego",
      "nieumarlym","nieumarlym"}),
      ({"nieumarli","nieumarlych","nieumarlym","nieumarlych",
      "nieumarlymi","nieumarlych"}),
                 PL_MESKI_NOS_ZYW);
    
    add_prop(LIVE_I_NEVERKNOWN,1);

    add_prop(IMPERIUM_I_STWOR_CHAOSU, 1);

    create_undead();
}

public void
run_away()
{
    int i;
    for(i = 0; i < ile_uciekamy; i++)
     ::run_away();
    if(czy_chowac_sie)
      command("schowaj sie");
}                                                            

// Pozwala na ucieczke na wiecej niz 1 lokacje

public void
ustaw_whimpy(int flag, int ile = 1, int czy = 0)
{
    ile_uciekamy = ile;
    czy_chowac_sie = czy;
    ::set_whimpy(flag);
}
   
    
/*
 * Description:  Use the combat file for generic tools
 */
public string 
query_combat_file() 
{
    return "/std/combat/chumanoid"; 
}

/*
 * Function name:  default_config_npc
 * Description:    Sets all neccessary values for this npc to function
 */
varargs public void
default_config_npc(int lvl)
{
    default_config_creature(lvl);
}

void
dodaj_miedz(int ile)
{
    MONEY_MAKE_CC(ile)->move(this_object());
}


void
dodaj_srebro(int ile)
{
    MONEY_MAKE_SC(ile)->move(this_object());
}


void
dodaj_zloto(int ile)
{
    MONEY_MAKE_GC(ile)->move(this_object());
}

