/*
 * Sala ze stolkami gdzie ogry jedza, pija, opowiadaja, spiewaja
 * i wala piesciami w stol i oblizuja lyzki (co jest oczywiscie zakazane :))
 * sala jest polaczona z kuchnia
 * Kaes, kwiecien 98
 * Silowanie: Mithandir, wrzeseni 98
*/

#include "ogry.h"
inherit "/d/Imperium/std/room";
inherit "/lib/pub";
inherit "/cmd/std/command_driver.c";
#include <composite.h>

#define SIEDZACY " siedzacy przy stole"

object *siluja_sie=({});
mapping kondycje=([]);

void
create_imperium_room()
{
 add_prop(ROOM_I_LIGHT, 2);

 add_prop(ROOM_I_INSIDE, 1);

 set_short("Sala jadalna w gildii");
 set_long("@@opis");
 add_exit(PATH+"dziedziniec.c","polnoc","@@go",1);
 add_exit(PATH+"koryt2.c","wschod","@@go",1);

 add_item(({"sale","pomieszczenie"}),
       "Ogromna sala, z dlugimi, poustawianymi w poprzek stolami. Przy kazdym "+
       "stole ustawiona jest lawa. W wielu miejscach widzisz resztki jedzenia, "+
       "a na kazdym stole (a czasem i pod nim) leza lyzki i brudne miski. "+
       "Tutaj odbywaja sie slawne zawody ogrow w silowaiu na reke, czesto "+
       "polaczone z \"wyborami\" nowego Herszta.\n");
 add_item(({"lyzki","miski"}),"Pelno brudnych lyzek i misek, Jednak, "+
       "ku twojemu zaniepokojeniu, widzisz kilka czystych lyzek! Ktorys "+
       "ogr zapewne oblizuje sztucce po kazdym posilku!\n");
 add_item(({"stoly","lawy"}), "Wygladaja na wytrzymale. Mozesz chyba usiasc "+
       "przy jednym ze stolow.\n");
 add_item("tabliczke","Mala tabliczka, z wypisanym koslawymi literami menu.\n");
 add_item(({"bar","lade","polki"}),"Maly bar, dla czlonkow tutejszego "+
       "stowarzyszenia.\n");
 add_cmd_item(({"tabliczke","menu"}),({"czytaj","przeczytaj"}),"@@menu");

 add_drink("piwa","piwo","maly kufel jasnego piwska", "jasnego piwska",
             ({({"maly","jasny"}),
 	    ({"mali","jasni"})}),4,500,5,60,PL_NIJAKI_NOS,"Mala, drewniana "+
 	      "beczulka na piwo. Nic specjalnego.");
 	      
 add_drink("wina","wino","szklanke czerwonego wina","",({({"czerwony","wytrawny"}),
 	    ({"czerwoni","wytrawni"})}),12,250,0,400,PL_NIJAKI_NOS);

 add_food("udziec",0,400,40,PL_MESKI_NOS_NZYW,
           "duzy, barani udziec");

 add_wynos_food(({"jaszczurka","jaszczurki","jaszczurce","jaszczurke",
            "jaszczurka","jaszczurce"}),({"jaszczurki","jaszczurek",
            "jaszczurkach","jaszczurki","jaszczurkami","jaszczurkach"}),
            ({({"pieczona"}),({"pieczeni"})}), 300, 35 ,"Hmm... nie wyglada "+
            "bardzo apetycznie, ale na pewno jest pozywne!\n",PL_ZENSKI,
            1200);
}

string opis()
{
	 
string str= " Duza, jasno oswietlona sala. Miejsce, gdzie wszystkie ogry "+
       "bardzo czesto sie spotykaja. A to przy kolejnym, bardzo waznym "+
       "zebraniu, albo podczas posilku, w koncu by odpoczac po "+
       "trudach w swiecie zewnetrznym."+
       " Pod sciana widzisz dluga lade, na ktorej stoja puste kieliszki. Za nia "+
       "jest polka z butelkami. Masz przed soba lokalna knajpe.\n"+
       "Z przeciwnej strony widzisz male schodki, prowadzace do ciemniejszego "+
       "korytarza, ktory szybko gdzies skreca.\n";
       int size;
       size=sizeof(siluja_sie)-1;
       while(size+1)
       {
       		str+=Imie(siluja_sie[size], PL_MIA)+" siluje sie z "+
       		 	imie(siluja_sie[size-1], PL_NAR)+".\n";
       		size-=2;
       }
       return str;
       
}

