
#define NO_STR(a)  if (!str) return notify_fail(a)
#define STR	if (str) return notify_fail("To polecenie nie przyjmuje zadnych argumentow.\n")


string
comp_zaimki(object *kogo, int przyp, int krotki=0)
{
	string *zaimki=({"oni","ich","im","ich","nimi","nich"});
	int i;
	
	if (sizeof(kogo)==1)
	{
		return kogo[0]->query_zaimek(przyp, krotki);
	}
	if (!krotki && przyp==PL_BIE) return zaimki[przyp];
	switch (przyp)
	{
		case PL_MIA:
		    for (i=sizeof(kogo)-1;i>=0;i--)
		    { 
		    	if (kogo[i]->query_gender()==0)
		    	{
		    		return zaimki[przyp];
		    	}
		    }
		    return "one";
		case PL_BIE:
		    for (i=sizeof(kogo)-1;i>=0;i--)
		    { 
		    	if (kogo[i]->query_gender()==0)
		    	{
		    		return zaimki[przyp];
		    	}
		    }
		    return "je";
		default:
			return zaimki[przyp];
	}
}
		    
		    	


string
zaimki_dz(object co, int przyp)
{
	mixed *meskie=({"swoj","swojego","swojemu","swoj","swoim","swoim"}),
	      *zenskie=({"swoja","swojej","swojej","swoja","swoja","swojej"});
		
	return co->koncowka(meskie[przyp], zenskie[przyp]);
}

mixed  
query_bron(int przyp=0)
{
	object miecz;
	string opis;
	string rodzaj;
   	miecz=(this_player()->query_weapon(W_RIGHT) || 
      		this_player()->query_weapon(W_LEFT) || this_player()->query_weapon(W_BOTH));
   	if (!miecz || miecz->query_wt() != W_AXE ) 
           return 0;
        opis=miecz->short(przyp);
        return ({miecz, opis, zaimki_dz(miecz, przyp)});
}
	
string
swoj(int przyp=PL_NAR)
{
	mixed bron=query_bron(przyp);
	if (!bron) 
	{
		notify_fail("Musisz dzierzyc topor, aby moc to zrobic!\n");
		return 0;
	}
	return bron[2]+" "+bron[1];
}


int
zatak(string str)
{
   object *kogo;
   mixed no_attack;

   if (!swoj()) return 0;

   if (!str)
   {
   	all("zaczyna wymachiwac "+swoj()+" przygotowujac sie do ataku.");
   	write("Zaczynasz wymachiwac "+swoj()+" przygotowujac sie do ataku.\n");
   	return 1;
   }
   kogo=parse_this(str,"%l:"+PL_BIE);
   if (!sizeof(kogo))
   	return notify_fail("Kogo chcesz zaatakowac?\n");
   if (sizeof(kogo)>1)
   	return notify_fail("Kogo dokladnie chcesz zaatakowac?\n");
   if (!F_DARE_ATTACK(TP, kogo[0]))
   	return notify_fail("Nie odwazysz sie na to.\n");
   no_attack=kogo[0]->query_prop(OBJ_M_NO_ATTACK);
   if (!no_attack) no_attack=environment(TP)->query_prop(ROOM_M_NO_ATTACK);
   if (no_attack)
   {
   	if (stringp(no_attack))
   		write(no_attack);
   	else write("Nie mozesz zaatakowac "+kogo[0]->query_imie(TP, PL_BIE)+"\n");
   	return 1;
   }
   all2act("z okrzykiem \"T H R O R I N!!!\" na ustach, wymachujac "+swoj()+" atakuje",kogo, PL_BIE);
   target("z okrzykiem \"T H R O R I N!!!\" na ustach, wymachujac "+swoj()+" atakuje cie!",kogo);
   actor("Z okrzykiem \"T H R O R I N!!!\" na ustach, wymachujac "+swoj()+" atakujesz",kogo, PL_BIE);
   TP->attack_object(kogo[0]);
   return 1;
}

int
zokrzyk(string str)
{
	STR;
	all("wydaje z siebie potworny, zadny krwi krzyk THRORIN !!!\nSlyszac ten krzyk wzdrygasz sie i masz ochote zatkac uszy.");
	write("Wydajesz z siebie potworny, zadny krwi okrzyk THRORIN !!!\n");
	return 1;
}

int
zczysc(string str)
{
	string opis=swoj(PL_BIE);
	STR;
	if (!opis)
	   	return notify_fail("Musisz dzierzyc mlot lub topor, aby moc to zrobic!\n");
	all("szybkim ruchem reki czysci "+swoj(PL_BIE)+"z zakrzeplej krwii przeciwnikow.");
	write("Szybkim ruchem reki czyscisz "+swoj(PL_BIE)+" z zakrzeplej krwii przeciwnikow.\n");
	return 1;
}

