
/* Plik:     wojt.c
 * Autor:    Borzoj
 * Data:     2.4.98
 * Opis:     wojt do Dimenau
 * Poprawki: Tigr
 * Update:   17.06.98
*/

#include "tigr.h"
#include "money.h"
inherit TPATH + "/npc/npc_seq.c";

#define PLAYER_I_DOSTAL_ZADANIE7_NULN "_player_i_dostal_zadanie7_nuln"

#define WOJT_SPI 1
#define WOJT_WSTAJE 2
#define WOJT_PRACUJE 3
#define WOJT_IDZIE_SPAC 4
#define WOJT_WALCZY 5

#define ILE_SEQ_WSTAJE 9

#define SEQ_WOJT_WSTAJE ({"emote wierci sie w lozku.","emote otwiera \
najpierw jedno oko, a po chwili drugie.","emote wstaje i przeciaga \
sie.","zaloz wszystko","dol","emote patrzy przez okno.","usmiech","powiedz \
Nowy dzien wstal, trza sie chwytac roboty.","emote siada przy biurku i \
rozpoczyna prace."})

#define ILE_SEQ_KLADZIE_SIE 10

#define SEQ_WOJT_IDZIE_SPAC ({"emote wstaje zza biurka.","ziewnij \
przeciagle","emote chodzi wkolo pokoju.","gora","ziewnij","emote \
przysiada na lozku i poprawia posciel.","powiedz Moze bedzie ciekawy \
sen.","usmiech lekko","zdejmij wszystko","emote kladzie sie do lozka i \
zasypia."})

#define ILE_EM_SP 4
#define EMOTY_SP ({"emote wierci sie niespokojnie w lozku.","emote mowi \
cos przez sen.","emote przewraca sie na drugi bok.","emote podciaga \
na siebie koldre, ktora sie osunela."})

#define ILE_EM_PR 4
#define EMOTY_PR ({"emote wstaje zza biurka, podchodzi do biblioteczki, \
zabiera stamtad jakas ksiazke i siada z powrotem.","emote bierze ksiazke \
ze stolu i zaczyna ja kartkowac.","emote zapisuje cos na kawalku papieru.\
","emote patrzy z zamyslonym wyrazem twarzy w okno, po czym znowu zabiera \
sie do pracy."})

void dzialania();
void ustaw_stan(int jaki);
void oddaj_rzecz(object co,object komu);
void oddaj_forse(int ile,string co,object komu);
void oddal_list(object kto);
void ile_doswiadczenia(object who);
string dlugi_opis();

int stan_wojta;
int czy_walczy;
string bron;

int
query_tylko_mn()
{
   return 0;
}

sklonuj_bron()
{
   object co;
   
   co = clone_object(bron);
   
   co->move(this_object(),1);
}

ustaw_bron(string str)
{
   bron  = str;
}

create_monster()
{
  ustaw_imie(({"gustaw","gustawa","gustawowi","gustawa","gustawem",
    "gustawie"}),PL_MESKI_OS);
  ustaw_nazwe(({"Gustaw Kahner","Gustawa Kahnera","Gustawowi Kahnerowi",
  		"Gustawa Kahnera","Gustawem Kahnerem","Gustawie Kahnerze"}),
  		PL_MESKI_OS);
  dodaj_nazwy(({"wojt","wojta","wojtowi","wojta","wojtem","wojcie"}),
    ({"wojtowie","wojtow","wojtom","wojtow","wojtami","wojtach"}),
    PL_MESKI_OS);
  dodaj_nazwy(({"kahner","kahnera","kahnerowi","kahnera","kahnerem","kahnerze"}),
  	      ({"kahner","kahnera","kahnerowi","kahnera","kahnerem","kahnerze"}),
  	      PL_MESKI_OS);
  
  set_gender(G_MALE);
  
  ustaw_odmiane_rasy(PL_CZLOWIEK);
  
  setuid();
  seteuid(getuid());
  
  dodaj_przym("wysoki","wysocy");
  dodaj_przym("kedzierzawy","kedzierzawi");
  
  add_prop(CONT_I_WEIGHT,96000); //waga
  add_prop(CONT_I_HEIGHT,180); //wzrost
  remove_prop(NPC_M_NO_ACCEPT_GIVE);
  
  set_alignment(136);
  set_long("@@dlugi_opis");
  set_stats(({75,60,70,90,45,60})); //str,dex,con,int,wis,dis
  
  set_skill(SS_AWARENESS, 46);
  set_skill(SS_WEP_KNIFE, 64);
  set_skill(SS_PARRY, 47);
  set_skill(SS_DEFENCE, 56);
  
  add_armour(TPATH + "/zbroje/kaft_woj");
  add_armour(TPATH + "/zbroje/buty_woj");
  ustaw_bron(TPATH + "/bronie/bron_woj");
  
  dodaj_miedz(23 + random(7));
  dodaj_srebro(10 + random(3));
  dodaj_zloto(1 + random(2));
  
  set_alarm(10.0,60.0,dzialania);
  
  czy_walczy = 0;
} //create_monster

