/*
 * Fryzjer z Athel Loren
 */


#include "ogolne.h"
#include <money.h>

#define CENA_LESNYCH 1000
#define OPIS_CENY_LESNYCH "1000 miedziakow !"

#define CENA_INNYCH 2400
#define OPIS_CENY_INNYCH "10 zlotych monet !"

inherit PATH + "npc/npcathel.c";

#include "spis_fryzur.h"
#include "lelf.h"

void
create_elfa()
{
    ustaw_imie (({"Telendil", "Telendila",
    		  "Telendilowi", "Telendila",
    		  "Telendilem", "Telendilu"}));
    dodaj_nazwy(({"telendil", "telendila",
    		  "telendilowi", "telendila",
    		  "telendilem", "telendilu"}),
                ({"telendil", "telendila",
    		  "telendilowi", "telendila",
    		  "telendilem", "telendilu"}),PL_MESKI_OS);

    dodaj_nazwy(({"fryzjer", "fryzjera","fryzjerowi", "fryzjera",
    		  "fryzjerem", "fryzjerze"}), 
    		({"fryzjerzy", "fryzjerow","fryzjerom", "fryzjerow",
    		  "fryzjerami", "fryzjerach"}), PL_MESKI_OS);

    set_long("Wysoki, brazowooki elf. Jest chudy nawet jak na elfa, lecz sprawia wrazenie dosc silnego. "
        + "Wyglada na tutejszego fryzjera. Nosi zwykle, skorzane ubranie, "
        + "a na brzuchu ma dlugi, rowniez skorzany fartuch. W kieszeniach ma brzytwe, grzebien "
        + "i inne przyrzady uzywane przez niego w pracy.\n");

    dodaj_przym ("wysoki","wysocy");
    dodaj_przym ("brazowooki","brazowoocy");

    set_gender(G_MALE);
    
    add_prop(LIVE_I_NO_CORPSE, 1);
 
    add_prop(OBJ_M_NO_ATTACK, "Nie mozesz zaatakowac fryzjera ! Kto zajalby sie po jego smierci zakladem ?\n");   
    add_prop(CONT_I_WEIGHT, 40000);
    add_prop(CONT_I_HEIGHT, 190);
    
    set_skill(SS_DEFENCE, 15 + random(10));
    set_skill(SS_UNARM_COMBAT, 20 + random(10));
    set_skill(SS_PARRY, 10 + random(10));

    set_stats(({45, 45, 70, 41, 35, 60}));
    
    set_chat_time(12);
    add_chat("Czym moge sluzyc ?");
    add_chat("Hmmm .... Widze, ze twoja fryzura wymaga poprawienia ! Jesli chcesz, mozesz sie u mnie ostrzyc !");
    add_chat("Czy chcesz sie ostrzyc ?");
    
    set_act_time(15);
    add_act("emote szacuje cie wzrokiem.");
    add_act("emote poprawia wlosy.");
    add_act("emote spoglada krytycznie na twoja glowe.");

    add_ask(({"fryzure","strzyzenie"}),VBFC_ME("pyta_o_strzyzenie"));
    add_ask(({"cene","ceny"}),VBFC_ME("pyta_o_cene"));
    add_ask("fryzury",VBFC_ME("pyta_o_fryzury"));
}

string
pyta_o_fryzury()
{
  command("powiedz O, moge ci zrobic wiele fryzur. Pelna ich liste znajdziesz na tabliczce.");
  return "";
}

string
pyta_o_cene()
{
  command("powiedz Cena strzyzenia to tylko 10 zlotych monet. Lesne elfy maja u mnie znizke i "
    + "moga sobie zrobic fryzure juz za 1000 miedziakow.");
  return "";
}

string
pyta_o_strzyzenie()
{
  command("powiedz Jesli chcesz zamowic fryzure, zapoznaj sie z informacja na tabliczce !");
  return "";
}

void
add_introduced(string imie)
{
    set_alarm(2.0, 0.0, "return_introduce", imie);
}

string
query_presentation()
{
    return "Telendil, Mistrz Grzebienia, elf";
}

void
return_introduce(string kto) 
{
    command("przedstaw sie " + OB_NAME(find_living(kto, 0)));
}

