/*
 *		Naszyjnik dla zabojcow {trolli, gigantow, smokow, demonow}.
 *
 *		Napisal : Mithandir ... 1998
 *              Generalne zmiany Morley 1998 - 1999 
 */
 
inherit "/std/object.c";
inherit "/cmd/std/command_driver";

#include "morley.h"
#include <formulas.h>
#include <composite.h>

#pragma no_inherit

/*
 * Prototypy
 */
void setup_naszyjnik();
string q_master(object ob);
void init_emoty();

static object my_owner;

static int jaki_zabojca;
static int zalozony=0;
static object *zaatakowani;

void
create_object()
{
    ustaw_nazwe (({"naszyjnik","naszyjnika","naszyjnikowi","naszyjnik",
		       "naszyjnikiem","naszyjniku"}),
		 ({"naszyjniki","naszyjnikow", "naszyjnikom","naszyjniki",
		       "naszyjnikami","naszyjnikach"}),
		PL_MESKI_NZYW);

    add_prop (OBJ_I_WEIGHT, 300);
    add_prop (OBJ_I_VALUE, 0);
    add_prop (OBJ_I_NO_DROP, "Nie mozesz wyrzucic naszyjnika. Jesli "+
	      "chcesz sie go pozbyc, mozesz go zniszczyc.\n");

    setuid();
    seteuid(getuid());
}

/*
 *
 * Funkcje wykorzystywane w dalszej czesci obiektu
 *
 */

#define NO_STR(a)  if (!str) return notify_fail(a)
#define STR	if (str) return notify_fail("To polecenie nie przyjmuje zadnych argumentow.\n")
#define IMIE_NIC(ob) "@@imie_lub_nic:" + MASTER + "|" + ob->query_real_name() + "@@"

int
usun_propy()
{
    remove_prop(OBJ_M_NO_DROP);
    remove_prop(OBJ_M_NO_SELL);
    remove_prop(OBJ_M_NO_GIVE);
}

int
dodaj_propy()
{
	add_prop (OBJ_M_NO_DROP, "Nie mozesz wyrzucic naszyjnika. Jesli "+
		"chcesz sie go pozbyc, mozesz go zniszczyc.\n");
	add_prop (OBJ_M_NO_SELL, "Nie mozesz sprzedac naszyjnika bedacego symbolem " +
		  "twojej przynaleznosci do Zabojcow.\n");
	add_prop (OBJ_M_NO_GIVE, "Nie mozesz oddac naszyjnika bedacego symbolem " +
		  "twojej przynaleznosci do Zabojcow.\n");
}


void
setup_naszyjnik()
{
    string przydawka, tmp;
    int przyp;
    string *shortyp = ({});
    string *shortym = ({});
    
    my_owner = environment();
    if (!interactive(my_owner))
	remove_object();

    jaki_zabojca = ADMIN_OB->zabojca(my_owner);

    if (ADMIN_OB->zatwierdzony(my_owner))
    {
	przydawka = CZEGO_LM[PL_DOP][jaki_zabojca];

	while (przyp <= PL_MIE)
	{
	    tmp = query_name(0, przyp) + " zabojcy " + przydawka;
	    shortyp += ({tmp});
	    tmp = query_pname(0, przyp++) + " zabojcow " + przydawka;
	    shortym += ({tmp});
	}

	ustaw_shorty(shortyp, shortym, PL_MESKI_NZYW);
	dodaj_propy();
    }

    add_prop (OBJ_I_VALUE, 240+240*10*jaki_zabojca);
    
    if (ADMIN_OB->zatwierdzony(my_owner))
    {
	set_long("Jest to przepiekny "+short(PL_MIA)+" wykonany "+
		 WYKONANY[jaki_zabojca]+". Znac na nim slady mistrzowskiej roboty "+
		 "krasnoludzkich zlotnikow. Taki naszyjnik wykonany mogl zostac "+
		 "tylko w ktorejs z twierdz krasnoludzkich. Jest on symbolem "+
		 "przynaleznosci do Zabojcow "+
		 capitalize(CZEGO_LM[PL_DOP][jaki_zabojca])+".\n");
    }
    else
    {
	set_long("Jest to przepiekny "+short(PL_MIA)+" wykonany "+
		 WYKONANY[jaki_zabojca]+". Znac na nim slady mistrzowskiej roboty "+
		 "krasnoludzkich zlotnikow. Taki naszyjnik wykonany mogl zostac "+
		 "tylko w ktorejs z twierdz krasnoludzkich.\n");
    }
    update_actions();
}	
	
string
q_master(object ob)
{
    return MASTER_OB(ob);
}

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];
}

void
powiedz_okolicy(object ob, string str)
{
    string *pokoje = environment(ob)->query_exit_rooms();
    int a = sizeof(pokoje), tmp;

    if (!a)
	return;

    for (tmp = 0; tmp < a; tmp++)
	tell_room(pokoje[tmp], str);
}

string
imie_lub_nic(string imie)
{
     if(pointerp(previous_object(-1)->query_met(imie)))
	return capitalize(find_player(imie)->query_imie(previous_object(-1), PL_DOP));
    
    return "";
}

void
zablokuj_sprzedaz(object ob)
{
    if (!ob->query_prop(OBJ_M_NO_SELL))
    {
	ob->add_prop(OBJ_M_NO_SELL, "Chyba nie chcesz sprzedac broni przewieszonej " +
		     "przez plecy?\n");
    }

    if (!ob->query_prop(OBJ_M_NO_GIVE))
    {
	ob->add_prop(OBJ_M_NO_GIVE, "Chyba nie chcesz oddac broni przewieszonej " +
		     "przez plecy?\n");
    }

    if (!ob->query_prop(OBJ_M_NO_DROP))
    {
	ob->add_prop(OBJ_M_NO_DROP, "Nie mozesz odlozyc broni przewieszonej " +
		     "przez plecy.\n");
    }

}

void
odblokuj_sprzedaz(object ob)
{
    if (ob->query_prop(OBJ_M_NO_SELL) == "Chyba nie chcesz sprzedac broni przewieszonej " +
	"przez plecy?\n")
    {
	ob->remove_prop(OBJ_M_NO_SELL);
    }

    if (ob->query_prop(OBJ_M_NO_GIVE) == "Chyba nie chcesz oddac broni przewieszonej " +
	"przez plecy?\n")
    {
	ob->remove_prop(OBJ_M_NO_GIVE);
    }

    if (ob->query_prop(OBJ_M_NO_DROP) == "Nie mozesz odlozyc broni przewieszonej " +
	"przez plecy.\n")
    {
	ob->remove_prop(OBJ_M_NO_DROP);
    }
}

