inherit "/d/Imperium/std/monster";
inherit "/d/Imperium/std/quest";
#include <ss_types.h>
#include <seqaction.h>
#include "darkmts.h"
#include <filter_funs.h>

void ile_doswiadczenia(object who);
void oddal_i_skrzynke(object from,object ob);
void oddal_ii_skrzynke(object from,object ob);

object gracz, map;
int zajety_elam = 0;

void
create_monster()
{
    ustaw_imie(({"elam","elama","elamowi","elama","elamem",
     "elamie"}),PL_MESKI_OS);
    
    dodaj_przym("siwobrody","siwobrodzi");
    
    set_long("Jest to bardzo stary mezczyzna. Rysy twarzy sa typowo ludzkie, "
	   + "lecz spiczaste uszy sterczace wsrod splatanych, bialych "
	   + "wlosow swiadcza, iz jest dzieckiem innej rasy. "
	   + "Jego ubior jest stary i polatany kolorowymi skrawkami "
	   + "przeroznych materialow. Przez ramie ma przewieszona rownie "
	   + "wiekowa torbe z wytartym, odpadajacym dnem.\n");
    
    ustaw_odmiane_rasy(PL_ELF);
    
    set_gender(G_MALE);
    
    add_prop(CONT_I_WEIGHT,55000);
    add_prop(CONT_I_HEIGHT,180);
    
    set_skill(SS_TRADING,40);
    set_skill(SS_LANGUAGE,25);

    set_stats(({45,35,50,60,40,70}));
    
    set_act_time(2);
    add_act("emote mruczy cos pod nosem, wielce zafrapowany.");
    add_act("emot mowi: Zatrzymaj sie na chwile, byc moze zainteresuje cie "
	  + "moja historia.");
    add_act("emote spoglada z zyczliwym usmiechem na mijajacych go ludzi.");
    add_act("emote krzyczy: Moje opowiesci niejednemu sie przydaly... "
	  + "Kilka monet za uczynienie cie bogaczem, czy to duzo?");
    add_act("emote krzyczy: Do mnie podroznicy spragnieni przygod! "
	  + "Opowiem wam o rzeczach, ktore moglyby byc snem.");

    add_ask(({"zadanie","historie","opowiesc"}), VBFC_ME("quest_hint"));
    add_ask(({"skrzynki","skrzynke","pomoc"}), VBFC_ME("help_skrzynki"));

    set_default_answer(QCIMIE(this_object(),PL_MIA) + " mowi: Niedoslysze lub naprawde "
					      + "nie wiem o co ci chodzi.\nStarzec usmiecha sie.\n");

    remove_prop(NPC_M_NO_ACCEPT_GIVE);

    set_whimpy(50);
}

public string help_skrzynki()
{
 command("powiedz Czy cos sie stalo?");
 command("zasmiej sie");
 command("powiedz Daj mi ciemna skrzynke.");
 return "";
}

add_introduced(string imie)
{
    set_alarm(1.0,0.0,"return_info",imie);
}

varargs void
return_info(string kto)
{
    command("przedstaw sie "+find_player(kto)->query_real_name(PL_CEL));
}

string 
query_presentation()
{
   return"Elam z Quenelles, Handlarz Osobliwosci, elf";
}

