/* Plik:     kucharka.c
 * Autor:    Borzoj
 * Data:     24.4.98
 * Opis:     kucharka z domu wojta do Dimenau
 * Poprawki: Tigr
 * Update:   5.05.98
*/

#include "tigr.h"
inherit TPATH + "/npc/npc_seq.c";

#define STOL TPATH+"/obj/stol.c"

#define KUCHARKA_SPI 1
#define KUCHARKA_WSTAJE 2
#define KUCHARKA_PRACUJE 3
#define KUCHARKA_IDZIE_SPAC 4
#define KUCHARKA_WALCZY 5

#define ILE_SEQ_KUCHARKA_WSTAJE 5
#define SEQ_KUCHARKA_WSTAJE ({"emote siada na lozku.","przeciagnij \
sie","zaloz wszystko","polnoc","emote zaczyna przygotowywac posilek."})

#define ILE_SEQ_KUCHARKA_IDZIE_SPAC 5
#define SEQ_KUCHARKA_IDZIE_SPAC ({"emote odklada produkty ktore trzyma \
w rekach.","emote wyciera rece w fartuch.","poludnie","zdejmij \
wszystko","emote kladzie sie i usypia."})

#define ILE_SEQ_KUCHARKA_PRACUJE_1 4
#define SEQ_KUCHARKA_PRACUJE_1 ({"emote bierze noz ze stolu.","emote bierze \
do reki marchewke.","emote kroi warzywo na cienkie plasterki.","emote \
odklada noz."})

#define ILE_SEQ_KUCHARKA_PRACUJE_2 4
#define SEQ_KUCHARKA_PRACUJE_2 ({"emote bierze do reki \
garnek.","emote napelnia garnek woda.","emote stawia garnek na \
piecu.","emote wyciera rece."})

#define ILE_SEQ_KUCHARKA_PRACUJE_3 4
#define SEQ_KUCHARKA_PRACUJE_3 ({"emote podchodzi do pieca.","emote \
podnosi pokrywe garnka.","emote nabiera lyzka potrawy z garnka i \
smakuje ja.","hmm"})


void dzialania();
void ustaw_stan(int jaki);
string dlugi_opis();


int stan_kucharki;
int czy_walczy;
string bron;
object tasak;

sklonuj_bron()
{
   mixed inv;
   int i;
   
   tasak = clone_object(bron);
   
   /* Musimy wyrzucic poprzedni tasak, jesli klonujemy bron na nowo... */
   if (find_object(STOL)) 
      {
        inv = all_inventory(find_object(STOL));
   
        for(i=0;i<sizeof(inv);i++)
           {
              if (inv[i]->query_tasak()) 
                 { 
                   inv[i]->remove_object();
                 }
           }
      }
   
   tasak->move(STOL,1);
}
przywolaj_bron()
{
   if (!tasak) 
      { 
         write("Powstal blad 'Brak Tasaka'. Zglos go w tej lokacji, uzywajac " +
         	"komendy 'zglos blad'\n");
         return 0;
      }
   
   if (environment(tasak)!=find_object(STOL))
      return 1;
   
   tasak->move(this_object(),1);
}

odeslij_bron()
{
   if (!tasak) 
      { 
         write("Powstal blad 'Brak Tasaka'. Zglos go w tej lokacji, uzywajac " +
         	"komendy 'zglos blad'\n");
         return 0;
      }
   
   if (environment(tasak)!=this_object())
      return 1;
   
   tasak->move(STOL,1);
}

ustaw_bron(string str)
{
   bron = str;
}

create_monster()
{
  dodaj_nazwy(({"kucharka","kucharki","kucharce","kucharke","kucharka",
    "kucharce"}),({"kucharki","kucharek","kucharkom","kucharki",
    "kucharkami","kucharkach"}),PL_ZENSKI);
  
  set_gender(G_FEMALE);
  ustaw_odmiane_rasy(PL_CZLOWIEK);
  
  dodaj_przym("drobny","drobni");
  dodaj_przym("siwiejacy","siwiejacy");
  
  add_prop(CONT_I_WEIGHT,50000); //waga
  add_prop(CONT_I_HEIGHT,165); //wzrost
  add_prop(LIVE_I_NEVERKNOWN, 1);
  add_prop(NPC_M_NO_ACCEPT_GIVE,1);
  
  set_alignment(55);
  set_long("@@dlugi_opis");
  set_stats(({45,45,45,35,35,45})); //str,dex,con,int,wis,dis

  setuid();
  seteuid(getuid());
  
  set_skill(SS_WEP_AXE, 15);
  set_skill(SS_DEFENCE, 17);
  set_skill(SS_PARRY, 13);

  ustaw_bron(TPATH + "/bronie/bron_kuch.c");
  
  dodaj_miedz(10 + random(4));
  dodaj_srebro(3 + random(2));
  
  set_alarm(10.0,60.0,dzialania);
} //create_monster