int
unwield()
{
    if (previous_object(-1) == this_object())
	return 1;
    return 0;
}

/*
 *
 * Komendy dostepne dla wszystkich
 *
 */

int
zniszcz(string str)
{
    if (str!="naszyjnik")
	return notify_fail("Co chcesz zniszczyc?\n");
    
    if (this_player()->query_real_name() == ADMIN_OB->query_szef())
    {
	write("Najpierw musisz przekazac komus wladze nad Zabojcami, dopiero " +
	      "potem bedziesz mogl ich opuscic.\n");
	return 1;
    }

    ADMIN_OB->usun(this_player()->query_real_name());

    write("Niszczysz naszyjnik. Od tej pory nie jestes juz Zabojca.\n");

    this_player()->clear_bit(1,0);

    say(QCIMIE(TP, PL_MIA)+" niszczy naszyjnik Zabojcy.\n");
    set_alarm(0.01, 0.0, remove_object);
    return 1;
}

int
wear(string co)
{
    notify_fail("Co chcesz zalozyc?\n");
    if (co!="naszyjnik") return 0;
    if (!ADMIN_OB->zatwierdzony(my_owner))
    {
    	notify_fail("Nie odwazysz sie zalozyc naszyjnik Zabojcow przed oficjalnym " +
		    "przyjeciem przez ich oficjalnego zwierzchnika.\n"); 
    	return 0;
    }

    write("Zakladasz na szyje " + short(PL_BIE) + ".\n");
    say(QCIMIE(TP,PL_MIA)+" zaklada na szyje " + short(PL_BIE) + ".\n");
    move(TP, ZABOJCY_SUBLOC);
    zalozony = 1;
    update_actions();
    return 1;
}

int
remove(string co)
{
    notify_fail ("Co chcesz zdjac?\n");
    if (co != "naszyjnik") 
	return 0;
    
    write("Zdejmujesz " + short(PL_BIE) + ".\n");

    say(QCIMIE(TP, PL_MIA) + " zdejmuje " + short(PL_BIE) + ".\n");

    zalozony=0;
    move(TP);
    update_actions();
    return 1;
}

/*
 *
 * Zamaskowane funkcje std. obiektu
 *
 */

void
init()
{
    ::init();

    add_action(zniszcz,"zniszcz");

    if (zalozony) 
	add_action(remove,"zdejmij");
    else 
	add_action(wear,"zaloz");

    if (ADMIN_OB->zatwierdzony(this_player()))
    	init_emoty();
}

void
leave_env(object from, object to)
{
    from->remove_subloc(ZABOJCY_SUBLOC);
    ::leave_env(from, to);
}

void
enter_env(object dest, object old)
{
    ::enter_env(dest, old);

    if (interactive(old))
   	remove_object();	
    if (!interactive(dest))
	remove_object();
    
    dest->add_subloc(ZABOJCY_SUBLOC, this_object());
    set_alarm(0.5, 0.0, setup_naszyjnik);
}

string 
query_auto_load()
{
    if (my_owner->query_hp() || my_owner->query_real_name() == ADMIN_OB->query_szef())
	return MASTER_OB(this_object());

    ADMIN_OB->usun(my_owner->query_real_name());
    return 0;
}     

/*
 *
 * Sublokacje zabojcow trolli i innych rzeczy
 *
 */

string
show_subloc(string subloc, object on_obj, object for_obj)
{
    string str = "";
    object *oblist, bron;
    int tmp, a;
    
    if(!ADMIN_OB->zatwierdzony(on_obj))
	return "";
    
    switch(subloc)
    {
    case ZABOJCY_SUBLOC:
	if (on_obj == for_obj)
	{
	    if (zalozony)
	    {
		str += "Na szyi nosisz "+short(PL_BIE)+", wykonany z oprawionych w kosztowny " +
		    "kruszec zebow "+CZEGO_LP[PL_BIE][jaki_zabojca];
		if (on_obj->query_prop(TEMP_SUBLOC_SHOW_ONLY_THINGS))
		    str += ".\n";
		else
		    str += ", a twoja twarz zdobia charakterystycznie wytatuowane mistyczne " +
			"spiralne wzory.\n";
		return str;
	    }
	    else
	    {
		if (on_obj->query_prop(TEMP_SUBLOC_SHOW_ONLY_THINGS))
		    return "";
		return "Twoja twarz zdobia charakterystycznie wytatuowane mistyczne spiralne " +
		    "wzory.\n";
	    }
	}
	else
	{
	    if (zalozony)
	    {
		return "Na szyi nosi "+short(PL_BIE)+", wykonany z oprawionych w kosztowny " +
		    "kruszec zebow "+CZEGO_LP[PL_BIE][jaki_zabojca] + ", a " +
		    on_obj->koncowka("jego", "jej", "jego") + " twarz zdobia " +
		    "charakterystycznie wytatuowane mistyczne spiralne wzory.\n";
	    }
	    else 
	    {
		return on_obj->koncowka("Jego", "Jej", "Jego") + " twarz zdobia " +
		    "charakterystycznie wytatuowane mistyczne spiralne wzory.\n";
	    }
	}
	break;

    case TOP_SUBL:
	oblist = all_inventory(on_obj);
	a = sizeof(oblist);
	for (tmp = 0; tmp < a; tmp++)
	{
	    if (oblist[tmp]->query_subloc() == TOP_SUBL)
	    {	
		bron = oblist[tmp];
		break;
	    }
	}
	if (!objectp(bron))
        {
            for_obj->remove_subloc(TOP_SUBL);
            return "";
        }

	if (for_obj == on_obj)
	    return "Przez plecy masz przewieszony " + bron->short(for_obj, PL_BIE) + ".\n";
	else
	    return "Przez plecy ma przewieszony " + bron->short(for_obj, PL_BIE) + ".\n";
	break;

    default:
	return "";
    }    	
}

/*
 *
 * Emocje i ich inicjalizowanie (od teraz w kolejnosci alfabetycznej - hurra! ;) )
 *
 */

