/*
 * Soul Lesnych Elfow
 * by Tanis
 */

inherit "/cmd/std/command_driver";

#include <macros.h>
#include <stdproperties.h>
#include <pl.h>
#include <ss_types.h>
#include <cmdparse.h>
#include <composite.h>
#include <std.h>
#include <adverbs.h>
#include <filter_funs.h>
#include <options.h>

#include "lelf.h"
#include "fan_eltharin.h"
#include "h_emoty.c"

#define SOULDESC(x) (this_player()->add_prop(LIVE_S_SOULEXTRA, x))

#define SHOUT_DEPTH         1   /* Przez ile pokoi niesie sie krzyk. */

// string specjalne_znaki = " ~!@#$%^&*()_+|`-=<>?:{}[];',.";

string specjalne_znaki = " -,.!?:;()";

static object *
find_neighbour(object *found, object *search, int depth)
{
    int index;
    int size;
    int index2;
    int size2;
    mixed *exit_arr;
    object *new_search, *rooms, troom;

    if (!depth)
        return found;

    rooms = found;
    new_search = ({});

    index = -1;
    size = sizeof(search);
    while(++index < size)
    {
        exit_arr = (mixed *) search[index]->query_exit();

        index2 = -3;
        size2 = sizeof(exit_arr);
        while((index2 += 3) < size2)
        {
            if (objectp(exit_arr[index2]))
                troom = exit_arr[index2];
            else
                troom = find_object(exit_arr[index2]);
            if (objectp(troom) &&
                (member_array(troom, rooms) < 0))
            {
                rooms += ({ troom });
                new_search += ({ troom });
            }
        }
    }

    return find_neighbour(rooms, new_search, depth - 1);
}


string
get_soul_id()
{
   return "loren";	/* Zgodnie z krotka nazwa gildii. */
}

int
query_cmd_soul()
{
    return 1;
}

mapping
query_cmdlist()
{
    return ([
		"eczesz"    :  "eczesz",
		"eczysc"    :  "eczysc",
		"eflet"     :  "eflet",
		"egladz"    :  "egladz",
		"eglaszcz"  :  "eglaszcz",
		"egwiazdy"  :  "egwiazdy",
		"ekamien"   :  "ekamien",
		"eklnij"    :  "eklnij",
//		"ekrzyknij" :  "ekrzyknij",
		"emysl"     :  "emysl",
		"eobojetny" :  "eobojetny",
		"eplacz"    :  "eplacz",
		"epocaluj"  :  "epocaluj",
    		"epomoc"    :  "epomoc",
		"epowiedz"  :  "epowiedz",
		"epowroc"   :  "epowroc",
		"epozdrow"  :  "epozdrow",
		"eprzemyj"  :  "eprzemyj",
		"eslonce"   :  "eslonce",
		"esmiech"   :  "esmiech", 
		"espiew"    :  "espiew",
		"espojrz"   :  "espojrz",
		"eusmiech"  :  "eusmiech",
		"euwiedz"   :  "euwiedz",
            ]);
}

int
epomoc(string str)
{
    string temat;

    if(!str)
    {
     temat="ogolne";
    }
    else temat=str;
        
    if (file_size(POMOC_PATH + temat + ".txt") > 0)
    {
        setuid();
        seteuid(getuid());

        TP->more(read_file(POMOC_PATH + temat + ".txt"));
    }
    else
	{
	    write("Na ten temat nie ma Elfiej Pomocy!\n");
	}
    return 1;
}

int
znak_specjalny(string napis,int numer)
{
  int a;

   for(a=0;a<strlen(specjalne_znaki);a++)
      {
         if(napis[numer]==specjalne_znaki[a]) return 1;
      }

   return 0;
}

string
zwroc_wyraz(int jaka_dlugosc)
{
    int a;

    a=random(sizeof(fan_eltharin[jaka_dlugosc]));

    return fan_eltharin[jaka_dlugosc][a];
}

int *rozbij_liczbe(int liczba)
{
  int *tablica=({});
  int a=0;

  if(liczba==0) return ({liczba});

  while(liczba>0)
    {
       a=random(MAX_DLUGOSC)+1;

       if((liczba-a)<0)
          {
            tablica=tablica+({liczba});
            return tablica;
          }

       liczba=liczba-a;
       tablica=tablica+({a});
    }

  return tablica;
}

