inherit "/cmd/std/soul_cmd.c";
#include "defs.h"
inherit EPATH + "garou_special.c";
#include <czary.h>

mapping *czary = (["wpazury": ({60, 40}), "wochrona": ({40, 40}), "wblogoslawienstwo": ({65, 80}), "wleczenie": ({40, 40}), "wzatruj": ({80, 150}),]);


public string
get_soul_id()
{
        return "Garou";
}
public mapping
query_cmdlist()
{
        return (["wcios":"garou_slash",
                 "wtytul": "garou_title",
                 "wwilki": "garou_members",
                 "wawansuj": "garou_promote",
                 "wdegraduj": "garou_demote",
                 "wczary": "garou_spells",
                 "wblogoslawienstwo": "garou_spell_bless",
                 "wpazury": "garou_spell_claws",
                 "wleczenie": "garou_spell_heal",
                 "wochrona": "garou_spell_protection",
                 "wzatruj": "garou_spell_poison",
                 "wszal":  "garou_rage",
                 "wwyrwij": "garou_corpse",
                 "wpomoc":  "garou_help"]);
}

static void
tell_all(string str)
{
   object *ob;
   int i;
   ob = FILTER_LIVE(all_inventory(environment(TP))) - ({ TP });
   for (i = 0; i < sizeof(ob); i++)
   if (CAN_SEE_IN_ROOM(ob[i]))
      if (CAN_SEE(ob[i], TP))
         ob[i]->catch_msg(str);
}

int
garou_help(string str)
{
	if(MASTER_ENG->query_szef(TP->query_real_name()))
	{
		write("Komendy dostepne dla Wladcy Garou:\n"+
		      "wtytul [imie] [tytul]: Nadanie tytulu innemu wilkolakowi Garou\n"+
		      "wawansuj [imie]: Awansowanie osoby w hierarchi gildii\n"+
		      "adegraduj [imie]: Degradowanie osoby w hierarchi gildii\n");
	}
	write("Komendy dostepne dla wilkolakow Garou:\nZdolnosci specjalne:\n"+
	      "wcios (kogo) - cios specjalny\n"+
	      "wczary (czar) - spis czarow badz dokladniejsze informacje nt czaru\n"+
	      "wzatruj - zatrucie swych pazurow trucizna\n"+
	      "wszal - wpadniecie w szal bojowy\n"+
	      "\nInne komendy:\n"+
	      "wwilki (obecni) - spis wszystkich czlonkow gildii badz obecnych w swiecie\n"+
	      "wwyrwij - wyrwanie serca z ciala.\n");

    return 1;
}


int
garou_spells(string str)
{
	if(!str) write("Dary Gaii:\nwblogoslawienstwo - blogoslawienstwo Gaii"+
	                "\nwpazury - Wzmocnienie pazurow"+
	                "\nwleczenie - uleczenie ran"+
	                "\nwochrona - protekcja Gaii"+
	                "\nwzatruj - nasaczenie pazurow trucizna\n");

    else if(str == "wblogoslawienstwo") write("Blogoslawienstwo Gaii\nSkladniki: XXX\n");
    else if(str == "wpazury") write("Wzmocnienie pazurow.\nSkladniki: XXX\n");
    else if(str == "wleczenie") write("Leczenie ran.\nSkladniki: XXX\n");
    else if(str == "wochrona") write("Protekcja Gaii.\nSkladniki: XXX\n");
    else if(str == "wzatruj") write("Zatrucie swych pazurkow.\nSkladniki: XXX\n");
    else write("Nieznane zaklecie.\n");
    return 1;
}

void
garou_spell_claws_reload(object garou)
{
	garou->catch_msg("Twoje pazury zdaja sie znacznie slabnac.\n");
	garou->remove_prop(GAROU_CLAWS_BLESS);
}
void
garou_spell_defence_reload(object garou)
{
	garou->catch_msg("Twa siersc staje sie lzejsza.\n");
	garou->remove_prop(GAROU_DEFENCE_BLESS);
	garou->update_garou_form();
}

