
/* ----------------------------------------------------------------------- * 
 *                                                                         *
 *                    Barman do gospody 'U Rudolfa'                        *
 *                                                                         *
 *  credits:                                                               *  
 *                                                                         * 
 *  by Silvy marzec '97 na podstawie Karczmarza Aglaronda.                 *
 *  powazne zmiany by Pshoddy czerwiec '97                                 *
 *  mala pomoc od Alvina                                                   *
 *  opoznianie gadki na podstawie npca Thalisa                             *
 *  special thanks to Lars                                                 *
 *                                                                         *
 *                           - THE END -                                   *
 * ----------------------------------------------------------------------- */
   
inherit "/d/Imperium/std/monster";

#include <ss_types.h>
#include <stdproperties.h>
#include <macros.h>
#include "silvy.h"

#define QUEST_GRUPA	0
#define QUEST_BIT	4
#define QUEST_EXPY	650000

#define QUEST_LOG 	"/d/Imperium/private/questlog/0_4.log"

#define MAM_QUESTA_RUDOLFA "_mam_questa_rudolfa"
#define RUDOLF_U_MNIE_KLONOWANY "_rudolf_i_przyjmuje_to"
#define MAM_DZBAN_OD_RUDOLFA "_mam_dzbanek_od_rudiego"

#define BARYLKA_ROOM "/d/Imperium/Nuln/sklepy/piwniczka"

#define PLAYER_I_ROZMAWIAL_Z_RUDOLFEM "_player_i_rozmawial_z_rudolfem_"
// Rudolf bit  3_2

int quest_wziety, quest_zrobiony;
object gracz;
object dzban;
int zajety, id_alarm;

void
create_monster()
{ 
    
    ustaw_imie( ({"rudolf", "rudolfa", "rudolfowi", "rudolfa", "rudolfem", 
        "rudolfie" }), PL_MESKI_OS);
        
    dodaj_nazwy(({ "karczmarz", "karczmarza", "karczmarzowi",
        "karczmarza", "karczmarzem", "karczmarzu" }), ({ "karczmarze",
        "karczmarzy", "karczmarzom", "karczmarzy", "karczmarzami",
        "karczmarzach" }), PL_MESKI_OS);
    
    
    dodaj_przym("barczysty","barczysci");

    set_long("Barczysty barman to osoba w srednim wieku, cieszaca sie wsrod bywalcow " +
        "karczmy wyraznym respektem. Z jego ust nie schodzi grymas przypominajacy " +
        "usmiech. Gdy nalewa piwo widac w jego ruchach wieloletnia rutyne."+
        " Po jego twarzy splywa gesto pot, ktory karczmarz wyciera w przybrudzony fartuch. " +
        " Co jakis czas uzywa tez scierki, ktora nosi stale przy sobie.\n");
    ustaw_odmiane_rasy(PL_CZLOWIEK);
    set_gender(G_MALE);
    add_prop(IMPERIUM_LIVE_I_NULN_CITIZEN, 1); 
        
    add_prop(CONT_I_WEIGHT, 70000);
    add_prop(CONT_I_HEIGHT, 185);
    
    set_skill(SS_DEFENCE, 15 + random(10));
    set_skill(SS_UNARM_COMBAT, 20 + random(10));
    set_skill(SS_PARRY, 10 + random(10));
    
    set_stats(({75, 40, 75, 50, 50, 60}));
    
    set_chat_time(25);
    add_chat("Piwo?");
    add_chat("Chcesz sie czegos napic?");
    add_chat("Spokoj tam chlopcy!");
    add_chat("Czego?");
    add_chat("Znowu na kredyt? Masz mnie za glupca?");
    add_chat("Zaspiewajcie cos chlopcy, ale z zyciem!");
    
    set_cchat_time(10);
    add_cchat("Oz ty!");
    add_cchat("Bijesz barmana? Srogo tego pozalujesz!");
    add_cchat("Spadaj frajerze!");
    add_cchat("Straz!!!!");
    
    set_act_time(21);
    add_act("emote rozlewa portera do kufli.");
    add_act("emote wyciera blat do polysku mokra scierka.");
    add_act("emote uklada szklanki w rownym rzadku na polce.");
    add_act("emote usmiecha sie krzywo."); 

    setuid();
    seteuid(getuid());
    
    dzban = clone_object(NPATH + "obj/dzban.c");
    dzban->add_prop(RUDOLF_U_MNIE_KLONOWANY, 1);
    dzban->dodaj_wino(4);
    
    dzban->move(this_object());

    add_ask(({"zadanie","prace","pomoc"}), VBFC_ME("repomoc"));
    add_ask("wino", VBFC_ME("rewino"));
    add_ask("nagrode", VBFC_ME("renagroda"));
    set_default_answer(VBFC_ME("odpowiedz_standardowa"));

    add_ask(({"katrine","karine","Karine","rine","Rine"}), VBFC_ME("katrina_hint"));


}

