#pragma strict_types

inherit "/std/object.c";


#include "ogolne.h"
#include "spis_fryzur.h"

#define FRYZURKA_TANISA "_fryzurka_tanisa_subloc"

int dlugosc_fryzury=0;
int kolor_fryzury=0;
int typ_fryzury=0;

void
leave_env(object from, object to)
{
    environment(this_object())->remove_subloc(FRYZURKA_TANISA);

    ::leave_env(from, to);
}

int
fryzura_zaslaniana()
{
    if(member_array(typ_fryzury,typy_zaslaniane)!=-1) return 1;
    if(member_array(dlugosc_fryzury,dlugosci_zaslaniane)!=-1) return 1;

    return 0;
}

string
show_subloc(string subloc, object on_obj, object for_obj)
{
    if ((subloc != FRYZURKA_TANISA) ||
        on_obj->query_prop(TEMP_SUBLOC_SHOW_ONLY_THINGS))

	return "";

    if(on_obj->query_armour(4) && fryzura_zaslaniana())
      {
          if(for_obj == on_obj)
            return "Twa piekna fryzura jest w calosci zaslonieta przez " + (on_obj->query_armour(4))->short(PL_BIE)
                + ".\n";
      
          return "";
      }

    if (for_obj == on_obj)
        return "Twoje "
             + opis_fryzury(dlugosc_fryzury, kolor_fryzury, typ_fryzury)+".\n";
    return on_obj->koncowka("Jego ","Jej ")
         + opis_fryzury(dlugosc_fryzury, kolor_fryzury, typ_fryzury)+".\n";
}

mixed
remove()
{
    environment(this_object())->remove_subloc(FRYZURKA_TANISA);

    return 0;
}

mixed
konfiguruj_fryzure()
{
    int *konf=((KONFIGURACJA_FRYZUR)->zwroc_konf(environment(this_object())));
	
	if(!konf) konf=({0,0,0});
	if(sizeof(konf)<3) konf+=({0,0,0});
	
    dlugosc_fryzury=konf[0];
    kolor_fryzury=konf[1];
    typ_fryzury=konf[2];

    environment(this_object())->add_subloc(FRYZURKA_TANISA, this_object());

    return 0;
}

void
create_object()
{
	setuid();
    seteuid(getuid());

    ustaw_nazwe(({ "fryzura", "fryzura", "fryzura", "fryzura", 
        "fryzura", "fryzura" }), ({"fryzury","fryzur","fryzurom","fryzury","fryzurami","fryzurach"}), PL_ZENSKI );
        
    add_name("fryzura");

    add_pname("fryzura");

    set_long("Ten opis nie powinien Ci sie nigdy pojawic. Skontaktuj sie " +
        "z jakims archem.\n");
    
    set_no_show();
    set_no_show_composite(1);

    add_prop(OBJ_M_NO_DROP,     "Poloz co?\n"); // Podobno jak sie toto usunie to nie bedzie sie fryzurka ostawala po smierci...
                                                // Ale z drugiej strony podobno fryzurki znikaja... ?
    add_prop(OBJ_M_NO_GIVE,     "Daj co komu?\n");
    add_prop(OBJ_M_NO_TELEPORT, 1);
    add_prop(OBJ_M_NO_STEAL,    1);
    add_prop(OBJ_M_NO_SELL,     1);
    add_prop(OBJ_M_NO_BUY,      1);

    remove_prop(OBJ_I_WEIGHT);
    remove_prop(OBJ_I_VOLUME);
    remove_prop(OBJ_I_VALUE);
	
	set_alarm(0.9, 0.0, &konfiguruj_fryzure());
}

string
jak_ostrzyzony()
{
  return(", ktore" + environment(this_object())->koncowka("go ","j ") + opis_fryzury(dlugosc_fryzury, kolor_fryzury, typ_fryzury));
}

int *query_fryzura()
{
  return ({dlugosc_fryzury,kolor_fryzury,typ_fryzury});
}

string
query_auto_load()
{
    return PATH + "fryzjer/fryzura";
}
 