void
garou_spell_bless_reload(object garou)
{
	garou->remove_prop(GAROU_BLESS);
	garou->catch_msg("Myslisz ze twe cialo wypoczelo juz od blogoslawienstwa Gaii i jest gotowe by przyjac kolejne.\n");
}

void
garou_spell_bless_end(object garou, int skill)
{
	garou->catch_msg("Czujesz ze slabniesz.\n");
	garou->set_stat_extra(SS_STR, garou->query_stat_extra(SS_STR) - skill*2);
	garou->set_stat_extra(SS_DEX, garou->query_stat_extra(SS_DEX) - skill*3/2);
	garou->set_stat_extra(SS_CON, garou->query_stat_extra(SS_CON) - skill/2);
	garou->set_stat_extra(SS_WIS, garou->query_stat_extra(SS_WIS) - skill/3);
	garou->set_stat_extra(SS_INT, garou->query_stat_extra(SS_INT) - skill/3);
	garou->set_stat_extra(SS_DIS, garou->query_stat_extra(SS_DIS) - skill);
}


void
garou_cast_spell(object garou, string spell)
{
	int trudnosc;
	if(!czary[spell])
	{
		garou->catch_msg("Cos sie spierdolilo.\n");
		return;
	}
	garou->set_cast(0);
	trudnosc = czary[spell][0];
	garou_use_skill(garou, SS_GAROU_CZARY);
    garou->set_mana(garou->query_mana() - czary[spell][1]);
  	if(!garou_try_cast_spell(garou, trudnosc))
	{
		garou->catch_msg("Ogarnia cie pustka gdy zdajesz sobie sprawe ze twoja proba przywolania mocy Gaii nie powiodla sie.\n");
		tell_all("Widzisz jak na twarzy " + QIMIE(garou, PL_DOP) + " pojawia sie grozna mina jakby cos " + garou->koncowka("jemu", "jej") + " nie wyszlo.\n");
		return;
	}
	switch(spell)
	{
		case "wpazury":
		{
			garou->catch_msg("Konczysz inkancje czaru i czujesz jak twe pazury zdaja sie twardniec.\n");
			tell_all(QCIMIE(garou, PL_MIA) + " konczy wymawiac dziwne slowa a na jego twarzy pojawia sie usmiech.\n");
			garou->add_prop(GAROU_CLAWS_BLESS, garou->query_skill(SS_GAROU_CZARY));
			set_alarm(itof(garou->query_skill(SS_GAROU_CZARY) * 5), 0.0, &garou_spell_claws_reload(garou));
			return;
		}
		case "wochrona":
		{
			garou->catch_msg("Konczysz inkancje czaru i czujesz ze siersc twa staje sie ciezsza ale i zarazem twardsza.\n");
			tell_all(QCIMIE(garou,PL_MIA) + " konczy wymawiac dziwne slowa a na jego twarzy pojawia sie usmiech.\n");
			garou->add_prop(GAROU_DEFENCE_BLESS, garou->query_skill(SS_GAROU_CZARY));
			garou->update_garou_form();
			set_alarm(itof(garou->query_skill(SS_GAROU_CZARY) * 5), 0.0, &garou_spell_defence_reload(garou));
			return;
		}
		case "wleczenie":
		{
			garou->catch_msg("Konczysz inkancje czaru a przez twoje cialo przechodzi cieple uczucie.\n");
			tell_all(QCIMIE(garou,PL_MIA) + " konczy wymawiac dziwne slowa a na jego twarzy pojawia sie usmiech.\n");
			garou->set_heal(garou->query_skill(SS_GAROU_CZARY) / 10);
			return;

		}
		case "wzatruj":
		{
			garou->catch_msg("Konczysz inkancje czaru a na twych pazurach pojawia sie ciemna ciecz.\n");
			tell_all(QCIMIE(garou,PL_MIA) + " konczy wymawiac dziwne slowa a na jego twarzy pojawia sie usmiech.\n");
			garou->add_prop(GAROU_POISON_CLAWS, 100);
			return;
		}
		case "wblogoslawienstwo":
		{
			garou->catch_msg("Konczysz inkancje czaru a cialo twe zostaje wzmocnione przez Gaie.\n");
			garou->set_stat_extra(SS_STR, garou->query_skill(SS_GAROU_CZARY));
			garou->set_stat_extra(SS_DEX, garou->query_skill(SS_GAROU_CZARY)*3/2);
			garou->set_stat_extra(SS_CON, garou->query_skill(SS_GAROU_CZARY)/2);
			garou->set_stat_extra(SS_WIS, garou->query_skill(SS_GAROU_CZARY)/3);
			garou->set_stat_extra(SS_INT, garou->query_skill(SS_GAROU_CZARY)/3);
			garou->set_stat_extra(SS_DIS, garou->query_skill(SS_GAROU_CZARY));
			tell_all(QCIMIE(garou, PL_MIA) + " konczy wymawiac dziwne slowa a na jego twarzy maluje sie dziwny usmiech.\n");
			garou->add_prop(GAROU_BLESS, 1);
			set_alarm(itof(garou->query_skill(SS_GAROU_CZARY) * 3), 0.0, &garou_spell_bless_end(garou, garou->query_skill(SS_GAROU_CZARY)));
			set_alarm(400.0, 0.0, &garou_spell_bless_reload(garou));
			return;
		}
	}
}

