#include <cmdparse.h>

blog_na_sluzebnego(object kto, object kogo);
blog_na_zakonnego(object kto, object kogo);
varargs void widzenie(object komu,object kto, int numer);

int 
awansuj(string str)
{
	object kogo;
	int n;
	parse_command(str, this_object(),"%o:"+PL_BIE,kogo);
	if (!kogo) return notify_fail("Kogo chcesz awansowac?\n");
	if (!PRAWA->sprawdz_prawa(PRAWA_RYCERZA,kogo))
		return !write(kogo->short()+" nie jest Bratem Zakonnym.\n");
	if (n=PRAWA->set_ranga(kogo))
	{
		write(kogo->short() + " nie moze na razie awansowac tak wysoko.\n");
		return 1;
	}
	write("Awansowales " + kogo->short() +". Jego nowy tytul to "+kogo->query_guild_title_occ()+".\n");
	kogo->catch_msg("Zostales awansowany przez Wielkiego Mistrza. Twoj nowy tytul to "+kogo->query_guild_title_occ()+".\n");
	write_file(LOG, C(TP->query_real_name())+" awansowal "+C(kogo->query_real_name(PL_BIE))+" na "+C(kogo->query_guild_title_occ())+"\t"+ctime(time())+"\n");
	return 1;
}

int 
odpowiedz(string str)
{
	string odpowiedz;
	if (TP->query_prop(LIVE_S_EXTRA_SHORT)!=OPIS_KLEKANIA) return 0;
	odpowiedz=TP->query_prop(DOSTAL_PYTANIE);
	if (!odpowiedz) return 0;
	if (str!=odpowiedz)
	{
		write("Musisz uzyc odpowiedniej, rytualnej formy odpowiedzi.\n");
		return 1;
	}
	write("Odpowiadasz stanowczym glosem: "+odpowiedz+".\n");
	say (QCIMIE(TP,PL_MIA)+" odpowiada stanowczym glosem: "+odpowiedz+".\n");
	TP->remove_prop(DOSTAL_PYTANIE);
	TP->add_prop(LICZBA_ODPOWIEDZI,TP->query_prop(LICZBA_ODPOWIEDZI)+1);
	if (TP->query_prop(LICZBA_ODPOWIEDZI)==4) 
	{
		write("Czujesz ogarniajace cie zapal i radosc. Nad toba odzywaja sie traby, grajace melodie chwaly i zwyciestwa.\n");
		say("Slyszysz nagle dzwieki trab grajcych melodie chwaly i zwyciestwa.\n");
		TP->add_prop(MOZNA_BLOGOSLAWIC,1);
	}		
	return 1;
}