int
go()
{
   if (this_player()->query_prop("_ogr_w_gildii_siedzi_"))
      {
       write("Moze najpierw wstaniesz zza stolu?\n");
       return 1;
      }
   return 0;
}

int
czy_siedzi()
{
  return this_player()->query_prop("_ogr_w_gildii_siedzi_");
}

void
init()
{
  ::init();
  add_action("do_sit","usiadz");
  add_action("do_stand","wstan");
  add_action("lizanie","wyliz");
//  add_action("podejscie_do","podejdz");
//  add_action("zrzucenie","zrzuc");
  add_action("do_no_command","podskocz");
  add_action("siluj","siluj");
  add_action("nic","",1);
  add_action("przestan","przestan");
  add_action("poddaj","poddaj");

  init_pub();
  
  
}

string
menu()
{
  say(QCIMIE(this_player(),PL_MIA)+" czyta tabliczke.\n");
  return
  "\nNa tabliczce widzisz:\n\n"+
  "\nMENU:\n"+
  "Napoje:\n"+
  "Czerwone wino:     100 miedziakow\n\n"+
  "Piwo jasne:  30 miedziakow za pol litra\n"+
  "Oraz 5 litrowa beczulka za 490 miedziakow!\n\n"+  
  "Jedzenie:\n"+
  "Udziec barani:     40 miedziakow\n"+
  "Pieczona jaszczurka:   35 miedziakow\n\n"+
  
  "\tDZIEKUJEMY ZA ZAKUPA.\n";
}
  
string
do_no_command()
{
  if(this_player()->query_prop("_ogr_w_gildii_siedzi_"))
  {
   write("Najpierw musisz wstac od stolu.\n");
   return "";
  }
  return "";
}

string
do_sit()
{
  if(!this_player()->query_prop("_ogr_w_gildii_siedzi_"))
  {
   write("Ociezale siadasz na lawie, na jednym z wolnych miejsc.\n");
   say(QCIMIE(this_player(),PL_MIA)+" siada ociezale na lawie.\n");
   this_player()->add_prop("_ogr_w_gildii_siedzi_",1);
   this_player()->add_prop(LIVE_S_EXTRA_SHORT,SIEDZACY);
   return "";
  }
  write("Probujesz siasc jeszcze bardziej, ale niestety ci sie to nie "+
    "udaje.\n");
  return"";  
}
      
string
do_stand()
{
  if(!this_player()->query_prop("_ogr_w_gildii_siedzi_"))
  {
   write("Przeciez stoisz.\n");
   return "";
  }
  write("Nie bardzo ci sie chce, ale odsuwasz z hukiem lawe wstajac od stolu.\n");
  say(QCIMIE(this_player(),PL_MIA)+" wstaje glosno od stolu.\n");
  this_player()->remove_prop("_ogr_w_gildii_siedzi_");
  this_player()->remove_prop(LIVE_S_EXTRA_SHORT);
  return "";
}

string
lizanie(string co)
{
  if (co=="lyzke")
  {  
  if(this_player()->query_prop("_ogr_w_gildii_siedzi_"))
  {
   int i;
   write("Podnosisz lyzke lezaca najblizej, dyskretnie ogladasz sie na "+
     "wszystkie strony czy nikt nie widzi, po czym z luboscia wkladasz "+
     "lyzke do pyska i oblizujesz ja starannie.\n");
   i=random(10);
   if(i<=3)
   {
    write("Nie jestes pewny, czy nikt nie widzial.\n");
    say("Widzisz, jak "+QCIMIE(this_player(),PL_MIA)+" oblizuje ukradkiem lyzke!\n");
    return "";
   }
   write("Chyba nikt nie widzial.\n");    
   return "";
  }
   write("Ktora lyzke? Ich tu jest mnostwo! Poza tym, moze najpierw usiadz, "+
     "niewygodnie sie tak lize lyzki na stojaco.\n");
   return "";
  }
  write("Co chcesz wylizac?\n");
  return "";
}

wygral(object kto, object zkim)
{
	zkim->remove_prop(OG_SILUJE_SIE);
	kto->remove_prop(OG_SILUJE_SIE);
	kto->remove_prop(OG_PRZYGOTOWUJE_SIE);
	zkim->remove_prop(OG_PRZYGOTOWUJE_SIE);
	siluja_sie-=({zkim, kto});
	if (kto->query_herszt()==zkim->query_real_name())
	{
		kto->set_herszt(kto);
		kto->catch_msg("Zostales nowym Hersztem Ogrow z Gor!\n");
		tell_room(TO, QCIMIE(kto, PL_MIA) + " zostal nowym Hersztem Ogrow z Gor!\n");
	}
	return;
}