int
ktos_wlasnie_jest_strzyzony(object kto)
{
  object *tablica;
  int a;

  if(kto->query_prop(PLAYER_JEST_WLASNIE_STRZYZONY))
    {
      write("Ale przeciez wlasnie jestes strzyzon"+this_player()->koncowka("y","a")+" ! Troche cierpliwosci, praca fryzjera chwile trwa !\n");
      return 1;
    }

  tablica=deep_inventory(environment(this_player()));

        for(a=0;a<sizeof(tablica);a++)
           {
             if(tablica[a]->query_prop(PLAYER_JEST_WLASNIE_STRZYZONY))
               {
                 write("Bedziesz musial"+this_player()->koncowka("","a")+" poczekac na swoja kolej. Teraz fryzjer jest zajety !\n");
                 return 1;
               }
           }
 return 0;
}

int
jeszcze_jest(object kto)
{
   if(environment(kto)==environment(this_object())) return 1;
   else return 0;
}

void
wyswietl(string s1, string s2, object kto)
{
          tell_room(environment(this_object()),QCIMIE(this_object(),PL_MIA) + " " + s2,({kto}));
          kto->catch_msg(query_Imie(this_player(),PL_MIA) + " " + s1);
}

void
strzyze(object kogo, int ile,int f_dlug, int f_kolor, int f_typ)
{
   object obj;
   /* Popawka wpowadzona pzez Alfeena
   *dotyczy zmiany fyzuy
   */
   object tmp;

    switch(ile)
       {
          case 0:
                  if(jeszcze_jest(kogo))
                  wyswietl("zrasza twe wlosy woda.\n","zrasza wlosy " + QIMIE(kogo,PL_DOP) + " woda.\n",kogo);
                  break;
          case 1:
                  if(jeszcze_jest(kogo))
                  wyswietl("czesze cie swym grzebieniem.\n","czesze grzebieniem wlosy " + QIMIE(kogo,PL_DOP) + ".\n",kogo);
                  break;
         case 2:
                  if(jeszcze_jest(kogo))
                  wyswietl("strzyze twoje wlosy nozyczkami i brzytwa.\n","strzyze wlosy " + QIMIE(kogo,PL_DOP) + " nozyczkami i brzytwa.\n",kogo);
                  break;
         case 3:
                  if(jeszcze_jest(kogo))
                  wyswietl("suszy twoja glowe recznikiem.\n","suszy glowe " + QIMIE(kogo,PL_DOP) + " recznikiem.\n",kogo);
                  break;
         case 4:
                  if(jeszcze_jest(kogo))
                  wyswietl("czesze cie i robi ostatnie poprawki.\n","czesze i robi ostatnie poprawki fryzury " + QIMIE(kogo,PL_DOP) + ".\n",kogo);
                  wyswietl("konczy twoja fryzure.\n","konczy fryzure " + QIMIE(kogo,PL_DOP) + ".\n",kogo);
                  wyswietl("patrzy krytycznie na twa glowe i po chwili usmiecha sie z zadowoleniem.\n","patrzy krytycznie na glowe " + QIMIE(kogo,PL_DOP) + " i po chwili usmiecha sie z zadowoleniem.\n",kogo);
                  wyswietl("mowi: Gotowe ! Prosze przejrzec sie w lustrze !\n","mowi do "+QIMIE(kogo,PL_DOP)+": Gotowe ! Prosze przejrzec sie w lustrze !\n",kogo);
                  wyswietl("mowi: Aby obejrzec liste komend, wpisz 'frpomoc'.\n","mowi do "+QIMIE(kogo,PL_DOP)+": Aby obejrzec liste komend, wpisz 'frpomoc'.\n",kogo);
                  break;
       }
   if(ile==4)
     {
      if (!(tmp=present("fryzura", kogo))
          && (obj = clone_object(PATH + "fryzjer/fryzura.c")) != 0)
          {
             obj->move(kogo);
			 (KONFIGURACJA_FRYZUR)->ustaw_konf(kogo,f_dlug, f_kolor, f_typ);
             obj->konfiguruj_fryzure();
             write_file(PATH + "fryzjer/ostrzyzeni",ctime(time()) +" - "+ capitalize(this_player()->query_real_name(PL_MIA)) +" : Jego " + opis_fryzury(f_dlug,f_kolor,f_typ) + ".\n");
           }
      else
      	if (tmp)
      	{
		    (KONFIGURACJA_FRYZUR)->ustaw_konf(kogo,f_dlug, f_kolor, f_typ);
      		tmp->konfiguruj_fryzure();
			write_file(PATH + "fryzjer/ostrzyzeni",ctime(time()) +" - "+ capitalize(this_player()->query_real_name(PL_MIA)) +" : Jego " + opis_fryzury(f_dlug,f_kolor,f_typ) + ".\n");
      	}

      kogo->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
      return;
     }
   else set_alarm(10.0, 0.0, "strzyze",kogo,ile+1,f_dlug,f_kolor,f_typ);
}
   
