
inherit "/std/monster";

#include <ss_types.h>
#include <macros.h>
#include <stdproperties.h>
#include "silvy.h"

#define PLAYER_I_DOSTAL_QUEST_CODANA  "_player_i_dostal_quest_codana"
#define PLAYER_I_ZNALAZL_ZIELSKO  "_player_i_znalazl_zielsko"
#define PLAYER_I_BYL_U_APTEKARZA  "_player_i_byl_u_aptekarza"

object gracz;
int zajety;

void oddaj_rzecz(object ob, object from);
void oddal_zielsko(object from);

void
create_monster()
{
    ustaw_imie (({"Hans Hailkraut", "Hansa Hailkrauta",
    		  "Hansowi Hailkrautowi", "Hansa Hailkrauta",
    		  "Hansem Hailkrautem", "Hansie Hailkraucie"}));

    dodaj_nazwy (({"hans", "hansa", "hansowi", "hansa", "hansem", "hansie"}),
    		 ({"hans", "hansa", "hansowi", "hansa", "hansem", "hansie"}),
    		   PL_MESKI_OS);

    dodaj_nazwy(({"zielarz","zielarza","zielarzowi","zielarza","zielarzem",
    		  "zielarze"}),({"zielarze","zielarzy","zielarzom","zielarze",
    		  "zielarzami","zielarzach"}), PL_MESKI_OS);
    
    set_long ("Za lada siedzi siwy, pomarszczony zielarz."
    +" Ma na twarzy wyraz specyficznego znudzenia, ktory sprawia,"
    +" iz odnosi sie wrazenie, ze siedzi tu od paru lat bez przerwy. "
    +"W jego zmeczonej zyciem twarzy blyszcza nieduze oczka,"
    +" ktore nieprzerwanie lustruja przestrzen wokolo. Fakt ten nasuwa ci na"
    +" mysl, iz, mimo wieku okolo 80 lat, wciaz jest w pelni sprawny umyslowo.\n");

    ustaw_odmiane_rasy (PL_CZLOWIEK);
    
    dodaj_przym ("siwy","siwi");
    dodaj_przym ("zgarbiony","zgarbieni");

    
    set_gender(G_MALE);
 
    add_prop(CONT_I_WEIGHT, 50000);
    add_prop(CONT_I_HEIGHT, 140);

    set_skill(SS_DEFENCE, random(5));
    set_skill(SS_UNARM_COMBAT, random(5));
    set_skill(SS_PARRY,  random(10));
    set_skill(SS_HERBALISM, random(10)+50);

    set_stats(({ 40, 40, 22, 45, 40, 40}));

    set_act_time(30);
    add_act("emote drapie sie po glowie.");
    add_act("emote zanosi sie suchym, plytkim kaszlem.");
    add_act("emote cicho mowi: Kupujesz cos czy tylko ogladasz moje zbiory?");
    add_act("emote poprawia okulary.");

    add_ask(({"codana",}), VBFC_ME("quest_hint"));
    add_ask(({"lek", "lekarstwo","ziola","liscie","ziolo"}),
        VBFC_ME("lek_hint"));

    set_default_answer(QCIMIE(TO,PL_MIA) + " odpowiada: Nic o tym nie wiem...\n");


    remove_prop(NPC_M_NO_ACCEPT_GIVE);

}

string
query_presentation()
{
	  return "Hans Hailkraut, Mistrz Aptekarski Nuln, czlowiek";
}


void
add_introduced (string imie)
{
     set_alarm(2.0,0.0,"return_introduce", imie);
}

void
return_introduce(string kto) 
{
    command("przedstaw sie " + OB_NAME(find_living(kto, 0)));
}


