#include <poison_types.h>

/* wspolczynniki jadalnosci, w zaleznosci od rasy
 * 10 - sredni
 * 18 - maksymalny
 * 2  - minimalny
 */
mapping rasy = ([  "halfling"  : 17,
		   "halflinka" : 18,
		   "mezczyzna" : 10,
		   "kobieta"   : 12,
		   "czlowiek" : 10,
		   "ogr"       : 7,
		   "ogrzyca"   : 8,
		   "ork"       : 5,
		   "orczyca"   : 6,
		   "elf"       : 15,
		   "elfka"     : 16,
		   "goblin"    : 3,
		   "goblinka"  : 4,
		   "krasnolud" : 7,
		   "krasnoludka" : 9,
		]);
			
int
czy_cialo(object ob)
{
  return sizeof(ob->query_prop(CORPSE_M_RACE)) && (ob->query_decay()>3);
}


int
czy_widzi(object ob)
{
  return CAN_SEE(this_player(), ob);
}

int
do_zjedz(string s)
{
  int pom, wspol, k, pozywnosc, emax, i, j, koniec = 0;
  string *lok, *lok1;
  object tr, *tmp, *ob = 
  	filter(all_inventory(environment(this_player())), &czy_cialo());
  setuid();
  seteuid(getuid());
  
  if (!s || s=="" || !ob || !sizeof(ob))
  {
    notify_fail("Slucham?\n");
    return 0;
  }
  
  if (this_player()->query_attack())
  {
    notify_fail("Niestety nie mozna jednoczesnie spozywac posileku i walczyc "+
    		".\n");
    return 0;
  }
  
  
  if (!parse_command(s, ob, " %i:"+PL_BIE, ob))
  {
     notify_fail("Co chcesz zjesc ?\n");
     return 0;
  }
 
 ob = NORMAL_ACCESS (ob, 0, 0);
 
  if (!(i = sizeof(ob)))
  {
    notify_fail("Co chcesz zjesc ?\n");
    return 0;
  }
 say(QCIMIE(this_player(), PL_MIA) +" zaczyna sie rozgladac wokol "+
 	"glodnym wzrokiem.\n");
 if (this_player()->query_skill(SS_WYZERKA)<random(100))
 {
   koniec = 1;
 }

 while (--i>=0)
 {
   j=i;
   if (sizeof((tmp=filter(all_inventory(ob[j]), &czy_widzi()))))
   {
       //if (this_player()->query_skill(SS_WYZERKA) > random(100))
       {
         write("Fachowymi ruchami wytrzasasz "+
           "z "+ob[j]->short(PL_DOP)+" ");
         say(QCIMIE(this_player(),PL_MIA)+
           " fachowymi ruchami wytrzasa "+
           "z "+ob[j]->short(PL_DOP)+" ");
         tmp->move(environment(ob[j]));
       }
/*       else
       {
         say(QCIMIE(this_player(), PL_MIA)+" potrzasnal "+
           ob[j]->short(PL_DOP) + " tak mocno, ze "+
           "rzeczy rozlatuja sie gdzies na boki.\n");
         write("Przez twoja nieumiejetnosc przygotowania posilku "+
         	"reczy wypadaja gdzies na boki.\n");
         tmp->add_prop(OBJ_I_HIDE, 100 - TP->query_skill(SS_WYZERKA));
       }
*/
     write (COMPOSITE_DEAD(tmp, PL_BIE)+".\n");
     say (COMPOSITE_DEAD(tmp, PL_BIE)+".\n");

   }
 
 
 
//   lok = ob[i]->query_prop(CORPSE_AS_HITLOCATIONS);
  lok = ({"pozostale jeszcze mieso","nogi","rece","glowe"});
   lok1 = ({ ({"rozszarpany", "rozszarpani"}),
   	     ({"beznogi", "beznodzy"}),
   	     ({"bezreki", "bezrecy"}),
   	     ({"bezglowy","bezglowi"}) });
   pozywnosc = ob[i]->query_prop(OBJ_I_WEIGHT) / 4 * 
               (100+this_player()->query_skill(SS_WYZERKA))/100 + 1;
   if ( !(wspol=rasy[ob[i]->query_prop(CORPSE_M_RACE)[0]]))
     wspol = 1;
   pozywnosc = pozywnosc * wspol / 1000;
  
   if (j=ob[i]->query_prop(CORPSE_I_NADGRYZIONY))
   {
     pozywnosc = pozywnosc - pozywnosc / j;
   }
   
   if (this_player()->eat_food(pozywnosc, 1))
   {
      say(QCIMIE(this_player(), PL_MIA) + " pozera w calosci "+
        ob[i]->short(PL_BIE)+(koniec?", niekiedy odrzucajac na bok "+
           "jakies szczatki.\n":".\n"));
        
      write("Pozerasz "+ob[i]->short(PL_BIE)+(koniec?". Z twoich ust "+
         "wypadaja niekiedy jakiesz szczatki.\n": ".\n"));
      if (wspol > 10)
        write ("Z prawdziwa przyjemoscia spozyl"+
               this_player()->koncowka("es ","as ") + ob[i]->short(PL_BIE) +
               ".\n");
      else
        write(capitalize(ob[i]->short(PL_MIA)) + " bylo dosc zylaste i "+
             "niezbyt smaczne.\n");
      this_player()->eat_food(pozywnosc, 0);
      ob[i]->remove_object();
   }
   else
   {  
     if (!(j=sizeof(lok)))
     {
       write(capitalize(ob[i]->short(PL_DOP)) + " przypominalo w smaku "+
             "trawe.\n");
       ob[i]->remove_object();
       return 1;
     }
     if (ob[i]->query_prop(CORPSE_I_NADGRYZIONY))
       j = ob[i]->query_prop(CORPSE_I_NADGRYZIONY);
     pom = pozywnosc / j;
     dump_array(pom);
     dump_array(sizeof(lok)-j);
     if (this_player()->eat_food(pom, 1))
     {
       write("Odrywasz ");
       say(QCIMIE(this_player(), PL_MIA)+" z wielka wprawa odrywa ");
     }
     else
     {
       write(capitalize(ob[i]->short(PL_MIA)) + " stanowi zbyt duze wyzwanie "+
             " dla twojego nieposkromionego glodu.\n");
       say(QCIMIE(this_player(), PL_MIA)+ " spojrzal glodnym wzrokiem na "+
         ob[i]->short(PL_BIE)+".\n");
       
       return 1;
     }
     while (--j>=0 && this_player()->eat_food(pom, 1))
     {
       write (lok[j]+" ");
       say(lok[j]+" ");
       this_player()->eat_food(pom, 0);
     }
     write("po czym zaczynasz przezuwac wyrwane kawalki miesa.\n");
     say("po czym zaczyna przezuwac wyrwane kawalki miesa.\n");
     if (koniec)
     {
       write("Niedojedzone czesci ciala wypadaja ci z ust na podloze.\n");
       say("Niedojedzone czesci "+ob[i]->short(PL_DOP)+" wypadaja z ust "+
          QCIMIE(this_player(), PL_DOP)+" na podloze.\n");
     }
     if (j<0)
       ob[i]->remove_object();
     else
     {
       ob[i]->dodaj_przym(lok1[j][0], lok1[j][1]);
       ob[i]->add_prop(CORPSE_I_NADGRYZIONY, j);
     }
   }
 } 
 if (!koniec)
 {
   write("Jako dobry ogr nie pozostawiles niczego drobnym podjadaczom, "+
     "ktorzy mogliby czychac na twoj posilek.\n");
   set_alarm(3.0, 0.0, "command", "beknij przecia");
 }
 else
 {
   tr = clone_object(OBJ+"ogry_poison");
   tr->set_damage(({POISON_FATIGUE, 
     100 - this_player()->query_skill(SS_WYZERKA),
     POISON_HP, 50 - this_player()->query_skill(SS_WYZERKA)/2}));
   tr -> move(this_player());
   tr -> start_poison();
   tr = clone_object(OBJ + "ogry_szczatki");
   tr -> set_prop(OBJ_I_WEIGHT, pozywnosc*
      this_player()->query_skill(SS_WYZERKA));
   tr -> move(environment(this_player()));
   set_alarm (3.0, 0.0, "command", "pierdnij");
 }
 return 1;
}