string dlugi_opis()
{
  string temp="";
  temp+="Widzisz kobiete drobnej postury ubrana w prosty stroj, o "+
    "kolorze i kroju tak zwyczajnym, ze nic na jego temat nie mozna "+
    "powiedziec. Nie jest juz mloda - jej wlosy maja slady siwizny "+ 
    "a na twarzy widac pajeczyne drobnych zmarszczek.\n";
  switch (stan_kucharki)
  {
     case KUCHARKA_SPI:
       temp+="Lezy na lozku i spokojnie spi.";
       break;
     case KUCHARKA_WSTAJE:
       temp+="Wyglada jakby wlasnie wstala i resztki snu jeszcze jej "+ 
         "nie opuscily.";
       break;
     case KUCHARKA_PRACUJE:
       temp+="Wyglada na strasznie zajeta - szybko chodzi po kuchni, "+
         "co chwile bierze do reki jakies produkty, kroi je, myje "+
         "wklada do garnkow.";
       break;
     case KUCHARKA_IDZIE_SPAC:
       temp+="Widac, ze jej dzien zbliza sie ku koncowi - posprzatala "+
         "kuchnie i teraz przygotowuje sie do snu.";
       break;
     case KUCHARKA_WALCZY:
        temp+="Jest zajeta bronieniem swego zycia.";
        break;
  }
  temp+="\n";
  return temp;
} // dlugi_opis

void 
dzialania()
{
  int k=0;
  int wal;
  
  if (czy_walczy)
       {
          wal = objectp(query_attack());
          if (!wal) {stop_fight(query_enemy(-1));};
       }
  else                          
    {
     switch (stan_kucharki)
        {
           case KUCHARKA_SPI:
              if (environment()->czy_jasno())
                 {
                   seq_init(ILE_SEQ_KUCHARKA_WSTAJE,15.0,0,SEQ_KUCHARKA_WSTAJE);
                   stan_kucharki=KUCHARKA_WSTAJE;
                   remove_prop(LIVE_S_EXTRA_SHORT);
                 }
              break;  
            case KUCHARKA_WSTAJE:
              if (!seq_on())
                 {
                   if (query_koniec())
                      {
                        stan_kucharki=KUCHARKA_PRACUJE;
                        command("emote odklada tasak na stol.");
                        odeslij_bron();
                      }
                   else
                      {
                         seq_restart();
                      }
                  }
               break;
             case KUCHARKA_PRACUJE:
               if ((environment()->czy_jasno())&(!seq_on()))
                  {
                     if (query_koniec())
                        {
                          k=random(20);
                          switch (k)
                             { 
                               case 0:
                                 seq_init(ILE_SEQ_KUCHARKA_PRACUJE_1,
                                 10.0,0,SEQ_KUCHARKA_PRACUJE_1);
                                 break;
                               case 1:
                                 seq_init(ILE_SEQ_KUCHARKA_PRACUJE_2,
                                 10.0,0,SEQ_KUCHARKA_PRACUJE_2);
                                 break;
                               case 2:
                                 seq_init(ILE_SEQ_KUCHARKA_PRACUJE_3,
                                 10.0,0,SEQ_KUCHARKA_PRACUJE_3);
                                 break;
                             }
                        }
                     else
                        {
                          seq_restart();
                        }
                  }
               if ( (!(environment()->czy_jasno())) & (!seq_on()) )
                  {
                    if (query_koniec())
                       {
                         seq_init(ILE_SEQ_KUCHARKA_IDZIE_SPAC,
                         15.0,0,SEQ_KUCHARKA_IDZIE_SPAC);
                         stan_kucharki=KUCHARKA_IDZIE_SPAC;
                         command("emote bierze tasak ze stolu.");
                         przywolaj_bron();
                       }
                    else 
                       {
                         seq_restart();
                       }
                  }
               break;
             case KUCHARKA_IDZIE_SPAC:
               if (!seq_on())
                  {
                     if (query_koniec())
                        {
                           stan_kucharki=KUCHARKA_SPI;
                           add_prop(LIVE_S_EXTRA_SHORT," spiaca na lozku");  
                        }
                     else
                        {
                          seq_restart();
                        }
                  }
               break;
             default:
        }
    }
} //dzialania

int
ustaw_stan(int jaki)
{
  stan_kucharki=jaki;
}// ustaw_stan

void
attacked_by(object wrog)
{
   if (stan_kucharki==KUCHARKA_SPI)
      {
         stan_kucharki=KUCHARKA_WALCZY;
         remove_prop(LIVE_S_EXTRA_SHORT);
         command("emote wskakuje z lozka.");
      }
   else
      {
         if (stan_kucharki==KUCHARKA_PRACUJE) 
            {
              command("emote chwyta ze stolu ostry i niebezpieczny tasak.");
              przywolaj_bron();
            }
      }
   command("krzyknij Pomocy!");
   command("dobadz broni");
   czy_walczy++;
   ::attacked_by(wrog);
}

stop_fight(mixed elist)
{
   command("opusc bron");
   if (stan_kucharki==KUCHARKA_WALCZY)
      {
         command("emote uklada sie do snu i zasypia.");
         add_prop(LIVE_S_EXTRA_SHORT," spiaca na lozku");  
         stan_kucharki==KUCHARKA_SPI;
      }
   else
     if (stan_kucharki==KUCHARKA_PRACUJE) 
      {
         command("emote odklada tasak na stol.");
         odeslij_bron();
      }
   if (objectp(elist))
      { czy_walczy--;}
   else { czy_walczy = czy_walczy-sizeof(elist);}
   ::stop_fight(elist);
}

int
query_kucharka()
{
   return 1;
}
int
query_stan()
{
   return stan_kucharki;
}