
//Podstawowy zolnierz Nuln.
//Napisane przez Alfena. (wykorzystany gward_cz.c Galena)

#include "local.h"

inherit GPATH + "std/patrol.c";
inherit GPATH + "std/monster";

#include "ialfen.h"
#include "atrybuty.h"
#include "zol.h"

#define MIECZ NPATH + "/bronie/miecz.c"
#define KOLCZ NPATH + "/zbroje/kolczuga2.c"
#define WYBOR ({({"niski","niscy"}),\
                ({"krepy","krepi"}),({"wysoki","wysocy"}),\
                ({"barczysty","barczysci"}),({"umiesniony","umiesnieni"}),\
                ({"dobrze zbudowany","dobrze zbudowani"}),\
                ({"potezny","potezni"})})


#define L_PRZYM 7



#define G ({ ({"zolnierz", "zolnierza", "zolnierzowi", "zolnierza",\
	      "zolnierzem", "zolnierzu"}),\
	    ({"zolnierzami", "zolnierzy", "zolnierzom", "zolnierzy",\
	      "zolnierzami", "zolnierzach"}) })


int czy_walka_id;
int walka_zakonczona_id;
int walka_al = 1;


void ustaw_czy_walka(float r);
void usun_czy_walka();
void ustaw_walka_zakonczona(float r);
void usun_walka_zakonczona();
void uruchom_czy_walka(int i){walka_al=i; ustaw_czy_walka(5.0); }


/*funkcja losuje liczbe rzucajac kos iloscia kosci scia - sciennych*/
int 
los(int kos, int scia = 6)
{
  int i, wyn=0;
  for (i=0; i < kos; i++)
    wyn += random (scia);
  return wyn;
}


void 
create_zolnierz()
{
    
    set_long("Czlowiek ten jest jednym z wielu zolnierzy miasta"+
       " Nuln. Nosi on zwykla kolczuge oraz prosty miecz."+
       " Standardowe wyposazenie gwardii miejskiej."+
       " Na kolczudze wyryty zostal znak miasta Nuln.\n");
    
    ustaw_nazwe ( G[0], G[1] , PL_MESKI_OS);
    ustaw_krotki_opis( G[0], G[1], PL_MESKI_OS);


}



void 
create_monster()
{
  int i;
  int s,skil;
  
  czy_walka_id = walka_zakonczona_id = 0;
  

  s = random(L_PRZYM);

  if (random(3)){
      i = random (LPOCZY);
      dodaj_przym(OCZY[i][0], OCZY[i][1]);
  }
  else {
      i = random (LPWLOSY, 0);
      dodaj_przym(WLOSY[i][0], WLOSY[i][1]);
  }


  dodaj_przym(WYBOR[s][0],WYBOR[s][1]);
  
  add_prop(CONT_I_WEIGHT, 76000);
  add_prop(CONT_I_HEIGHT, 172);
  add_prop(IMPERIUM_LIVE_I_NULN_CITIZEN, 1);
  add_prop(LIVE_I_NEVERKNOWN, 1);
  add_prop(NPC_I_NO_FEAR, 1);
  
  
  s = los(3, 3);
  set_stats(({65 - los(11,2),65-los(11,2),65-los(11,2),65-los(11,2),
    65-los(11,2),65 - los(11,2)}));
  switch (s)
  {
        case 0 : 
                 skil = 5;
                 break;
        case 1 : 
                 skil = 10;
                 break;
        case 2 : 
                 skil = 15;
                break;
        case 3 : 
                 skil = 20;
                 break;
        case 4 : 
                 skil = 25;
                 break;
        case 5 : 
                 skil = 30;
                 break;
        case 6 : 
                 skil = 35;
                 break;
        default:  set_stats (({1,1,1,1,1,1}));
          command ("powiedz Cos mam zjebane! Zglos BUGA!");
          skil = 1;
  }
  skil += 30;
  set_skill(SS_WEP_SWORD, skil + 2 - los(2, 3));
  set_skill(SS_WEP_POLEARM, skil + 2 - los(2, 3));
  set_skill(SS_2H_COMBAT, skil + 2 - los(2,3));
  set_skill(SS_DEFENCE, skil + 5 - los(2));
  set_skill(SS_PARRY, skil+ 5 - los(2));
  set_skill(SS_AWARENESS, skil + 5 - los(2));


  set_gender(G_MALE);
  ustaw_odmiane_rasy(PL_CZLOWIEK);
  
  set_hp(query_max_hp());

  
  enable_reset();
  create_zolnierz();
}