int
garou_spell_poison(string str)
{
	notify_fail("Juz wymawiasz jakies zaklecie!\n");
	if(TP->query_cast()) return 0;
	notify_fail("Nie jestes gotow psychicznie by skorzystac z daru Gaii.\n");
	if(TP->query_mana() < czary["wzatruj"][1]) return 0;
	notify_fail("Nie masz odpowiednich komponentow.\n");
//  	if(!check_resource(TP,({"paznokiec"})) return 0;
	notify_fail("Juz jestes pod wplywem tego czaru!.\n");
	if(TP->query_prop(GAROU_POISON_CLAWS)) return 0;
    TP->catch_msg("Zaczynasz wymawiac slowa czaru nasaczajacego twe pazury gesta ciecza..\n");
    tell_all(QCIMIE(TP, PL_MIA) + " zaczyna wymawiac slowa w jakims dziwnym jezyku..\n");
    TP->set_cast(1);
    set_alarm(itof(51 - TP->query_skill(SS_GAROU_CZARY)/2), 0.0, &garou_cast_spell(TP, "wzatruj"));
    return 1;
}

int
garou_spell_bless(string str)
{
	notify_fail("Juz wymawiasz jakies zaklecie!\n");
	if(TP->query_cast()) return 0;
	notify_fail("Nie jestes gotow psychicznie by skorzystac z daru Gaii.\n");
	if(TP->query_mana() < czary["wblogoslawienstwo"][1]) return 0;
	notify_fail("Nie masz odpowiednich komponentow.\n");
//  	if(!check_resource(TP,({"paznokiec"})) return 0;
	notify_fail("Juz jestes pod wplywem tego czaru!.\n");
	if(TP->query_prop(GAROU_BLESS)) return 0;
    TP->catch_msg("Zaczynasz wymawiac slowa czaru wzmacniajacego ciebie moca Gaii.\n");
    tell_all(QCIMIE(TP, PL_MIA) + " zaczyna wymawiac slowa w jakims dziwnym jezyku..\n");
    TP->set_cast(1);
    set_alarm(itof(51 - TP->query_skill(SS_GAROU_CZARY)/2), 0.0, &garou_cast_spell(TP, "wblogoslawienstwo"));
    return 1;
}