string
zla_komenda()
{
	return("Komende podajemy w postaci : zamow DLUGOSC, KOLOR TYP\n"
                + "  np.: 'zamow dlugie, brazowe wlosy upiete w konski ogon'\n"
                + " Pelna liste dlugosci, kolorow i typow fryzur znajdziesz na tabliczce\n");
}

int
fryzjer(string str)
{
  object *tablica;
  string *przymiotniki;
  int a;
  string napistmp;
  string dlug_f="";
  string kolor_f="";
  string typ_f="";
  int numer_dlug=0;
  int numer_koloru=0;
  int numer_typu=0;
  int zerowanie=0;
  int ma_wyzerowana_fryzure=0;
  int *f_tmp=({0,0,0});

    if(this_player()->query_armour(4))
    {
      notify_fail("Nie mozesz sie ostrzyc, majac "+
        (this_player()->query_armour(4))->short(PL_BIE) +
        " na glowie.\n");
      return 0;
    }     


        if(!str)
          {
                notify_fail(zla_komenda());
                return 0;
          }

        if(str == "wlosy normalne")
          {
              zerowanie=1;
          }

	for(a=1;a<zwroc_ilosc_dlugosci();a++)
	   {
		if(wildmatch(zwroc_dlugosc(a)+", *",str))
		  {
			dlug_f=zwroc_dlugosc(a);
		  }
	   }

  if(dlug_f!="") sscanf(str, dlug_f+", %s", napistmp);

	for(a=1;a<zwroc_ilosc_kolorow();a++)
	   {
		if(napistmp) 
		  {
			if(wildmatch(zwroc_kolor(a)+" *",napistmp))
		  	   {
				kolor_f=zwroc_kolor(a);
		  	   }
		   }
	   }
	
   if(kolor_f!="") sscanf(napistmp, kolor_f+" %s", str);

	for(a=1;a<zwroc_ilosc_typow();a++)
	   {
		if(str)
		  { 
			if(wildmatch(zwroc_typ(a)[0],str))
		  	   {
				typ_f=zwroc_typ(a)[1];
		  	   }
		  	if(wildmatch(zwroc_typ(a)[1],str))
		  	   {
				typ_f=zwroc_typ(a)[1];
		  	   }   
		  }
	   }

       if(ktos_wlasnie_jest_strzyzony(this_player())) return 1;

       if(!zerowanie) say(QCIMIE(this_player(),PL_MIA) + " zamawia strzyzenie.\n");
       if(zerowanie) say(QCIMIE(this_player(),PL_MIA) + " prosi o usuniecie fryzury.\n");
       this_player()->add_prop(PLAYER_JEST_WLASNIE_STRZYZONY,1);

        tablica=deep_inventory(this_player());

        for(a=0;a<sizeof(tablica);a++)
           {
             if(tablica[a]->to_jest_fryzura_z_loren()==1)
               {
			     f_tmp=tablica[a]->query_fryzura();
				 if(!f_tmp) f_tmp=({0,0,0});
				 if(sizeof(f_tmp)<3) f_tmp=({0,0,0});
				 
				 if(f_tmp[0]==0 || f_tmp[1]==0 || f_tmp[2]==0)
				 {
				     ma_wyzerowana_fryzure=1;
					 f_tmp->remove_object();
				 }
				 else
				 {
				     ma_wyzerowana_fryzure=0;
				 }
				 
                 if(zerowanie)
                    {
                        tablica[a]->remove_object();
                        say(QCIMIE(this_object(),PL_MIA) + " podchodzi do " + QIMIE(this_player(),PL_DOP) + " i szybko, jakby od niechcenia usuwa jego fryzure.\n");
                        write(query_imie(this_player(),PL_MIA)+ " podchodzi do ciebie i szybko, jakby od niechcenia usuwa twa fryzure.\n");
                        this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
                        return 1;
                    } 
               }
           }

        if(zerowanie)
          {
            command("powiedz Ale przeciez ty nie masz zadnej fryzury !");
            this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
            return 1;
          }

       przymiotniki=this_player()->query_przym(1);

       for(a=0;a<sizeof(przymiotniki);a++)
          {
              if(przymiotniki[a]=="lysy" || przymiotniki[a]=="lysiejacy")
                {
                  command("powiedz Hmmm... Niestety, z takimi wlosami nie jestem w stanie nic zrobic ...");
                  this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
                  return 1;
                }
           }

      numer_dlug=znajdz_dlugosc(dlug_f);
      numer_koloru=znajdz_kolor(kolor_f);
      numer_typu=znajdz_typ(typ_f);

       if(numer_dlug==0)
         {
		command("powiedz Obawiam sie, ze nie znam takiej dlugosci wlosow ...");
                command("powiedz Liste dlugosci wlosow znajdziesz we wzorach.");
                this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
		return 1;
         }

       if(numer_koloru==0)
         {
		command("powiedz Niestety nie znam takiego koloru fryzury.");
                command("powiedz Obejrzyj wzory. Znajdziesz tam kolory, na jakie moge ufarbowac twe wlosy.");
                this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
		return 1;
         }

       if(numer_typu==0)
         {
		command("powiedz Przykro mi, ale nie znam takiej fryzury.");
                command("powiedz Obejrzyj wzory. Znajdziesz typy fryzur, na jakie moge cie ostrzyc.");
                this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
		return 1;
         }

         if(!sprawdz_poprawnosc(numer_dlug,numer_typu))
           {
                 command("powiedz Niestety, nie jestem w stanie obciac cie w taki sposob....\n Typ wlosow nie pasuje do ich dlugosci.");
                 this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
                 return 1;
           }

       if(ma_wyzerowana_fryzure==1)
	   {
	       command("powiedz No coz... widze ze cos niedobrego stalo sie z twym uczesaniem... Pragne by wszyscy byli zadowoleni z mojej pracy, wiec poprawie ci fryzure za darmo!");
	   }
       else if((GILDIA)->query_prawa(this_player()->query_real_name())>=LEV_CZLONEK)
          {
             if(!MONEY_ADD(this_player(),-CENA_LESNYCH))
               {
                  command("powiedz Obawiam sie, ze cie na to nie stac ! Strzyzenie, jak dla ciebie, kosztuje "+OPIS_CENY_LESNYCH);
                  this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
                  return 1;
               }
          }
      else if(!MONEY_ADD(this_player(),-CENA_INNYCH))
             {
                command("powiedz Obawiam sie, ze masz za malo pieniedzy ... Strzyzenie, jak dla ciebie, kosztuje "+OPIS_CENY_INNYCH);
                this_player()->remove_prop(PLAYER_JEST_WLASNIE_STRZYZONY);
                return 1;
             }

         wyswietl("mowi: Dobrze, ostrzyge cie. Musisz tylko cierpliwie poczekac, dopoki nie skoncze.\n","mowi do " + QIMIE(this_player(),PL_DOP) + ": Dobrze, ostrzyge cie. Musisz tylko cierpliwie poczekac, dopoki nie skoncze.\n",this_player());

        tablica=deep_inventory(this_player());

        for(a=0;a<sizeof(tablica);a++)
           {
             if(tablica[a]->to_jest_fryzura_z_loren()==1)
               {
                  tablica[a]->remove_object();                 
               }
           }

        strzyze(this_player(),0,numer_dlug,numer_koloru,numer_typu);

        return 1;
}

init_living()
{
        ::init_living();
        add_action(fryzjer,"zamow");
}
