//Podstawowy zolnierz Nuln.
//Napisane przez Alfena. (wykorzystany gward_cz.c Galena)

inherit "/std/monster";

#include "alfen.h"
#include "ialfen.h"
#include "atrybuty.h"
#include "silvy.h"

#define MIECZ NPATH + "/bronie/miecz.c"
#define KOLCZ NPATH + "/zbroje/kolczuga2.c"
#define WYBOR ({({"wysoki","wysocy"}),\
                ({"silny","silni"}),({"wielki","wielcy"}),\
                ({"ogromny","ogromni"}),({"dumny","dumni"}),\
                ({"potezny","potezni"}),\
                ({"gargantuiczny","gargantuiczni"})})


#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;


void ustaw_czy_walka();
void usun_czy_walka();


void create_monster()
{
    int i;
    int s,skil;

    ustaw_nazwe ( G[0], G[1] , PL_MESKI_OS);

    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]);


    switch (s)
    {
        case 0 : set_stats(({30,50,30,20,20,70}));
                 skil = 20;
                 break;
        case 1 : set_stats(({40,50,40,20,20,70}));
                 skil = 30;
                 break;
        case 2 : set_stats(({50,50,50,20,20,70}));
                 skil = 30;
                break;
        case 3 : set_stats(({60,60,60,20,20,70}));
                 skil = 40;
                 break;
        case 4 : set_stats(({70,60,70,20,20,70}));
                 skil = 40;
                 break;
        case 5 : set_stats(({80,70,80,20,20,70}));
                 skil = 50;
                 break;
        case 6 : set_stats(({90,70,90,20,20,70}));
                 skil = 60;
                 break;
        default:  set_stats (({1,1,1,1,1,1}));
          command ("powiedz Cos mam zjebane! Zglos BUGA!");
          skil = 1;
     }

    set_skill(SS_WEP_SWORD, 15 + random(skil));
    set_skill(SS_WEP_POLEARM, 15 + random(skil));
    set_skill(SS_2H_COMBAT, 15 + random(skil));
    set_skill(SS_DEFENCE, skil);
    set_skill(SS_PARRY, 20 + random(skil/2));
    set_skill(SS_AWARENESS, 20 + random(skil/2));


    set_gender(G_MALE);


    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_odmiane_rasy(PL_CZLOWIEK);
    ustaw_krotki_opis( G[0], G[1], PL_MESKI_OS);

    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_weapon(MIECZ);
   *  add_armour(KOLCZ);
   */

    set_hp(query_max_hp());

    seq_new("zbroi_sie");
    seq_addfirst("zbroi_sie",({"@@arm_me"}));
    ustaw_czy_walka();
}


arm_me()
{
/*    command("wield miecz");
*/    command("wloz kolczuge");
}




public void attack_object(object ob){
  usun_czy_walka();
  walka_zakonczona_id=set_alarm(5.0, 5.0, "walka_zakonczona");
  ::attack_object(ob);
}


// funkcja powoduje atak calej grupy na wroga
// o ile takowa istnieje :)
void zaatakuj(object wrog){
  object *grupa;
  int i;

  grupa = query_team_oth(); // poprawiona i dzialajaca prawidlowo

  attack_object(wrog);
  if (!grupa)
    return;
  for (i=0; i < sizeof(grupa); i++)
    grupa[i]->attack_object(wrog);
}



void attacked_by (object wrog){
  command("krzyknij Do broni!!!!");
  attack_object(wrog);
}


int czy_walka(){
  int ok;
  object *ob;
  int i;
  
  ok=0;
  ob = all_inventory(environment());
  
  if (!ob)
    return ok;

  for (i=0; (i < sizeof(ob))&&!ok; i++)
    if (ob[i]->query_prop(IMPERIUM_LIVE_I_NULN_CITIZEN))
      if (ob[i]->query_attack()) {
        command("powiedz Natychmiast zaprzestac walki!!");
        set_alarm(10.0, 0.0, "wkop_wrogom", ob[i]);
        ok=1;
      }
  return ok;
}



void wkop_wrogom(object ob){
  if (!ob->query_attack()){
    command("powiedz Nie robic zbiegowiska!!!");
    command("powiedz Rozejsc sie.");
    return;
  }
  command("powiedz Rozdzielic ich!");
  zaatakuj(ob->query_attack());
}


void ustaw_czy_walka(){
  czy_walka_id = set_alarm(2.0, 15.0, "czy_walka");
}


void walka_zakonczona(){
  object pom;
  if (!(pom=query_attack())){
    remove_alarm(walka_zakonczona_id);
    ustaw_czy_walka();
  }
}


void usun_czy_walka(){
  remove_alarm(czy_walka_id);
}


#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;
    }
    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;
    }
}



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);
    }
}