int
garou_spell_protection(string str)
{
	notify_fail("Juz wymawiasz jakies zaklecie!\n");
	if(TP->query_cast()) return 0;
	notify_fail("Nie jestes gotow psychicznie by skorzystac z daru Gaii.\n");
	if(TP->query_mana() < czary["wochrona"][1]) return 0;
	notify_fail("Nie masz odpowiednich komponentow.\n");
//  	if(!check_resource(TP,({"paznokiec"})) return 0;
	notify_fail("Juz jestes pod wplywem tego czaru!.\n");
	if(TP->query_prop(GAROU_DEFENCE_BLESS)) return 0;
    TP->catch_msg("Zaczynasz wymawiac slowa czaru wzmacniajacego twa siersc i skore..\n");
    tell_all(QCIMIE(TP, PL_MIA) + " zaczyna wymawiac slowa w jakims dziwnym jezyku..\n");
    TP->set_cast(1);
    set_alarm(itof(51 - TP->query_skill(SS_GAROU_CZARY)/2), 0.0, &garou_cast_spell(TP, "wochrona"));
    return 1;
}

int
garou_spell_heal(string str)
{
	notify_fail("Juz wymawiasz jakies zaklecie!\n");
	if(TP->query_cast()) return 0;
	notify_fail("Nie jestes gotow psychicznie by skorzystac z daru Gaii.\n");
	if(TP->query_mana() < czary["wleczenie"][1]) return 0;
	notify_fail("Nie masz odpowiednich komponentow.\n");
//  	if(!check_resource(TP,({"paznokiec"})) return 0;
	notify_fail("Juz jestes pod wplywem tego czaru!.\n");
	if(TP->query_heal()) return 0;
    TP->catch_msg("Zaczynasz wymawiac slowa czaru przyspieszenia twego metabolizmu..\n");
    tell_all(QCIMIE(TP, PL_MIA) + " zaczyna wymawiac slowa w jakims dziwnym jezyku..\n");
    TP->set_cast(1);
    set_alarm(itof(51 - TP->query_skill(SS_GAROU_CZARY)/2), 0.0, &garou_cast_spell(TP, "wleczenie"));
    return 1;
}


int
garou_spell_claws(string str)
{
	notify_fail("Juz wymawiasz jakies zaklecie!\n");
	if(TP->query_cast()) return 0;
	notify_fail("Nie jestes gotow psychicznie by skorzystac z daru Gaii.\n");
	if(TP->query_mana() < czary["wpazury"][1]) return 0;
	notify_fail("Nie masz odpowiednich komponentow.\n");
//  	if(!check_resource(TP,({"paznokiec"})) return 0;
	notify_fail("Juz jestes pod wplywem tego czaru!.\n");
	if(TP->query_prop(GAROU_CLAWS_BLESS)) return 0;
    TP->catch_msg("Zaczynasz wymawiac slowa czaru wzmacniajacego twe pazury..\n");
    tell_all(QCIMIE(TP, PL_MIA) + " zaczyna wymawiac slowa w jakims dziwnym jezyku..\n");
    TP->set_cast(1);
    set_alarm(itof(51 - TP->query_skill(SS_GAROU_CZARY)/2), 0.0, &garou_cast_spell(TP, "wpazury"));
    return 1;
}

static void
tell_watcher(string str, object enemy)
{
   object me,*ob;
   int i;
   me = TP;
   ob = FILTER_LIVE(all_inventory(environment(me))) - ({ me });
   ob -= ({ enemy });
   for (i = 0; i < sizeof(ob); i++)
   if (!ob[i]->query_option(OPT_BLOOD) && CAN_SEE_IN_ROOM(ob[i]))
      {
      if (CAN_SEE(ob[i], me))
         ob[i]->catch_msg(str);
   }
}
void
set_slash_reload(object me)
{
        me->set_slash(0);
        me->catch_msg("Czujesz ze jestes " + me->koncowka("gotow", "gotowa") + " by zaatakowac cala furia.\n");
}

/* Tryby szalu:
   0 - gotow do nastepnego szalu
   1 - szal
   2 - odpoczynek po szale
 */