void
zamiana_konf(int f_dlug,int f_kolor,int f_typ)
{
    object kogo=environment(this_object());
	
    (KONFIGURACJA_FRYZUR)->ustaw_konf(kogo,f_dlug, f_kolor, f_typ);
}

public void
init_arg(string arg)
{
  int numer1=0, numer2=0, numer3=0;

  sscanf(arg, "%d,%d,%d", numer1, numer2, numer3);

  if(numer1!=0 && numer2!=0 && numer3!=0) set_alarm(0.4, 0.0, &zamiana_konf(numer1,numer2,numer3));
}

int
fr_popraw(string str)
{
    object kto=this_player();

//    if(str!="fryzure")
//      {
//         notify_fail("Co chcesz poprawic ? Fryzure ?\n");
//         return 0;
//      }

    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twa fryzura jest w calosci zaslaniana przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz jej frpoprawic...\n");
            return 0;
      }
      
    if(member_array(typ_fryzury,typy_bledne[0])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[0])!=-1)
      {
          notify_fail("Tej fryzury nie da sie frpoprawic...\n");
          return 0;
      }
      
    say(QCIMIE(kto,PL_MIA) + " jakby od niechcenia poprawia swa fryzure.\n");
    write("Jakby od niechcenia poprawiasz swa fryzure.\n");
    
    return 1;
}

int
fr_czesz(string str)
{
    object kto=this_player();
    
//    if(str!="wlosy" && str!="fryzure")
//      {
//         notify_fail("Co chcesz przeczesac ? Wlosy ?\n");
//         return 0;
//      }
      
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz ich frprzeczesac...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[1])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[1])!=-1)
      {
          notify_fail("Tej fryzury nie da sie frprzeczesac...\n");
          return 0;
      }

    say(QCIMIE(kto,PL_MIA) + " przeczesuje palcami swoje wlosy, jakby " + kto->koncowka("chcial","chciala") + " zwrocic na nie uwage.\n");
    write("Przeczesujesz palcami swe wlosy tak, aby wszyscy zwrocili na nie uwage.\n");
    
    return 1;      
}

int
fr_czochraj(string str)
{
    object kto=this_player();
    
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz ich frczochrac...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[2])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[2])!=-1)
      {
          notify_fail("Tej fryzury nie da sie frczochrac...\n");
          return 0;
      }

    say(QCIMIE(kto,PL_MIA) + " czochra nerwowo swoje wlosy, jakby fryzura przestala " + kto->koncowka("mu","jej") + " sie podobac.\n");
    write("Czochrasz nerwowo swoja fryzure, jakby nagle przestala ci sie podobac.\n");
    
    return 1;
}

int 
fr_umyj(string str)
{
  object kto=this_player();
  string *gdzie_woda;

 if(!environment(this_player())->query_drink_places() || environment(this_player())->query_drink_places()==({}))
   {
       notify_fail("Niestety nie widzisz w poblizu niczego, skad moglbys zaczerpnac wody do umycia wlosow...\n");
       return 0;
   }
   
   if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz ich umyc...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[3])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[3])!=-1)
      {
          notify_fail("Nie potrafisz umysc wlosow ostrzyzonych w ten sposob...\n"); // Ciekawe, jaki to sposob... ?
          return 0;
      }

 gdzie_woda=environment(this_player())->query_drink_places();

 write("Czerpiesz troche wody " + gdzie_woda[0] + " i przemywasz sobie wlosy.\n");
 say(QCIMIE(kto,PL_MIA) + " czerpie troche wody " + gdzie_woda[0]+ " i przemywa sobie wlosy.\n");
 
  return 1;
}

int
fr_odgarnij(string str)
{
    object kto=this_player();
    
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz ich frodgarnac...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[4])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[4])!=-1)
      {
          notify_fail("Tej fryzury nie da sie frodgarnac...\n");
          return 0;
      }

    say(QCIMIE(kto,PL_MIA) + " szybkim ruchem odgarnia swe wlosy z twarzy, zeby nie zaslanialy " + kto->koncowka("mu","jej") + " oczu.\n");
    write("Szybkim ruchem odgarniasz swe wlosy z twarzy, zeby nie zaslanialy ci oczu.\n");
    
    return 1;
}