string
zamien_na_elfi(int dlugosc)
{
  int *dlugosci_wyrazow=({});
  int a;
  string odpowiedz="";

  if(dlugosc==0) return "";

  if(dlugosc<(MAX_DLUGOSC+1)) return zwroc_wyraz(dlugosc);

  dlugosci_wyrazow=rozbij_liczbe(dlugosc);

  for(a=0;a<sizeof(dlugosci_wyrazow);a++)
     {
         odpowiedz+=zwroc_wyraz(dlugosci_wyrazow[a]);
     }

  return odpowiedz;  
}

string
podmien_wyraz(int dlugosc)
{
  int a;

  a=random(3);

  switch(a)
   {
      case 0 :
               dlugosc=dlugosc-1;
               break;
      case 1 :
               break;
      case 2 :
               dlugosc=dlugosc+1;
               break;
   }

  return zamien_na_elfi(dlugosc);
}

string
uzgodnij_wielkosc_literek(string orginal, string elfi)
{
  string napis="",litera="";
  int a,dlugosc;

  if(elfi=="") return "";

  if(strlen(orginal)<strlen(elfi)) dlugosc=strlen(orginal);
  else dlugosc=strlen(elfi);

  for(a=0;a<dlugosc;a++)
     {
        litera="";

        if(upper_case(sprintf("%c",orginal[a]))==sprintf("%c",orginal[a]))
          litera=upper_case(sprintf("%c",elfi[a]));
        else
          litera=sprintf("%c",elfi[a]);

        napis=napis+litera;
     }

   return napis;
}

string
shout_name(object komu)
{
    /* Odbiorca. Zauwazmy, ze previous_object() to VBFC_OBJECT. */
    object pobj = komu;

    if (environment(pobj) == environment(this_player()) &&
        CAN_SEE_IN_ROOM(pobj) && CAN_SEE(pobj, this_player()))
        return this_player()->query_Imie(pobj, PL_MIA);
    if (pobj->query_met(this_player()))
        return this_player()->query_name(PL_MIA);
    return this_player()->query_osobno() ?
           this_player()->koncowka("Jakis mezczyzna", "Jakas kobieta") :
           this_player()->koncowka("Jakis ", "Jakas ", "Jakies ")
         + this_player()->query_rasa(PL_MIA);
}

string
shout_string(string shout_what,object komu)
{
    /* Odbiorca. Zauwazmy, ze previous_object() to VBFC_OBJECT. */
    object pobj = komu;
    int empty_string;

    if(!shout_what) empty_string=1;

    if (environment(pobj) == environment(this_player()))
        return empty_string ? "krzyczy glosno." : "krzyczy glosno w jezyku Fan-Eltharin: " + shout_what;

    return empty_string ? "krzyczy glosno z oddali." :
                          "krzyczy z oddali w jezyku Fan-Eltharin: " + shout_what;
}