void
garou_rage_reload(object garou)
{
	garou->set_rage(0);
	garou->catch_msg("Jestes goto" + garou->koncowka("wy", "wa") + " by ponownie zapasc w wilczy szal.\n");
}

void
garou_stop_rage(object garou, int how_much)
{
	garou->set_rage(2);
	garou->catch_msg("Swiat zdaje sie przyspieszac kiedy opuszcza cie wilczy szal.\n");
	garou->add_prop(LIVE_I_QUICKNESS, garou->query_prop(LIVE_I_QUICKNESS) - how_much);
}

int
garou_rage(string str)
{
	int skill;
	int rage_time;
	notify_fail("Jestes w trakcie trwania szalu!\n");
	if(TP->query_rage() == 1) return 0;
	notify_fail("Musisz troche odpoczac nim popadniesz w kolejny szal.\n");
	if(TP->query_rage() == 2) return 0;
	skill = TP->query_skill(SS_GAROU_SZAL);
	rage_time = TP->query_skill(SS_GAROU_SZAL) * 5;
    set_alarm(itof(rage_time), 0.0, &garou_stop_rage(TP, GAROU_RAGE_SPEED(TP->query_skill(SS_GAROU_SZAL), TP->query_stat(SS_OCCUP)) ));
    set_alarm(itof(550), 0.0, &garou_rage_reload(TP));
    TP->catch_msg("Swiat wokol ciebie zdaje sie zwalniac gdy popadasz w wilczy szal!\n");
    say("Twarz " + QIMIE(TP, PL_DOP) + " przyjmuje dziwny grymas a " + TP->koncowka("jego", "jej") + " ruchy staja sie szybsze gdy popada " + TP->koncowka("on", "ona") + " w wilczy szal!\n");
    TP->add_prop(LIVE_I_QUICKNESS, TP->query_prop(LIVE_I_QUICKNESS) + GAROU_RAGE_SPEED(TP->query_skill(SS_GAROU_SZAL), TP->query_stat(SS_OCCUP)));
    TP->set_rage(1);
    garou_use_skill(TP, SS_GAROU_SZAL);
	return 1;
}