varargs string          /* varags oznacza, ze nie trzeba podawac wszystkich */
quest_hint(int faza)    /* argumentow. Jesli nie poda sie, to faza = 0 */
{
/* Wpierw zapamietujemy gracza w zmiennej, bo w alarmach this_player()
 * nie dziala
 */
    gracz = this_player();
    
/* Za kazdym razem, gdy ma powiedziec jakas kwestie, sprawdzamy, czy gracz
 * jeszcze go slucha ... :-)
 */
    if (!present(gracz, environment(this_object())))
    {
        command("powiedz Czy on cos chcial?");
        command("emote tupie lekko noga i przewraca strone w ksiazce."); 
        return "";
    }
// To bylo jesli gracz juz sobie poszedl.
    switch(faza)
    {
        case 0: /* Zaczyna gadac. Sprawdzamy, czy gracz zrobil questa, itd. */
            if (gracz->test_bit("imperium", 0, 12))
// Sprawdzamy czy gracz ma juz zrobiony quest, to znaczy czy ma ustawiony
// 'bit' tego questa jako aktywny. Jesli tak to:
            {
                command("emote przewierca cie swoim wzrokiem.");
                command("emote mowi: Codan dostal juz swoj lek, dziekuje ci za pomoc.");
                command("emote usmiecha sie przyjaznie."); 
                return "";
                /* Wyjscie z funkcji */
            }
    if(!gracz->query_prop(PLAYER_I_DOSTAL_QUEST_CODANA))
    {
        command("emote mowi: Nie wiem o czym mowisz.");
        return"";
    }    
            
// Jesli dwa poprzednie warunki nie byly spelnione, to znaczy, ze
// gracz nie robil jeszcze tego questa i nie sluchal Hermana. Mozna mu
// powiedziec o zadaniu.
   if(zajety)
   {
     command("powiedz Chwileczke, daj mi skonczyc.");
     return"";
   }
   zajety = 1;            
            command("emote usmiecha sie.");

            set_alarm(4.0, 0.0, "quest_hint", (faza + 1));
            break;
        case 1: /* kontunacja gadki */
            command("emote mowi: Codan? Ach, moj stary przyjaciel! Pewnie potrzebuje leku." 
                    + " A wiec do roboty. Beda mi potrzebne pewne skladniki...");
            zajety = 0;
            break;
    }
    return "";
    /* Wyjscie z funkcji */
}


// Cala gadka podana jest w fazach, zeby nie walnac calego tekstu graczowi ciurkiem.
// W kazdej fazie sprawdzane jest czy gracz jeszcze slucha.
varargs string
lek_hint(int faza)
{
    gracz = this_player();
// Kolejne podpowiedzi.
    if(!gracz->query_prop(PLAYER_I_DOSTAL_QUEST_CODANA))
    {
        command("emote mowi: Nie wiem o czym mowisz.");
        return"";
    }    
    switch(faza)
    {
     case 0:
    
   if(zajety)
   {
     command("powiedz Chwileczke, daj mi skonczyc.");
     return"";
   }
   zajety = 1;
       command("emote mowi: Potrzebne mi beda pewne ziola. Rosna one zwykle na bagnach i trzesawiskach. " +
               "Prosze, pospiesz sie, zostalo niewiele czasu.");
      set_alarm(10.0,0.0, "lek_hint", (faza + 1));
      break;

     case 1:
       command("emote mowi: Te ziola to liscie. Maja rozowy kolor i mozna je znalezc " +
           "na drzewach rosnacych na podmoklych terenach. " +  
               "Sa bardzo rzadkie i nie kazdy jest w stanie je odnalezc.");
      zajety = 0;
      break;
    }
    gracz->add_prop(PLAYER_I_BYL_U_APTEKARZA, 1);
            
    return"";
    
}

void
oddaj_rzecz1(object ob, object from)
{
    command("emote patrzy zdziwiony.");
    command("emote dodaje: Nie prosilem o to.");
    command("daj " + ob->query_nazwa(3) + " " + from->query_real_name(2));
} 


void
enter_inv(object ob, object from)
{
   ::enter_inv(ob, from);
   if(!from) return;
   if(!from->query_prop(PLAYER_I_DOSTAL_QUEST_CODANA))
   {
       set_alarm(1.0, 0.0, &oddaj_rzecz1(ob, from));
       return;
   }
   if(ob->id("_ziola_aptekarza_"))
   {
       set_alarm(1.0, 0.0, &oddal_zielsko(from));
       return;
   }
   set_alarm(1.0, 0.0, &oddaj_rzecz(ob, from));
   return;
}

void
oddaj_rzecz(object ob, object from)
{
    command("emote kreci glowa z dezaprobata.");
    command("emote mowi: To nie ziolo! Pospiesz sie, bo Codan umiera.");
    command("emote dodaje: I trzymaj to.");
    command("daj " + ob->query_nazwa(3) + " " + from->query_nazwa(2));
} 



void
oddal_zielsko(object from)
{
      command("emote mowi: Masz ziolo, to wysmienicie.");
      command("emote przyrzada lek mieszajac jakies skladniki.");
      clone_object(NPATH + "obj/lek.c")->move(this_object());
      command("daj butelke " + from->query_nazwa(PL_CEL));
      return;
}