int
zzapasc(string str)
{
	STR;
	all("pochyla nisko glowe, i rozglada sie na boki z dzikim spojrzeniem. Jego oczy staja sie niespokojnie zimne, wrecz wrogie. Masz nieodparta chec usunac mu sie z drogi.");
	write("Gdy patrzysz na wszystkich dookola ciebie, powracaja stare wspomnienia. Czego oni chca od ciebie, dlaczego sie tak patrza ?\n");
	return 1;
}

int
zzamierz(string str)
{
   object *oblist;
   
   NO_STR("Poprawna skladnia: zzamierz sie na <kogo>.\n"); 
   if (!swoj()) 
   	return 0;
   oblist = parse_this (str, "'sie' 'na' %l:"+PL_BIE);
   if(sizeof(oblist)==0)
   	return notify_fail("Na kogo chcesz sie zamierzyc?\n");
   if (sizeof(oblist) > 1)
   	return notify_fail("Na kogo dokladnie chcesz sie zamierzyc?\n");

   target("zwinnie przerzuca "+swoj(PL_BIE)+" nad ramieniem, biorac szeroki zamach i mierzac w ciebie! W ostatniej chwili kieruje ostrze w ziemie tuz kolo twoich nog!", oblist);
   all2act("zwinnie przerzuca "+swoj(PL_BIE)+" nad ramieniem, biorac szeroki zamach i mierzac w",oblist,PL_BIE,"! W ostatniej chwili kieruje ostrze w ziemie tuz kolo "+comp_zaimki(oblist, PL_DOP)+" nog!");
   actor("Sapiac lekko bierzesz szeroki zamach "+swoj(PL_NAR)+" na",oblist, PL_BIE," i z msciwa satysfakcja w ostatniej chwili omijasz go ostrzem.");
   
   return 1;
}

int
zspojrz(string str)
{
    object *oblist;

        if (!str)
        {
                allbb("Przesuwa wzrokiem po wszystkich obecnych. Czujesz jak na widok jego zimnych oczu, w ktorych widac lekcewazenie i pozadanie smierci, ogarnia cie przerazenie.");
        	write("Przesuwasz wzrokiem po wszystkich obecnych.\n");
        }
        return 1;
    oblist = parse_this (str,"'na' %l:"+PL_BIE);

    if(sizeof(oblist)!=0)
        {
		target("podnosi na ciebie wzrok. Czujesz, jak na widok jego zimnych oczu, w ktorych widac lekcewazenie i pozadanie smierci, ogarnia cie przerazenie.", oblist);
		all2act("podniosl zimny, przerazajacy wzrok na",oblist, PL_BIE);            
		actor("Wlepiasz wzrok w",oblist, PL_BIE);
		return 1;
        }
        notify_fail("Zspojrz na kogo?\n");
        return 0;
}
int
zsmiech(string str)
{
	STR;
	all("zaczyna sie nagle trzasc. Z jego gardla wydobywa sie dziwny charkot, ktory z trudem przypomina ci smiech.");
	write("Smiejesz sie do rozpuku.\n");
	return 1;
}

int
zpowitaj(string str)
{
	object *kogo;
	NO_STR("Poprawna skladnia: zpowitaj <kogo>\n");
	kogo=parse_this(str, "%l:"+PL_BIE);
	if (!sizeof(kogo))
		return notify_fail("Kogo chcesz powitac?\n");
	all2act("wyszczerza zeby w radosnym usmiechu, zamykajac", kogo, PL_BIE," w niedzwiedzim uscisku i prawie lamiac	"+comp_zaimki(kogo, PL_CEL, 1)+" kosci.");
 	target("wyszczerza do ciebie zeby w radosnym usmiechu, zamykajac cie w niedzwiedzim uscisku i prawie lamiac ci kosci.",kogo);
 	actor("Sciskasz na powitanie",kogo,PL_BIE);
 	return 1;
 }

int 
zpozegnaj(string str)
{
 	object *kogo;
 	NO_STR("Poprawna skladnia: zpozegnaj <kogo>\n");
 	if (!swoj()) return 0;
 	
 	kogo=parse_this(str, "%l:"+PL_BIE);
 	if (!sizeof(kogo))
 		return notify_fail("Kogo chcesz pozegnac?\n");
 	all2act("wznosi "+swoj(PL_BIE)+" w strone",kogo, PL_DOP,", polecajac "+comp_zaimki(kogo, PL_BIE, 0)+" opiece Throrina.");
 	target("wznosi "+swoj(PL_BIE)+" w twoja strone, polecajac cie opiece Throrina.", kogo);
	actor("Wznosisz "+swoj(PL_BIE)+" w strone", kogo, PL_DOP,", polecajac "+comp_zaimki(kogo, PL_BIE, 0)+" opiece Throrina.");
	return 1;
}