void
spell_attack(object me, object enemy)
{
        mixed *hitresult;
        object poison;
        int *pen;
        string jak;
        set_this_player(me);
        pen = ({ query_garou_pen(me, enemy), query_garou_hit(me, enemy) });
    if(!objectp(enemy))
    {
        me->catch_tell("Opuszcza cie furia gdy spostrzegasz sie iz nie masz przeciwnika.\n");
        me->set_slash(0);
        return;
    }
            garou_use_skill(me, SS_GAROU_SLASH);
        if(pen[1] > 0)
        {
          hitresult = enemy->hit_me(pen[0], W_SLASH, pen[1], TP, -1);

          setuid();
          seteuid(getuid());
          write_file(LOGPATH + "slash_pen", "Attacker: " + capitalize(me->query_real_name()) +
                                      " Enemy: " + capitalize(enemy->query_real_name())   +
                                      " PEN: " + pen[0] +
                                      " HIT: " + pen[1] +
                                      " %PHURT: " + hitresult[0] +
                                      " DAM: " + hitresult[3] + "\n");
          switch(hitresult[0])
          {
                  case -1..5: jak = "ledwo muskajac"; break;
                  case 6..12: jak = "lekko raniac";   break;
                  case 13..20: jak = "raniac"; break;
                  case 21..35: jak = "ciezko raniac"; break;
                  case 36..75: jak = "bardzo ciezko raniac"; break;
                  default: jak = "masakrujac"; break;
          }
        // opiszemy
          TP->catch_msg("Zaczynasz nacierac na " + QIMIE(enemy, PL_DOP) + " z coraz wieksza szybkoscia. Twoj wrog nie nadaza odpierac wszystkich twych ciosy i odslania sie dajac ci szanse. Z zaskakujaca zwinnoscia wprowadzasz silny cios swymi pazurami " + jak + " swego wroga.\n");
          enemy->catch_msg(QCIMIE(TP,PL_MIA) + " zaczyna nacierac coraz szybciej. Starajac odeprzec sie wszystkie jego ciosy, odslaniasz sie dajac szanse swemu przeciwnikowi, ktory z zaskakujaca zwinnoscia wprowadza silny cios swymi pazurami " + jak + " cie!\n");
          tell_watcher(QCIMIE(TP, PL_MIA) + " zaczyna nacierac coraz szybciej na " + QIMIE(enemy, PL_DOP) + ". Starajac odeprzec wszystkie jego ciosy, przeciwnik wilkolaka odslania sie dajac mu szanse, ktora wykorzystuje wprowadzajac z zaskakujaca zwinnoscia silny cios swymi pazurami " + jak + " " + enemy->koncowka("go", "ja") + "!\n", enemy);
          if(TP->query_prop(GAROU_POISON_CLAWS))
          {
			  poison = clone_object(EPATH + "trucizna");
			  poison->move(enemy);
			  poison->set_time(TP->query_skill(SS_GAROU_CZARY) * 5);
			  poison->set_interval(21 - TP->query_skill(SS_GAROU_CZARY) / 5);
			  poison->set_strength(TP->query_stat(SS_OCCUP));

			  TP->catch_msg("Pazury twe wprowadzily trucizne do krwii twego przeciwnika.\n");
	          poison->start_poison();
	          poison->set_garou(TP);
	          TP->remove_prop(GAROU_POISON_CLAWS);

		  }
          if(enemy->query_hp() < 1)
          {
                TP->catch_msg("Bezladne cialo " + QIMIE(enemy, PL_DOP) + " opada na ziemie. Jego zamglony wzrok, jakby szukajac pomocy, skierowany jest w twoja strone.\n");
                enemy->catch_msg("Opadasz bezladnie na ziemie, a ostatnie co widzisz to cien " + QIMIE(TP, PL_DOP) + " oblizujacego twoja krew.\n");
                tell_watcher(QCIMIE(enemy, PL_MIA) + " opada bezladnie na ziemie, patrzac zamglonym wzrokiem w strone swego oprawcy.\n", enemy);
                enemy->do_die(TP);
          }
	    }
	    else
	    {
          setuid();
          seteuid(getuid());
          write_file(LOGPATH + "slash_pen", "Attacker: " + capitalize(me->query_real_name()) +
                                      " Enemy: " + capitalize(enemy->query_real_name())   +
                                      " PEN: 0" +
                                      " HIT: 0\n");
			TP->catch_msg("Zaczynasz nacierac na " + QIMIE(enemy, PL_DOP) + " z coraz wieksza szybkoscia. Twoj wrog nie nadaza odpierac wszystkich twych ciosy i odslania sie dajac ci szanse. Z zaskakujaca zwinnoscia wprowadzasz szybkie pchniecie swymi pazurami jednak kompletnie pudlujesz i przecinasz powietrze tuz obok swego wroga.\n");
			enemy->catch_msg(QCIMIE(TP,PL_MIA) + " zaczyna nacierac coraz szybciej. Starajac odeprzec sie wszystkie jego ciosy, odslaniasz sie dajac szanse swemu przeciwnikowi, ktory z zaskakujaca zwinnoscia wprowadza szybkie pchniecie swymi pazurami jednak uchylasz sie i wrog twoj przecina powietrze tuz obok ciebie. ufff..\n");
			tell_watcher(QCIMIE(TP, PL_MIA) + " zaczyna nacierac coraz szybciej na " + QIMIE(enemy, PL_DOP) + ". Starajac odeprzec wszystkie jego ciosy, przeciwnik wilkolaka odslania sie dajac mu szanse, ktora wykorzystuje wprowadzajac z zaskakujaca zwinnoscia szybkie pchniecie swymi pazurami jednak " + QIMIE(enemy, PL_MIA) + " w ostatniej chwili uchyla sie przed smiercionosnym ciosem!\n", enemy);
		}
          TP->set_slash(3);
          set_alarm(8.0, 0.0, &set_slash_reload(TP));
}
void
middle_attack(object player)
{
    if (!objectp(player->query_attack()))
    {
        write("Nie widzisz swojego celu wiec przestajesz atakowac z furia.\n");
        player->set_slash(0);
        return;
    }
    player->set_slash(2);
    player->add_prop(LIVE_O_SPELL_ATTACK, this_object());
}
int
garou_slash(string str)
{
        object *kogo;
        notify_fail("Musisz odpoczac po swoim poprzednim ataku.\n");
        if(TP->query_slash() > 1) return 0;
        notify_fail("Wlasnie sie przygotowujesz do wykonania swego ciosu specjalnego.\n");
        if(TP->query_slash() == 1) return 0;
        if (!str)
        {
       if ( TP->query_attack()) kogo = ({TP->query_attack()});
     }
    else if(str) kogo = parse_this(str,"%l:"+PL_BIE);
        notify_fail("Kogo chcesz zaatakowac?\n");
        if(!sizeof(kogo)) return 0;
        notify_fail("To nie jest sluszne posuniecie by atakowac takiego przeciwnika!\n");
        if (!F_DARE_ATTACK(TP, kogo[0]) && (TP->query_attack() != kogo[0])) return 0;
        TP->set_slash(1);
        set_alarm(4.0, 0.0, &middle_attack(TP));
        if(TP->query_attack() != kogo[0])
        {
			kogo[0]->catch_msg(QCIMIE(TP, PL_MIA) + " ze zwierzeca furia atakuje cie!\n");
			TP->catch_msg("Ze zwierzeca furia atakujesz " + QIMIE(kogo[0], PL_DOP) + ".\n");
			tell_watcher(QCIMIE(TP, PL_MIA) + " ze zwierzeca furia atakuje " + QIMIE(kogo[0], PL_DOP) + "!\n", kogo[0]);
			TP->attack_object(kogo[0]);
		}
		else TP->catch_msg("Szykujesz sie do odpowiedniego momentu by zaatakowac swego wroga.\n");
        return 1;
}