void
move_and_wield(object weapon)
{
  if (weapon->move(this_object()))
    weapon->remove_object();
}



void
arm_me()
{
}

public void 
attack_object(object ob)
{
  usun_czy_walka();
  ustaw_walka_zakonczona(5.0);
  ::attack_object(ob);
}



// funkcja powoduje atak calej grupy na wroga
// o ile takowa istnieje :)
int
zaatakuj(object wrog, object wrog1=0)
{
  object *grupa;
  int i, ok;

  grupa = query_team_oth(); // poprawiona i dzialajaca prawidlowo
  ok = command("zabij " + wrog->query_nazwa(PL_BIE));
  if (!grupa)
    return ok;
  if (!wrog1)
    grupa->command("zabij " + wrog->query_nazwa(PL_BIE));
  else
    grupa->command("zabij " + wrog1->query_nazwa(PL_BIE));
  return ok;
}



void 
attacked_by (object wrog)
{
/*
  object *ob;
  if (ob=query_team_oth())
    ob->command("zabij " + wrog->query_nazwa(PL_BIE));
*/
  usun_czy_walka();
  ustaw_walka_zakonczona(5.0);
  ::attacked_by(wrog);
}



/*
 * funkcja wywolywana jest cyklicznie, 
 *  jej zadaniem ma byc sprawdzanie, czy w danej lokacji
 *  dzieja sie rzeczy niezgodne z prawem.
 */
void 
czy_walka()
{
}



void 
ustaw_czy_walka(float r)
{
  if (!walka_al)
    return ;
  if (czy_walka_id)
    usun_czy_walka();
  czy_walka_id = set_alarm(r, 0.0, "czy_walka");
}


void 
usun_czy_walka()
{
  if (czy_walka_id) 
  {
    remove_alarm(czy_walka_id);
    czy_walka_id = 0;
  }
}


void
ustaw_walka_zakonczona(float r)
{
  if (walka_al&&(walka_zakonczona_id))
    usun_walka_zakonczona();
  walka_zakonczona_id = set_alarm(r, 0.0, "walka_zakonczona");
}


void 
usun_walka_zakonczona()
{
  if (walka_zakonczona_id)
  {
    remove_alarm(walka_zakonczona_id);
    walka_zakonczona_id=0;
  }
}


/*  Zadaniem funkcji jest sprawdzanie, 
 *  czy walka zostala zakonczona
*/
void
walka_zakonczona()
{
  if (query_attack())
  {
    ustaw_walka_zakonczona(5.0);
    return;
  }
  
  ustaw_czy_walka(5.0);
}



#define PLR "_live_i_reakcja_straznika_nuln_"

void usun_propa(object ob){
  ob->remove_prop(PLR);
}