silowanie(object kto, object zkim, int con1, int con2, int wynik)
{
	object tmp;
	int sila1, sila2, tmpcon, zmiana, roznica;
	sila1=kto->query_stat(SS_STR)*con1/100;
	sila2=zkim->query_stat(SS_STR)*con2/100;
	if (member_array(kto, siluja_sie)==-1) return;
	wynik+=roznica=sila1-sila2;
	if (con1<=0 && wynik<100 && wynik >-100)
	{
		if (con2<=0)
		{
			({kto, zkim})->catch_msg("Czujesz, jak twoje sily "+
			    "wyczerpuja sie. Na szczescie twoj przeciwnik "+
			    "rowniez zdaje sie nie miec ich juz zbyt wiele. "+
			    "Jednoczesnie puszczacie swoje lapy i patrzycie "+
			    "na siebie rozradowanym z dokonanego wysilku "+
			    "wzrokiem.\n");
			tell_room(TO, 
			    capitalize(COMPOSITE_LIVE(({kto, zkim}),PL_MIA))+
			    " jednoczesnie opadaja z sil i puszczaja swoje "+
			    "rece. Pojedynek jest nierozstrzygniety.\n", 
			    ({kto, zkim}));
			    
			zkim->remove_prop(OG_SILUJE_SIE);
			kto->remove_prop(OG_SILUJE_SIE);
			kto->remove_prop(OG_PRZYGOTOWUJE_SIE);
			zkim->remove_prop(OG_PRZYGOTOWUJE_SIE);
			siluja_sie-=({zkim, kto});
			return;
		}
		wynik=-101;
	}
	if (con2<=0 && wynik<100 && wynik >-100)
	{
		wynik=101;
	}
	if (wynik<0) 	// Zamieniamy, zeby _kto_ zawsze wygrywal.
	{
		tmp=kto;
		kto=zkim;
		zkim=tmp;
		tmpcon=con1;
		con1=con2;
		con2=tmpcon;
		wynik=-wynik;
		zmiana=1;
	}
	if (wynik>100)
	{
		kto->catch_msg("Naciskasz z celej sily na lape "+
			QIMIE(zkim, PL_DOP)+". "+
			zkim->koncowka("Jego","Jej")+" ramie nagle wiotczeje, "+
			"dlon dotyka blatu. Puszczasz ja i z satysfakcja "+
			"ocierasz pot z czola. Wygral"+
			kto->koncowka("es","as")+"!\n");
		zkim->catch_msg("Czujesz, jak "+QCIMIE(kto, PL_MIA)+
			" przelamuje opor twoich miesni. Wytezasz wszystkie "
			+"sily, ale czujesz, ze nie dasz rady juz dluzej "+
			"wytrzymac. Twoja dlon wiotczeje i opada na blat. "
			+"Czujesz w duchu gorycz porazki. Przegral"+
			zkim->koncowka("es","as")+".\n");
		tell_room(TO, QCIMIE(kto, PL_MIA)+" naciska z calej sily na "+
			"lape "+QIMIE(zkim, PL_DOP)+", ktore"+
			zkim->koncowka("go","j")+" miesnie nagle "+
			"wiotczeja, a dlon opada na blat. "+QCIMIE(kto, PL_MIA)
			+" wygral"+
			kto->koncowka("","a")+"!\n", ({kto, zkim}));
		wygral(kto, zkim);
		return;
	}
	if (zmiana)
	{
		kto->catch_msg("Wytezasz wszystkie sily, i udaje ci sie "+
			"przegiac lape "+QIMIE(zkim, PL_DOP)+" poza linie "+
			"srodka! Zaczynasz wygrywac.\n");
		zkim->catch_msg("Mimo ogromnego wysilku, jaki wkladasz w "+
			"przegiecie lapy "+QIMIE(kto, PL_DOP)+", udaje "+
			kto->koncowka("mu","jej")+" "+
			"sie przegiac szale zwyciestwa na swoja strone. "+
			"Teraz "+kto->koncowka("jego","jej")+" reka jest nad twoja. Jesli tak dalej "+
			"pojdzie, przegrasz.\n");
		tell_room(TO, QCIMIE(kto, PL_MIA)+" przegina lape "+
			QIMIE(zkim, PL_DOP)+" i zaczyna wygrywac! Jesli nic "+
			"sie nie zmieni, wkrotce zwyciestwo bedzie "+
			kto->koncowka("jego","jej")+"!\n",
			({kto, zkim}));
	}
	else
	{
/* stara
		if (roznica>0)
		{
			kto->catch_msg("Powoli, ale ciagle, przyginasz lape "+
				QIMIE(zkim, PL_DOP)+" do blatu. Wkrotce "+
				"zwyciestwo bedzie twoje!\n");
			zkim->catch_msg("Powoli, jednostajnym ruchem "+
				QIMIE(kto, PL_MIA)+" przygina twoja lape do "+
				"blatu. Powoli tracisz nadzieje na zwyciestwo"+
				".\n");
			tell_room(TO, "Powoli, jednostajnym ruchem, "+
				QIMIE(kto, PL_MIA)+" przygina lape "+
				QIMIE(zkim, PL_DOP)+" do blatu. Wkrotce "+
				"zwyciestwo bedzie "+
				kto->koncowka("jego","jej")+"!\n", ({kto, zkim}));
		}
*/
		if (roznica>0)
		{
			kto->catch_msg("Powoli, ale ciagle, przyginasz lape "+
				QIMIE(zkim, PL_DOP)+" do blatu.\n");
			zkim->catch_msg("Powoli, jednostajnym ruchem "+
				QIMIE(kto, PL_MIA)+" przygina twoja lape do "+
				"blatu.\n");
			tell_room(TO, "Powoli, jednostajnym ruchem, "+
				QIMIE(kto, PL_MIA)+" przygina lape "+
				QIMIE(zkim, PL_DOP)+" do blatu.\n", 
				({kto, zkim}));
		}
		if (roznica<0)
		{
			kto->catch_msg("Ze zgroza dostrzegasz, ze "+
				QIMIE(zkim, PL_MIA)+" zaczyna unosic twoja "+
				"lape! Ciagle jeszcze wygrywasz, ale wkrotce "+
				"moze sie to zmienic!\n");
			zkim->catch_msg("Z radoscia zauwazasz, ze twoja lapa "+
				"zaczyna sie unosic, powoli przeginajac lape "+
				QIMIE(kto, PL_DOP)+". Ciagle jeszcze "+
				"przegrywasz, ale szala zwyciestwa zdaje sie "+
				"przechylac na twoja strone.\n");	
			tell_room(TO, "Nagle lapa "+QIMIE(kto, PL_DOP)+
				" zaczyna sie unosic pod wplywem nacisku "+
				QIMIE(zkim, PL_DOP)+", "+
				zkim->koncowka("ktory","ktora")+" wprawdzie ciagle"+
				"jeszcze przegrywa, ale zdaje sie odzyskiwac "+
				"nadzieje!\n", ({kto, zkim}));
		}
		if (roznica==0)
		{
			({kto, zkim})->catch_msg("Natezasz wszystkie sily, "+
				"aby przegiac lape przeciwnika, jednak sily "+
				"wasze rownowaza sie. Jesli zadnemu z was "+
				"nie uda sie przygiac lapy przeciwnika do "+
				"blatu, wygra wytrzymalszy.\n");
			({kto, zkim})->remove_prop(LIVE_S_EXTRA_SHORT);
			tell_room(TO, 
			     capitalize(COMPOSITE_LIVE(({kto, zkim}), PL_MIA))+
			     " natezaja wszystkie sily, aby przegiac lape "+
			     "przeciwnika, jednak ich sily zrownowaza sie. "+
			     "Jesli nic sie nie zmieni, wygra wytrzymalszy zawodnik."+
			     "\n", ({kto, zkim}));
			({kto, zkim})->add_prop(LIVE_S_EXTRA_SHORT, SIEDZACY);
		}
	} 
	set_alarm(4.0, 0.0, &silowanie(kto, zkim, con1-10, con2-10, wynik));
}
		
	


