
#include "../mafia.h"
inherit "/cmd/std/soul_cmd.c";
inherit "/cmd/std/command_driver.c";
inherit ENGINE + "system.c";

public string
get_soul_id()
{
        return GUILD_NAME;
}
public mapping
query_cmdlist()
{
        return (["mwywal":"mwywal",
                 "mzdegraduj":"mzdegraduj",
                 "mawansuj":"mawansuj",
                 "mmianuj":"mmianuj",
                 "seria":"seria",
                 "mpomoc":"mpomoc"]);
}

int
mpomoc()
{
    TP->catch_msg("Witaj w pomocy Rodziny Ragazzi.\n"+
        "Oto dostepne komendy:\n\nseria - grozna seria ciec sztyletami \n"+
        "mpomoc - pomoc w ktorej sie znajdujesz.\n\n");
    if(RAGAZZI->query_ranga(TP->query_real_name())>=3)
    {
    TP->catch_msg("Dodatkowe komendy dla Ojca Chrzestnego i Ojca Rodziny.\n");
    TP->catch_msg("mwywal - wywalenie kogos z szeregow Rodziny Ragazzi.\n");
    TP->catch_msg("mawansuj - awansowanie kogos na swojego zolnierza.\n");
    TP->catch_msg("mzdegraduj - zdegradowanie zolnierza na osobe z nizsza ranga.\n");
    if(RAGAZZI->query_ranga(TP->query_real_name())==4)
    {
    TP->catch_msg("mmianuj - mianowanie kogos na swoja prawa reke.\n");
    }
    }
    return 1;
}

int
mmianuj(string str)
{
    object *kogo;
    string old_szef=RAGAZZI->query_ojciec();
    if(!RAGAZZI->query_ranga(TP->query_real_name())==4) return 0;
    notify_fail("Kogo chcesz mianowac swoja prawa reka??\n");
    if(!str) return 0;
    kogo = parse_this(str, "%l:"+PL_DOP);

    if(sizeof(kogo) != 1) return 0;

    if(!RAGAZZI->czy_czlonek(kogo[0]->query_real_name()))
    {
    notify_fail("To nie jest czlonek Rodziny Ragazzi.\n");
    return 0;
    }

    if(RAGAZZI->query_ranga(kogo[0]->query_real_name())==3)
    {
    notify_fail("Przeciez to jest twoja prawa reka.\n");
    return 0;
    }
    if(old_szef)
    {
    TP->catch_msg(capitalize(old_szef)+" nie jest juz Twoja prawa reka, od tej pory jego miejsce "+
    "zajmie "+QCIMIE(kogo[0],PL_MIA)+".\n");
    }
    TP->catch_msg(QCIMIE(kogo[0],PL_MIA)+" zostal twoja prawa reka.\n");
    kogo[0]->catch_msg("Zostales prawa reka Pappy Ragazzi.\n");
    RAGAZZI->set_data(old_szef,2);
    RAGAZZI->set_data(kogo[0]->query_real_name(),3);
    return 1;

}
int
mawansuj(string str)
{
    object *kogo;
    if(!RAGAZZI->query_ranga(TP->query_real_name())>=3) return 0;
    notify_fail("Kogo chcesz awansowac??\n");
    if(!str) return 0;
    kogo = parse_this(str, "%l:"+PL_DOP);

    if(sizeof(kogo) != 1) return 0;

    if(!RAGAZZI->czy_czlonek(kogo[0]->query_real_name()))
    {
    notify_fail("To nie jest czlonek Rodziny Ragazzi.\n");
    return 0;
    }
    if(RAGAZZI->query_ranga(kogo[0]->query_real_name())!=1)
    {
    notify_fail("Nie mozesz jego juz awansowac.\n");
    return 0;
    }
    TP->catch_msg("Awansowales "+QCIMIE(kogo[0],PL_DOP)+".\n");
    kogo[0]->catch_msg("Zostales awansowany przez "+QCIMIE(TP,PL_DOP)+".\n");
    RAGAZZI->promote(kogo[0]->query_real_name());
    return 1;

}