pracuje_emot()
{
   command(EMOTY_PR[random(ILE_EM_PR)]);
}
spi_emot()
{
   command(EMOTY_SP[random(ILE_EM_SP)]);
}

string dlugi_opis()
{
  string temp="";
  temp+="Jest dosyc wysokim i postawnym mezczyzna. Widac, ze nie "+  
    "powodzi mu sie zle - nie wyglada na chudzinke, a wrecz przeciwnie. "+
    "Jest posiadaczem wielkiej kruczoczarnej brody i takiej samej "+
    "czupryny, ktore nadaja mu dziki wyglad, jednak w tym gaszczu "+
    "dostrzegasz szeroki od ucha do ucha usmiech.\n";
  switch (stan_wojta)
  {
     case WOJT_SPI:
       temp+="Lezy pod ogromna pierzyna i glosno chrapie.";
       break;
     case WOJT_WSTAJE:
       temp+="Wlasnie wstaje i pelen energii zabiera sie do pracy.";
       break;
     case WOJT_PRACUJE:
       temp+="Wyglada na strasznie zajetego jakas, napewno bardzo "+ 
         "potrzebna, praca.";
       break;
     case WOJT_IDZIE_SPAC:
       temp+="Wyglada na strasznie zmeczonego - pewnie caly dzien "+
         "pracowal i zaraz pojdzie spac.";
       break;
     case WOJT_WALCZY:
       temp+="Jest calkowicie zajety walka.";
       break;
  }
  temp+="\n";
  return temp;
} // dlugi_opis

add_introduced(string imie)
{
   set_alarm(2.0,0.0,"return_intro", imie);
}

return_intro(string kto)
{
   switch(stan_wojta)
    {
       case WOJT_SPI:write("Przedstawil" + this_player()->koncowka("es","as") +
                " sie spiacemu czlowiekowi, lecz " +
       		"ten tylko niewyraznie odburczal cos przez sen w odpowiedzi.\n");
       		break;
       case WOJT_WSTAJE:command("powiedz Witam tego pieknego ranka.");
       	command("przedstaw sie " + find_player(kto)->query_real_name(PL_CEL));
       	command("uklon lekko " + find_player(kto)->query_real_name(PL_CEL));
       	break;
       case WOJT_PRACUJE:command("emote wstaje zza biurka.");
       command("podaj reke " + find_player(kto)->query_real_name(PL_CEL));
       	command("przedstaw sie " + find_player(kto)->query_real_name(PL_CEL));
       	command("powiedz Bardzo mi milo, " + find_player(kto)->query_wolacz() + ".");
       	command("emote z powrotem siada za biurkiem.");
       	break;
       case WOJT_IDZIE_SPAC:
       	command("przedstaw sie " + find_player(kto)->query_real_name(PL_CEL));
       	command("powiedz Jest mi bardzo przyjemnie cie poznac, lecz wybacz, " +
       	"ze nie bede teraz rozmawiac.");
       	command("powiedz Udaje sie wlasnie do snu.");
       	command("powiedz Jutro rano z przyjemnoscia porozmawiam z toba.");
       	break;
       case WOJT_WALCZY:
        command("emote mowi: Nie moge teraz rozmawiac!");
        break;
    }
}