int zapytaj(string str)
{
	object kogo;
	if (!str) return 0;
	parse_command(str,environment(TP),"%o:"+PL_BIE+" %s",kogo,str);
	if (!kogo) return 0;
	if (!PRAWA->sprawdz_prawa(PRAWA_BRATA, kogo)) return 0;
	if (kogo->query_prop(LIVE_S_EXTRA_SHORT)!=OPIS_KLEKANIA) return 0;
	switch (kogo->query_prop(LICZBA_ODPOWIEDZI))
	{
		case 0:
				str="Czy wierzysz w boga Sigmara Mlotodzierzce, opiekuna Imperium?\n";
				kogo->add_prop(DOSTAL_PYTANIE,"Wierze");
				write("Pytasz "+C(kogo->query_real_name(PL_BIE))+": "+str);
				tell_room(environment(kogo),QCIMIE(TP,PL_MIA)+" pyta "
					+QIMIE(kogo,PL_BIE)+": "+str,({TP,kogo}));
				kogo->catch_msg(TP->query_Imie(kogo,PL_MIA)+" pyta sie ciebie: "+str);
				break;
		case 1:
				str="Czy Wielki Teogonista jest prawym reprezentantem Sigmara w Imperium?\n";
				kogo->add_prop(DOSTAL_PYTANIE,"Jest");
				write("Pytasz "+C(kogo->query_real_name(PL_BIE))+": "+str);
				tell_room(environment(kogo),QCIMIE(TP,PL_MIA)+" pyta "
					+QIMIE(kogo,PL_BIE)+": "+str,({TP,kogo}));
				kogo->catch_msg(TP->query_Imie(kogo,PL_MIA)+" pyta sie ciebie: "+str);
				break;
		case 2:
				str="Czy jestes przekonany, ze Imperium jest i na wieki powinno pozostac jednoscia?\n";
				kogo->add_prop(DOSTAL_PYTANIE,"Jestem");
				write("Pytasz "+C(kogo->query_real_name(PL_BIE))+": "+str);
				tell_room(environment(kogo),QCIMIE(TP,PL_MIA)+" pyta "
					+QIMIE(kogo,PL_BIE)+": "+str,({TP,kogo}));
				kogo->catch_msg(TP->query_Imie(kogo,PL_MIA)+" pyta sie ciebie: "+str);
				break;
		case 3:
			    str="Czy jestes gotow poswiecic zycie w obronie tych prawd?\n";
				kogo->add_prop(DOSTAL_PYTANIE,"Jestem");
				write("Pytasz "+C(kogo->query_real_name(PL_BIE))+": "+str);
				tell_room(environment(kogo),QCIMIE(TP,PL_MIA)+" pyta "
					+QIMIE(kogo,PL_BIE)+": "+str,({TP,kogo}));
				kogo->catch_msg(TP->query_Imie(kogo,PL_MIA)+" pyta sie ciebie: "+str);
				break;
		default : write(C(kogo->query_real_name(PL_MIA))+" odpowiedzial juz na cztery obrzedowe pytania.\n");
	}
		return 1;
}
	

string 
do_I_want_this_player_in_my_guild (object player)
{
	if (player -> query_alignment () <= 100)
		return "jest skazony zlem";
}

string 
do_I_accept_the_guilds_this_player_has_joined (object player)
{
	string str;
	str=player->query_guild_name_race();
	if (str && member_array(str,LUBIANE_RASOWKI)==-1) return "jest juz czlonkiem bractwa o nazwie \""+ str+"\"";
	str=player->query_guild_name_lay();
	if (str) return "jest juz czlonkiem bractwa o nazwie \""+ str+"\"";
	str=player->query_guild_name_occ();
	if (str && str!=GUILD_NAME) return "jest juz czlonkiem bractwa o nazwie \""+ str+"\"";	
}

int
resetuj()
{
	czy_byl=0;
}

string 
przyjmij(object kogo, string shadow_file)
{
	object shadow;
	string tmp;
	int prawo;
	int i;
	
	if (shadow_file==SHADOW)
	{	
		if (czy_byl) return "W tym roku przyjeto juz do Zakonu jednego Brata. "
			+"Nastepna ceremnia moze sie odbyc dopiero w przyszlym roku";
/*
		if ("/d/Imperium/std/room/kalendarz"->zwroc_miesiac()!="Sigmarzait") 
			return "Ceremonia moze sie odbyc tylko w miesiacu Sigmarzait";
*/
		if (!kogo->query_prop(MOZNA_BLOGOSLAWIC)) 
			return "nie zostal dokladnie przygotowany. Musisz odprawic calosc ceremonii";
		if (!PRAWA->sprawdz_prawa(BLOGOSLAWIENIE_NA_BRATA_ZAKONNEGO, TP))
			return "musi zostac poblogoslawiony przez Wielkiego Mistrza!";
	}
	else if (!PRAWA->sprawdz_prawa(BLOGOSLAWIENIE_NA_BRATA_SLUZEBNEGO, TP))
		return "musi zostac poblogoslawiony przez Wielkiego Marszalka!";	
          tmp=do_I_want_this_player_in_my_guild (kogo);
	if (tmp) return tmp;
  	  tmp=do_I_accept_the_guilds_this_player_has_joined (kogo);
        if (tmp) return tmp;
	  tmp="z niewiadomego powodu nie nadaje sie na czlonka Zakonu";
	
	shadow = clone_object (shadow_file);
	
	i=shadow->shadow_me (kogo,GUILD_TYPE,GUILD_STYLE,GUILD_NAME);
	if (i!=1 && i!=-4)
	{
		shadow->wyrzucmy_go(kogo);
		return ""+i;
	}
	if (i==-4)
	{
		if (kogo->query_guild_name_occ()==GUILD_NAME)
			return "juz jest w Zakonie";
		return "juz jest w innym bractwie";
	}
	
	shadow -> dodaj_soula (kogo);
	write_file(LOG, C(TP->query_real_name())+" przyjal na "+((shadow_file==SHADOW)?"rycerza ":"brata ") + C(kogo->query_real_name(PL_BIE))+"\t"+ctime(time())+"\n");
	return 0;
}