int
fr_potrzasnij(string str)
{
    object kto=this_player();
    
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz ich frpotrzasnac...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[5])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[5])!=-1)
      {
         say(QCIMIE(kto,PL_MIA) + " energicznym ruchem potrzasa glowa, jednak przy " + kto->koncowka("jego","jej") + " uczesaniu nie odnosi zadnego skutku...\n");
         write("Energicznym ruchem potrzasasz glowa, jednak przy twym uczesaniu nie odnosi to zadnego skutku...\n");      
      }
    else
      {
        say(QCIMIE(kto,PL_MIA) + " energicznym ruchem potrzasa glowa, a " + kto->koncowka("jego","jej") + " wlosy powiewaja wokol glowy.\n");
        write("Energicznym ruchem potrzasasz glowa, a wlosy powiewaja ci wokol glowy.\n");
      }        
    
    return 1;
}

int
fr_pociagnij(string str)
{
   int a;
   object *tablica;
   string napis;
   object inna_fryzura=0;
   object *obiekty;
   object kto=this_player();
   int wielkosc;

   if(!str)
     {
         notify_fail("Kogo chcesz pociagnac za wlosy ???\n");
         return 0;
     }

   parse_command(str,environment(this_player()),"%l:"+PL_BIE+" %s",tablica,napis);

   obiekty=NORMAL_ACCESS(tablica,0,0);

   if(sizeof(obiekty)>1)
     {
       notify_fail("Musisz podac tylko jedna osobe!\n");
       return 0;
     }

   if(sizeof(obiekty)<1)
     {
        notify_fail("Kogo chcesz pociagnac za wlosy ???\n");
        return 0;
     }
     
    tablica=all_inventory(obiekty[0]);
    
    wielkosc=sizeof(tablica);
    
    for(a=0;a<wielkosc;a++)
       {
           if(tablica[a]->id("fryzura")) inna_fryzura=tablica[a];
           break;
       }
       
    if(!inna_fryzura)
      {
        if(obiekty[0]->query_armour(4))
          {
            notify_fail("Wlosy " + obiekty[0]->query_imie(kto,PL_DOP) + " sa w calosci ukryte pod " + (obiekty[0]->query_armour(4))->short(PL_NAR)
                + " i nie mozesz nic z nimi zrobic !\n");
            return 0;
          }
      }
   else
     {
       if(obiekty[0]->query_armour(4) && inna_fryzura->fryzura_zaslaniana())
          {
            notify_fail("Wlosy " + obiekty[0]->query_imie(kto,PL_DOP) + " sa w calosci ukryte pod " + (obiekty[0]->query_armour(4))->short(PL_NAR)+ " i nie mozesz nic z nimi zrobic !\n");
            return 0;
          }
       if(member_array(inna_fryzura->query_fryzura()[2],typy_bledne[6])!=-1 || member_array(inna_fryzura->query_fryzura()[0],dlugosci_bledne[6])!=-1)
      {
          notify_fail("Wlosy " + obiekty[0]->query_imie(kto,PL_DOP) + " sa ostrzyzone w ten sposob, ze nie dasz rady ich pociagnac...\n");
          return 0;
      }
     }
     
   say(QCIMIE(kto,PL_MIA) + " podchodzi do " + QIMIE(obiekty[0],PL_DOP) + " i mocno ciagnie " + obiekty[0]->koncowka("go","ja") + " za wlosy !\n",({kto,obiekty[0]}));
   write("Podchodzisz do " + obiekty[0]->query_imie(kto,PL_DOP) + " i mocno ciagniesz " + obiekty[0]->koncowka("go","ja") + " za wlosy!\n");
   obiekty[0]->catch_msg(kto->query_Imie(obiekty[0],PL_MIA) +" podchodzi do ciebie i mocno ciagnie cie za wlosy! Boli!\n");
   
   return 1;     
}