string
query_presentation()
{
    return "Gustaw Kahner, wojt wioski Tadrig";
}

void 
dzialania()
{
  int wal;
  
  if (czy_walczy) 
     {
        wal = objectp(query_attack());
        if (!wal) {stop_fight(query_enemy(-1));};
     }
  else
   {
     switch (stan_wojta)
     {
       case WOJT_SPI:
         if (environment()->czy_jasno())
         {
           seq_init(ILE_SEQ_WSTAJE,15.0,0,SEQ_WOJT_WSTAJE);
           stan_wojta=WOJT_WSTAJE;
           remove_prop(LIVE_S_SOULEXTRA);
           remove_prop(LIVE_S_EXTRA_SHORT);
           remove_prop(NPC_M_NO_ACCEPT_GIVE);
         }
         else
         {
           if (random(7)==6) spi_emot();
         };
         break;  
       case WOJT_WSTAJE:
         if (!seq_on())
           {
           if (query_koniec())
              {
                stan_wojta=WOJT_PRACUJE;
              }
           else
              {  
                seq_restart(); 
              }
           };
         break;
       case WOJT_PRACUJE:
         if (!(environment()->czy_jasno()))
         {
           seq_init(ILE_SEQ_KLADZIE_SIE,15.0,0,SEQ_WOJT_IDZIE_SPAC);
           stan_wojta=WOJT_IDZIE_SPAC;
         }
         else
         {
           if (random(7)==6) pracuje_emot();
         };
         break;
       case WOJT_IDZIE_SPAC:
         if (!seq_on())
         {
           if (query_koniec())
              {
                stan_wojta=WOJT_SPI;
                add_prop(LIVE_S_EXTRA_SHORT," spiacy w swoim lozu");
                add_prop(NPC_M_NO_ACCEPT_GIVE," spi przeciez!\n");
                add_prop(LIVE_S_SOULEXTRA, "Usmiecha sie lekko przez sen");
              }
           else
              {
                seq_restart();
              }
         };
         break;
       default:
     }
  }
} //dzialania

int
ustaw_stan(int jaki)
{
  stan_wojta=jaki;
}// ustaw_stan

int 
query_stan()
{
   return stan_wojta;
}
int
ile_wrogow()
{
  return czy_walczy;
}

attacked_by(object wrog)
{
   if (stan_wojta==WOJT_SPI)
   	{
   	   remove_prop(LIVE_S_SOULEXTRA);
           remove_prop(LIVE_S_EXTRA_SHORT);
           change_prop(NPC_M_NO_ACCEPT_GIVE," jest zajety walka.\n");
           command("emote poderwal sie z lozka i chwycil bron.");
           command("emote chwycil swa odziez.");
           command("zaloz wszystko");
           ustaw_stan(WOJT_WALCZY);
   	}
   
   command("dobadz broni");
   command("'Po co to robisz, " + wrog->query_rasa(PL_MIE) + " ?");
   czy_walczy++;
   ::attacked_by(wrog);
}