int
mobile_deny_objects()
{
    return 0;
}

void
add_introduced(string imie)
{
    set_alarm(2.0,0.0,"return_intro", imie);
}

varargs void 
return_intro(string kto)
{
    command("przedstaw sie " + find_player(kto)->query_real_name(PL_CEL));
}

 /* --------------------------------------------------------------- */
 /*  Standardowa odpowiedz                                          */
 /* -*------------------------------------------------------------- */
 
string
odpowiedz_standardowa()
{
     command("emote drapie sie po glowie.");
     command("powiedz Nie mam pojecia o co ci chodzi.");
     return "";
}     

 /* --------------------------------------------------------------- */
 /*  Odpowiedz na pytanie o nagrode                                 */
 /* --------------------------------------------------------------- */
 
string
renagroda()
{
     if (!this_player()->query_prop(MAM_QUESTA_RUDOLFA))
    {
         command("powiedz O czym ty mowisz?");
         command("emote mruga oczami ze zdziwienia.");
         return "";
     }    
   command("powiedz Po prostu przynies mi dzban z winem.");
   return "";
}      

 /* --------------------------------------------------------------- */
 /* Glowna procedura odpowiadajaca za przydzielenie graczowi questa */
 /* --------------------------------------------------------------- */

varargs string          // sprawia ze funkcje mozna wywolac bez parametrow
repomoc(int chat_nr)    
{   

    
        /* sprawdzamy czy gracz nas slucha jeszcze */
    if (chat_nr)
    if (!present(gracz, environment(this_object())))
        {
            command("powiedz Poczekaj jeszcze nie skoczylem...");
            command("emote wzrusza ramionami.");
            command("emote wraca do pracy.");
            zajety=0;
            return "";
        }
    
   switch (chat_nr)
   {
       case 0:    if(zajety)
		   {
		     command("powiedz Chwileczke, daj mi skonczyc.");
		     return"";
		   }
               gracz = this_player();
         
              if (this_player()->test_bit("imperium", QUEST_GRUPA, QUEST_BIT))
              {
                   command("emote zamysla sie przez chwile.");
                   command("powiedz Nie potrzebuje juz wiecej pomocy "+
                       "od ciebie. Dziekuje.");
                   return "";
              }
              
              if (quest_wziety )
              {
                   if (this_player()->query_prop(MAM_QUESTA_RUDOLFA))
                   {
                       command("powiedz A mowilem ci zebys sluchal "+
                        "uwaznie! Nie bede sobie na darmo strzepil "+
                        "jezyka.");
                       command("emote mruczy cos pod nosem.");
                       return ""; 
                   }
                   
                   command("emote drapie sie po brodzie.");
                   command("powiedz Dziekuje ale mam juz pomocnika.");
                   return "";
              }
                  
              if (quest_zrobiony)
              {
                   command("powiedz Dzis juz nie potrzebuje wiecej pomocy."+
                      " Ale dziekuje za dobre checi.");
                   command("emote usmiecha sie zyczliwie.");   
                   return "";
              }    

   zajety = 1; 
              command("emote usmiecha sie przyjaznie.");
              command("powiedz A wiec chcial"+gracz->koncowka("","a")
              +"bys byc przydatn" + gracz->koncowka("ym","a")+"?");

              set_alarm(4.0, 0.0, "repomoc", (chat_nr+1));
              
       break;
       case 1:          
              command("powiedz Niech ci bedzie. Trzymaj...");
              command("daj dzban " + gracz->query_real_name(PL_CEL)); 
                             
              set_alarm(4.0, 0.0, "repomoc", (chat_nr+1));         
       break;
       case 2:    
              command("powiedz Sluchaj uwaznie co ci powiem.");
              command("powiedz Jeden z gosci, niejaki Dregmin zazyczyl "+
               "sobie skosztowac najprzedniejszego wina z moich piwnic. "+
               "Obiecalem ze mu je dostarcze jak najszybciej ale jestem "+
     	       "bardzo zajety i nie moge teraz opuscic moich gosci.");
              set_alarm(4.0, 0.0, "repomoc", (chat_nr+1));                    
       break;
       case 3:       
              command("powiedz Pojdziesz wiec do piwnicy i przyniesiesz "+
               "mi 4 litry wina w tym dzbanie.");
              command("powiedz No, idz juz.");
              command("emote odwraca sie do gosci.");
              
              set_alarm(4.0, 0.0, "repomoc", (chat_nr+1));
       break;
       case 4:
              command("powiedz Aha! Jeszcze jedno w tym dzbanie miesci "+
               "sie 5 litrow wiec nie musisz nalewac do pelna. Ale "+
               "pamietaj zeby byc dokladnym.");
               
                      
              this_player()->add_prop(MAM_QUESTA_RUDOLFA, 1);	
              quest_wziety = 0;
              zajety = 0;
              BARYLKA_ROOM -> reset_questa();
              id_alarm=set_alarm(3600.0,0.0,"reset_questa");
       break ;
   }  
   return "";
}    

 /* --------------------------------------------------------------- */
 /*  Tutaj odpowiadamy na pytanie o wino                            */
 /* --------------------------------------------------------------- */

