/*
 * Zapisywacz do gildii Lesnych Elfow
 */

inherit "/d/Imperium/std/monster.c";

#include "lelf.h"

int do_I_accept_the_guilds_this_player_has_joined(object player);
int do_I_want_this_player_in_my_guild(object o_kto);

void
create_monster()
{
    setuid();
    seteuid(getuid());
    
    ustaw_imie (({"Yandel", "Yandela",
    		  "Yandelowi", "Yandela",
    		  "Yandelem", "Yandelu"}));
    		  
    ustaw_odmiane_rasy (PL_ELF);

    dodaj_przym ("wysoki","wysocy");
    dodaj_przym ("siwy","siwi");
               
    dodaj_nazwy( ({"yandel","yandela","yandelowi","yandela","yandelem","yandelu"}),
    		 ({"yandel","yandela","yandelowi","yandela","yandelem","yandelu"}),
    		 PL_MESKI_OS);

    dodaj_nazwy( ({"starzec","starca","starcowi","starca","stacem","starcu"}),
                 ({"starcy","starcow","starcom","starcow","starcami","starcach"}),
                 PL_MESKI_OS);
    	
    set_long ("Elf jest stary nawet jak na tak dlugowieczna rase jak elfy. Jest wysoki, "
       + "jak wiekszosc elfow. Nosi luzne, skorzane ubranie, jednak wyglada, jakby nie byl mysliwym. "
       + "Znacznie bardziej pasowalby do jakiejs swiatyni jako kaplan. Wyglada, jakby naprawde "
       + "duzo widzial i znal sie na wielu rzeczach...\n");
                      
    set_gender(G_MALE);

    add_prop(CONT_I_WEIGHT, 60000);
    add_prop(CONT_I_HEIGHT, 190);

    add_prop(OBJ_M_NO_ATTACK, "Ten Elf cieszy sie szacunkiem wszystkich Lesnych Elfow. " +
            this_player()->koncowka("Narazilbys","Narazilabys") + " sie calej gildii!\n");

    set_skill(SS_DEFENCE, 25 + random(5));
    set_skill(SS_WEP_SWORD, 25 + random(10));
    set_skill(SS_UNARM_COMBAT, 15 + random(5));
    set_skill(SS_PARRY, 15 + random(10));

    set_stats(({ 40, 50, 45, 70, 70, 50}));

    set_act_time(15);
    add_act("emote przyglada ci sie ciekawie.");
    add_act("emote wciaga w pluca won lasu.");
    add_act("emote patrzy z rozmarzeniem na las.");
    add_act("emote zamysla sie gleboko.");

    set_alignment(500);

    add_armour(LPATH+"flet");

    set_default_answer(VBFC_ME("standardowa_odp"));
    add_ask(({"flet","drewniany flet","elfi flet","drewniany elfi flet"}),VBFC_ME("odp_flet"));
    add_ask(({"gildie","lesne elfy","Lesne Elfy","gildie lesnych elfow",
              "gildie Lesnych Elfow","stowarzyszenie"}),VBFC_ME("odp_elfy"));
    add_ask(({"rade","rade gildii","rade lesnych elfow","rade Lesnych Elfow","Rade Lesnych Elfow"}),VBFC_ME("odp_rada"));

    setuid();
    seteuid(getuid());
}

void
add_introduced(string imie)
{
    set_alarm(2.0, 0.0, "return_introduce", imie);
}

string
query_presentation()
{
    return "Yandel, Starszy gildii Lesnych Elfow, elf";
}

void
return_introduce(string kto) 
{
    command("przedstaw sie " + OB_NAME(find_living(kto, 0)));
}

void
czesc(object ob)
{
    if (objectp(ob)) 
        command ("przedstaw sie "+OB_NAME(ob));
}

void
wlazl_elf_nielelf(object o_kto)
{
    if(!o_kto) return;
    command("usmiech przyjacielsko do "+OB_NAME(o_kto));
    command("szepnij "+OB_NAME(o_kto)+" Witaj w gildii Lesnych Elfow! "
        + "Jesli chcesz sie do nas przylaczyc, to trafiles w odpowiednie miejsce.");
}

void
init_living()
{
    object kto;

    ::init_living();

    if(!this_player()->query_prop(OBJ_I_INVIS))
     {
      add_action("do_join","zapisz");
      add_action("do_leave","opusc");
	  add_action("zloz","zloz");
     }

    kto = this_player();
    if (IS_ELF(kto) &&!IS_MEMBER_LELF(kto) &&!kto->query_prop(OBJ_I_INVIS))
    {    
        set_alarm (2.0,0.0,"czesc",kto);
        set_alarm (5.0,0.0,"wlazl_elf_nielelf",kto);
    }
}