int 
blogoslaw(string str)
{
	object *oblist;
	object kogo;
	if (!str)	
	{
		notify_fail("Kogo chcesz poblogoslawic?\n");
		return 0;
	}

	parse_command(str, environment(TP),"%l:"+PL_BIE+"'na' %s",oblist,str);
        oblist=NORMAL_ACCESS(oblist,0,0);
	if (!sizeof(oblist))
	{
		notify_fail("Kogo chcesz poblogoslawic?\n");
		return 0;
	}
        if(sizeof(oblist) > 1)
        {
            notify_fail("Nie mozesz poblogoslawic kilku osob na raz.\n");
            return 0;
        }
        kogo=oblist[0];
	sscanf(str,"na %s",str);
	switch (str)
	{
		case "brata sluzebnego" :
		  blog_na_sluzebnego(TP, kogo);
	          TP->set_obiekty_zaimkow(({kogo}));    
	          return 1;
		case "brata zakonnego" : 
		  blog_na_zakonnego(TP, kogo);
	          TP->set_obiekty_zaimkow(({kogo}));    
	          return 1;
	}
	write("Na kogo chcesz poblogoslawic " + capitalize(kogo->query_real_name(PL_BIE))+"?\n");
	return 1;
	
	
}

blog_na_sluzebnego(object kto, object kogo)
{
	string str=przyjmij(kogo,SHADOW_BS);
	string str2="\nSlyszysz w swoim umysle glos mowiacy: "+kogo->query_imie(kto,PL_MIA)+" "+str+".\n";
	if (str)
	{
		kto->catch_msg("Blogoslawisz " + kogo->query_imie(kto, PL_BIE) + ", wznoszac"+
			" rece nad " + kogo->query_zaimek(PL_DOP, 1) + " glowa i szepczac cicho "
			+"slowa modlitwy. Czujesz jednak, ze nie zostala ona wysluchana."+str2); 
		kogo->catch_msg(kto->query_Imie(kogo, PL_MIA) + " wznosi nad twoja glowa rece,"
			+" modlac sie po cichu do Sigmara o laske dla ciebie. Po krotkiej"
			+" modlitwie " + kto->query_imie(kogo, PL_MIA) + " opuszcza rece,"
			+" jednak ty nic nie czujesz. Zadnej euforii, swiadomosci kontaktu"
			+" z bogiem. Czyzby cos bylo nie tak?\n");
		tell_room(environment(kto), QCIMIE(kto, PL_MIA)+" wznosi rece nad glowa "
			+QIMIE(kogo,PL_DOP)+ " szepczac po cichu slowa modlitwy. Po"
			+" chwili rece opadaja, nic sie jednak nie dzieje. Na twarzy "
			+QIMIE(kogo,PL_DOP)+" maluje sie wielki zawod.\n",({kto,kogo}));
		return;
	}
	kto->catch_msg("Wznosisz rece nad glowa "+kogo->query_imie(kto,PL_DOP)+" w symbolicznym gescie blogoslawienstwa, szepczac slowa modlitwy do Sigmara. Czujesz, jak przeplywa przez nie moc, wypelniajac "+QCIMIE(kogo,PL_BIE)+" duchem Sigmara.\n");
	kogo->catch_msg(kto->query_Imie(kogo, PL_MIA)+
	" wznosi rece nad twoja glowa, szepczac slowa modlitwy. "+
	"Czujesz, jak ogarnia cie duch Sigmara, napelniajac twoj "+
	"umysl madroscia, a czlonki moca. Przez krotka chwile "+
	"wznosisz sie nad Imperium, widzisz wszystkie jego troski "+
	"i bole. Widzenie szybko sie konczy, ale wiesz, ze twoim "+
	"powolaniem jest niesienie dobra wszystkim cierpiacym.\n");
	tell_room(environment(kto), QCIMIE(kto, PL_MIA)+" wznosi rece nad glowa "+QCIMIE(kogo,PL_DOP) + " szepczac cicho slowa modlitwy. " +QCIMIE(kogo, PL_MIA) + " unosi glowe. Widzisz malujace sie na " + kogo->query_zaimek(PL_DOP,1) + " twarzy uniesienie.\n",({kto,kogo}));
	tell_room(environment(kto), "Przez okno do kaplicy wpada "+
	"oslepiajaca jasnosc. Slyszysz chor spiewajacy piesn w nieznanym jezyku. Poznajesz tylko, ze jest to piesn mowiaca o dobrze, pokoju i milosci. Po chwili wszystko cichnie.\n");
	PRAWA->dodaj_prawa(PRAWA_BRATA, kogo);
	return 1;
} 