void
emote_hook(string emote, object wykonujacy, string przyslowek)
{
 string rasa_goscia;
 int plec;

 if (query_attack())
   return;
   
 if (wykonujacy->query_prop(PLR))
   return;
   
 rasa_goscia = wykonujacy->query_race();
 plec = wykonujacy->query_gender();
 if(rasa_goscia == "czlowiek")
    switch (emote)
    {   
        case "przebacz":
        case "uklon": set_alarm(3.0, 0.0, "command", "emote spoglada na ciebie z pogarda.");
                    wykonujacy->add_prop(PLR, 2);
                    set_alarm(3.0, 0.0, "usun_propa", wykonujacy);
        	    break;
        
        case "pocaluj":
        case "podziekuj":
        case "pogratuluj":
        case "przepros":
        case "mrugnij": 
         	 wykonujacy->add_prop(PLR,4);
                 if(!plec) /* facio */
        		{
        		command("powiedz Odpieprz sie ode mnie gosciu.");
        	       command("splun");
        	       }
        	       else if(plec==1)
        	       {
        	        command("powiedz no no..... Zaczynasz mi sie podobac..");
        	        command("powiedz Moze wyskoczymy "+
        	          "gdzies po sluzbie.");
        	        command("mrugnij");
        	       } else
        	        {
        	         command("powiedz kim ty wogole jestes ???? Facetem czy baba ??");
        	         command("wzdrygnij sie");
        	        }
        	    usun_propa(wykonujacy);
        	        break;
        	        
        
        case "nadepnij":
        case "szepnij":
        case "blagaj":
        case "usciskaj": 
              wykonujacy->add_prop(PLR,1);
              set_alarm(4.0, 0.0, "command", 
                "powiedz Z drogi!! Nie przeszkadzac strazy!!");
              set_alarm(2.0, 0.0, "command", "emote odepchnal " +
                     wykonujacy->query_name(PL_BIE));
              set_alarm(4.0, 0.0, "usun_propa", wykonujacy);
                     break;
        case "spoliczkuj":
                          set_alarm(2.0, 0.0, "command", "powiedz Atakujesz mnie???");
                          set_alarm(5.0, 0.0, "command", "zabij "+
                        lower_case(wykonujacy->query_name(PL_BIE)));
                     break;
                     
        case "wybacz":
        case "usmiechnij": 
        		wykonujacy->add_prop(PLR,3);
        		set_alarm(2.5, 0.0, "return_laugh", 
                              lower_case(wykonujacy->query_name(PL_BIE)));
                        set_alarm(2.5, 0.0, "usun_propa", wykonujacy);
        	      break;
       // default:
       //    ::emote_hook(emote, wykonujacy, przyslowek);
    }
    else
     if (rasa_goscia)
        switch (emote)
    { 
      case "uklon":
       		  wykonujacy->add_prop(PLR, 3);
      		  set_alarm (6.0, 0.0, "usun_propa", wykonujacy);
                  set_alarm(3.0, 0.0, "command", "splun");
        	  set_alarm(6.0, 0.0, "command", "powiedz To jest po prostu odrazajace!!!");
        	    break;
        	    
        case "szepnij":
        case "blagaj":
        case "pocaluj":
        case "podziekuj":
        case "pogratuluj":
        case "przepros":
        case "mrugnij": 
        case "przebacz":
        case "usciskaj":
        	     wykonujacy->add_prop(PLR, 2);
                     set_alarm(2.0, 0.0, "wkop_mu_nielubianemu", wykonujacy->query_name(PL_BIE));
                     set_alarm(2.0, 0.0, "usun_propa", wykonujacy);
                     break;
                     
        case "spoliczkuj":
        case "nadepnij": 
           	     set_alarm(2.0, 0.0, "command", "powiedz Wkurzyles mnie gosciu !!!!");
                     set_alarm(4.0, 0.0, "command", "zabij "+ 
                           lower_case(wykonujacy->query_name(PL_BIE)));
                     break;
        case "usmiech":
        case "usmiechnij": 
          	     wykonujacy->add_prop(PLR, 2);
                     set_alarm(2.5, 0.0, "return_laugh", 
                     lower_case(wykonujacy->query_name(PL_BIE)));
                     set_alarm(2.5, 0.0, "usun_propa", wykonujacy);
        	     break;
      //  default:
        //     ::emote_hook(emote, wykonujacy, przyslowek);
    }
}



void
wkop_mu(string kto)
{
    int los;

    los = random(10);
    if (los < 3)
    {
        command("powiedz Lepiej nie zaczynaj ze strozem prawa !!!");
        command("zazgrzytaj");
        command("prychnij");
    }
    else if (los < 5)
    {
        command("powiedz Kopnac to se mozesz przekupke, ale nie mnie !!!!");
        command("splun");
    }
    else if (los  < 10)
    {
        command("powiedz Czy naprawde chcesz oberwac ???? ");
        command("zazgrzytaj");
    }
    else
    {
     command("powiedz No nie !!! Teraz to juz NAPRAWDE oberwiesz !!!");
     command("zabij "+ kto);
    }

}

void
wkop_mu_nielubianemu(string kto)
{
    int los;

    los = random(15);
    if (!los)
    {
      command("powiedz Jestes Odmiencem.....");
      command("powiedz \n... Wiec WYNOCHA do rezerwatu !");

        command("zabij " + kto);
    }
    else if (( los> 0)&&(los < 5))
    {
        command("powiedz Zachowuj sie TY Obrzygana Swinio !!!!!");
        command("emote kopie " + kto);
    }
    else if ((los >4)&&(los<9))
    {
        command("powiedz Chyba naprawde wasza rasa jest Rabnieta TOTALNIE !!");
        command("emote kopie " + kto);
        command("emote popycha " + kto);
    }
    else
     {
      command("powiedz Lepiej uwazaj na swoje nogi .....");
      command("splun");
     }

}



void
return_laugh(string kto)
{
    int los; object piwo;

    los = random(50);

    if (los)
    {
        command("usmiechnij sie do " + kto);
        command("hmm");
        command("powiedz Lepiej uwazaj ..... ");
    }
    else
    {

        command("powiedz Smiejesz sie z mnie ????");
        command("zabij "+ kto);
    }
}