varargs string
quest_hint(int faza)
{
   
   

   if (faza)
   if(!present(gracz,environment(this_object())))
   {
    command("powiedz Poszedl sobie... Niech go bogowie prowadza.");
    command("krzyknij Do mnie dobrzy ludzie...!");
    zajety_elam=0;
    return"";
   }
   
  switch(faza)
  {



   case 0:   if(zajety_elam)
		   {
		     command("powiedz Chwileczke, daj mi skonczyc.");
		     return"";
		   }
	
	   gracz=this_player();
   
    if(gracz->test_bit("imperium",0,13))
    {
     command("powiedz Gdy nadejdzie pora, znow sie spotkamy.");
     command("szepnij " +OB_NAME(gracz)+ " Juz niedlugo...");
     return"";
    }
     if(gracz->query_prop("_quest_elama_wyprawa_po_skrzynki"))
      {
       command("krzyknij To daleka droga! Idz juz do stu bekartow Chaosu.");
       return"";
      }
      if (gracz->query_prop("_dal_pieniazki_elamowi"))
      {
	command("emote kiwa glowa.");
        set_alarm(5.0,0.0,"quest_hint",(faza+1));
        zajety_elam = 1;
        return"";
      }
      
      command("emote usmiecha sie chytrze.");
      command("emote mowi: Przydaloby mi sie pare groszy na wino."); 
      break;
       
      
    case 1:

   

      command("emote zaczyna swa opowiesc.");
      set_alarm(2.0,0.0,"quest_hint",(faza+1));
      break;
    case 2:
      command("emote mowi: Widzisz, ze jestem bardzo starym elfem.");
      tell_room(environment(this_object()),"Staruch zaczyna rechotac krztuszac sie co chwile.\n");
      set_alarm(14.0,0.0,"quest_hint",(faza+1));
      break;
    case 3:
      command("emote mowi dalej: Chce, abys skorzystal z tego co wiem. "
      +"A jest to duzo warte. Recze za to swoja "
            + "zasuszona glowa.");
      write("Starzec odciaga cie na bok.\n");
      set_alarm(15.0,0.0,"quest_hint",(faza+1));
      break;
    case 4:
      command("emote prawie niedoslyszalnie mowi: Dam ci mape i pare wskazowek.");
      command("szepnij "+this_player()->query_real_name(PL_CEL)+" Idz w Gory Czarne. Z pomoca mapy dotrzesz do starej wiezy.");
      set_alarm(10.0,0.0,"quest_hint",(faza+1));
      break;
    case 5:
      command("szepnij "+this_player()->query_real_name(PL_CEL)+" Z wnetrza wiezy mozesz "
            + "wziac wszystko, co tylko zapragniesz."); 
      command("szepnij "+this_player()->query_real_name(PL_CEL)+" Mnie zas... przynies dwie "
      	    + "mahoniowe skrzynki. Kazda z nich z osobna bardzo jest dla mnie wazna "+
      	    "wiec gdy je przyniesiesz, pojedynczo mi je dawaj, bym mogl sprawdzic, czy "+
      	    "wlasciwe skrzynki mi przyniosl"+this_player()->koncowka("es","as")+".");
      command("krzyknij Obie!");
      set_alarm(7.0,0.0,"quest_hint",(faza+1));
      break;
    case 6:
      command("emote dodaje spokojnie i z usmiechem: Nagrodze cie uczciwie...");
      map = clone_object(OPATH + "mapsko.c");
      map->move(this_player());
      write("Starzec wrecza ci mape.\n");
      say("Starzec wrecza cos "+QCIMIE(gracz,PL_CEL)+".\n");
      command("emote spoglada powaznie i wskazuje poludnie.");
      command("szepnij "+gracz->query_real_name(PL_CEL)+" Aha, nie zagladaj "
      +"do zadnej ze skrzynek! Idz!");  
      gracz->add_prop("_quest_elama_wyprawa_po_skrzynki",1);
    
      zajety_elam = 0;
    
      break;
     }
 return "";
}
void oddaj_rzecz(object ob, object from)
{
 command("emote krzywi sie i mowi: Nie chce tego...");
 command("daj "+OB_NAME(ob)+" "+from->query_real_name(PL_CEL));      
}

void 
enter_inv(object ob, object from)
{
   ::enter_inv(ob, from);
   
   if (MASTER_OB(ob) == "/std/coins")
   {
    if (ob->query_coin_type() != "miedz")
    {
     gracz->add_prop("_dal_pieniazki_elamowi",1);
     command("usmiech przyjaznie.");
     command("powiedz Na to kupie sobie buteleczke!");
     return ;
    }
    else 
    if (from!=this_object())
    {
     command("emote krzywi sie i mowi: To troche malo ... Nie masz zlota?");
     return ;
    }
    return;
   }
    
   if(ob->id("_skrzynka_i_Elama_"))
   {
    set_alarm(0.1,0.0,&oddal_i_skrzynke(from,ob));
    return;
   }

   if(ob->id("_skrzynka_ii_Elama_"))
   {
    set_alarm(0.1,0.0,&oddal_ii_skrzynke(from,ob));
    return;
   }

   set_alarm(1.0,0.0,&oddaj_rzecz(ob,from));   
   return;
}

