/* Vaktoth 1997 */


#pragma no_clone
inherit "/d/Imperium/std/room";
#include "/sys/stdproperties.h"
#include "/sys/macros.h"
#include "defs.h"
#include <poison_types.h>
#include <ss_types.h>

#define FOUND_MY_TRAP "_player_found_needle_trap" /* cos unikalnego */

/*
 * Prototyp
 */
void do_trap(object player);

int trap;
object door;
object *skav = allocate(10);


void
reset_imperium_room()
{
    object other;
    int i;
  for (i=0; i<sizeof(skav); i++)
  {
    if (present(skav[i],TO)==0)
    {
        skav[i] = clone_object( NPCS + "stormvrm.c");
        tell_room(TO,"Skaven nadchodzi.\n");
        skav[i]->move(TO);
    }
  }

    /* Przygotowanie trucizny, hehehe  */
    if (!trap)
	trap = random(3);
    (door->query_other_room())->set_trap(trap);
    other = door->query_other_door();
    if (door->query_open())
    {
	door->do_close_door(""); 
	other->do_close_door("Jeden ze skavenow podszedl i zamknal drzwi.\n");
    }
    if (!door->query_locked())
    {
	door->do_lock_door("");
	other->do_lock_door("Slyszysz cichy trzask zamykanego zamka u drzwi.\n");
	}
}


create_imperium_room()
{
   
  
    set_long("@@long_desc");
    set_short("Swiatynia Rogatego Szczura");

    add_item(({"inskrypcje","tajemnicze inskrypcje"}),
	        "Inskrypcje te napisano stosujac starozytny jezyk runiczny skavenow. " +
	        "Nie masz najmniejszego pojecia co one oznaczaja, lecz " +
	        "przeswiadczenie mowi ci iz poznanie ich tresci przyprawiloby cie o utrate zmyslow. " +
            "Tylko wypaczone umysly chaosu bylyby zdolne ogarnac widniejace tutaj tresci.\n");

    add_item(({"sciana","sciane","sciany"}),
	        "Sciany pomieszczenia sa zadziwiajaco rowne. Dodatkowo, " +
            "czujesz, ze emanuje z nich cos nieslychanie zlego i obrzydliwego. Po chwili " +
            "dostrzegasz przyczyne - setki ludzkich czaszek wmieszanych w spoiwo skalne " +
            "przeswituje przez nie, upiornie wpatrujac sie w ciebie pustymi oczodolami.\n");
    
    add_item(({"podloga","podloge","podloze"}),
	        "Podloga pomieszczenia jest zadziwiajaco rowna, tak samo jak sciany. Dodatkowo, " +
            "czujesz, ze emanuje z niej cos nieslychanie zlego i obrzydliwego. Po chwili " +
            "dostrzegasz przyczyne - setki ludzkich czaszek wmieszanych w spoiwo skalne " +
            "przeswituje przez nie, upiornie wpatrujac sie w ciebie pustymi oczodolami.\n");

    add_item(({"plaskorzezby","plaskorzezbe","rzezby","rzezbe"}),
	        "Sa to bardzo dziwne plaskorzezby, przedstawiajace ze straszliwa " +
	        "precyzja rozliczne odrazajace rytualy, ktorych znaczenia nie potrafisz " +
	        "sie domyslic. Kilka plaskorzezb przedstawia jedna postac - szczura z " +
	        "olbrzymim rogatym lbem!\n");

    add_item(({"zdobienia","zdobienie"}),
	        "Zdobienia te to przede wszystkim motywy trupich czaszek i piszczeli a " +
	        "co gorsze, te czaszki i kosci sa prawdziwe! Horror! Setki istnien kosztowalo " +
	        "wykonanie tych `ozdobek`!\n");

  door = clone_object(OBJECTS + "drzwi.c");
  door->move(TO);
  door->set_key(STALOWY_KLUCZ); 

  add_prop(OBJ_I_SEARCH_TIME, 5); /* Ekstra czas potrzebny na przeszukiwanie */
 /*  add_prop(OBJ_S_SEARCH_FUN, "przeszukaj"); Funkcja wywolywana podczas przeszukiwania */
 
  INSIDE;

  set_event_time(10.0,50.0);

  add_event("Twoj ciezki oddech roznosi sie echem po pomieszczeniu.\n");
  add_event("Slyszysz w oddali slowa: Kaztsg Ug`Erhort Khek!.\n");
  add_event("Slyszysz w oddali slowa: Kaztsg Ug`Erhort Kahakan!.\n");
  add_event("Slyszysz w oddali slowa: Raghan Hag ister Ug`Kazab!.\n");
  add_event("Slyszysz w oddali slowa: Heken Darblist Yeg`Tog usert Ihm!.\n");

  set_events_on(1);

  add_exit( LOKACJE + "temple13.c", "polnocny-zachod", 0);
  add_exit( LOKACJE + "temple15.c", "polnocny-wschod", 0);
  reset_imperium_room();
}

 string
 long_desc()
{
 return("Dotarl" + TP->koncowka("es", "as") + " do serca swiatyni Rogatego Szczura -" +
    " komnaty modlitw i medytacji. "+
    " Pomieszczenie oswietlono oliwnymi kagankami, ktorych swiatlo" +
    " odslania makabryczne plaskorzezby, biegnace wzdluz scian." + 
    " W powietrzu unosi sie zapach palonego kadzidla i czegos nieokreslonego, czegos, co" +
    " sprawia, ze ciarki chodza ci po plecach. Ta aura wszechpoteznego i wszechobecnego" +
    " zla zdaje sie wypelniac to miejsce po brzegi, nie pozwalajac ci skupic mysli. Powoli" +
    " zaczyna ogarniac cie poploch i przerazenie. Z komnaty prowadza wyjscia na polnocny" +
    " zachod i polnocny wschod.\n");
} 

