/* Opis: Standard bloku
 * Autor: Levis
 */
inherit "/std/object";
#include "defs.h"
object blocker;
void set_blocket(object block);
int query_blok();
nomask void
create_object()
{
   set_no_show();
}
void
set_blocket(object block)
{
    blocker = block;
}
int
query_blok()
{
    return 1;
}
object
query_blocker()
{
    return blocker;
}
void
usun_blok()
{
    remove_object();
}
static void
tell_watcher(string str, object block)
{
   object *ob;
   int i;
   ob = FILTER_LIVE(all_inventory(environment(TP))) - ({ TP });
   ob -= ({ block });
   for (i = 0; i < sizeof(ob); i++)
   if (CAN_SEE_IN_ROOM(ob[i]))
      {
      if (CAN_SEE(ob[i], TP))
         ob[i]->catch_msg(str);
      }
}
public int
block_exit()
{
    string  action = query_verb();
    object *ludzie;
    int i;
    string *exits;
    int ile_wyjsc;
    exits = environment(TP)->query_exit_cmds();
    ile_wyjsc = sizeof(exits);
    if (!ile_wyjsc) ile_wyjsc = 1;
    ludzie = FILTER_LIVE(all_inventory(environment(TP))) - ({TP});
    if(TP->query_fatigue() < 30)
    {
      for(i=0; i<sizeof(ludzie); i++)
      {
            if(ludzie[i] == blocker)
            {
              TP->catch_msg("Jestes zbyt zmeczon" + TP->koncowka("y", "a") + " by sprobowac uciec przed blokiem " + QIMIE(blocker, PL_DOP) + ".\n");
              say(QCIMIE(TP, PL_MIA) + " wyglada jakby " + TP->koncowka("chcial", "chciala") + " uciec, lecz brak "+
                   TP->koncowka("mu", "jej") + " sil by to zrobic.\n");
              return 1;
            }
      }
    }
    if(blocker->query_fatigue() < 8)
    {
        for(i=0; i<sizeof(ludzie); i++)
        {
          if(ludzie[i] == blocker)
          {
           blocker->catch_msg("Jestes zbyt zmeczon" + blocker->koncowka("y","a") + " by sprobowac zablokowac " +
                              QIMIE(TP, PL_BIE) + ". Odsapnij troche.\n");
           set_alarm(0.1, 0.0, usun_blok);
           return 0;
          }
      }


    }
    for(i=0; i<sizeof(ludzie); i++)
    {
        if(ludzie[i] == blocker)
        {
            if((blocker->query_stat(SS_DEX)/ile_wyjsc + blocker->query_skill(M_BLOK)) >= TP->query_stat(SS_DEX) )
            {
              TP->catch_msg(QCIMIE(blocker, PL_MIA) + " blokuje ci droge na " + action + ".\n");
              tell_watcher(QCIMIE(blocker, PL_MIA) + " blokuje "  + QCIMIE(TP, PL_CEL) +
                  " droge ucieczki na " + action + ".\n", blocker);
              blocker->catch_msg("Udaje ci sie zablokowac " + QIMIE(TP, PL_BIE) + ", gdy " + TP->koncowka("ten", "ta") +
                                 " stara" + TP->koncowka("l", "la") + " sie uciec na " +action + ".\n");
              TP->add_fatigue(-5);
              blocker->add_fatigue(-8);
              return 1;
            }
        }
    }
    //nasz blokujacy gdzies spierdolil badz udalo sie przelamac blok
    for(i=0; i<sizeof(ludzie); i++)
      {
            if(ludzie[i] == blocker)
            {
              TP->catch_msg("Udaje ci sie ominac nieskuteczny blok " + QIMIE(blocker, PL_DOP) + "!\n");
              blocker->catch_msg("Nie udaje ci sie zablokowac " + QIMIE(TP, PL_DOP) + ".\n");
              tell_watcher(QCIMIE(TP, PL_MIA) + " omijaa nieskuteczny blok " + QIMIE(blocker, PL_DOP) + "!\n", blocker);
            }
      }
    set_alarm(0.1, 0.0, usun_blok);
    return 0;
}
public void
init_block()
{
     string *exit;
     int     size;
     if (environment(TP))
     {
         exit = environment(TP)->query_exit_cmds();
         size = sizeof(exit);
         while (--size >= 0)
         {
             add_action(block_exit, exit[size]);
         }
     }
}
void
init()
{
    ::init();
    init_block();
}