int
siluj(string str)
{
	object *cele, zkim;
	notify_fail("Siluj sie z kim?\n");
	if (!str)
		return 0;
	
	if (!czy_siedzi()) 
	  return notify_fail("Musisz siedziec za stolem, zeby sie moc silowac.\n");
	
	cele=parse_this(str, "'sie' 'z' %l:"+PL_NAR);
	if (!sizeof(cele))
	  return notify_fail("Z kim chcesz sie silowac?\n");
	if (sizeof(cele)>1)
	  return notify_fail("Z kim dokladnie chcesz sie silowac?\n");
	if (zkim=cele[0]->query_prop(OG_SILUJE_SIE))
	{
		write(Imie(cele[0], PL_MIA)+" juz siluje sie z "+imie(zkim, PL_NAR)+".\n");
		return 1;
	}
	if (zkim=cele[0]->query_prop(OG_PRZYGOTOWUJE_SIE))
	{
		if (zkim!=TP)
		{
			write (Imie (cele[0], PL_MIA) + " przygotowuje sie "
				+"wlasnie do silowania z "+imie(zkim, PL_NAR)+
				".\n");
			return 1;
		}
		cele[0]->catch_msg(QCIMIE(TP, PL_MIA)+" zajmuje miejsce "+
			"naprzeciwko ciebie. Wyciaga muskularna reke nad "+
			"stol, i zaciska gruba lape na twojej dloni. "+
			"Rozpoczyna sie silowanie!\n");
		tell_room(TO, QCIMIE(TP, PL_MIA)+" siada obok "+
			QCIMIE(cele[0], PL_DOP)+" i wyciaga gruba lape. "+
			"Zaczynaja sie silowac.\n", ({cele[0], TP}));
		write("Siadasz naprzeciwko przygotowanego juz do pojedynku "+
			imie(cele[0], PL_DOP)+" i wyciagasz nad stol swa " +
			"wielka lape. Zaczynacie sie silowac!\n");
		cele[0]->add_prop(OG_SILUJE_SIE, TP);
		TP->add_prop(OG_SILUJE_SIE, cele[0]);
		siluja_sie+=({cele[0], TP});
		set_alarm(4.0, 0.0, &silowanie(cele[0], TP, 
			cele[0]->query_stat(SS_CON), TP->query_stat(SS_CON), 0));
		
		
		return 1;
	}
	tell_room(environment(TP), QCIMIE(TP, PL_MIA)+" przybiera wygodna "
		+"pozycje i patrzy spode lba na "+QIMIE(cele[0], PL_BIE)+
		", wyzywajac go na reke.\n", ({cele[0], TP}));
	write("Przybierasz wygodna pozycje i wyzywasz "+imie(cele[0], PL_BIE) +
		" na reke.\n");
	cele[0]->catch_msg(QCIMIE(TP, PL_MIA)+" przybiera wygodna pozycje i " +
		"wyzywa cie na reke.\n");
	TP->add_prop(OG_PRZYGOTOWUJE_SIE, cele[0]);
	return 1;
}
		