blog_na_zakonnego(object kto, object kogo)
{
	string str=przyjmij(kogo,SHADOW);
	string str2=" Slyszysz w swoim umysle glos mowiacy: "+kogo->query_Imie(kto,PL_MIA)+" "+str+".\n";
	if (!str && !PRAWA->sprawdz_prawa(BLOGOSLAWIENIE_NA_BRATA_ZAKONNEGO,TP))
		str2="\n";
	if (str || !PRAWA->sprawdz_prawa(BLOGOSLAWIENIE_NA_BRATA_ZAKONNEGO,TP))
	{
		kto->catch_msg("Stajesz przed " +kogo->query_imie(kto,PL_NAR) + "i wznosisz"+
			" swe rece nad "+kogo->query_zaimek(PL_DOP,1)+" glowa szepczac cicho "
			+"slowa modlitwy. Nie czujesz jednak kontaktu z bogiem, twoja "
			+"modlitwa nie zostala wysluchana."+str2); 
		kogo->catch_msg(kto->query_Imie(kogo, PL_MIA)+" wznosi nad twoja glowa rece, modlac"
			+" sie po cichu do Sigmara o laske dla ciebie. Po krotkiej"
			+" modlitwie "+kto->query_imie(kogo, PL_MIA)+" opuszcza rece. Czujesz w"
			+" duszy olbrzymi zawod. Czyzbys nie byl godzien? A moze "
			+"wstawiennictwo "+kto->query_imie(kogo,PL_DOP) +" jest za slabe?\n");
		tell_room(environment(kto), QCIMIE(kto, PL_MIA)+" wznosi rece nad glowa "
			+QIMIE(kogo,PL_DOP)+ " szepczac po cichu slowa modlitwy. Po"
			+" chwili rece opadaja, a twarz modlace"+kto->koncowka("go","j")+
			" wyraza zniechecenie. Na twarzy "+QCIMIE(kogo,PL_DOP)+" maluje"
			+" sie zawod pomieszany z niepokojem.\n",({kto,kogo}));
		return;
	}
	kto->catch_msg("Stajesz przed "+kogo->query_imie(kto,PL_NAR) + " i wznosisz rece"
		+" nad "+ kogo->query_zaimek(PL_DOP,1) +" glowa w symbolicznym gescie"
		+" blogoslawienstwa, szepczac slowa modlitwy do Sigmara. Czujesz, jak"
		+" przeplywa przez twe rece moc, wypelniajaca "+kogo->query_imie(kto,PL_BIE)+
		" duchem Sigmara.\n");
	kogo->catch_msg(kto->query_Imie(kogo, PL_MIA)+" wznosi rece nad twoja glowa, szepczac"
		+" slowa modlitwy. Czujesz, jak ogarnia cie duch Sigmara, napelniajac"
		+" twoj umysl madroscia, a czlonki moca. Nagle przed oczyma robi ci"
		+" sie ciemno. \n");
	widzenie(kogo,kto);	  
	tell_room(environment(kto), QCIMIE(kto, PL_MIA)+" wznosi rece nad glowa "+QCIMIE(kogo,PL_DOP) + " szepczac cicho slowa modlitwy.\n",({kto,kogo}));
	PRAWA->dodaj_prawa(PRAWA_RYCERZA,kogo);
	return 1;
} 