void 
oddal_i_skrzynke(object from,object ob)
{
   string who, what;
   who=from->query_real_name();

   if(!from->query_prop("_quest_elama_wyprawa_po_skrzynki"))
   {
    command("emote mowi: Ta skrzynka wyglada podejrzanie... Prawdopodobnie "
    			+ "ratuje cie przed klatwa biorac ja od ciebie!");
    ob->remove_object();			
    return;
    // wychodzisz z tej funkcji zeby reszty nie wykonywalo, bo nie
    // mozemy dawac graczowi expa jesli nie dostal tego questa.
   }

   ob->remove_object();

   if (from->query_prop("_player_i_oddal_ii_skrzynke"))
   ile_doswiadczenia(from);
   else 
   {
    from->add_prop("_player_i_oddal_i_skrzynke",1);
    command("emote pyta: A ciemna skrzynka?");
    return;
   }
   return;
}  

void 
oddal_ii_skrzynke(object from,object ob)
{
   object *oby;
   object pokoj;
   string who, what;
   who=from->query_real_name();
   
   /* Moj kod ponizej, Alvin */
   /* THX Alvin (Karraluch) */
     
     call_other("/d/Imperium/Czarne/quest/wskrzyn","load_me");
     pokoj = find_object("/d/Imperium/Czarne/quest/wskrzyn");

        
//   if (stringp(pokoj))		// Czy pokoj to sciezka do pokoju ?
//       pokoj = find_object(pokoj);
       
//   if (!pointerp(pokoj))	// Czy pokoj to wskaznik do pokoju ?
//   {
//       // Do skrzyni nie jest podlaczony obiekt, co zrobic ?
//   }
   
   oby = FILTER_PLAYERS(all_inventory(pokoj));
  
   if (sizeof(oby))
   {
    command("emote mowi ze smiechem: A mowilem, zeby do niej nie zagladac.");
    command("emote bierze skrzynke w rece i wykonuje kilka dziwnych ruchow reka.");
    oby->move_living("X",environment(this_object()));
    tell_room(environment(this_object()),"Ze skrzynki zaczyna wydobywac sie czarny "
    					+"dym.\n");
    command("emote dodaje: A skrzynke zatrzymam, tak bedzie bezpieczniej.");
    ob->remove_object();
    return;
   }
   
   if(!from->query_prop("_quest_elama_wyprawa_po_skrzynki"))
   {
    command("emote mowi z przejeciem: Wezme ta skrzynke... Ciesz sie, bo ratuje "
    		+ "cie przed klatwa!");
    ob->remove_object();
    return;
   }

   ob->remove_object();

   if (from->query_prop("_player_i_oddal_i_skrzynke"))
   { 
       command("usmiechnij sie");
       ile_doswiadczenia(from);
   }
   else
   {
    from->add_prop("_player_i_oddal_ii_skrzynke",1);
    command("emote pyta: A jasna skrzynka?");
    return;
   }
   
   return;
}

void ile_doswiadczenia(object who)
{
   int xp_base=5000;
   if(who->test_bit("imperium",0,13))
   {
    who->catch_msg("Dziekuje, ale juz znasz ta opowiesc.\n"); 
    return;
   }
   xp_base-=(who->query_prop("_player_i_wzial_skrzynki")?0:1500);
   xp_base-=(who->query_prop("_player_i_wzial_line")?0:1500);
   who->catch_msg("Czujesz sie bardziej doswiadczon" +
   	who->koncowka("y","a") + ".\n");
   command("emote smieje sie uradowany.");
   command("emote chowa to co dostal za pazuche.");
   who->add_exp(xp_base,0);
   who->set_bit(0,13);
   seteuid(getuid());
   write_file("/d/Imperium/private/questlog/0_13.log",
      ctime(time())+": "+who->query_name()+", "+xp_base+" xp\n");
   return;
} 