int
garou_title(string str)
{
   string *text, imie, title;
   int    i;
   if(TP->query_real_name() != MASTER_ENG->znajdz_szefa() && !TP->query_wiz_level())	return 0;
   notify_fail("Za malo argumentow!\n");
   if(!str) return 0;

   text = explode(str, " ");
   imie = text[0];
   title = "";
   if(sizeof(text) < 2) return 0;
   for(i=1; i<sizeof(text); i++)
   {
      title = title + text[i];
      if(i != (sizeof(text)-1)) title = title + " ";
   }
   notify_fail(capitalize(imie) + " nie jest Garou!\n");
   if(!MASTER_ENG->query_czlonek(imie)) return 0;

   write("Dobrze, zmienimy tytul " + capitalize(imie));
   notify_fail("Cos sie spierdolilo.\n");
   if(!MASTER_ENG->set_title(imie, title)) return 0;
   write("od teraz zwany bedzie jako: " + title + ".\n");
   return 1;
}

int
garou_members(string str)
{
	object *gracze;
	int i;
	string garou = "";
	if(str != "obecni") { write(MASTER_ENG->czlonkowie_gildii() + "\n"); return 1; }
	gracze = users();
	for(i=0; i<sizeof(gracze); i++)
	{
		if (gracze[i]->query_garou())
			garou += capitalize(gracze[i]->query_real_name()) + " " + MASTER_ENG->query_title(gracze[i]->query_real_name()) + ".\n";
	}

	write("Obecni w swiecie Garou:\n" + garou);
	return 1;

}

