
#define PLAYER_I_SIE_TOPI "_player_sie_topi_"
#define IMIE_W_CELOWNIKU  kto->query_real_name(PL_CEL)
mapping kto_sie_topi=([ ]);
int pomoz(string str);

void
init()
{
	::init();
        add_action(pomoz,"pomoz");
}

int
udalo_sie_wyjsc(object kto, int waga, int sila)
{
       string *tab=({});
       int i;
       if (waga/1000>=sila+random(40) && (random(10)!=1))
        {
          kto->reduce_hit_point(10);
          if (kto->query_hp()<1)
          {
                kto->remove_object();
                kto_sie_topi=m_delete(kto_sie_topi, IMIE_W_CELOWNIKU);
          }
          return 0;     // Czyli graczowi nie udalo sie wyjsc z bagna.
        }

        // Udalo sie wyjsc :)
        kto_sie_topi=m_delete(kto_sie_topi, IMIE_W_CELOWNIKU);

        return 1;
}

int
pomoz(string str)
{
        object kto;
        int waga;
        int sila;
        if (!kto_sie_topi[str])
        {
                notify_fail("Pomoz komu?\n");
                return 0;
        }
        kto=kto_sie_topi[str];
        waga=kto->query_prop(CONT_I_WEIGHT);
        sila=this_player()->query_stat(1);

        if (!udalo_sie_wyjsc(kto,waga,sila+10))
           {
                write("Probujesz pomoc wciaganemu przez bagna "+
                  QCIMIE(kto,PL_CEL)+" ale bagno okazuje sie silniejsze od "
                  +"ciebie.");
                kto->catch_msg(QCIMIE(this_player(),PL_MIA)+" pomaga ci wyjsc z "
                  +"bagna. Jednak trzesawisko okazuje sie silniejsze od "
                  +"was i mimo rozpaczliwych wysilkow obrzydliwa maz "
                  +"wciaga cie coraz mocniej i mocniej.\n");
                tell_room(this_object(),QCIMIE(this_player(),PL_MIA)+ " pomaga " +
                  QCIMIE(kto,PL_CEL)+" wyjsc z bagna, ale trzesawisko okazuje"
                  +" sie byc silniejsze od nich. " + QCIMIE(kto,PL_MIA) +" zapada "
                  +"sie coraz glebiej.\n",({this_player(),kto}));

                if (kto->query_hp()<1)
                {
                        write("Mimo rozpaczliwych wysilkow caly pograzasz sie"
                           +" w bagnie. Robi ci sie ciemno przed oczyma.\n");

                        say(QCIMIE(kto,PL_MIA) + " calkowicie zniknal pod "
                           +"powierzchnia bagna. Przez chwile jeszcze "
                           +"pojawiaja sie w tym miejscu pecherzyki "
                           +"powietrza, ale wkrotce i to znika.\n");
                }
                return 1;
           }
        write("Pomagasz wciaganemu przez bagna " + kto->query_Imie(PL_CEL)
           +" wylezc na wzglednie twardy grunt. "+kto->query_Imie(PL_MIA)+" pada "
           +"wyczerpany na ziemie, Dopiero po chwili odzyskuje sily na tyle "
           +"zeby sie podniesc.\n");
        kto->catch_msg(QCIMIE(this_player(),PL_MIA)+" pomaga ci wyjsc z trzesawiska. "
           +"Padasz wyczerpany na ziemi, nie majac sil utrzymac sie na "
           +"wlasnych nogach. Dopiero po chwili odzyskujesz sily i "
           +"wstajesz.\n");
        tell_room(this_object(),QCIMIE(this_player(),PL_MIA)+" pomaga "+
           QCIMIE(kto,PL_CEL) + " wyjsc z bagna. " + QCIMIE(kto,PL_MIA) +" pada "
           +"wyczerpany na ziemi i dopiero po chwili odzyskuje sily na tyle, "
           +"zeby sie podniesc.\n",({kto,this_player()}));
        return 1;
        kto_sie_topi=m_delete(kto_sie_topi,IMIE_W_CELOWNIKU);
}


string
chce_wyjsc(object kto)
{
        int waga;
        int sila;

        if (!kto_sie_topi[IMIE_W_CELOWNIKU]) return "";

        waga = kto->query_prop(CONT_I_WEIGHT);
        sila = kto->query_stat(0);

        if (udalo_sie_wyjsc(kto,waga,sila))
        {
                write("Udalo ci sie wygrzebac z bagna.\n");
                say(QCIMIE(kto,PL_MIA) + " wygrzebuje sie z bagna. Chyba odeszla "
                   +"mu ochota na ponowne wedrowki w trzesawisko.\n");
                return "";
                kto_sie_topi=m_delete(kto_sie_topi, IMIE_W_CELOWNIKU);
        }

        write("Probujesz wygrzebac sie o wlasnych silach, ale nie jest to "
           +"proste. Czujesz, jak obrzydliwa maz wciaga cie coraz "
           +"glebiej.\n");
        say(QCIMIE(kto,PL_MIA)+" probuje wygrzebac sie z bagna, ale nie jest to "
           +"latwe zadanie. Mimo rozpaczliwej szamotaniny zapada sie coraz "
           +"glebiej. Jesli ktos mu nie pomoze, moze to byc ostatnie bagno, "
           +"jakie odwiedzil w zyciu.\n");

        if (kto->query_hp()<1)
        {
                write("Mimo rozpaczliwych wysilkow caly pograzasz sie"
                +" w bagnie. Robi ci sie ciemno przed oczyma.\n");

                say(QCIMIE(kto,PL_MIA) + " calkowicie zniknal pod "
                +"powierzchnia bagna. Przez chwile jeszcze "
                +"pojawiaja sie w tym miejscu pecherzyki "
                +"powietrza, ale wkrotce i to znika.\n");
        }

        if (!(kto->query_hp()<1)) set_alarm(5.0,0.0,"chce_wyjsc",kto);
        return "";
}

int
wszedl_w_bagno()
{
        object kto;
	write(" Wbrew zdrowemu rozsadkowi probujesz wejsc w trzesawisko. "
	    + "Juz po pierwszym kroku czujesz, jak okropna, blotnista maz "
	    + "zaczyna cie wciagac. Ze wszystkich sil starasz sie wyrwac "
	    + "zywiolowi.\n");
        say(QCIMIE(this_player(),PL_MIA)+" robi nierozwazny krok w bagno. Bulgoczaca"
            +" maz zaczyna wciagac go w glab.\n");
        kto=this_player();
        kto_sie_topi[IMIE_W_CELOWNIKU]=kto;
        set_alarm(5.0,0.0,"chce_wyjsc",kto);
        return 1;
}