void
wyslij_krzyczac(object komu,string str)
{
  int a,b,c;
  string tekst="", tekst1="";
  int level=60,bonus=15; 

  if(IS_MEMBER_LELF(komu))
    {
       komu->catch_msg(shout_name(komu) + " " + shout_string(str,komu) + "\n");
          return;
    }
  for(a=0;a<strlen(str);a++)
     {
       if(znak_specjalny(str,a))
         {
             if(strlen(tekst1)>0)
               {
                    c=0;
                    if(komu->query_race_name()=="elf") c=bonus; // Elfy i tak maja wieksza szanse zrozumiec !
                    if((random(level)-c)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }
             tekst1="";
             tekst=tekst+ sprintf("%c",str[a]);
         }

       else tekst1=tekst1 + sprintf("%c",str[a]);
     }

  if(strlen(tekst1)>0)
               {
                    if(random(100)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }

 tekst1="";
 tekst1=implode(explode(tekst," ") - ({""})," "); // Jest szansa, ze pojedyncza litera zostanie 
						  // Pominieta i nie moze byc dwoch spacji !
 if(!str) tekst1=str;

   komu->catch_msg(shout_name(komu) + " " + shout_string(tekst1,komu) + "\n");
          return;
}

void
wyslij(object komu,string str)
{
  int a,b,c;
  string tekst="", tekst1="";
  int level=60,bonus=15; 

  if(IS_MEMBER_LELF(komu))
    {
       komu->catch_msg(QCIMIE(this_player(),PL_MIA) + " mowi w jezyku Fan-Eltharin: " + str + "\n");
          return;
    }
  for(a=0;a<strlen(str);a++)
     {
       if(znak_specjalny(str,a))
         {
             if(strlen(tekst1)>0)
               {
                    c=0;
                    if(komu->query_race_name()=="elf") c=bonus; // Elfy i tak maja wieksza szanse zrozumiec !
                    if((random(level)-c)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }
             tekst1="";
             tekst=tekst+ sprintf("%c",str[a]);
         }

       else tekst1=tekst1 + sprintf("%c",str[a]);
     }

  if(strlen(tekst1)>0)
               {
                    if(random(100)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }

 tekst1="";
 tekst1=implode(explode(tekst," ") - ({""})," "); // Jest szansa, ze pojedyncza litera zostanie 
						  // Pominieta i nie moze byc dwoch spacji !

 komu->catch_msg(QCIMIE(this_player(),PL_MIA) + " mowi w jezyku Fan-Eltharin: " + tekst1 + "\n");
          return;
}

void
wyslij_komus(object komu,string str,int czy_do_mnie,object *obiekty)
{
  int a,b,c;
  string tekst="", tekst1="";
  int level=60,bonus=15;
  string nap1;

  if(!czy_do_mnie)
  {
   nap1="";

   for(a=0;a<sizeof(obiekty);a++)
      {
          if(a==sizeof(obiekty)-1) nap1+=obiekty[a]->query_imie(komu,PL_DOP);
          else if(a==sizeof(obiekty)-2) nap1+=obiekty[a]->query_imie(komu,PL_DOP) + " i ";
          else nap1+=obiekty[a]->query_imie(komu,PL_DOP) + ", ";
      } 

  if(IS_MEMBER_LELF(komu))
    {
       komu->catch_msg(QCIMIE(this_player(),PL_MIA) + " mowi do " + nap1 + " w jezyku Fan-Eltharin: " + str + "\n");
          return;
    }
  for(a=0;a<strlen(str);a++)
     {
       if(znak_specjalny(str,a))
         {
             if(strlen(tekst1)>0)
               {
                    c=0;
                    if(komu->query_race_name()=="elf") c=bonus; // Elfy i tak maja wieksza szanse zrozumiec !
                    if((random(level)-c)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }
             tekst1="";
             tekst=tekst+ sprintf("%c",str[a]);
         }

       else tekst1=tekst1 + sprintf("%c",str[a]);
     }

  if(strlen(tekst1)>0)
               {
                    if(random(100)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }

 tekst1="";
 tekst1=implode(explode(tekst," ") - ({""})," "); // Jest szansa, ze pojedyncza litera zostanie 
						  // Pominieta i nie moze byc dwoch spacji !

 komu->catch_msg(QCIMIE(this_player(),PL_MIA) + " mowi do " + nap1 + " w jezyku Fan-Eltharin: " + tekst1 + "\n");
          return;
 }
 else
  {
   nap1="ciebie";

  if(IS_MEMBER_LELF(komu))
    {
       komu->catch_msg(QCIMIE(this_player(),PL_MIA) + " mowi do " + nap1 + " w jezyku Fan-Eltharin: " + str + "\n");
          return;
    }
  for(a=0;a<strlen(str);a++)
     {
       if(znak_specjalny(str,a))
         {
             if(strlen(tekst1)>0)
               {
                    c=0;
                    if(komu->query_race_name()=="elf") c=bonus; // Elfy i tak maja wieksza szanse zrozumiec !
                    if((random(level)-c)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }
             tekst1="";
             tekst=tekst+ sprintf("%c",str[a]);
         }

       else tekst1=tekst1 + sprintf("%c",str[a]);
     }

  if(strlen(tekst1)>0)
               {
                    if(random(100)>komu->query_skill(109))
                      {
                         tekst=tekst+uzgodnij_wielkosc_literek(tekst1,podmien_wyraz(strlen(tekst1)));
                      }
                    else tekst=tekst+tekst1;
                }

 tekst1="";
 tekst1=implode(explode(tekst," ") - ({""})," "); // Jest szansa, ze pojedyncza litera zostanie 
						  // Pominieta i nie moze byc dwoch spacji !
 komu->catch_msg(QCIMIE(this_player(),PL_MIA) + " mowi do " + nap1 + " w jezyku Fan-Eltharin: " + tekst1 + "\n");
          return;
 }
}

int
epowiedz(string str)
{
    object *oblist;
    int a;
    string napis;
    object *obiekty;
    object *tablica;
    string nap1;
    object ja=this_player();

    CHECK_MOUTH_BLOCKED;
    
    if(!str)
      {
         notify_fail("Co chcesz powiedziec w jezyku Fan-Eltharin?\n");
         return 0;
      }
   
    if(!environment(ja))
      {
        notify_fail("Blad zwiazany z otoczeniem!\n");
        return 0;
      }

    oblist = (all_inventory(environment(ja))-({ja}));

//   parse_command(str,environment(ja),"do %l:"+PL_DOP+" %s",tablica,napis);

   if (!parse_command(lower_case(str), environment(ja),
	"'do' %l:" + PL_DOP + " %s", tablica, napis))
    {

//   obiekty=NORMAL_ACCESS(tablica,0,0);

//   if(sizeof(obiekty)<1)
//     {
         write("Mowisz w jezyku Fan-Eltharin: " + str + "\n");
    
         for(a=0;a<sizeof(oblist);a++)
            {
              wyslij(oblist[a],str);
            }
        
         return 1;
      }

   napis=str[(strlen(str)-strlen(napis))..(strlen(str)-1)];

   if(strlen(napis)<1)
   {
         notify_fail("Co chcesz powiedziec w jezyku Fan-Eltharin?\n");
         return 0;
   }

   obiekty=NORMAL_ACCESS(tablica,0,0);

   nap1="";

for(a=0;a<sizeof(obiekty);a++)
      {
          if(a==sizeof(obiekty)-1) nap1+=obiekty[a]->query_imie(ja,PL_DOP);
          else if(a==sizeof(obiekty)-2) nap1+=obiekty[a]->query_imie(ja,PL_DOP) + " i ";
          else nap1+=obiekty[a]->query_imie(ja,PL_DOP) + ", ";
      }       

   write("Mowisz do " + nap1 + " w jezyku Fan-Eltharin: " + napis + "\n");

   oblist = oblist - obiekty;

   for(a=0;a<sizeof(oblist);a++)
            {
              wyslij_komus(oblist[a],napis,0,obiekty);
            }

   for(a=0;a<sizeof(obiekty);a++)
            {
              wyslij_komus(obiekty[a],napis,1,obiekty);
            }
   return 1;
}

int
ekrzyknij(string str)
{
    object *oblist;
    int a;
    string napis;
    object *obiekty;
    object *tablica;
    string nap1;
    object ja=this_player();

    object env;
    object *lokacje;
    int ile;

    CHECK_MOUTH_BLOCKED;

    if (env = environment(this_player()))
        lokacje = find_neighbour(({env}), ({env}), SHOUT_DEPTH);
    else
        lokacje = ({});

    if (this_player()->query_option(OPT_ECHO))
        write("Krzyczysz" + (str ? " glosno w jezyku Fan-Eltharin: " + str : " glosno.") + "\n");
    else
        write("Ok.\n");

    ile = sizeof(lokacje);
    while(ile--)
   {
         oblist = (all_inventory(lokacje[ile])-({ja}));

         for(a=0;a<sizeof(oblist);a++)
            {
              wyslij_krzyczac(oblist[a],str);
            }
        
   }

   return 1;
}

int
eprzemyj(string str)
{
  string *gdzie_woda;

  if(str!="twarz")
    {
       notify_fail("Co chcesz przemyc? Twarz?\n");
       return 0;
    }

 if(!environment(this_player())->query_drink_places() || environment(this_player())->query_drink_places()==({}))
   {
       write("Niestety nie widzisz w poblizu niczego, skad moglbys zaczerpnac wode do przemycia twarzy...\n");
       return 1;
   }

 gdzie_woda=environment(this_player())->query_drink_places();

 advemots("","Czerpiesz dlonmi troche wody " + gdzie_woda[0] + " i przemywasz sobie nia twarz. "
      + "Ach! Jak cudownie","..."
            ,({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
 advemots(""," czerpie dlonmi troche wody " + gdzie_woda[0] + " i przemywa sobie nia twarz","."
            ,({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
  return 1;
}

int
eusmiech(string str)
{
    advemots("","Usmiechasz sie lekko i wyjatkowo sympatycznie.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots(""," usmiecha sie lekko. " + TP->koncowka("Jego","Jej") 
       + " delikatne rysy sprawiaja, ze usmiech ten wyglada wyjatkowo sympatycznie.","",
                 ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);

    this_player()->add_prop(LIVE_S_SOULEXTRA,"usmiecha sie lekko");
    return 1;	
}

int
esmiech(string str)
{
	int i;
	mixed Prop;

      if (Prop = this_player()->query_prop(LIVE_M_MOUTH_BLOCKED)) { 
            notify_fail(stringp(Prop) ? Prop : 
                "Nie jestes w stanie wydobyc z siebie zadnego dzwieku.\n"); 
            return 0; }
	
       advemots("","Wybuchasz delikatnym, perlistym smiechem.",""
                 ,({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," wybucha delikatnym, perlistym smiechem.",""
                 ,({}),PL_MIA,PL_MIA,
                 EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
		return 1;
}

int
eczesz(string str)
{
 
    advemots("","Szybkim ruchem poprawiasz sobie wlosy.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots(""," poprawia sobie szybkim ruchem wlosy.","",
                 ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
    return 1;	
}

int
eplacz(string str)
{
 
    advemots("","Pochylasz lekko glowe, a w oczach zbiera ci sie kilka lez.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots(""," pochyla lekko glowe... Gdy ja podnosi widzisz, ze " +
		TP->koncowka("jego","jej") + " oczy sa odrobine wilgotne...","",
                 ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
    return 1;	
}

int
ekamien(string str)
{
 
    advemots("","Powazniejesz, a twoja twarz zmienia sie w kamienna maske.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots("Widzisz, ze "," nagle powaznieje, a " + TP->koncowka("jego","jej") + " twarz zmienia "
			+ "sie w kamienna maske.","",
                 ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
    return 1;	
}

int
eobojetny(string str)
{
 
    advemots("","Przymykasz lekko oczy, a kiedy je otwierasz masz pewnosc, ze nikt nie wyczyta "
             + "z nich nic poza absolutna obojetnoscia.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots(""," przymyka lekko oczy, a kiedy je otwiera nie mozesz "
			+ "z nich wyczytac nic, poza absolutna obojetnoscia.","",
                 ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
    return 1;	
}

int
emysl(string str)
{
 
    advemots("","Zaczynasz sie skupiac, przestajesz myslec o calym otoczeniu i zamykasz sie w sobie.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots("Nagle spojrzenie "," staje sie nieprzytomne i wyglada " + TP->koncowka("on, jakby zamknal","ona, jakby zamknela")
              + " sie gdzies gleboko w srodku.","",
                 ({}),PL_MIA,PL_DOP,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
    return 1;	
}

int
epowroc(string str)
{
 
    advemots("","Otrzasasz sie jak po glebokim snie. Rozgladasz sie wokol, a po chwili czujesz, ze "
            + TP->koncowka("powrociles","powrocilas") + " do realnego swiata.","",
               ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
    advemots("Spojrzenie "," nagle staje sie przytomne. Rozglada sie przez moment "
            + TP->koncowka("zdezorientowany","zdezorientowana") + ", aby po chwili powrocic do realnego swiata.","",
                 ({}),PL_MIA,PL_DOP,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
    return 1;	
}

int
eklnij(string str)
{
	int i;
	object *oblist;
	mixed Prop;

      if (Prop = this_player()->query_prop(LIVE_M_MOUTH_BLOCKED)) { 
            notify_fail(stringp(Prop) ? Prop : 
                "Nie jestes w stanie wydobyc z siebie zadnego dzwieku.\n"); 
            return 0; }
	
	if (!str)
	{
       advemots("","Przeklinasz glosno po elfiemu.",""
                 ,({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," przeklina glosno po elfiemu.",""
                 ,({}),PL_MIA,PL_MIA,
                 EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
		return 1;
	}
	oblist = parse_this (str, "[na] %l:"+PL_BIE);
	if(sizeof(oblist) !=0)
	{
       advemots("Przeklinasz glosno "," po elfiemu.",""
                 ,oblist,PL_BIE,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," przeklina glosno "," po elfiemu."
                 ,oblist,PL_BIE,PL_MIA,
                EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," przeklina cie glosno po ","elfiemu"
                ,oblist,PL_MIA,PL_MIA,EM_TARGET+EM_CAN_SEE+EM_CANT_SEE);
             return 1;
	}
	notify_fail("Chyba eklnij na [kogo]?\n");
	return 0;
}

int
espiew(string str)
{
	int i;
	mixed Prop;

      if (Prop = this_player()->query_prop(LIVE_M_MOUTH_BLOCKED)) { 
            notify_fail(stringp(Prop) ? Prop : 
                "Nie jestes w stanie wydobyc z siebie zadnego dzwieku.\n"); 
            return 0; }
	
       advemots("","Robisz glebszy wdech i rozpoczynasz piesn o bardzo skomplikowanej "
            + "melodii. Po paru chwilach konczysz, a wtedy na moment zapada absolutna cisza...",""
                 ,({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," robi glebszy wdech i rozpoczyna piesn o bardzo "
			+ "skomplikowanej melodii. " + TP->koncowka("Jego","Jej") +" glos jest delikatny, "
			+ "niczym szept wiatru, ale wyczuwasz w niej moc, tak "
			+ "silna jak silny jest wilk. Po paru chwilach konczy "
			+ "swa piesn i na moment zapada absolutna cisza...",""
                 ,({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
		return 1;
}

int
eflet(string str)
{

/*
 * Zmienilem na zabawe z fletem :-)
 * 16) etrawa 		ELF zrywa zdzblo trawy i zaczyna sie nim bawic, lekko
 *			sie przy tym usmiechajac.
 */

    object *tab;
    int i;

    tab = deep_inventory(TP);
        for (i=0; i<sizeof(tab); i++)
            if (tab[i]->czy_to_flet_lelfow())
                {
                   advemots("","Bierzesz do reki swoj flet i zaczynasz sie nim bawic, lekko sie przy tym usmiechajac.","",
                      ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
                   advemots(""," bierze do reki swoj flet i zaczyna sie nim bawic, lekko sie przy tym usmiechajac.","",
                      ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
                   return 1;	
                }
       notify_fail("Oj, chyba gdzies " + TP->koncowka("zapodziales","zapodzialas") + " swoj elfi flet!\n");
       return 0;
}

int
eczysc(string str)
{	
    string opis;
    object bron;

    if(!str)
     {
       notify_fail("Chyba eczysc <cos>?\n");
       return 0;
     }

    parse_command(str,this_player(),"%o:"+PL_BIE,bron);

    if (!bron)
    {
    	notify_fail("Co chcesz wyczyscic ?\n");
    	return 0;
    }
    if (!bron->id("miecz") && !bron->id("noz") && !bron->id("sztylet"))
	{
	    notify_fail("Mozesz czyscic tylko miecz, noz lub sztylet...\n");
	    return 0;
	}

    opis=bron->koncowka("swoj","swoja")+" "+bron->short(this_player(),PL_BIE);

                   advemots("","Kilkoma szybkimi ruchami polerujesz " + opis + " do polysku.","",
                      ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
                   advemots(""," kilkoma szybkimi ruchami poleruje " + opis + " do polysku.","",
                      ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);

                   return 1;
}

int
egladz(string str)
{	
    string opis;
    object bron;

    if(!str)
     {
       notify_fail("Chyba egladz <cos>?\n");
       return 0;
     }

    parse_command(str,this_player(),"%o:"+PL_BIE,bron);

    if (!bron)
    {
    	notify_fail("Co chcesz pogladzic ?\n");
    	return 0;
    }
    if (!bron->id("miecz") && !bron->id("noz") && !bron->id("sztylet"))
	{
	    notify_fail("Mozesz gladzic tylko miecz, noz lub sztylet...\n");
	    return 0;
	}

    opis=bron->koncowka("swego","swej")+" "+bron->short(this_player(),PL_DOP);

                   advemots("","Przejezdzasz delikatnie reka po ostrzu "+opis + ". "
                     + "Czujesz, jak twe oczy plona odrobina szalenstwa.","",
                      ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
                   advemots(""," przejezdza delikatnie reka po ostrzu " + opis
                     + ". W "+this_player()->koncowka("jego","jej")+" oczach zauwazasz odrobine szalenstwa...","",
                      ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
                   return 1;
}

int
espojrz(string str)
{
	object *oblist;

	notify_fail("Chyba espojrz <na kogos>?\n");
	if (!str)
	  return 0;
	oblist = parse_this (str, "[na] %l:"+PL_BIE);
	if(sizeof(oblist) != 0)
	{
           advemots("Patrzysz na ","",", a w twych oczach lsni madrosc lasu i swiatlo gwiazd...",
                 oblist,PL_BIE,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
           advemots(""," patrzy na "," jakims dziwnym wzrokiem... "+
           "W "+TP->koncowka("jego","jej")+" oczach widzisz madrosc lasu i swiatlo gwiazd.",
                 oblist,PL_BIE,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
           advemots(""," patrzy na ciebie"," jakims dziwnym wzrokiem. W "+
           TP->koncowka("jego","jej")+
           " oczach widzisz madrosc lasu i swiatlo gwiazd.",
                 oblist,PL_BIE,PL_MIA,EM_TARGET+EM_CAN_SEE);
		return 1;
	}
	return 0;
}

int
eglaszcz(string str)
{

/*
 * Magia chyba nie moze byc .... Tanis
 * 4) eglaszcz [kogos]	ELF dotyka cie delikatnie i przejezdza reka po 
 *			twym policzku. Czujesz pulsowanie magii, plynacej 
 *			z jego dotyku.
 */
	object *oblist;

	notify_fail("Chyba eglaszcz <kogos>?\n");
	if (!str)
	  return 0;
	oblist = parse_this (str, "na %l:"+PL_BIE);
	if(sizeof(oblist) != 0)
	{
           advemots("Dotykasz delikatnie policzka ",""," i czujesz, jak pod twoja dlonia pulsuje energia...",
                 oblist,PL_DOP,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
           advemots(""," dotyka delikatnie policzek ",".",
                 oblist,PL_DOP,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
           advemots(""," dotyka cie delikatnie i ","przejezdza reka po twym policzku. "+
           "Czujesz energie przeplywajaca przez "+ TP->koncowka("jego","jej")+" dlon.",
                 oblist,PL_MIA,PL_MIA,EM_TARGET+EM_CAN_SEE);
		return 1;
	}
	return 0;
}

int
euwiedz(string str)
{
    object *oblist;
    int a,b;

	notify_fail("Chyba euwiedz <kogos>?\n");
	if (!str)
	  return 0;
	oblist = parse_this (str, "na %l:"+PL_BIE);
        oblist -= ({ this_player() });
        if(sizeof(oblist)>1)
          {
              notify_fail("Kogo konkretnie chcesz uwiesc?\n");
              return 0;
          }
	if(sizeof(oblist) != 0)
	{
           if((oblist[0]->query_race_name()=="elf") || (oblist[0]->query_race_name()=="czlowiek"))
             {
               if(TP->koncowka("chlop","baba")!=oblist[0]->koncowka("chlop","baba"))
                  {
                    advemots("Patrzysz na ",""," uwodzaco i czujesz, jak topnieje pod twoim spojrzeniem.",
                          oblist,PL_BIE,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
                    advemots(""," spoglada uwodzaco na ",".",
                          oblist,PL_BIE,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
                    advemots(""," patrzy na ciebie w jakis szczegolny sposob. " + TP->koncowka("Jego","Jej") +
			" wzrok jest taki cieply, przyjemny, goracy. Nie!" + 
			" co sie z toba dzieje? Ten wzrok jest naprawde"+
			" wyjatkowy",".",
                     oblist,PL_BIE,PL_MIA,EM_TARGET+EM_CAN_SEE);
		    return 1;
                  }
               else
                  {
                   notify_fail("Przeciez nie bedziesz uwodzic " + TP->koncowka("mezczyzny","kobiety") +"!\n");
                   return 0;
                  }
             }
           else
             {
               notify_fail("Przeciez nie bedziesz uwodzic " + oblist[0]->query_rasa(PL_DOP) + "!\n");
               return 0;
             }
	}
	return 0;
}

int
epocaluj(string str)
{
    object *oblist;
    int a,b;

	notify_fail("Chyba epocaluj <kogos>?\n");
	if (!str)
	  return 0;
	oblist = parse_this (str, "na %l:"+PL_BIE);
        oblist -= ({ this_player() });
        if(sizeof(oblist)>1)
          {
              notify_fail("Kogo konkretnie chcesz pocalowac?\n");
              return 0;
          }
	if(sizeof(oblist) != 0)
	{
           if((oblist[0]->query_rasa()=="elf") ||(oblist[0]->query_rasa()=="elfka") || (oblist[0]->query_rasa()=="czlowiek") || (oblist[0]->query_rasa()=="demon"))
             {
               if(TP->koncowka("chlop","baba")!=oblist[0]->koncowka("chlop","baba"))
                  {
                    advemots("Podchodzisz blisko do ",", bardzo blisko."," Zaczyna szybciej oddychac, odchyla lekko glowe " +
                      "i odrobine otwiera usta. Laczysz swe usta z " + TP->koncowka("jej","jego") + ". Pocalunek trwa krotko lecz nie masz watpliwosci, " +
                      "ze na dlugo pozostanie w " + TP->koncowka("jej","jego") + " pamieci...",
                          oblist,PL_DOP,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
                    advemots(""," caluje namietnie ",".",
                          oblist,PL_BIE,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
                    advemots(""," podchodzi do ciebie blisko, bardzo blisko... Ta " +
			"bliskosc sprawia, ze nie udaje ci sie powstrzymac "+
			"szybszego oddechu. Odruchowo odchylasz lekko glowe i "+
			"odrobine otwierasz usta. " + TP->koncowka("On, jakby czekal","Ona, jakby czekala")+" na ten moment, "+
			"natychmiast laczy swe usta z twoimi. Pocalunek trwa "+
			"chwilke, ale wiesz, ze na dlugo pozostane ci w pamieci","...",
                     oblist,PL_MIA,PL_MIA,EM_TARGET+EM_CAN_SEE);
		    return 1;
                  }
               else
                  {
                   notify_fail("Przeciez nie pocalujesz " + TP->koncowka("mezczyzny","kobiety") +"!\n");
                   return 0;
                  }
             }
           else
             {
               notify_fail("Przeciez nie pocalujesz " + oblist[0]->query_rasa(PL_DOP) + "!\n");
               return 0;
             }
	}
	return 0;
}

int
epozdrow(string str)
{
	int i;
	object *oblist;
	mixed Prop;

      if (Prop = this_player()->query_prop(LIVE_M_MOUTH_BLOCKED)) { 
            notify_fail(stringp(Prop) ? Prop : 
                "Nie jestes w stanie wydobyc z siebie zadnego dzwieku.\n"); 
            return 0; }
	
	oblist = parse_this (str, "[na] %l:"+PL_BIE);
	if(sizeof(oblist) !=0)
	{
       advemots("Pozdrawiasz "," slowami: Niechaj gwiazdy oswietlaja twa droge !",""
                 ,oblist,PL_BIE,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," pozdrawia "," slowami prastarego pozdrowienia Lesnych Elfow."
                 ,oblist,PL_BIE,PL_MIA,
                EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
       advemots(""," pozdrawia cie slowami: ","Niechaj gwiazdy oswietlaja twa droge !"
                ,oblist,PL_MIA,PL_MIA,EM_TARGET+EM_CAN_SEE+EM_CANT_SEE);
             return 1;
	}
	notify_fail("Chyba epozdrow <kogo>?\n");
	return 0;
}

int
egwiazdy(string str)
{
   string kiedy=environment(TP)->pora_dnia();

     if(environment(TP)->query_prop(ROOM_I_INSIDE))
       {
         notify_fail("Aby zobaczyc gwiazdy, musisz wyjsc na zewnatrz!\n");
         return 0;
       }

     if(kiedy!="noc" && kiedy!="pozny wieczor" && kiedy!="polnoc")
       {
         notify_fail("W tej chwili jest dzien, wiec na niebie nie ma gwiazd...\n");
         return 0;
       }
           advemots("","Spogladasz w niebo i przez chwile w zamysleniu podziwiasz piekno gwiazd...","",
              ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
           advemots(""," spoglada w niebo i przez chiwle w zamysleniu podziwia piekno gwiazd.","",
              ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
           return 1;	
}

int
eslonce(string str)
{
   string kiedy=environment(TP)->pora_dnia();

     if(environment(TP)->query_prop(ROOM_I_INSIDE))
       {
         notify_fail("Aby zobaczyc slonce, musisz wyjsc na zewnatrz!\n");
         return 0;
       }

     if(kiedy=="noc" || kiedy=="pozny wieczor" || kiedy=="polnoc")
       {
         notify_fail("W tej chwili jest noc, wiec na niebie nie widzisz slonca...\n");
         return 0;
       }

           advemots("","Spogladasz z podziwem na slonce, cieszac sie jego zyciodajna moca. Jego blask zmusza cie do zmruzenia oczu.","",
              ({}),PL_MIA,PL_MIA,EM_PLAYER+EM_CAN_SEE+EM_CANT_SEE);
           advemots(""," mruzac oczy spoglada z podziwem na slonce. Jego oblicze rozjasnia radosc.","",
              ({}),PL_MIA,PL_MIA,EM_ALL_EXP_TARGET_AND_PLAYER+EM_CAN_SEE);
           return 1;	
}