int
zatak(string str)
{
    object *kogo;
    mixed no_attack;
    
    if (!swoj()) return 0;
    
    if (!str)
    {
   	all("zaczyna krecic mlynce "+swoj()+" przygotowujac sie do ataku.");
   	write("Zaczynasz krecic mlynce "+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;
    }

    if (this_player()->query_met(kogo[0]) && 
	this_player()->query_prop(LIVE_O_LAST_KILL) != kogo[0])
    {
	write("Zabic " + kogo[0]->query_imie(this_player(), PL_BIE) + "?!? Potwierdz " +
	      "to przez ponowne zaatakowanie.\n");
	this_player()->add_prop(LIVE_O_LAST_KILL, kogo[0]);
	return 1;
    }

    this_player()->reveal_me(1);

    actor("Z okrzykiem \"T H R O R I N!!!\" na ustach, krecac ogromne mlynce " + swoj() +
	  " i toczac wsciekla piane z ust, rzucasz sie na", kogo, PL_BIE);
    all2act("z okrzykiem \"T H R O R I N!!!\" na ustach, krecac ogromne mlynce " + swoj() +
	    " i toczac wsciekla piane z ust, rzuca sie na", kogo, PL_BIE);
    target("z okrzykiem \"T H R O R I N!!!\" na ustach, krecac ogromne mlynce " + swoj() +
	   " i toczac wsciekla piane z ust, rzuca sie na ciebie.", kogo);

    powiedz_okolicy(this_player(), "Z oddali dobiega cie wsciekly krzyk " + 
		    IMIE_NIC(this_player()) + ": \"T H R O R I N!!!\" i chwile pozniej " +
		    "odglosy jakiejs zazartej potyczki.\n");
    TP->attack_object(kogo[0]);
    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
zdobadz(string str)
{
    object *oblist, topor;
    int i, tmp;
    string nie_mozna;

    STR;

    oblist = all_inventory(this_player());
    i = sizeof(oblist);

    for (tmp = 0; tmp < i; tmp++)
    {
	if (oblist[tmp]->query_subloc() == TOP_SUBL)
	{
	    topor = oblist[tmp];
	    break;
	}
    }

    if (!objectp(topor))
	return notify_fail("Nie masz przewieszonego przez plecy zadnego topora.\n");
		
    nie_mozna = topor->wield_me(1);
    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");

    this_player()->remove_subloc(TOP_SUBL);
    odblokuj_sprzedaz(topor);
    return 1;
}

int
zgotuj(string str)
{
    object *oblist, bron;
    int tmp;

    STR;

    oblist = this_player()->query_weapon(-1);
    
    if(!(tmp = sizeof(oblist)))
    {
	notify_fail("Musisz dobywac jakiejs broni aby moc sie z nia gotowac do walki.\n");
	return 0;
    }
    
    if (tmp > 1)
    {
	if (oblist[tmp-1]->query_wt() == W_AXE)
	    bron = oblist[tmp-1];
	else if (oblist[0]->query_wt() == W_AXE)
	    bron = oblist[0];
    }
    else if (oblist[0]->query_wt() == W_AXE)
	bron = oblist[0];

    if (!objectp(bron))
    {
	notify_fail("Prawdziwemu Zabojcy wypada walczyc jedynie toporem!\n");
	return 0;
    }

    write("Wysuwajac prawa stope do przodu stajesz bokiem i chwytajac " +
	  bron->koncowka("swoj ", "swoja ") + bron->short(PL_BIE) + " tak mocno, az " +
	  "na twoich rekach pojawiaja sie nabrzmiale zyly, unosisz " +
	  bron->koncowka("go", "ja") + " nad ramieniem, tak ze ostrze masz tuz " +
	  "za swoja glowa, po czym zastygasz w takiej pozycji gotow" + 
	  this_player()->koncowka("", "a") + " do zadania natychmiastowego ciosu.\n");

    all("wysuwajac prawa stope do przodu staje bokiem i chwytajac " +
	bron->koncowka("swoj ", "swoja ") + QSHORT(bron, PL_BIE) + " tak mocno, az na " +
	this_player()->koncowka("jego", "jej") + " rekach pojawiaja sie nabrzmiale " +
	"zyly, unosi " + bron->koncowka("go", "ja") + " nad ramieniem, tak ze ostrze " +
	"ma tuz za swoja glowa, po czym zastyga w takiej pozycji gotow" + 
	this_player()->koncowka("", "a") + " do zadania natychmiastowego ciosu.");

    return 1;
}
	  
int
zklnij(string str)
{
    STR;

    write("Zaciskasz piesc i wykrzywiajac twarz w obelzywym grymasie klniesz " +
	  "siarczyscie wszystko dookola we wszystkich znanych ci narzeczach " +
	  "krasnoludzkiej mowy.\n");

    all("zaciska piesc i wykrzywiajac twarz w obelzywym grymasie zasypuje " +
	"otoczenie stekiem siarczystych przeklenstw w kilku krasnoludzkich " +
	"narzeczach.");

    return 1;
}


int
zokrzyk(string str)
{
    STR;
    all("wydaje z siebie potworny, zadny krwi ryk THRORIN!!!\nSlyszac ten wrzask " +
	"wzdrygasz sie i masz ochote zatkac uszy.");
    write("Wydajesz z siebie potworny, zadny krwi ryk THRORIN!!!\n");

    powiedz_okolicy(this_player(), "Z oddali dobiega cie potworny, zadny krwi ryk " + 
		    IMIE_NIC(this_player()) + ": THRORIN!!!\nSlyszac ten " +
		    "wrzask mimowolnie wzdrygasz sie i masz ochote zatkac uszy.\n");

    return 1;
}

int
zomiec(string str)
{
    STR;

    write("Omiatasz dzikim spojrzeniem okolice, a twa poorana bliznami twarz zastyga " +
	  "na moment w kamiennym skupieniu.\n");

    allbb("omiata okolice dzikim, pelnym mrocznej mocy wzrokiem, a jego poorana " +
	  "bliznami twarz zastyga na moment w kamiennym skupieniu.");

    return 1;
}

int
zoprzyj(string str)
{
    object *oblist, bron;
    int tmp;

    if (stringp(str) && (str != "sie" && str != "sie na broni"))
    {
	notify_fail("Zoprzyj sie na broni?\n");
	return 0;
    }

    oblist = this_player()->query_weapon(-1);
    
    if(!(tmp = sizeof(oblist)))
    {
	notify_fail("Musisz dobywac jakiejs broni aby moc sie na niej oprzec.\n");
	return 0;
    }
    
    if (tmp > 1)
    {
	if (oblist[tmp - 1]->query_wt() == W_AXE)
	    bron = oblist[tmp - 1];
	else if (oblist[0]->query_wt() == W_AXE)
	    bron = oblist[0];
    }
    else if (oblist[0]->query_wt() == W_AXE)
	bron = oblist[0];

    if (!objectp(bron))
    {
	notify_fail("Prawdziwemu Zabojcy wypada oprzec sie jedynie na toporze!\n");
	return 0;
    }

    write("Twarz szarzeje ci w grymasie wyczekiwania, a ty sam obiema dlonmi opierasz " +
	  "sie na stylisku " + bron->short(PL_DOP) + " i opuszczasz wzrok na swe zorane " +
	  "licznymi bliznami rece.\n");

    say("Twarz " + QIMIE(this_player(), PL_DOP) + " przeradza sie w mroczna maske " +
	"wyczekiwania, a " + this_player()->koncowka("on", "ona") + " sam" +
	this_player()->koncowka("", "a") + " obiema dlonmi opiera sie na stylisku " +
	QSHORT(bron, PL_DOP) + " i opuszcza wzrok na swe zorane licznymi bliznami " +
	"rece.\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];
    }

    bronie = all_inventory(this_player());

    for (i = 0; i < sizeof(bronie); i++)
    {
	if (bronie[i]->query_subloc() == TOP_SUBL)
	    return notify_fail("Przez plecy masz juz przewieszon" +
			       bronie[i]->koncowka("y ", "a ") + 
			       bronie[i]->short(this_player(), PL_BIE) + ".\n");
    }

    bron->set_wf(this_object());
    bron->unwield_me();
    this_player()->add_subloc(TOP_SUBL, this_object(), "plecy");
    bron->move(this_player(), TOP_SUBL);
    zablokuj_sprzedaz(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 dookola z 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
zporwij(string str)
{
    object *oblist, topor;
    int i, tmp;
    string nie_mozna;

    STR;

    oblist = all_inventory(this_player());
    i = sizeof(oblist);

    for (tmp = 0; tmp < i; tmp++)
    {
	if (oblist[tmp]->query_subloc() == TOP_SUBL)
	{
	    topor = oblist[tmp];
	    break;
	}
    }

    if (!objectp(topor))
	return notify_fail("Nie masz przewieszonego przez plecy zadnego topora.\n");
		
    nie_mozna = topor->wield_me(1);
    if (stringp(nie_mozna)) 
	return notify_fail(nie_mozna);
    if (!nie_mozna) 
	return notify_fail("Nie mozesz dobyc " + topor->short(PL_DOP)+".\n");

    write("Wykrzywiasz straszliwie twarz i z oczami przepelnionymi zarem " +
	  "szalenstwa wyszarpujesz " + topor->koncowka("swoj", "swoja") +
	  " przewieszon" + topor->koncowka("y", "a") + " przez plecy " +
	  topor->short(PL_BIE) + ", wyrzucasz " + topor->koncowka("go", "ja") +
	  " przed siebie wprost w swoj pewny uchwyt i z przerazajacym swistem " +
	  "omiatasz " + topor->koncowka("nim", "nia") + " pole przed soba.\n");

    all("wykrzywia straszliwie twarz i z oczami przepelnionymi zarem " +
	  "szalenstwa wyszarpuje " + topor->koncowka("swoj", "swoja") +
	  " przewieszon" + topor->koncowka("y", "a") + " przez plecy " +
	  topor->short(PL_BIE) + ", wyrzuca " + topor->koncowka("go", "ja") +
	  " przed siebie wprost w swoj pewny uchwyt i z przerazajacym swistem " +
	  "omiata " + topor->koncowka("nim", "nia") + " pole przed soba.");

    this_player()->remove_subloc(TOP_SUBL);
    odblokuj_sprzedaz(topor);

    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 i zamyka", kogo, PL_BIE,
	    " w niedzwiedzim uscisku prawie lamiac "
	    + comp_zaimki(kogo, PL_CEL, 1) + " kosci.");
    target("wyszczerza do ciebie zeby w radosnym usmiechu i zamyka cie w " +
	   "niedzwiedzim uscisku 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
zprzekaz(string str)
{
    object *komu;
    NO_STR("Poprawna skladnia: przekaz wladze <komu>.\n");
    komu = parse_this(str, "'wladze' %l:"+PL_CEL);

    if (sizeof(komu)!=1)
	return notify_fail("Komu chcesz przekazac wladze nad Zabojcami?\n");
    
    if (!ADMIN_OB->zatwierdzony(komu[0]))
    {
	notify_fail("Wladze mozesz przekazac tylko zatwierdzonemu czlonkowi " +
		    "Zabojcow.\n");
	return 0;
    }

    target("wyciaga rece w twoja strone, przekazujac ci blogoslawienstwo "+
	   "Throrina i wladze nad Zabojcami.", komu);
    actor("Wyciagasz rece w kierunku",komu, PL_DOP," przekazujac "+
	  komu[0]->koncowka("mu","jej")+" blogoslawienstwo Throrina i wladze "+
	  "nad Zabojcami.");
    all2act("wyciaga rece w kierunku",komu, PL_DOP," szepczac "+
	    "niezrozumiale dla ciebie slowa blogoslawienstwa.");

    ADMIN_OB->set_szef(komu[0]);

    update_actions();
    return 1;
}

int
zprzesun(string str)
{
     object *oblist;
     
     NO_STR("Zprzesun po czym?\n");
     
     oblist = parse_this(str, "'po' %i:" + PL_MIE);
     
    if (sizeof(oblist) != 1)
    {
     	notify_fail("Zprzesun po czym?\n");
     	return 0;
    }
    
    if (oblist[0]->query_wt() != W_AXE)
    {
        notify_fail("Mozesz to zrobic tylko z toporem.\n");
        return 0;
    }
    
    this_player()->catch_msg("Przesuwasz kciukiem po ostrzu " + QSHORT(oblist[0], PL_DOP) +
                             ", az pojawila sie na nim lsniaca szkarlatem kropla krwi.\n");
                             
    say(QCIMIE(this_player(), PL_MIA) + " przesuwa kciukiem po ostrzu " +
        QSHORT(oblist[0], PL_DOP) + ", az pojawila sie na nim lsniaca szkarlatem " +
        "kropla krwi.\n");
        
    return 1;
}

int
zprzewies(string str)
{
    object *oblist, *oblist2;
    int a, tmp;
    
    NO_STR("Co chcesz przewiesic przez plecy?\n");

    oblist = parse_this(str, "%i:" + PL_BIE);

    if (!sizeof(oblist))
	return notify_fail("Co chcesz przewiesic przez plecy?\n");

    if (sizeof(oblist) > 1)
	return notify_fail("Mozesz przewiesic przez plecy tylko jedna rzecz.\n");

    if (oblist[0]->query_wt() != W_AXE)
	return notify_fail("Przez plecy mozesz przewiesic jedynie topor.\n");
    
    if (oblist[0]->query_wielded())
	return notify_fail("Aby przewiesic przez plecy dobywana bron uzyj komendy <zopusc>.\n");

    oblist2 = all_inventory(this_player());
    a = sizeof(oblist2);
    for (tmp = 0; tmp < a; tmp++)
    {
	if (oblist2[tmp]->query_subloc() == TOP_SUBL)
	    return notify_fail("Przez plecy masz juz przewieszon" +
			       oblist2[tmp]->koncowka("y ", "a ") + 
			       oblist2[tmp]->short(this_player(), PL_BIE) + ".\n");
    }

    this_player()->add_subloc(TOP_SUBL, this_object(), "plecy");

    oblist[0]->move(this_player(), TOP_SUBL);
    zablokuj_sprzedaz(oblist[0]);
    
    actor("Przewieszasz sobie przez plecy", ({oblist[0]}), PL_BIE);

    allbb("przewiesza sobie przez plecy " + QSHORT(oblist[0], PL_BIE) + ".");
    
    return 1;
}

int
zprzydus(string str)
{
    object *oblist;
    NO_STR("Kogo chcesz przydusic?\n");

    oblist = parse_this(str, "%l:" + PL_BIE);

    if (!sizeof(oblist))
    {
	notify_fail("Kogo chcesz przydusic?\n");
	return 0;
    }

    if (sizeof(oblist) > 1)
    {
	notify_fail("Kogo konkretnie chcesz pozbawic powietrza?\n");
	return 0;
    }

    actor("W porywie naglej wscieklosci przyskakujesz do", oblist, PL_DOP, " i lapiesz " +
	  oblist[0]->koncowka("go", "ja", "je") + " reka za krtan, mierzac " +
	  "straszliwym wzrokiem.");

    say("Nagle " + QIMIE(this_player(), PL_MIA) + " zadziwiajaco szybkim ruchem " +
	"przyskakuje do " + QIMIE(oblist[0], PL_DOP) + " i zamyka swa dlon na " + 
	oblist[0]->koncowka("jego", "jej", "jego") + " krtani w zelaznym uscisku. " + 
	QCIMIE(oblist[0], PL_CEL) + " oczy wychodza z orbit, a " + QIMIE(this_player(), PL_MIA) + 
	" przyglada " + oblist[0]->koncowka("mu", "jej", "mu") + " sie przez chwile " +
	"z msciwa satysfakcja, po czym odpycha " + oblist[0]->koncowka("go", "ja", "je") +
	" w tyl, wykrzywiajac sie pogardliwie.\n", ({this_player(), oblist[0]}));

    oblist[0]->catch_msg("Nagle " + QIMIE(this_player(), PL_MIA) + " zadziwiajaco " +
			 "szybkim ruchem przyskakuje do ciebie i zamyka swa dlon na twej " +
			 "krtani w zelaznym uscisku. Czujesz, jak oczy wychodza ci z " +
			 "orbit, a " + QIMIE(this_player(), PL_MIA) + " przyglada ci sie " +
			 "przez chwile straszliwym, bezlitosnym wzrokiem. Na moment " +
			 this_player()->koncowka("jego", "jej", "jego") + " twarz wykrzywia " +
			 "sie w grymasie politowania, po czym chwyt rozluznia sie i " +
			 "zostajesz brutalnie odepchniet" + oblist[0]->koncowka("y", "a", "e") +
			 " w tyl.\n");
    
    return 1;
}

int
zprzyjmij(string str)
{
    object kogo, *ktosie;
    NO_STR("Poprawna skladnia: zprzyjmij do zabojcow <kogo>.\n");
    ktosie = parse_this(str, "'do' 'zabojcow' %l:"+PL_BIE);

    if (sizeof(ktosie)!=1)
	return notify_fail("Kogo chcesz przyjac do zabojcow?\n");

    kogo = ktosie[0];
    if (!(kogo->query_subloc_obj(ZABOJCY_SUBLOC)))
	return notify_fail(kogo->query_Imie(TP, PL_MIA)+" musi miec zalozony "+
			   "naszyjnik zabojcy.\n");

    if (ADMIN_OB->zatwierdzony(kogo))
	return notify_fail(kogo->query_Imie(TP, PL_MIA)+" juz jest Zabojca!\n");

    if (kogo->query_rasa() != "krasnolud")
    {
	notify_fail("Dobre sobie! " + kogo->query_imie(this_player(), PL_MIA) + " przeciez " +
		    "nie jest krasnoludem!\n");
	return 0;
    }

    ADMIN_OB->zatwierdz(kogo);

    TP->catch_msg("Wyciagasz rece w kierunku " + QIMIE(ktosie[0], PL_DOP) + " blogoslawiac "+
		  kogo->koncowka("go","ja") + " w imieniu Throrina.\n");
    target("wyciaga rece w twoim kierunku, blogoslawiac cie w imieniu Throrina.", ktosie);
    all2act("wyciaga rece w kierunku", ktosie, PL_DOP, " blogoslawiac " +
	    ktosie[0]->koncowka("go","ja") + " w imieniu Throrina.");

    return 1;
}

int
zsmiech(string str)
{
    STR;
    all("zaczyna sie nagle trzasc. Z " + this_player()->koncowka("jego", "jej") +
	" gardla wydobywa sie dziwny charkot, ktory prawdopodobnie ma uchodzic za smiech.");
    write("Smiejesz sie do rozpuku.\n");
    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
zszukaj(string str)
{
    if (stringp(str) && str != "winnego")
    {
	notify_fail("Zszukaj winnego?\n");
	return 0;
    }

    write("Z wsciekloscia przygladasz sie na moment otaczajacym cie twarzom, " +
	  "szukajac godnego przeciwnika dla twej zlosci.\n");

    say("Nagle twarz " + QIMIE(this_player(), PL_DOP) + " przeradza sie w " +
	"przerazliwa maske wscieklosci i pogardy, a " + 
	this_player()->koncowka("on sam", "ona sama") + " rzuca wyzywajace " +
	"spojrzenia na boki i smaga cie na moment swym wzrokiem, tak mocnym w " +
	"swym wyrazie, za cofasz sie o krok na momentalnie zwiotczalych nogach.\n");

    return 1;
}

int 
zwesprzyj(string str)
{
    object *obs;
    object friend;
    object victim;
    int    index;
    string str2;
    mixed  tmp;

    if (!CAN_SEE_IN_ROOM(this_player()))
    {
	notify_fail("Nie widzisz tu nic.\n");
	return 0;
    }

    if (this_player()->query_ghost())
    {
	notify_fail("O wlasnie, zabit" + this_player()->koncowka("y", "a") +
	    ". Oto, jak" + this_player()->koncowka("i", "a") + 
	    " jestes.\n");
	return 0;
    }

    if (!stringp(str))
    {
        if (!sizeof(obs = this_player()->query_team_others()))
        {
            notify_fail("Wspomoz kogo? Nie jestes w zadnej druzynie.\n");
            return 0;
        }

        obs = ({ this_player()->query_leader() }) - ({ 0 }) + obs;

	for (index = 0; index < sizeof(obs); index++)
	{
	    if ((environment(this_player()) == environment(obs[index])) &&
		(objectp(victim = obs[index]->query_attack())))
	    {
		friend = obs[index];
		break;
	    }
	}

	if (!objectp(friend))
	{
	    notify_fail("Nikt z twojej druzyny nie jest zaangazowany " +
	        "w walke.\n");
	    return 0;
	}
    }
    else
    {
	obs = parse_this(str, "%l:" + PL_BIE);

        this_player()->set_obiekty_zaimkow(obs);

	if (sizeof(obs) > 1)
	{
	    notify_fail("Zdecyduj sie, nie mozesz wspomoc jednoczesnie " +
		COMPOSITE_LIVE(obs, PL_BIE) + ".\n");
	    return 0;
	}
	else if (sizeof(obs) == 0)
	{
	    notify_fail("Wspomoz kogo?\n");
	    return 0;
	}

	friend = obs[0];
    }

    if (member_array(friend, this_player()->query_enemy(-1)) != -1)
    {
	write("Pomoc " + friend->query_imie(this_player(), PL_CEL) +
	    " w zabiciu siebie? Sa chyba prostsze sposoby na popelnienie "+
	    "samobojstwa...\n");
	return 1;
    }

    victim = friend->query_attack();
    if (!objectp(victim))
    {
	write(friend->query_Imie(this_player(), PL_MIA) +
	    " nie walczy z nikim.\n");
	return 1;
    }

    if (member_array(victim, this_player()->query_team_others()) != -1)
    {
        notify_fail("Ale jestescie razem w druzynie z " + 
            victim->query_imie(this_player(), PL_NAR) + ".\n");
        return 0;
    }

    if (this_player()->query_attack() == victim)
    {
	write("Juz walczysz z " + victim->query_imie(this_player(), PL_NAR) + 
	    ".\n");
	return 1;
    }

    if (tmp = environment(this_player())->query_prop(ROOM_M_NO_ATTACK))
    {
	if (stringp(tmp))
	    write(tmp);
	else
	    write("Jakas boska sila nie pozwala ci zaatakowac.\n");
	return 1;
    }

    if (tmp = victim->query_prop(OBJ_M_NO_ATTACK))
    {
	if (stringp(tmp))
	    write(tmp);
	else
	    write("To istnienie jest chronione przez jakas boska sile - " +
		"nie wazysz sie nan podniesc reki.\n");
	return 1;
    }

    if ((this_player()->query_met(victim)) &&
	(this_player()->query_prop(LIVE_O_LAST_KILL) != victim))
    {
	write("Zaatakowac " + victim->query_imie(this_player(), PL_BIE) +
	    "?!? Potwierdz to przez ponowne zaatakowanie.\n");
	this_player()->add_prop(LIVE_O_LAST_KILL, victim);
	return 1;
    }

    this_player()->reveal_me(1);
    /*
     * Check if we dare!
     */
    if (!F_DARE_ATTACK(this_player(), victim))
    {
	write("Uhh.. Nie, nie odwazysz sie na to!\n");
	return 1;
    }

    say(QCIMIE(this_player(), PL_MIA) + " bez zastanowienia rzuca sie w wir walki " +
	"wspierajac " + QIMIE(friend, PL_BIE) +
	" w walce z " + QIMIE(victim, PL_NAR) + ".\n",
	({ this_player(), friend, victim }) );
    tell_object(victim, this_player()->query_Imie(victim, PL_MIA) +
	" bez zastanowienia rzuca sie w wir walki i atakuje cie!\n");
    tell_object(friend, this_player()->query_Imie(friend) +
	 " bez zastanowienia rzuca sie w wir walki wspierajac cie w walce z " + 
		victim->query_imie(friend, PL_NAR) + ". Majac u swego boku " +
		"Zabojce Trolli czujesz sie o wiele pewniej.\n");

    this_player()->attack_object(victim);
    this_player()->add_prop(LIVE_O_LAST_KILL, victim);

    write("Wspierasz szalenczo " + friend->query_imie(this_player(), PL_BIE) + ".\n");
    return 1;
}

int
zwolaj(string str)
{
    STR;

    write("Nagle otoczenie rozmywa sie, a ty zapadasz sie w swych wspomnieniach. " +
	  "W oddali, jak za mgla dostrzesz ksztalt kogos, kogo szukasz do dawien " +
	  "dawna. Smierc podaza twym tropem, jednak gdy probujesz ja przywolac swym " +
	  "krzykiem, oddala sie, a wszystko wokol wraca do normy. Jeszcze nie teraz... " +
	  "musisz czekac ciepliwie, a ona kiedys przyjdzie i po ciebie...\n");

    all("staje w rozkroku, opuszcza rece wzdluz ciala, twarz " + 
	this_player()->koncowka("mu", "jej") + " szarzeje i wzrokiem ktory " +
	"momentalnie zaszedl mu mgla, spoglada gdzies w dal, wyciaga w tamta strone " +
	"reke wskazujac cos i wydaje z siebie przejmujacy krzyk, jakby rozpaczliwie chcial" +
	this_player()->koncowka("", "a") + " przywolac kogos do siebie.");

    return 1;
}

int
zwscieknij(string str)
{
    if (stringp(str) && str != "sie")
    {
	notify_fail("Zwscieknij sie?\n");
	return 0;
    }

    write("Dajesz upust nagromadzonej w sobie zlosci i twoj dziki krzyk po chwili " +
	  "rozbrzmiewa w okolicy. Z nieprzytomnym sporzeniem i piana na ustach " +
	  "rozgladasz sie dookola.\n");
    all("przetacza szalonym wzrokiem dookola, wykrzywiajac twarz w potwornym " +
	"grymasie. Jego ciche warczenie przechodzi po chwili w dziki wrzask " +
	"wscieklosci i z piana na ustach miota na boki spojrzenia, ktore wydaja " +
	"sie paralizowac kazdego.");

    return 1;
}

int
zwyrzuc(string str)
{
    object kogo, *oblist;
    string imie, *obiekty;
    int a;

    NO_STR("Poprawna skladnia:\nZwyrzuc <kogo> z zabojcow (wyrzucany musi byc widziany)\n" +
	   "lub:\nZwyrzuc <imie w mianowniku> z zabojcow (wyrzucany nie musi byc zalogowany)\n");

    oblist = parse_this(str, "%l:" + PL_DOP + " 'z' 'zabojcow'");
    
    if (sizeof(oblist) != 1)
	notify_fail("Wyrzucic kogo z zabojcow?\n");

    if (sizeof(oblist) == 0)
    {
	sscanf(str, "%s z zabojcow", imie);
	if (stringp(imie))
	    if (ADMIN_OB->zatwierdzony(imie))
	    {
		if (imie == this_player()->query_real_name())
		{
		    notify_fail("W ten sposob nie mozesz wyrzucic sam" + 
				this_player()->koncowka("", "a") + " siebie. Przekaz " +
				"wladze i uzyj komendy zniszcz.\n");
		    return 0;
		}
		    
		ADMIN_OB->usun(imie);
		write(capitalize(imie) + " od tej chwili nie nalezy do Zabojcow.\n");
		if(find_player(imie))
		{
		    object *invent = deep_inventory(find_player(imie));
		    invent->update_actions();
		}
	    }

	return 0;
    }

    kogo = oblist[0];

    if (!ADMIN_OB->zatwierdzony(oblist[0]))
    {
	notify_fail(kogo->query_Imie(this_player(), PL_MIA) + " nie nalezy do Zabojcow!\n");
	return 0;
    }
    
    ADMIN_OB->usun(kogo->query_real_name());
    
    oblist = deep_inventory(kogo);
    obiekty = map(oblist, q_master);
    
    a = member_array(MASTER, obiekty);
	    
    write("Z pogarda wyrywasz " + oblist[a]->short(this_player(), PL_BIE) + " " +
	  kogo->query_imie(this_player(), PL_CEL) + " i ze zloscia wdeptujesz go w ziemie, " +
	  "dajac wszystkim do zrozumienia, ze " + kogo->query_imie(this_player(), PL_MIA) + 
	  " nie nalezy juz do Zabojcow.\n");

    say(QCIMIE(this_player(), PL_MIA) + " z pogarda wyrywa " + 
	QSHORT(oblist[a], PL_BIE) + " " + QIMIE(kogo, PL_CEL) + " i wdeptuje go ze zloscia " +
	"w ziemie, dajac wszystkim do zrozumienia, ze " + QIMIE(kogo, PL_MIA) + " nie " +
	"nalezy juz do Zabojcow.\n", ({this_player(), kogo}));

    kogo->catch_msg(QCIMIE(this_player(), PL_MIA) + " z pogarda wyrywa ci " + 
		    QSHORT(oblist[a], PL_BIE) + " i ze zloscia wdeptuje go w ziemie " +
		    "dajac ci do zrozumienia, ze juz nie nalezysz do Zabojcow.\n");

    oblist[a]->remove_object();

    return 1;
}

int
zzacisnij(string str)
{
    object *oblist;
    
    NO_STR("Zacisnij rece na czym?\n");
    
    oblist = parse_this(str, "'rece' 'na' %i:" + PL_MIE);
    
    if (sizeof(oblist) != 1)
    {
    	notify_fail("Zzacisnij rece na czym?\n");
    	return 0;
    }
    
    if (oblist[0]->query_wt() != W_AXE)
    {
    	notify_fail("Mozesz zacisnac rece jedynie na toporze.\n");
    	return 0;
    }
    
    this_player()->catch_msg("Zaciskasz dlonie na trzonku " + QSHORT(oblist[0], PL_DOP) + 
    	" z taka sila i zawzietoscia, ze az bieleja ci kostki palcow.\n");
    	  
    say(QCIMIE(this_player(), PL_MIA) + " zaciska dlonie na trzonku " +
    	QSHORT(oblist[0], PL_DOP) + " z taka sila i zawzietoscia, ze az " +
    	"bieleja " + this_player()->koncowka("mu", "jej") + " kostki palcow.\n");
    	
    return 1;
}

int
zzadumaj(string str)
{
    if (stringp(str) && str != "sie")
    {
	notify_fail("Zzadumaj sie?\n");
	return 0;
    }

    write("Gladzac lekko brode, spogladasz w dal.\n");

    allbb("tesknym wzrokiem spoglada w dal, nieznacznie pocierajac brode w zamysleniu.");

    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 " + oblist[0]->koncowka("jego", "jej") + " 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
zzamysl(string str)
{
    if (stringp(str) && str != "sie")
    {
	notify_fail("Zzamysl sie?\n");
	return 0;
    }

    write("Pocierasz dlonia swa pokryta bliznami twarz i zimnym spojrzeniem " +
	  "pelnym zacietosci spogladzasz w zamysleniu przed siebie.\n");

    allbb("pociera dlonia swa pokryta bliznami twarz i zimnym spojrzeniem pelnym " +
	  "zacietosci spoglada w zamysleniu przed siebie.");

    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
zzasycz(string str)
{
    STR;

    write("Mruzysz groznie oczy i rozchylajac usta w demonicznym usmiechu, ze " +
	  "swistem wypuszczasz powietrze.\n");

    all("mruzy groznie oczy i rozchylajac usta w demonicznym usmiechu, ze " +
	"swistem wypuszcza powietrze.");

    return 1;
}

int
zzatwierdzeni(string str)
{
    string *strlist = ADMIN_OB->query_zatwierdzeni();
    int a, tmp;
    STR;

    a = sizeof(strlist);
    if (!a)
    {
	write("W tej chwili jestes jedynym czlonkiem zabojcow.\n");
	return 1;
    }

    write("W tej chwili oprocz ciebie do Zabojcow naleza:\n");
    for(tmp = 0 ; tmp < a ; tmp++)
	write(capitalize(strlist[tmp]) + " ");
    write("\n");

    return 1;
}

int
zzaznacz(string str)
{
    object *oblist;

    NO_STR("Zzaznacz karb na jakiej broni?\n");

    oblist = parse_this(str, "'karb' 'na' %i:" + PL_MIE);

    if (sizeof(oblist) == 0)
    {
	notify_fail("Zzaznacz karb na jakiej broni?\n");
	return 0;
    }

    if (sizeof(oblist) > 1)
    {
	notify_fail("Powoli! Mozesz zaznaczac karb tylko na jednej broni na raz.\n");
	return 0;
    }

    if (oblist[0]->query_wt() != W_AXE)
    {
	notify_fail("Co to to nie! Karby mozesz zaznaczac tylko na trzonkach toporow, jak na " +
		    "porzadnego Zabojce przystalo.\n");
	return 0;
    }

    write("Usmiechasz sie sam" + this_player()->koncowka("", "a") + " do siebie, obracasz " + 
	  oblist[0]->koncowka("swoj", "swoja") + " " + oblist[0]->short(PL_BIE) + 
	  " styliskiem w swoja strone i nacinasz na nim kolejny karb.\n");

    all("usmiecha sie sam" + this_player()->koncowka("", "a") + " do siebie, obraca " + 
	  oblist[0]->koncowka("swoj", "swoja") + " " + oblist[0]->short(PL_BIE) + 
	  " styliskiem w swoja strone i nacina na nim kolejny karb.");

    return 1;
}

int
zzdejmij(string str)
{
    object *oblist, bron;
    int a, tmp;

    STR;
    
    oblist = all_inventory(this_player());
    a = sizeof(oblist);
    
    for (tmp = 0; tmp < a; tmp++)
    {
	if (oblist[tmp]->query_subloc() == TOP_SUBL)
	{
	    bron = oblist[tmp];
	    break;
	}
    }
    
    if (!objectp(bron))
	return notify_fail("Nie masz przewieszonej przez plecy zadnej broni.\n");
    
    bron->move(this_player());
    this_player()->remove_subloc(TOP_SUBL);
    odblokuj_sprzedaz(bron);

    actor("Zdejmujesz z plecow", ({bron}), PL_BIE);
    allbb("zdejmuje z plecow " + QSHORT(bron, PL_BIE) + ".\n");
    
    return 1;
}

int
zzezlosc(string str)
{
    object *oblist, kto, bron;
    int a, tmp;

    NO_STR("Zzezlosc sie na kogo?\n");
    
    oblist = parse_this(str, "'sie' 'na' %l:" + PL_DOP);

    if (sizeof(oblist) != 1)
    {
	notify_fail("Zzezlosc sie na kogo?\n");
	return 0;
    }

    kto = oblist[0];

    oblist = all_inventory(this_player());
    tmp = sizeof(oblist);
    for (a = 0; a < tmp; a++)
    {
	if (oblist[a]->check_weapon() && oblist[a]->query_wt() == W_AXE)
	{
	    bron = oblist[a];
	    break;
	}
    }

    if (!objectp(bron))
    {
	notify_fail("Musisz miec jakis topor zeby to zrobic.\n");
	return 0;
    }

    actor("Klnac niesamowicie, skaczesz w strone", ({kto}), PL_DOP, ", a topor sam " +
          "wskakuje ci w dlonie.");

    all2act("miotajac na boki przeklenstwa, doskakuje do", ({kto}), PL_DOP, " mierzac " +
	    kto->koncowka("go", "ja") + " wzrokiem od stop do glow, a " +
            this_player()->koncowka("jego", "jej") + " dlonie mocniej chwytaja topor.");

    target("miotajac na boki przeklenstwa, doskakuje do ciebie mierzac cie wzrokiem " +
	   "od stop do glow, a " + this_player()->koncowka("jego", "jej") + " dlonie " +
	   "mocniej chwytaja topor.", ({kto}));

    return 1;
}

int
zpomoc(string str)
{
    STR;

    this_player()->more("Komendy Zabojcow: \n" +
			"\t- zatak [kogo]\n" +
			"\t- zczysc\n" +
			"\t- zdobadz\n" +
			"\t- zgotuj\n" +
			"\t- zklnij\n" +
			"\t- zokrzyk\n" +
			"\t- zomiec\n" +
			"\t- zopusc [co]\n" +
			"\t- zoprzyj [sie] [na broni]\n" +
			"\t- zporwij\n" +
			"\t- zpowitaj <kogo>\n" +
			"\t- zpozegnaj <kogo>\n" +
			"\t- zprzesun po <czym>\n" +
			"\t- zprzewies <co>\n" +
			"\t- zprzydus <kogo>\n" + 
			"\t- zsmiech\n" +
			"\t- zspojrz\n" +
			"\t- zszukaj [winnego]\n" +
			"\t- zwesprzyj [kogo]\n" +
			"\t- zwolaj\n" +
			"\t- zwscieknij [sie]\n" +
			"\t- zzacisnij rece na <czym>\n" +
			"\t- zzadumaj [sie]\n" +
			"\t- zzamierz sie na <kogo>\n" +
			"\t- zzamysl [sie]\n" +
			"\t- zzapasc\n" +
			"\t- zzasycz\n" +
			"\t- zzaznacz karb na <czym>\n" +
			"\t- zzdejmij\n" +
			"\t- zzezlosc sie na <kogo>\n\n" +

			(this_player()->query_real_name() == ADMIN_OB->query_szef() ?
			 ("Komendy glowy Zabojcow:\n"+
			  "\t- zprzekaz wladze <komu>\n" +
			  "\t- zprzyjmij do zabojcow <kogo>\n"+
			  "\t- zwyrzuc <kogo/kto> z zabojcow\n" +
			  "\t- zzabojcy\n") : "" ) +

			"\n");
    return 1;
}

void
init_emoty()
{
    add_action(zatak, "zatak");
    add_action(zczysc, "zczysc");
    add_action(zdobadz, "zdobadz");
    add_action(zklnij, "zklnij");
    add_action(zgotuj, "zgotuj");
    add_action(zokrzyk, "zokrzyk");
    add_action(zomiec, "zomiec");
    add_action(zopusc, "zopusc");
    add_action(zoprzyj, "zoprzyj");
    add_action(zpomoc, "zpomoc");
    add_action(zporwij, "zporwij");
    add_action(zpowitaj, "zpowitaj");
    add_action(zpozegnaj, "zpozegnaj");
    add_action(zprzesun, "zprzesun");
    add_action(zprzewies, "zprzewies");
    add_action(zprzydus, "zprzydus");
    add_action(zsmiech, "zsmiech");
    add_action(zspojrz, "zspojrz");
    add_action(zszukaj, "zszukaj");
    add_action(zwesprzyj, "zwesprzyj");
    add_action(zwolaj, "zwolaj");
    add_action(zwscieknij, "zwscieknij");
    add_action(zzacisnij, "zzacisnij");
    add_action(zzadumaj, "zzadumaj");
    add_action(zzamierz, "zzamierz");
    add_action(zzamysl, "zzamysl");
    add_action(zzapasc, "zzapasc");
    add_action(zzasycz, "zzasycz");
    add_action(zzaznacz, "zzaznacz");
    add_action(zzdejmij, "zzdejmij");
    add_action(zzezlosc, "zzezlosc");

    if (this_player()->query_real_name() == ADMIN_OB->query_szef())
    {
	add_action(zprzekaz,"zprzekaz");
    	add_action(zprzyjmij,"zprzyjmij");
	add_action(zwyrzuc, "zwyrzuc");
	add_action(zzatwierdzeni, "zzabojcy");
    }
    
}