int
garou_promote(string str)
{
	object kto;
	if(!MASTER_ENG->query_szef(TP->query_real_name())) return 0;
	notify_fail("Kogo chcesz awansowac? W mianowniku podaj imie.\n");
	if(!str) return 0;
	if(!MASTER_ENG->query_czlonek(str)) return 0;
	notify_fail("Nie mozesz awansowac " + capitalize(str) + ".\n");
	if(!MASTER_ENG->promote(str)) return 0;
	write("Awansowales " + capitalize(str) + " na ");
	switch(MASTER_ENG->query_ranga(str))
	{
		case GAROU_LEV_WOJOWNIK: write("Wojownika Garou.\n"); break;
		case GAROU_LEV_GR_WOJOWNIK: write("Oddanego Wojownika Garou.\n"); break;
		case GAROU_LEV_SZAMAN: write("Szamana Garou.\n"); break;
	}
	kto = find_player(str);
	if(objectp(kto))
	{
		kto->catch_msg("\n\n!! Zostales awansowany przez " + capitalize(TP->query_real_name()) +". Twoja nowa ranga to: ");
    	switch(MASTER_ENG->query_ranga(str))
    	{
			case GAROU_LEV_WOJOWNIK: kto->catch_msg("Wojownik Garou.\n"); break;
			case GAROU_LEV_GR_WOJOWNIK: kto->catch_msg("Oddany Wojownik Garou.\n"); break;
			case GAROU_LEV_SZAMAN: kto->catch_msg("Szaman Garou.\n"); break;
		}
	}
	return 1;
}

int
garou_demote(string str)
{
	object kto;
	if(!MASTER_ENG->query_szef(TP->query_real_name())) return 0;
	notify_fail("Kogo chcesz degradowac? W mianowniku podaj imie.\n");
	if(!str) return 0;
	if(!MASTER_ENG->query_czlonek(str)) return 0;
	notify_fail("Nie mozesz degradowac " + capitalize(str) + ".\n");
	if(!MASTER_ENG->demote(str)) return 0;
	write("Degradowales " + capitalize(str) + " na ");
	switch(MASTER_ENG->query_ranga(str))
	{
		case GAROU_LEV_WOJOWNIK: write("Wojownika Garou.\n"); break;
		case GAROU_LEV_GR_WOJOWNIK: write("Oddanego Wojownika Garou.\n"); break;
		case GAROU_LEV_REKRUT: write("Rekruta Garou.\n"); break;
	}
	kto = find_player(str);
	if(objectp(kto))
	{
		kto->catch_msg("\n\n!! Zostales degradowany przez " + capitalize(TP->query_real_name()) +". Twoja nowa ranga to: ");
    	switch(MASTER_ENG->query_ranga(str))
    	{
			case GAROU_LEV_WOJOWNIK: kto->catch_msg("Wojownik Garou.\n"); break;
			case GAROU_LEV_GR_WOJOWNIK: kto->catch_msg("Oddany Wojownik Garou.\n"); break;
			case GAROU_LEV_REKRUT: kto->catch_msg("Rekrut Garou.\n"); break;
		}
	}
	return 1;
}


int
garou_corpse(string str)
{
    object *co = parse_this(str,"%i:"+PL_BIE);
    notify_fail("Ktore cialo chcesz rozszarpac?\n");
    if (!sizeof(co)) return 0;
    notify_fail("To nie jest cialo!\n");
    if (!co[0]->query_prop("_corpse_m_race")) return 0;
    notify_fail("To cialo pozbawione jest serca.\n");
    if(co[0]->query_prop("_garou_corpse")) return 0;
    setuid();
    seteuid(getuid());
    clone_object(EPATH + "serce")->move(TP);
    co[0]->add_prop("_garou_corpse", 1);
    TP->catch_msg("Podchodzis do " + co[0]->short(PL_DOP) + " i szybkim pchnieciem pazurow wyrywasz z niego zakrwawnione serce.\n");
    tell_room(environment(TP), QCIMIE(TP, PL_MIA) + " pochyla sie nad " + co[0]->short(PL_NAR) + " i szybkim ruchem wyrywa z niego serce.\n", ({TP}));
    return 1;
}