varargs void
widzenie(object komu,object kto,int numer)
{
	string str;
	switch(numer)
	{
	case 0: str="Kiedy odzyskujesz wzrok, stoisz na ostrej grani, "
		+"posrodku wysokich gor. Przed toba majaczy sylwetka wysokiego, "
		+"barczystego mezczyzny, trzymajacego oburacz mlot bojowy. Mezczyzna "
		+"mowi: \n    - Witaj, synu. Wstapiles na niebezpieczna i trudna droge. "
		+"Musisz stawic czola ogarniajacym Imperium silom Chaosu. Teraz"
		 +" patrz...\n ";
		tell_room(environment(kto), QCIMIE(komu, PL_MIA)+" unosi glowe. Jego oczy sa polprzymkniete, jednak cala twarz promienieje wporst nieziemskim szczesciem. \n",({komu}));
		break;
		 
	case 1: str="Mezczyzna wykonuje ruch reka. Gory znikaja, a tym "
		 +"znajdujesz sie teraz na ulicy jakiegos miasta. Kolo ciebie przebiega "
		 +"krzyczac przerazliwie kobieta. Za nia biegnie wymachujac "
		 +"zakrwawionym mieczem brudny oprych. Probujesz ruszyc do przodu, ale"
		 +" czujesz jak ktos kladzie ci na ramieniu reke. Slyszysz znajomy"
		 +" glos: \n    - Stoj. Bedziesz mial swoj czas walki.\n ";
		 tell_room(environment(kto), "Wyraz twarzy "+QCIMIE(komu,PL_DOP)+" zmenia sie. Teraz maluje sie na niej gniew i chec walki, prawa reka szuka broni.\n",({komu}));
		 break;

	case 2: str="Obraz znowu sie"
		 +" zmienia, ukazujac twoim oczom mala wioske. Z daleka wyglada na"
		 +" spokojna i szczesliwa. Kiedy jednak podchodzisz blizej,"
		 +" dostrzegasz straszne szczegoly. Nigdzie nie slychac ludzkich"
		  +" glosow, sciezkami miedzy domami ciecze krew. Zaglodasz do jednego"
		 +" z domow przez wybite okno. Oczom twoim ukazuje sie zdemolowany"
		 +"  pokoj, i straszliwie pociete ciala jego mieszkancow. Odwracasz"
		  +" wzrok i dostrzegasz stojacego przed toba mezczyzne z gor. \n";
		 tell_room(environment(kto), QCIMIE(komu,PL_MIA) + " otwiera oczy, jadnake jego spojrzenie nie jest przytomne. Wrecz przeciwnie, sprawia wrazenie nieobecnosci. Mozna z niego wyczytac olbrzymia radosc i pokore, jakby patrzyl na cos wspanialego i szlachetnego.\n",({komu}));
		 break;

	case 3: str=" Teraz"
		  +" dokladnie widzisz szczegoly jego wygladu. Jego proste, dlugie"
		  +" wlosy koloru lnu opadaja az za ramiona. Prosta, grubo ciosana, ale"
		  +" tchnaca szlachetnoscia charakteru twarz poryta jest bliznami."
		  +" Mezczyzna patrzy na ciebie ze smutkiem, a z jego oczu przebija"
		  +" wielka milosc i madrosc. \n";
		  tell_room(environment(kto), QCIMIE(komu, PL_MIA)+" usmiecha sie, szepczac jakies cieple slowa.\n",({komu}));
		  break;
	case 4: str=" Obraz zaczyna falowac. Sylwetka mezczyzny"
		  +" znika, zas twoim oczom ukazuje sie pusty step. Nigdzie wokol nie"
		  +" dostrzegasz ludzkich zabudowan, tylko gdzies daleko cienkie"
		  +" struzki dymu. Podchodzisz blizej i strach oraz wscieklosc"
		  +" zapieraja ci dech w piersiach. Na ruinach wioski obozuje oddzial"
		  +" orkow. Wokol tla sie jeszcze resztki domow, slyszysz stlumione"
		  +" jeki umierajacych mieszkancow.\n";
		  tell_room(environment(kto), "Z ust "+QCIMIE(komu, PL_DOP)+" wydobywa sie zduszony krzyk. Rysy twarz tezeja, cale cialo zaczyna drzec jakby pod wplywem strasznego bolu.\n",({komu}));
		  break;

	case 5: str="Kilku ludzi przykutych jest do"
		  +" wysokich slupow, zas orki urzadzaja sobie zawody strzeleckie. W"
		  +" innym miejscu kilku zielonych zabawia sie ze zwiazana i"
		  +" pokrwawiona dziewczyna. Wszytkiemu przypatruje sie wysoki"
		  +" mezczyzna w ciezkiej zbroji. Zanim zdazysz przyjrzec sie i"
		  +" zapamietac jego twarz, obraz znika. \n";
		  break;
	case 6: str=" Stoisz na przeleczy w gorach. Ogladasz sie za siebie, "
		+"szukajac znajomej postaci. Jest! Nie. To nie on. przd soba widzisz"
		+" stojaca nad krawedzia przepasci wysoka, barczysta i ubrana w ciezka"
		+" zbroje postac. Stoi nad pocietymi, straszliwie zmasakrowanymi "
		+"ludzkimi cialami. Postac odwraca sie. Twoim oczom ukazuje sie dlugi, "
		+"szczurzy pysk, wystajace kly i patrzace przebiegle waskie szczurze"
		+" oczy. Skaven patrzy wprost na ciebie. Wbrew swojej woli rzucasz sie "
		+"do ucieczki. Z ulga dostrzegasz, ze obraz zaczyna falowac...\n";
		tell_room(environment(kto),QCIMIE(komu,PL_MIA)+	" rzuca sie nagle, jakby przerazony, w bok. Rozszerzone ze strachu zrenice spogladaja nieprzytomnie na sciane, z ust wydobywa sie goraczkowy szept.\n",({komu}));
	case 7: str="Znajdujesz sie znowu w"
		  +" zamkowej kaplicy, przed toba stoi "+kto->query_imie(komu,PL_MIA)+ 
		  " z wyciagnietymi w gore rekoma.\n";
		 tell_room(environment(kto),QCIMIE(komu,PL_MIA)+" otwiera oczy. Widac w przeblyski olbrzymiej madrosci i milosci, jakby ich wlasciciel obcowal przed chwila z bogami.\n",({komu}));
		 break;
	}
	komu->catch_msg(str);
	if (++numer!=7) set_alarm(15.0,0.0,"widzenie",komu,kto, numer);
	else tell_room(environment(kto), "Przez okno do kaplicy wpada oslepiajaca jasnosc. Slyszysz chor spiewajacy piesn w nieznanym jezyku. Poznajesz tylko, ze jest to piesn mowiaca o wojnie, troskach i niepokoju. Po chwili wszystko cichnie.\n"); 
	komu->remove_prop(LICZBA_ODPOWIEDZI);
	komu->remove_prop(DOSTAL_PYTANIE);
	komu->remove_prop(MOZNA_BLOGOSLAWIC);
	czy_byl=1;
	set_alarm(72000.0,0.0,"usun_czy_byl");
}		

usun_czy_byl()
{
	czy_byl=0;
}


	