int
nic(string str)
{
	string *dozwolone=({"przyzwij","zakoncz","zglos","krzyknij","powiedz", "sp"});
	if (member_array(query_verb,dozwolone)!=-1) return 0;
	if (query_verb()[0..0]=="'") return 0;
	if (TP->query_prop(OG_SILUJE_SIE))
	{
		write("Nie mozesz tego zrobic podczas silowania sie! Jesli "+
			"chcesz przestac, poddaj sie.\n");
		return 1;
	}
	if (TP->query_prop(OG_PRZYGOTOWUJE_SIE))
	{
		write("Nie mozesz tego robic podczas przygotowywania do "+
			"silowania. Jesli chcesz, mozesz przestac sie przygotowywac.\n");
		return 1;
	}
	return 0;
}

int
przestan(string str)
{
	if (TP->query_prop(OG_PRZYGOTOWUJE_SIE))
	{
		TP->remove_prop(OG_PRZYGOTOWUJE_SIE);
		write("Juz nie przygotowujesz sie do silowania.\n");
		say(QCIMIE(TP, PL_MIA) +" rezygnuje z czekania na przeciwnika.\n");
		return 1;
		
	}
	return notify_fail("Ty wcale nie przygotowujesz sie do silowania!\n");
}
	

int
poddaj(string str)
{
	object zkim;
	if (str!="sie")
		return notify_fail("Chyba poddaj sie?\n");
	if (zkim=TP->query_prop(OG_SILUJE_SIE))
	{
		write("Poddales sie. "+Imie(zkim, PL_MIA)+" wygral!\n");
		tell_room(TO, QCIMIE(TP, PL_MIA) + " poddal sie. "+
			QCIMIE(zkim, PL_MIA)+" wygral!\n", ({zkim, TP}));
		zkim->catch_msg(QCIMIE(TP, PL_MIA)+" poddal sie. Wygrales!\n");
		wygral(zkim, TP);
		return 1;
		
	}
	write("Przeciez sie z nikim nie silujesz!\n");
	return 1;
}
