/*
 * Soul Zakonu Rycerskiego Sigmara Mlotodzierzcy
 *
 * Napisal Mithandir
 */

inherit "/cmd/std/command_driver";

#include <tasks.h>
#include "mith.h"
#include "ryc_zak.h"
#include "szarza.h"
#include "ogluszanie.h"

/* 
#define OBR_BRAK 0 
#define OBR_BLEKKIE 1 
#define OBR_LEKKIE 2
#define OBR_SREDNIE 4
#define OBR_CIEZKIE 8
#define OBR_BCIEZKIE 16    
#define OBR_SMIERTELNE 32
#define DOZWOLONE_BRONIE ({W_SWORD,W_AXE,W_CLUB,W_POLEARM})
*/
 /********************************************************************
  * Soul identifying and autoloading
  ********************************************************************/

string get_soul_id()
{
	return "zakon rycerski";	/* Zgodnie z krotka nazwa gildii. */
}

int query_cmd_soul()
{
	return 1;
}

 /***********************************************************************
  * The list of verbs and functions. Please add new in alphabetical order.
  ***********************************************************************/

mapping
query_cmdlist()
{
    return (["oglusz":"oglusz",
	     "rzofiaruj" : "rzofiaruj",
    	     "rzmiecz" : "rzmiecz",
    	     "rzmodl" : "rzmodl",
    	     "rzspoliczkuj": "rzspoliczkuj",
    	     "rzprzeklnij" : "rzprzeklnij",
    	     "rzsalutuj" : "rzsalutuj",
    	     "rzsmiech" : "rzsmiech",
    	     "rzspojrz": "rzspojrz",
    	     "rzuscisnij": "rzuscisnij",
    	     "szarzuj":"szarzuj"
    	     	
	   ]);
}

/***********************************************************************
 *  Here follows the functions.
 *  New functions should be added in alphabetic order.
 **********************************************************************/
int
sprawdz_odwage(object kto);

int
rzofiaruj(string str)
{
	object *oblist;
	oblist = parse_this (str, "[na] %l:"+PL_CEL);
	if(sizeof(oblist) != 0)
	{
		target("przykleka na jedno kolano, ofiarowujac ci swoja sluzbe.",oblist);
		all2act("przykleka na jedno kolano, ofiarowujac",oblist,PL_CEL," swoja sluzbe.");
		actor("Przyklekasz na jedno kolano, ofiarowujac swoja sluzbe",oblist,PL_CEL);
		return 1;
	}
	notify_fail("Komu chcesz ofiarowac swoje uslugi?\n");
	return 0;
}

int
rzmiecz(string str)
{	
	string opis;
	object miecz;
	miecz = this_player()->query_weapon(W_RIGHT);
	if (!miecz) miecz = this_player()->query_weapon(W_BOTH);
	if (!miecz->id("miecz")) 
	{
		notify_fail("Musisz trzymac miecz w prawej rece, aby moc to zrobic.\n");
		return 0;
	}
	opis=miecz->short(this_player(),PL_BIE);
	allbb("podnosi swoj " + opis + " do gory, a klinga rozblyskuje w plomieniach slonca.");
	write("Unosisz swoj " + opis + " do gory, a klinga rozblyskuje w plomieniach slonca.\n");
	return 1;
}

int
rzmodl(string str)
{
	string opis;
	object miecz;
	miecz = this_player()->query_weapon(W_RIGHT);
	if (!miecz->id("miecz"))
	{
		miecz = this_player()->query_weapon(W_LEFT);
	}
	if (!miecz) miecz = this_player()->query_weapon(W_BOTH);
	if (!miecz->id("miecz")) 
	{
		notify_fail("Musisz trzymac miecz rece, aby moc to zrobic.\n");
		return 0;
	}
	opis = miecz->short(this_player(),PL_MIE);
	allbb("przykleka i opierajac sie na wbitym w ziemie " + opis +
	      ", wznosi oczy ku gorze, proszac Sigmara o blogoslawienstwo.");
	write("Przyklekasz i opierajac sie na wbitym w ziemie " + opis +
	      ", wznosisz oczy ku gorze, proszac Sigmara o blogoslawienstwo.\n");
	return 1;
}

int
rzspoliczkuj(string str)
{
	object *oblist;
	oblist = parse_this (str, "%l:"+PL_BIE);
	if(sizeof(oblist) !=0)
	{
		target("z pogarda wymierza ci siarczysty policzek.",oblist);
		actor("Z pogarda wymierzasz",
			oblist,PL_CEL," siarczysty policzek.");
		all2actbb("z pogarda wymierza",oblist,PL_CEL," siarczysty policzek.");
		return 1;
	}
	
	notify_fail("Komu chcesz wymierzyc policzek?\n");
	return 0;
}
	
	
int
rzprzeklnij(string str)
{
	object *oblist;
	int licz;
	string *konc = allocate(4);
	oblist = parse_this (str,"%l:"+PL_BIE);
	if(sizeof(oblist)!=0)
	{
		target("patrzac na ciebie porusza bezszelestnie wargami. "
			+"Ogarnia cie uczucie niepokoju, jakby dotknela cie nielaska "
			+"Sigmara.",oblist);
		
		if(sizeof(oblist)>1)
		{
			konc[0]="Ich";
			konc[1]="e";
			konc[2]="a";
			konc[3]="a";
		}
		else
		{
			konc[0]=oblist[0]->koncowka("Jego","Jej","Jego");
			konc[1]="";
			konc[2]="ie";
			konc[3]="e";
		}
		all2act("patrzac na",oblist,PL_BIE," porusza bezszelestnie wargami. " +		
		        konc[0] + " twarz"+ konc[1] + " bledn"+ konc[2]+" nieco, po chwili jednak "
			+"odzyskuj"+konc[3]+" swa zwykla barwe.");
		actor("Patrzysz na",oblist,PL_BIE," szepczac slowa przeklenstwa. "+
		      konc[0] + " twarz" + konc[1] + " bledn" + konc[2] + " i dopiero "
			+"po chwili odyskuj" + konc[3] + " swa zwykla barwe.");
		return 1;
	}
	notify_fail("Kogo chcesz przeklnac?\n");
	return 0;
}