int
zloz(string str)
{
    mixed *podanie;
	object kto=TP;
	
	if(!IS_ELF(kto))
	{
	    command("powiedz do " + OB_NAME(kto)+" Odejdz! To miejsce tylko dla elfow!");
		return 1;
	}
	
    if(str!="podanie" && str!="podanie o przyjecie" && str!="podanie o przyjecie do gildii")
	{
	    notify_fail("Co chcesz zlozyc? Podanie?\n");
		return 0;
	}
	
	podanie=(GILDIA)->wczytaj_podanie(kto->query_real_name());
	
	if(!podanie)
	{
    write("Zaczynasz pisac podanie.\n");
	say(QCIMIE(kto,PL_MIA) + " zaczyna pisac podanie.\n");
	
	clone_object("/obj/edit.c")->edit("napisz");
	
	return 1;
	}	
	
	if(podanie[0]==NOWE_P)
	{
	    command("powiedz do " + OB_NAME(kto)+" Nie goraczkuj sie! Twe podanie jest caly czas rozpatrywane, nie ma potrzeby pisac kolejnego!");
		return 1;
	}
	if(podanie[0]==AKTUALNE_P)
	{
	     if(sizeof(podanie[2])>=MIN_POPARCIE)
		 {
		     command("usmiechnij sie");
			 command("powiedz do " + OB_NAME(kto)+" Twe podanie juz zostalo pozytywnie rozpatrzone i jesli chcesz, w kazdym momencie mozesz zapisac sie do naszej gildii!");
			 return 1;
		 }
		 else
		 {
		     command("powiedz do " + OB_NAME(kto)+" Nie goraczkuj sie! Twe podanie jest caly czas rozpatrywane, nie ma potrzeby pisac kolejnego!");
			 return 1;
		 }
	}
			 
	if(podanie[0]==ODRZUCONE_P)
	{
	    command("powiedz do " + OB_NAME(kto)+" Twoja kandydatura zostala odrzucona! Przynajmniej na razie nie masz tu czego szukac...");
		return 1;
	}

    write("Zaczynasz pisac podanie.\n");
	say(QCIMIE(kto,PL_MIA) + " zaczyna pisac podanie.\n");
	
	clone_object("/obj/edit.c")->edit("napisz");
	
	return 1;
}

int
napisz(string str)
{
    object kto=TP;
	
	if (!str || str=="")
	{
		write("Rezygnujesz z pisania.\n");
		return 0;
	}
	
	(GILDIA)->dodaj_nowe_podanie(str,kto);
	
	write("Konczysz pisac podanie i oddajesz je " + query_imie(kto,PL_CEL)+".\n");
	say(QCIMIE(kto,PL_MIA) + " konczy pisac podanie i oddaje je " + QIMIE(this_object(),PL_CEL) + ".\n");
	
	return 1;
}
	
void
opowiesc(int faza, object gracz)
{

    if (!present(gracz, environment(this_object())))
    {
        command("powiedz Jak nie chce sluchac, to nie... Nikogo nie bede zmuszal.");
        return;
    }

    switch(faza)
    {
        case 0:
		command("emote usmiecha sie dobrotliwie.");
                command("powiedz A wiec chcesz uslyszec o Lesnych Elfach.");
		command("powiedz Sluchaj zatem. Lesne Elfy sa gildia, przyjmujaca wszystkie elfy.");
		command("powiedz Nie wazne, skad pochodzisz, wystarczy, jesli kochasz las.");

                set_alarm(3.0, 0.0, "opowiesc", (faza + 1),gracz);

                break;
        case 1:
                command("powiedz Jako Lesny Elf mozesz bez ograniczen polowac w elfich Lasach i korzystac z "
                   + "darmowej, elfiej gospody w naszej pieknej stolicy.");
		command("powiedz Jednak nigdy, przenigdy nie wolno zaatakowac jednorozca z Lasu Loren.");
		command("powiedz Takie zachowanie karane jest usunieciem z gildii bez mozliwosci powrotu do niej.");
		command("powiedz W ten sposob karane jest tez zabicie mieszkanca Athel-Loren, lub innego Lesnego Elfa.");

                set_alarm(4.0, 0.0, "opowiesc", (faza + 1),gracz);

                break;
        case 2:
                command("powiedz do " + OB_NAME(gracz) + " Jesli jestes " + gracz->koncowka("gotow","gotowa")+" do wstapienia do naszej gildii, zloz u mnie podanie.");

                break;
    }
    return;
}

string
standardowa_odp()
{
    object o_kto=this_player();

    if (!IS_ELF(o_kto))
    {    
        write(query_Imie(TP,PL_MIA)+" sprawia wrazenie, jakby nie uslyszal pytania.\n");
        say(QCIMIE(TO,PL_MIA)+" sprawia wrazenie, jakby nie uslyszal pytania "+QIMIE(TP,PL_DOP)+".\n");
        return "";
    }
    command("powiedz Niestety nie umiem ci pomoc w tej sprawie ...");
    command("powiedz Za to chetnie odpowiem na pytania dotyczace Lesnych Elfow!");
    return "";
}