string
rewino()
{
    if (this_player()->query_prop(MAM_QUESTA_RUDOLFA))
    {
         command("powiedz Zejdz tymi schodkami do piwnicy i rozejrzyj sie. "+
          "W rogu powinna stac jeszcze cala barylka.");
         return "";
    }
         command("powiedz Tak to bardzo szlachetny napoj. A u mnie "+
          "znajdziesz tylko najlepsze gatunki.");
         command("emote usmiecha sie dumnie."); 	
    return "";
}     

varargs
katrina_hint(int faza)
{
    switch(faza)
    {
    case 0:

   if(zajety)
   {
     command("powiedz Chwileczke, daj mi skonczyc.");
     return"";
   }
    zajety = 1;     
      command("emote wybucha: Coooooo ???!!! Katrina ???!!!! Jestes jej "
      + "wspolnikiem, tak ???!!! Juz ja cie urzadze !!! "); 
      command("emote sinieje z wscieklosci. ");
     set_alarm( 7.0, 0.0, "katrina_hint", (faza +1));   
     break;                 
    
    case 1:
    
      command("emote chwyta kubek z trunkiem, szybko go oproznia i po "
      + "chwili uspokaja sie nieznacznie: Hmmm, jednak dobrze ci "
      + "z oczu patrzy, moze zle cie ocenilem i nie masz nic wspolnego "
      + "z ta oszustka ! ");
     set_alarm( 9.0, 0.0, "katrina_hint", (faza +1));   
     break;                 
    
    case 2:
    
      command("emote mowi: Jesli chcesz wiedziec to ta, ta.... az slow "
      + "mi brakuje... wynajmowala pokoj na gorze przez prawie dwa "
      + "tygodnie i uciekla nie placac za nic !!! Dalem sie nabrac na "
      + "ta historyjke o stryjku bankierze ! "); 
     set_alarm( 7.0, 0.0, "katrina_hint", (faza +1));   
     break;                  
   
    case 3:
    
      command("emote wscieka sie: Jej urok mi rozum przeslonil, ale "
        + "trzeba przyznac, ze skubana byla piekna! ");
     set_alarm( 7.0, 0.0, "katrina_hint", (faza +1));   
     break;                 
    
    case 4:
    
      command("emote mowi: Jezeli jej szukasz to niewiele moge ci pomoc, "
      + "sam bym chetnie dostal ja w swoje rece !!! Moze znajdziesz "     
      + "jakas wskazowke w jej pokoju, chociaz sam przeszukalem go "
      + "dosyc dokladnie. ");
     set_alarm( 7.0, 0.0, "katrina_hint", (faza +1));   
     break;  
      
    case 5:
    
      command("emote mowi: Przepraszam ! Klienci czekaja. ");
      command("emote zwraca sie do goscia: Tak, slucham ? Co podac ? ");
     zajety = 0;
     break;    
    }
    gracz = this_player();
    gracz->add_prop(PLAYER_I_ROZMAWIAL_Z_RUDOLFEM, 1);
    gracz->set_bit(3,2);
    return "";
}


 /* --------------------------------------------------------------- */
 /* Sprawdzamy ile wina jest w dzbanie i w zaleznosci od tego       */
 /* podejmujemy odpowiednie akcje                                   */
 /* --------------------------------------------------------------- */