int
rzsalutuj(string str)
{
	object *oblist;
	oblist = parse_this (str,"%l:"+PL_CEL);
	if(stringp(str))
	{    
	    if(sizeof(oblist)!=0)
	    {
		target("salutuje ci, podnoszac dlon do czola.",oblist);
		actor("Salutujesz",oblist,PL_CEL);
		all2actbb("salutuje",oblist,PL_CEL," podniesiona do czola dlonia.");
		return 1;
	    }
	    else 
	    {
	        notify_fail("Komu chcesz zasalutowac?\n");
	        return 0;
	    }
	}
	else
	{
	    allbb("podnosi dlon do czola w honorowym gescie salutu.");
	    write("Podnosisz dlon do czola w honorowym gescie salutu.\n");
	    return 1;
	}
}

int
rzsmiech(string str)
{
	all("unosi glowe i wybucha zimnym, mrozacym krew w zylach "
		+"smiechem.");
	write("Unosisz glowe i wybuchasz zimnym, mrozacym krew w zylach "
		+"smiechem.\n");
	return 1;
}



int
rzspojrz(string str)
{
	object *oblist;
	object *oblistfilt;
	object *oblistleft;
	object *patrzacy;
	string str2;
	int licz;
	
	oblist = parse_this (str,"[na] %l:"+PL_BIE);
	patrzacy = all_inventory(environment(this_player()))-oblist;
	if(stringp(str))
	{
		if(sizeof(oblist)!=0)
		{
			oblistfilt = filter(oblist,"sprawdz_odwage",this_object());
			oblistleft = oblist - oblistfilt;
			target("patrzy na ciebie spod przymknietych powiek. Czujesz, "
		  	   +"jak przechodzi cie dreszcz strachu.",oblistfilt);
		  	target("patrzy na ciebie spod przymknietych powiek, jednak jego" +
		  		   " kamienne spojrzenie nie robi na tobie najmniejszego " +
		  		   "wrazenia.",oblistleft);
			actor("Patrzysz na", oblist, PL_BIE, " spod przymknietych powiek.");
			if (sizeof(oblistfilt))
				actor("Przez", oblistfilt, PL_BIE, " przechodzi dreszcz strachu.");
			if (sizeof(oblistleft))
				actor("Na", oblistleft, PL_MIE, " nie robi to jednak wrazenia.");
			if(sizeof(oblistfilt)>1)
			{
				str2="je";
				for(licz = 0 ; licz < (sizeof(oblist)-1) ; licz++)
				{
					if(!oblistfilt[licz]->query_gender())
						str2="ich";
				} 
			}
			else
				str2=oblist[0]->koncowka("go","ja","je");
		     //("patrzy na", oblistfilt, PL_BIE," spod przymknietych powiek. Widzisz, "
		  	 //  +"jak przechodzi "+ str2 + " dreszcz strachu.");
			return 1;
			
		}
		else
		{
			notify_fail("Na kogo chcesz spojrzec?\n");
			return 0;
		}
	}
	else
	{
		allbb("taksuje wszystkich wzrokiem spod przymknietych powiek.");
		write("Taksujesz wszystkich wzrokiem.\n");
		return 1;
	}
}

int
rzuscisnij(string str)
{
	object *oblist;
	oblist = parse_this (str,"%l:"+PL_BIE);
	if(sizeof(oblist)!=0)
	{
		notify_fail("Przeciez to nie jest Rycerz Zakonny!\n");

		if (oblist[0]->query_guild_name_occ()!=GUILD_NAME)
			return 0;
		target("wymienia z toba braterski uscisk.",oblist);
		all2act("wymienia z",oblist,PL_NAR," braterski uscisk.");
		actor("Wymieniasz z",oblist,PL_NAR," braterski uscisk.");
		return 1;
	}
	notify_fail("Kogo chcesz uscisnac??\n");
	return 0;
}

przestan_walczyc(object kto)
{
	object *wrogowie=kto->query_enemy(-1);
	int i=sizeof(wrogowie)-1;
	for (;i>=0;i--)
	{
		wrogowie[i]->stop_fight(kto);
		kto->stop_fight(wrogowie[i]);
	}
}

int
sprawdz_odwage(object kto)
{
    if(this_player()->query_average_stat() > kto->query_stat(SS_DIS))
    	return 1;
    return 0;
}

string
zwroc_liste_imion(object *imiona_kogo,object dla_kogo)
{
 int a;
 string napis;

 napis="";

 for(a = 0 ; a<sizeof(imiona_kogo) ; a++)
    {
      if((a != 0) && (a != (sizeof(imiona_kogo) - 1)))
      	  napis = napis + ", ";
      if(a = sizeof(imiona_kogo) - 1)
      	  napis = napis + " i ";
      napis = napis+imiona_kogo[a]->query_imie(dla_kogo,PL_BIE);
    }

 if(sizeof(imiona_kogo)==0)
   return 0;

 return napis;
}