void
init()
{
    ::init(); 
    add_action("rozbroj", "rozbroj");
}

string
przeszukaj(object player, string str)
{
    string item, rest;
    int skill;

    if (sscanf(str, "%s w poszukiwaniu %s", item, rest) != 2)
	item = str;

    if (item != "drzwi" && item != "stalowe drzwi" && item != "zamek")
	return ""; 

    if (!trap)
	return "";

    skill = player->query_skill(SS_FR_TRAP);

    if (rest == "pulapek")
	skill += 10;

    if (item == "zamek")
	skill += 20;

    /*
     * To jest pulapka niezbyt trudna do znalezienia, ALE istnieje 20% szans, ze
     * gracz nie znajdzie pulapki mimo wysokich umiejetnosci.
     */
    if (skill > 25 && random(5))
    {
	player->add_prop(FOUND_MY_TRAP, 1); /* Zaznaczamy tego, kto znalazl pulapke!*/
	return "Znajdujesz zatruta igle, chytrze ukryta w zamku tych stalowych drzwi!\n";
    }
    else
	return ""; /* Gracz nic nie znalazl. */
}

/*
 * Funkcja rozbrajania pulapki
 */
int
rozbroj(string str)
{
    string *tmp;
    int skill, result;

    /* Jesli gracz nie znalazl pulapki, nie informujmy go o tym , ze jest ona tutaj
     */
    if (!str || !this_player()->query_prop(FOUND_MY_TRAP))
	return 0;

    tmp = explode(str, " ");

    if (tmp[0] != "pulapke")
	return 0;

    /*
     * Byc moze bedzie tu kiedys wiecej pulapek, he, he.
     */
    if (str != "pulapke w zamku" && trap)
    {
	notify_fail("Czy masz na mysli `rozbroj pulapke w zamku`?\n");
	return 0;
    }

    if (!trap)
    {
	this_player()->remove_prop(FOUND_MY_TRAP);
	write("Ktos tu juz byl i rozbroil pulapke przed toba!.\n");
	return 1;
    }

    skill = this_player()->query_skill(SS_FR_TRAP);
    result = random(skill) - 30; /* Niezbyt trudna pulapka, ALE moze sie nie udac nowicjuszom */

    if (result > 0)
    {
	write("Rozbroiles pulapke!\n");
	say(QCTNAME(this_player()) + " rozbraja pulapke w zamku drzwi.\n");
	this_player()->remove_prop(FOUND_MY_TRAP);
	trap = 0;
	(door->query_other_room())->set_trap(0);
    } 
    else if (result < -5)
    {
	write("Aj! Igla wyskoczyla z zamka!\n");
	do_trap(this_player());
    }
    else
    {
	write("Nie udalo ci sie rozbroic pulapki, pomimo twych najwiekszych staran.\n");
	say(QCTNAME(this_player()) + " nie rozbroil"+this_player()->koncowka("","a")+
	  " pulapki w zamku.\n");
    }

    return 1;
}

/*
 * Wywolywana, gdy ktos uaktywnil pulapke
 */
void
do_trap(object player)
{
    object poison;

    trap = 0;
    (door->query_other_room())->set_trap(0);

    if (random(10))
    {
	write("Zatruta igla wbila ci sie gleboko w palec!\n");
	say(QCTNAME(player) + " krzyczy z przerazenia, pokazujac zakrwawiony palec!\n");
    }
    else
    {
	write("Masz wiele szczescia! Udalo ci sie uniknac zatrutego ostrza!\n");
	say(QCTNAME(player) + " gwaltownie cofa reke przed zatrutym ostrzem, ktore wyskoczylo z zamka!\n");
	return;
    }

    seteuid(getuid(this_object()));
    poison = clone_object("/std/poison_effect");
    poison->set_time(150);
    poison->set_interval(10);
    poison->set_strength(50);
    poison->set_damage(({ POISON_HP, 50 }));
    poison->set_type("standard");
    poison->move(player);
    poison->start_poison();
}

/*
 * Sprawdza czy jest tu pulapka
 */
int query_trap() { return trap; }

/*
 * Nastawia pulapke :)
 */
void set_trap(int i) { trap = i; }