int
fr_ucho(string str)
{
    object kto=this_player();
    
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz ich zalozyc za ucho...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[7])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[7])!=-1)
      {
          notify_fail("Wlosow ostrzyzonych w ten sposob nie da sie zalozyc za ucho...\n");
          return 0;
      }

    say(QCIMIE(kto,PL_MIA) + " odgarnia wlosy i zaklada je za ucho tak, aby " + kto->koncowka("mu","jej") + " nie przeszkadzaly.\n");
    write("Odgarniasz wlosy i zakladasz je za ucho tak, zeby ci nie przeszkadzaly.\n");
    
    return 1;
}

int
fr_twarz(string str)
{
    object kto=this_player();
    
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz nimi zaslonic twarzy...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[8])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[8])!=-1)
      {
          notify_fail("Tak ostrzyzonymi wlosami nie da sie zaslonic twarzy...\n");
          return 0;
      }

    say(QCIMIE(kto,PL_MIA) + " pochyla glowe tak, ze wlosy opadaja " + kto->koncowka("mu","jej") + " na twarz, calkowicie ja zaslaniajac.\n");
    write("Pochylasz glowe tak, ze wlosy spadaja ci na twarz, calkowicie ja zaslaniajac.\n");
    
    return 1;
}

int
fr_rwij(string str)
{
    object kto=this_player();
    
    if(kto->query_armour(4) && fryzura_zaslaniana())
      {
            notify_fail("Twe wlosy sa w calosci zaslaniane przez " + (kto->query_armour(4))->short(PL_BIE)
                + "! Nie mozesz z nimi nic zrobic...\n");
            return 0;
      }      
      
    if(member_array(typ_fryzury,typy_bledne[9])!=-1 || member_array(dlugosc_fryzury,dlugosci_bledne[9])!=-1)
      {
          notify_fail("Nie dasz rady rwac wlosow uczesanych w ten sposob...\n");
          return 0;
      }

    say(QCIMIE(kto,PL_MIA) + " nerwowo rwie wlosy z glowy jakby " + kto->koncowka("staral","starala") + " sie dac ujscie swej rozpaczy!\n");
    write("Nerwowo rwiesz wlosy z glowy dajac ujscie swej rozpaczy!\n");
    
    return 1;
}

int
fr_pomoc(string str)
{
  write("   Z fryzurami wiaza sie nastepujace komendy : \n\n");
  write(" - frpopraw            Poprawiasz swa fryzure.\n");
  write(" - frprzeczesz         Przeczesujesz reka wlosy.\n");
  write(" - frczochraj          Czochrasz sobie wlosy, \n");
  write("                        jak gdyby fryzura przestala ci sie podobac.\n");
  write(" - frumyj              Przemywasz wlosy woda.\n");
  write(" - frodgarnij          Odgarniasz wlosy z twarzy, zeby nie zaslanialy ci oczu.\n");
  write(" - frpotrzasnij        Potrzasasz energicznie glowa.\n");
  write(" - frpociagnij <kogos> Ciagniesz kogos za wlosy.\n");
  write(" - frucho              Odgarniasz wlosy za ucho.\n");
  write(" - frtwarz             Pochylasz glowe zeby opadajace \n"
      + "                        wlosy zaslonily ci twarz.\n");
  write(" - frrwij              Rwiesz wlosy z glowy na znak wielkiego zmartwienia.\n");
  write(" - frpomoc             Powyzszy spis.\n");
  
  return 1;
}

void
init()
{
    ::init();
  
    add_action(fr_popraw,"frpopraw");
    add_action(fr_czesz,"frprzeczesz");
    add_action(fr_czochraj,"frczochraj");
    add_action(fr_umyj,"frumyj");
    add_action(fr_odgarnij,"frodgarnij");
    add_action(fr_potrzasnij,"frpotrzasnij");
    add_action(fr_pociagnij,"frpociagnij");
    add_action(fr_ucho,"frucho");
    add_action(fr_twarz,"frtwarz");
    add_action(fr_rwij,"frrwij");
    add_action(fr_pomoc,"frpomoc");
}

int
to_jest_fryzura_z_loren()
{
    return 1;
}

/* 
 * string
 * query_recover()
 * {
 *    return 0;
 * }
 */