stop_fight(mixed elist)
{
   command("opusc bron");
   
   if (stan_wojta==WOJT_WALCZY)
       {
          command("zdejmij wszystko");
          command("emote kladzie sie do lozka i zasypia.");
          ustaw_stan(WOJT_SPI);
          add_prop(LIVE_S_EXTRA_SHORT," spiacy w swoim lozu");
          change_prop(NPC_M_NO_ACCEPT_GIVE," spi przeciez!\n");
          add_prop(LIVE_S_SOULEXTRA, "Usmiecha sie lekko przez sen");
       }
   
   if (objectp(elist)) 
      {czy_walczy--;}
   else 
      {czy_walczy = czy_walczy-sizeof(elist);};
   ::stop_fight(elist);
}
void
enter_inv(object ob,object from)
{
     int ile;
     int byla_forsa=0;
     string co;
     
     if (from)
       {
        if (function_exists("create_heap",ob))
         {
           ile = ob->num_heap();
           co = ob->query_coin_type();
        
           set_alarm(1.0,0.0,&oddaj_forse(ile,co,from));
           byla_forsa=1;
         }
     }
  ::enter_inv(ob,from);
  
  if (!from) return;
  if (byla_forsa) return;
  
  if (ob->id("_list_do_gustawa_kahnera"))
     {
     set_alarm(1.0,0.0,&oddal_list(from));
     return;
     }
  set_alarm(1.0,0.0,&oddaj_rzecz(ob,from));
  return;
}
void
oddaj_forse(int ile,string co,object komu)
{
   string do_kogo = komu->query_nazwa(PL_CEL);
   int amount;
   
   command("emote mowi: Nie potrzebuje tych pieniedzy.");
   command("emote mowi: Mam wystarczajaco wlasnych.");
   command("usmiech lekko");
   switch(co)
      {
         case "miedz":command("emote mowi: Wez swe miedziaki!");
       		  amount = ile;
       		  break;
         case "srebro":command("emote mowi: Zachowaj swe srebro.");
       		  amount = ile*12;
       		  break;
         case "zloto":command("emote mowi: Zabierz to zloto.");
       		  amount = ile*12*20;
       		  break;
         case "mithryl":command("emote mowi: Widac, zes bogaty. " +
              "Ja za swe zycie tylko pare razy taka monete w reku trzymalem.");
              	  amount = ile*12*20*100;
       		  break;
       }
    if (MONEY_MOVE(ile,co,this_object(),komu))
    	{
    	   command("emote nie moze zwrocic ci pieniedzy, gdyz sa za ciezkie, " +
    	   "odklada wiec je na ziemie.");
    	   MONEY_MOVE(ile,co,this_object(),environment(this_object()));
    	   return;
    	};
    command("emote zwraca ci pieniadze.");
    return;
}
void
oddaj_rzecz(object co,object komu)
{
   command("hmm");
   
   command("emote mowi: Nie potrzebuje tego.");
   command("daj " + co->query_nazwa(PL_BIE) + " " + komu->query_nazwa(PL_CEL));
   return;
}
void
oddal_list(object kto)
{
   if (!kto->query_prop(PLAYER_I_DOSTAL_ZADANIE7_NULN))
      {
         command("emote mowi: Znalazles moj list?");
         command("emote zastanawia sie przez chwile");
         command("emote mowi: Gdziez to ja go zgubilem...");
         command("emote mowi: Dziekuje ci bardzo, ze przyniosles mi go.");
         return;
      }
   
   command("emote mowi: List do mnie? Dziekuje ci za pomoc.");
   command("usmiech radosnie");
   ile_doswiadczenia(kto);
   
   return;
}
void
ile_doswiadczenia(object who)
{
   int xp_base = 300;

   if (who->test_bit("imperium", 0, 19))
   {
      command("emote mowi: Dzieki, ze jeszcze raz zaniosles mi list.");
      return;
   }
   
   who->catch_msg("Czujesz sie bardziej doswiadczon" +
   	who->koncowka("y","a") + ".\n");
   who->add_exp(xp_base, 0);

   command("emote mowi: Pozwol, ze ci wynagrodze ta pomoc.");
   dodaj_zloto(3);
   command("daj 3 zlote monety " + who->query_nazwa(PL_CEL));

   who->set_bit(0, 19);

   seteuid("silvy");
   
   write_file("/d/Imperium/private/questlog/0_19.log",
              ctime(time()) + ": " + who->query_name() + ", " + xp_base
            + " xp\n");
   return;
}

int
query_wojt()
{
   return 1;
}