int
mzdegraduj(string str)
{
    object *kogo;
    if(!RAGAZZI->query_ranga(TP->query_real_name())>=3) return 0;
    notify_fail("Kogo chcesz zdegradowac??\n");
    if(!str) return 0;
    kogo = parse_this(str, "%l:"+PL_DOP);

    if(sizeof(kogo) != 1) return 0;

    if(!RAGAZZI->czy_czlonek(kogo[0]->query_real_name()))
    {
    notify_fail("To nie jest czlonek Rodziny Ragazzi.\n");
    return 0;
    }

    if(RAGAZZI->query_ranga(kogo[0]->query_real_name())==4)
    {
       notify_fail("Przeciez to jest Ojciec Rodziny..on nie moze zostac zdegradowany.\n");
       return 0;
    }

    if(RAGAZZI->query_ranga(kogo[0]->query_real_name())==1)
    {
       notify_fail("Nie mozesz go juz bardziej zdegradowac.\n");
       return 0;
    }

    RAGAZZI->demote(kogo[0]->query_real_name());
    TP->catch_msg("Zdegradowales "+QCIMIE(kogo[0],PL_DOP)+".\n");
    kogo[0]->catch_msg("Zostales zdegradowany do najnizszej rangi przez "+QCIMIE(TP,PL_DOP)+".\n");
    return 1;
}


int
mwywal(string str)
{
    object *kogo;
    if(!RAGAZZI->query_ranga(TP->query_real_name())>=3) return 0;
    notify_fail("Kogo chcesz usunac z Rodziny??\n");
    if(!str) return 0;
    kogo = parse_this(str, "%l:"+PL_DOP);

    if(sizeof(kogo) != 1) return 0;

    if(!RAGAZZI->czy_czlonek(kogo[0]->query_real_name()))
    {
    notify_fail("To nie jest czlonek Rodziny Ragazzi.\n");
    return 0;
}
    if(RAGAZZI->query_ranga(kogo[0]->query_real_name())==4)
    {
       notify_fail("Przeciez to jest Ojciec Rodziny..on nie moze zostac wydalony.\n");
       return 0;
    }
    RAGAZZI->wywal_z_gildii(kogo[0]->query_real_name());
    TP->catch_msg("Wydaliles "+QCIMIE(kogo[0],PL_DOP)+" z szeregow Rodziny.\n");
    kogo[0]->command("zakoncz");
    return 1;
}

int
seria(string str)
{
    mixed tmp;
    object sztylet1,sztylet2;
    object *kogo;
    sztylet1=TP->query_weapon(W_RIGHT);
    sztylet2=TP->query_weapon(W_LEFT);

    notify_fail("Potrzebujesz dwoch sztyletow aby wykonac ten cios!\n");
    if (!objectp(sztylet1) ||
       (sztylet1->query_wt() != W_KNIFE) ||
        (!objectp(sztylet2)) ||
        (sztylet2->query_wt() != W_KNIFE))
         return 0;

    if (!str)
    {
		if ( TP->query_attack()) kogo = ({TP->query_attack()});
	}
    else if (str) kogo = parse_this(str,"%l:"+PL_BIE);

    notify_fail("Musisz chwile poczekac by znow zadac swoj cios\n");
    if ( TP->query_cios()==1 ) return 0;

    notify_fail("Przeciez juz przygotowywujesz sie do wykonania serii "+
                "morderczych ciosow.\n");

    if ( TP->query_cios()==2 ) return 0;

    notify_fail("Kogo chcialbys zaatakowac??\n");
    if (!sizeof(kogo)) return 0;

    notify_fail("Nie uda ci sie uderzyc kilku przeciwnikow na raz. Musisz " +
		         "zdecydowac sie na jednego.\n");

    if (sizeof (kogo) > 1 ) return 0;

    if (tmp = kogo[0]->query_prop (OBJ_M_NO_ATTACK))
    {
		if (stringp (tmp)) notify_fail(tmp);
		else notify_fail("Cos mowi ci, ze atakowanie " +
		                 kogo[0]->query_imie(this_player(), PL_DOP) +
		                 " nie byloby wlasciwe.\n");
	    return 0;
    }
    if (tmp = environment(kogo[0])->query_prop(ROOM_M_NO_ATTACK) )
    {
		if (stringp(tmp)) notify_fail(tmp);
		else notify_fail ("Cos mowi ci, ze atakowanie kogos w tym miejscu nie " +
		 "byloby wlasciwe.\n");
		return 0;
	}

   write("Przygotowujesz sie by zaatakowac " + kogo[0]->query_imie(this_player(),PL_BIE)
         + " szybka seria ciec swoich sztyletow.\n");
   TP->attack_object(kogo[0]);
   set_alarm(5.0,0.0, "trafienie", this_player(), kogo[0]);
   TP->set_cios(2);
    return 1;
}