string 
odp_elfy()
{
    object o_kto=this_player();

    if (!IS_ELF(o_kto))
    {    
        write(query_Imie(TP,PL_MIA)+" mowi do ciebie: To gildia tylko dla Elfow, wic nie masz czego tu szukac.\n");
        say(QCIMIE(TO,PL_MIA)+" mowi do "+QIMIE(TP,PL_DOP)+": To gildia tylko dla Elfow, wiec nie masz czego tu szukac.\n");
        return "";
    }

    set_alarm(0.1, 0.0, "opowiesc",0,o_kto);

    return "";
}

string 
odp_flet()
{
    object o_kto=this_player();
    object *tab;
    object o_flet;
    int i;
    int czy_ma_flet=0;

    if (!IS_ELF(o_kto))
    {    
        write(query_Imie(TP,PL_MIA)+" mowi do ciebie: To flet Lesnych Elfow... A wiec nic tu po tobie...\n");
        say(QCIMIE(TO,PL_MIA)+" mowi do "+QIMIE(TP,PL_DOP)+": To flet Lesnych Elfow... A wiec nic tu po tobie...\n");
        return "";
    }

    if(!o_kto->query_guild_member(GUILD_NAME))
      {
         command("powiedz To flet noszony z duma przez wszystkie Lesne Elfy!");
         command("powiedz Kazdy, kto wstepuje do naszej gildi, otrzymuje taki flet.");
         return "";
      }

    tab = deep_inventory(o_kto);
       for (i=0; i<sizeof(tab); i++)
           if (tab[i]->czy_to_flet_lelfow())
               {
                    czy_ma_flet=1;
               }

    if(czy_ma_flet)
      {
         command("powiedz To flet noszony z duma przez wszystkie Lesne Elfy!");
         command("powiedz Ty zreszta tez taki masz. Jesli jednak zdazylo by ci sie go zgubic, przyjdz tu i zapytaj mnie o niego. Postaram sie zrobic wszystko, co tylko bedzie w mej mocy by pomoc ci w odzyskaniu go.");
         return "";
      }

    o_flet=clone_object(LPATH+"flet");

    command("usmiech smutno");
    command("powiedz do "+OB_NAME(o_kto)+" Widze, ze nie masz przy sobie fletu Lesnych Elfow...");
    command("powiedz do "+OB_NAME(o_kto)+" Nie martw sie jednak, oto twoj nowy flet. Dbaj o niego i niech tym razem ci nie zginie...");
    o_flet->move(o_kto,1);
    write(query_Imie(o_kto)+" daje ci drewniany flet.\n");
    say(QCIMIE(TO,PL_MIA)+" daje " + QIMIE(o_kto,PL_CEL) +" drewniany flet.\n");
    return "";
}