void
dostalem_dzban(object dzban)
{
     object gracz = this_player();
   
   /* Trzeba zrobic zeby gracz nie mogl odlozyc dzbana ani go nikomu dac 
    *  a przy quittowaniu dzban powinien sie destructowac
    */        
    
     if (dzban->ile_wina() == 4)
     {
         command("powiedz Swietna robota! Dziekuje za pomoc!");
         if (!this_player()->test_bit("Imperium", QUEST_GRUPA, QUEST_BIT))
         {
             gracz->catch_msg("Czujesz sie troche bardziej doswiadczon" +
             	gracz->koncowka("y","a") + "!\n");
             gracz->add_exp(QUEST_EXPY, 0);
      gracz->add_exp(10000000, 1);
             gracz->set_bit(QUEST_GRUPA, QUEST_BIT);

     MONEY_MAKE_PC (25)->move(gracz);
     write(query_Imie(this_object(),PL_MIA) + " daje ci kilka monet.\n");
             
             write_file(QUEST_LOG, ctime(time()) + " - " + 
                 capitalize(gracz->query_real_name(PL_MIA)) + 
                 " zrobil" + gracz->koncowka("", "a") + " questa u " +
                 "Rudolfa - " + QUEST_EXPY + " exp.\n");
         }
   
         quest_wziety = 0;
         quest_zrobiony = 0;
         if (sizeof(get_alarm(id_alarm))) 
            remove_alarm(id_alarm);
         
         set_alarm(3600.0,0.0,"reset_questa");
         
         setuid();
         seteuid(getuid());
         
         return;
     }  
     
     command("emote spoglada na dzban oceniajacym okiem.");
     command("emote marszczy brwi.");
     
     if (dzban->ile_wina() == 0)
     {
      
        command("powiedz A gdzie wino? Miales je przyniesc, chyba "+
          "go nie wypiles!");
     }    
     
     if (dzban->ile_wina() < 4 && dzban->ile_wina() !=0)
     {
         command("powiedz Wydaje mi sie ze nalales za malo wina.");
         command("powiedz Wroc do piwnicy i dolej jeszcze. Nie chce "+
          "aby moj gosc pomyslal ze chce go oszukac.");  
     }
     
     if (dzban->ile_wina() > 4 )
     {
          command("powiedz Mowilem zebys nie nalewal do pelna. "+
           "wroc do piwnicy i odlej jeden litr z powrotem do barylki.");
     }
     
  command("daj dzban " + gracz->query_real_name(PL_CEL));  
  return;            
}   
 
 /* --------------------------------------------------------------- */
 /*  Oddajemy nie potrzebne nam przedmioty                          */
 /* --------------------------------------------------------------- */   
 
void
oddaj_spowrotem(object ob, object from)
{
     command("daj " + OB_NAME(ob) + " " + from->query_real_name(PL_CEL));
     command("powiedz Nie prosilem o to.");
}

 /* --------------------------------------------------------------- */
 /*  Sprawdzamy co dostal Rudolf. Jesli cos innego niz dzban to     */
 /*  oddajemy (pieniadze Rudolf zatrzymuje jednak sobie ;>)         */
 /* --------------------------------------------------------------- */   
 
void
enter_inv(object ob, object from)
{
    ::enter_inv(ob, from);
    
    if (ob->query_prop(RUDOLF_U_MNIE_KLONOWANY))
    {
         ob->remove_prop(RUDOLF_U_MNIE_KLONOWANY);
         return ;
    }
    
    if (MASTER_OB(ob) == NPATH + "obj/dzban")
    {    
         set_alarm(0.1, 0.0, "dostalem_dzban", ob);
         return ;
    }
    
    if (MASTER_OB(ob) == "/std/coins")
    {
         command("powiedz Dzieki ci o panie!");
         command("usmiechnij sie szczesliwie");
         return ;
    }

    set_alarm(0.5, 0.0, &oddaj_spowrotem(ob, from));

    return ;
}

string
query_presentation()
{
    return"Rudolf Karczmarz, czlowiek";
}    

void
reset_questa()
{
    quest_zrobiony = 0;
    quest_wziety = 0;

    dzban = clone_object(NPATH + "obj/dzban.c");
    dzban->add_prop(RUDOLF_U_MNIE_KLONOWANY, 1);
    
    dzban->move(this_object());
}    