int
zdobadz(string str)
{
	object topor, *czego;
	mixed nie_mozna;
	int i=0;
	NO_STR("Czego chcesz dobyc?\n");
	parse_command(str, TP, "%i:"+PL_DOP, czego);
	czego=NORMAL_ACCESS(czego, 0, 0);
	TP->set_obiekty_zaimkow(czego);
	if (!sizeof(czego))
	   return notify_fail("Czego chcesz dobyc?\n");
	while((topor->query_wt()!=W_AXE) && (topor=czego[i++]) && (i<sizeof(czego)));
	
	if (topor->query_wt()!=W_AXE)
	   return notify_fail("W ten sposob mozesz dobyc tylko topora.\n");
        
	nie_mozna=TP->wield(topor);
	if (stringp(nie_mozna)) return notify_fail(nie_mozna);
	if (!nie_mozna) return notify_fail("Nie mozesz dobyc "+
	   topor->short(PL_DOP)+".\n");
	all("zamaszystym, szybkim ruchem dobywa "+zaimki_dz(topor, PL_DOP)+
	   " przewieszone"+topor->koncowka("go","j")+" przez plecy "+
	   topor->short(PL_DOP)+" i staje w rozkroku unoszac "+
	   topor->koncowka("go","ja")+" nad glowe.");
	write("Zamaszystym, szybkim ruchem dobywasz "+zaimki_dz(topor, PL_DOP)+
	   " przewieszone"+topor->koncowka("go","j")+" przez plecy "+
	   topor->short(PL_DOP)+ " i stajesz w rozkroku unoszac "+
	   topor->koncowka("go","ja")+" nad glowe.\n");
	return 1;
}

int
zopusc(string str)
{
	object bron, *bronie, *tmp;
	int i;
	bronie=({this_player()->query_weapon(W_RIGHT), 
      		this_player()->query_weapon(W_LEFT),
      		this_player()->query_weapon(W_BOTH)})-({0});
    	for (i=sizeof(bronie)-1;i>=0;i--)
    	{
    		if (bronie[i]->query_wt()!=W_AXE)
    		   bronie-=({bronie[i]});
    	}
    	if (!sizeof(bronie))
    	   return notify_fail("Aby moc to zrobic, musisz wczesniej miec dobyty topor!\n");
	if (!str)
	   bron=bronie[0];
	else
	{
	   parse_command(str, bronie, "%i:"+PL_BIE, tmp);
	   bronie=NORMAL_ACCESS(tmp, 0, 0);
	   TP->set_obiekty_zaimkow(bronie);
	   if (!sizeof(bronie))
	      return notify_fail("Nie dobywasz takiej broni!\n");
	   bron=bronie[0];
	}
	TP->unwield(bron);
	write("Rozgladajac sie dookola z mina pelna niepewnosci"+
	      " przewieszasz przez plecy "+bron->short(PL_BIE)+". Czujesz, "+
	      "jak bardzo bedzie ci "+bron->koncowka("go","jej")+" brakowac.\n");
	all("Rozgladajac sie do okola z niepewnosci pelna niepewnosci mina "+
	      "przewiesza przez plecy "+zaimki_dz(bron, PL_BIE)+" "+
	      bron->short(PL_BIE)+". Wyraz jego twarzy pokazuje, jak bardzo "+
	      "mu "+bron->koncowka("go","jej")+"brakuje.");
	return 1;
} 

int
zpomoc(string str)
{
	STR;
	write("Komendy zabojcow: \n"+
		"\t- zatak [kogo]\n"+
		"\t- zczysc\n"+
		"\t- zokrzyk\n"+
		"\t- zpowitaj <kogo>\n"+
		"\t- zpozegnaj <kogo>\n"+
		"\t- zsmiech\n"+
		"\t- zspojrz\n"+
		"\t- zzamierz sie na <kogo>\n"+
		"\t- zzapasc\n"+
		"\n\t- zdobadz <czego>\n"+
		"\t- zopusc [co]\n"+
		"\n");
	return 1;
}

init_emoty()
{
	add_action(zpozegnaj, "zpozegnaj");
	add_action(zpowitaj, "zpowitaj");
	add_action(zsmiech, "zsmiech");
	add_action(zspojrz, "zspojrz");
	add_action(zzamierz, "zzamierz");
	add_action(zzapasc, "zzapasc");
	add_action(zczysc, "zczysc");
	add_action(zokrzyk, "zokrzyk");
	add_action(zatak, "zatak");
	add_action(zopusc,"zopusc");
	add_action(zdobadz,"zdobadz");
	add_action(zpomoc, "zpomoc");
}