string 
odp_rada()
{
    object o_kto=this_player();

    if (!IS_ELF(o_kto))
    {    
        write(query_Imie(TP,PL_MIA)+" sprawia wrazenie, jakby nie uslyszal pytania.\n");
        return "";
    }
    command("powiedz Rada Lesnych Elfow podejmuje wszystkie wazne dla naszej gildii decyzje.");
    command("powiedz Kazde podanie zlozone przez wstepujacych do gildii musi byc przez nia najpierw zatwierdzone.");
    return "";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Przyjecie do gildii
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

int
do_join(string str)
{
    object shadow;
    object kto=TP;
    object o_flet;
    int    result;  
    string s;
	
    if(!IS_ELF(kto))
	{
		    command("powiedz do " + OB_NAME(kto)+" Odejdz! To miejsce tylko dla elfow!");
			return 1;
	}
		
    if (str!= "sie do gildii" && str!="sie do Lesnych Elfow" && str!= "sie do lesnych elfow")
    {
        notify_fail("Kogo i do czego chcesz zapisac ? Chyba zapisz sie do gildii ?\n");
        return 0;
    }
 
    if (!do_I_want_this_player_in_my_guild (kto))
	return 0;
        	
    if (!do_I_accept_the_guilds_this_player_has_joined(kto))
    return 0;
	
    notify_fail("Niestety, z niewiadomego powodu, nie mozesz zostac przyjet"+
	        kto->koncowka ("y","a","y")+" do naszego stowarzyszenia."
	       +" Zglos to komenda <zglos blad>.\n");
	
    shadow = clone_object(SHADOW);
    if (!(result=shadow->shadow_me(kto,GUILD_TYPE,GUILD_STYLE,GUILD_NAME,"nic")))
    {
	shadow->remove_object();
	
    (GILDIA)->zaloguj("Blad! Shadow_me zwrocilo 0 przy zapisie nowego elfa",kto->query_real_name(),1);
	
	return 0;
    }
    kto->clear_guild_stat(SS_RACE);
    o_flet=clone_object(LPATH+"flet");

    command("usmiech przyjaznie");
    command("powiedz do "+OB_NAME(kto)+" Witaj wsrod Lesnych Elfow!");
    o_flet->move(kto,1);
    write(query_Imie(kto)+" daje ci drewniany flet.\n");
    say(QCIMIE(TO,PL_MIA)+" daje " + QIMIE(kto,PL_CEL) +" drewniany flet.\n");
    command("powiedz do "+OB_NAME(kto)+" Oto twoj elfi flet. Pamietaj, oznacza "
      + "on przynaleznosc do naszej gildii, wiec nikomu go nie oddawaj.\n");
    command("powiedz do "+OB_NAME(kto)+" Koniecznie zapoznaj sie z ksiega, ktora znajdziesz w chacie Lesnych Elfow!\n");
    
    (GILDIA)->zaloguj("Nowy czlonek",kto->query_real_name(),0);
    (GILDIA)->nowy_czlonek(kto);
    
    kto->add_cmdsoul(SOUL);
    kto->update_hooks();

    return 1;
}

int
do_I_want_this_player_in_my_guild (object o_kto)
{
    mixed *podanie;
	
    if (!IS_ELF(o_kto))
    {
        notify_fail("Tylko elfy moga zapisac sie do naszego stowarzyszenia!\n");
        return 0;
    }

    if((GILDIA)->query_prawa(o_kto->query_real_name())==LEV_WYGNANY)
       {
	    command("powiedz O nie! Ty musisz czekac... czekac na laske! Jesli czujesz, ze jestes " + o_kto->koncowka("gotow","gotowa") + " aby ponownie do nas nalezec, zloz podanie.");
		notify_fail("");
        return 0;
       }
   	
    if (IS_MEMBER_LELF(o_kto))
    {     
        notify_fail("Przeciez jestes juz Lesnym Elfem!\n");
        return 0;
    }	
	
	podanie=(GILDIA)->wczytaj_podanie(o_kto->query_real_name());
	   	
	if(!podanie)
	{
		    command("powiedz do " + OB_NAME(o_kto) +" O nie! Nie mozesz tak po prostu wstapic! Najpierw zloz podanie!");
			notify_fail("");
			return 0;
	}
	
	if(podanie[0]==AKTUALNE_P && sizeof(podanie[2])>=MIN_POPARCIE)
	{
	    return 1;
	}
	
	if(podanie[0]==ODRZUCONE_P)
	{
	    notify_fail("");
		command("powiedz do " + OB_NAME(o_kto) +" O nie! Jako ze twe podanie zostalo odrzucone, nie mozesz do nas wstapic!");
		return 0;
	}
	
	write(podanie[0]+"\n");
	write(podanie[2][0]+"\n");
	write(podanie[2][1]+"\n");
	
	command("powiedz do " + OB_NAME(o_kto)+" Nie mozesz do nas jeszcze wstapic... Twe podanie nie zostalo jeszcze pozytywnie rozpatrzone...");
	
	return 0;	
}

int
do_I_accept_the_guilds_this_player_has_joined (object o_kto)
{	
    if (o_kto->query_guild_member(GUILD_TYPE))
    {
        notify_fail ("Jestes juz "+o_kto->koncowka("czlonkiem","czlonkinia")+
	             " innego stowarzyszenia rasowego.\n");
	return 0;	
    }
    
    return 1;
}

int 
do_leave(string str)
{
    int ile,i;
    object *tab;
	string s;
    object o_kto=TP;
	
	if((GILDIA)->query_prawa(o_kto->query_real_name())>=LEV_RADNY)
    {
        notify_fail("Jestes czlonkiem rady! Musisz najpierw zrezygnowac ze stanowiska, a dopiero "
           + "pozniej bedziesz " + o_kto->koncowka("mogl","mogla") + " nas opuscic...\n");
        return 0;
    }   

    if ((GILDIA)->query_prawa(o_kto->query_real_name())<LEV_WYGNANY)
    {
	notify_fail("Jeszcze sie nie zapisal"+o_kto->koncowka("es","as")
	           +" a juz chcesz nas opuscic?\n");
	return 0;
    }		

    if (str!="lesne elfy" && str!="Lesne Elfy" 
          && str!="stowarzyszenie" && str!="gildie")
    {
        notify_fail("Co chcesz opuscic ? Lesne Elfy ?\n");
	return 0;
    }

    (GILDIA)->wyrzuc_z_gildii(o_kto,SAM_ODSZEDL);

    return 1;
}