void
trafienie (object gracz, object cel)
{
  object room = environment(gracz);
  int pen, hit;
  mixed *hitresult;
  string jak;

  if (present(cel,room))
  {
	  pen = query_mafia_pen(gracz, cel);
	  hit = query_mafia_hit(gracz, cel);

   hitresult = cel->hit_me(pen, W_IMPALE, hit, gracz, -1 );
   switch(hitresult[0])
   {
      case 0..2: jak = "ledwo muskajac";
                  break;
      case 3..6: jak = "nieznacznie raniac";
                  break;
      case 7..10: jak = "bardzo lekko raniac";
                  break;
      case 11..15: jak = "lekko raniac";
                  break;
      case 16..24: jak = "raniac";
                  break;
      case 25..41: jak = "ciezko raniac";
                  break;
      case 42..70: jak = "bardzo ciezko raniac";
                  break;
      case 71..99: jak = "masakrujac";
                  break;
      default: jak = "wyciagajac flaki na wierzch";
  }

  if (cel->query_hp()<1)
  {
	  gracz->catch_msg("Zauwazasz, ze twoj przeciwnik podczas wykonywania swoich ciosow "+
                 "popelnil blad i odslonil sie pozwalajac ci zadac smiertelny cios. "+
                 "Niewiele myslac wyprowadzasz szybka serie ciosowi trafiajac "+
                 QIMIE(cel,PL_NAR)+" swoimi sztyletami w tetnice szyjna. Widzisz jak twoj przeciwnik "+
                 "osuwa sie na ziemie, a obok ciala pojawia sie kaluza krwi.\n");
       tell_room(room,""+QCIMIE(gracz,PL_MIA)+" dostrzegajac blad w obronie swego przeciwnika, wyprowadza szybka "+
                 "serie niebezpiecznych ciosow swoimi sztyletami w kierunku "+
              QIMIE(cel,PL_BIE)+" przecinajac "+cel->koncowka("mu","jej")+" tetnice "+
                "szyjna. "+QCIMIE(cel,PL_MIA)+" ostatkiem sil trzyma sie na nogach, a po "+
              cel->koncowka("jego","jej")+" ciele zaczyna splywac krew. Po chwili "+
              QIMIE(cel,PL_MIA)+" pada bezwladnie na ziemie pozostawiajac wokol siebie kaluza "+
              "krwi.\n",({gracz,cel}));
        cel->catch_msg("Walczac z "+QIMIE(gracz,PL_NAR)+" popelniasz krytyczny blad i odlosniasz "+
                 "sie. Twoj przeciwnik szybko zareagowal na ta sytuacje i wyprowadzil "+
                 "szybka serie ciosow swoimi sztyletami skierowana w ciebie. Nagle uswiadamiasz "+
                 "sobie, ze jego cios przecial ci tetnice szyjna.\n"+
                 "Robi ci sie ciemno przed oczami, padasz na ziemie.\n");
        cel->do_die(gracz);
	}
	else
	{
		gracz->catch_msg("Zauwazasz schematycznosc ruchow swojego przeciwnika i jestes w stanie "+
                 "przewidziec kazde "+cel->koncowka("jego","jej")+" nastepne posuniecie. Wykonujac szybki "+
                 "piruet, ktorego nie spodziewa sie twoj wrog wykonujesz serie bardzo szybkich pchniec "+
                 "swoimi sztyletami "+jak+" "+QIMIE(cel,PL_BIE)+" w tulow.\n");
        cel->catch_msg(QCIMIE(gracz,PL_MIA)+" przypatruje ci sie przez pewien moment, i nagle "+
                 "wykonuje piruet, ktorego ty sie nigdy bys sie nie spodziew"+cel->koncowka("al","ala")+
                 "atakuje ciebie szybka seria swoich sztyletow "+jak+" ciebie w tulow.\n");
        tell_room(room,""+QCIMIE(gracz,PL_MIA)+" przypatruje sie przez chwile "+QIMIE(cel,PL_CEL)+
                   " i nagle swoich szybkim piruetem z szyderczym usmiechem na ustach "+
                   "wykonuje szybka serie swoimi sztyletami "+jak+" "+
                   cel->koncowka("swego","swoja")+" przeciwni"+cel->koncowka("ka","czke")+
                   " w tulow.\n", ({gracz,cel}));
	}

    gracz->set_cios(1);
    set_alarm(16.0,0.0, "odpoczynek", gracz);
    setuid();
    seteuid(getuid());
    write_file("/d/Imperium/Rodzina_Ragazzi/log/seria",
                     capitalize(gracz->query_real_name()) +
                     " pen: " + pen +
                     " hit: " + hit + " phurt: " + hitresult[0] +
                     " hp: " + hitresult[2] + " przeciwnik: " +
                     cel->query_real_name() + "\n");

  }
  else
  {
	  TP->set_cios(0);
	  gracz->set_cios(0);
	  gracz->catch_msg("Twoj wrog uciekl ci.\n");
  }

}

void
odpoczynek(object gracz)
{
    gracz->catch_msg("Jestes gotowy do zadania kolejnej serii morderczych ciosow.\n");
    gracz->set_cios(0);
}