/*
 * Gildia podroznikow w Athel Loren ( na podstawie takowej z Nuln )
 *     by Tanis 1998
 */

inherit "/d/Imperium/std/room";
inherit "/lib/guild_support"; 
inherit "/lib/skill_raise";

#include "ogolne.h"
#include "lelf.h"
#include "umiejetnosci.h"

void set_up_skills();

void
create_imperium_room()
{
    set_short("Polana");
    set_long("Stoisz po srodku malej, cichej polanki. Na polnocy zamyka ja spora chata, "
       + "a ze wszystkich innych stron otacza ja gesty las. Dzieki temu wydaje sie miejscem "
       + "wyjatkowo spokojnym, zupelnie odcietym od swiata. Na poludniu polany "
       + "lezy duzy glaz, na ktorym wyryto jakies litery.\n");

    add_item(({"kamien","glaz"}),"Widac, ze ten glaz nie lezy tutaj przypadkowo. Umieszczono na nim litery tworzace jakis napis.\n");
   add_item(({"litery","napis"}),"Litery na kamieniu zostaly wyryte dawno temu, jednak nadal sa czytelne. Na pewno "
        + "da sie je przeczytac !\n");

   add_cmd_item(({"litery","napis"}),"przeczytaj","Miejsce to sprzyja odpoczynkowi i regeneracji " +
                  "sil. Jesli chcesz pograzyc sie w medytacji uzyj komendy <medytuj> " +
                  "Mozesz tez wybrac bardziej aktywna forme spedzania czasu szkolac " +
                  "swoje umiejetnosci. Aby to uczynic uzyj komendy <trenuj>, co pozwoli " +
                  "ci uzyskac liste dostepnych szkolen. Aby wyszkolic jakas umiejetnosc " +
                  "uzyj <trenuj (nazwa szkolenia)>\n");

    set_up_skills();

    add_prop(ROOM_I_INSIDE, 0);
    add_prop(ROOM_M_NO_ATTACK, "Nie masz dosc odwagi by naruszyc panujaca" +
    	" tu atmosfere spokoju.\n");

    add_exit(LPATH + "chata.c", "polnoc", 0, 1);
}

int
krzykacz(string str)
{
  write("Nabierasz powietrza w pluca i juz zamierzasz krzyknac, lecz w ostatniej chwili rezygnujesz, "
     + "pod wplywem dziwnego przeczucia, ze nie nalezy niszczyc panujacej tutaj atmosfery ciszy i spokoju.");
  return 1;
}

void
init()
{
    ::init();

       init_skill_raise();
       init_guild_support();
       add_action(krzykacz,"krzyknij");
}

int
max_max_skill(int numer)
{
   int a;


   for(a=0;a<sizeof(umiejetnosci_lelfow);a++)
      {
         if(umiejetnosci_lelfow[a][0]==numer) return umiejetnosci_lelfow[a][2];
      }
   return sk_query_max(numer);
}

int
moze_szkolic(object kto,int numer)
{
   int a,ktora_komorka=-1;
   int gstat=kto->query_stat(6);

   // Jesli zdejmie sie ten komentarz to renegatom zaczna spadac skille
   // if((GILDIA)->query_prawa(kto->query_real_name())<LEV_CZLONEK) gstat=0;

   for(a=0;a<sizeof(umiejetnosci_lelfow);a++)
      {
         if(umiejetnosci_lelfow[a][0]==numer) ktora_komorka=a;
      }

   if(ktora_komorka==-1) return 1;

   if(umiejetnosci_lelfow[ktora_komorka][1]<gstat) return 1;
         // Tutaj po prostu sprawdzmy, czy dany osobnik nie osiagnal
         // przypadkiem maxymalnego poziomu dostepu dla danej umeijetnosci

   for(a=3;a<sizeof(umiejetnosci_lelfow[ktora_komorka]);a=a+2)
      {
         if(umiejetnosci_lelfow[ktora_komorka][a]<gstat && kto->query_base_skill(numer) < umiejetnosci_lelfow[ktora_komorka][a+1])
           return 1;
      }

   return 0;
}

int
wytrenowal_na_maxa(object kto)
{
  int a;

  for(a=0;a<sizeof(umiejetnosci_lelfow);a++)
     {
        if(umiejetnosci_lelfow[a][2]>kto->query_base_skill(a)) return 0;
     }

  return 1;
}

int
sk_query_max(int numer)
{
   int a,ktora_komorka=-1;
   int gstat=this_player()->query_stat(6);

   for(a=0;a<sizeof(umiejetnosci_lelfow);a++)
      {
         if(umiejetnosci_lelfow[a][0]==numer) ktora_komorka=a;
      }

   if(ktora_komorka==-1) return ::sk_query_max(numer);

   for(a=1;a<sizeof(umiejetnosci_lelfow[ktora_komorka]);a=a+2)
      {
         if(umiejetnosci_lelfow[ktora_komorka][a]<gstat) return umiejetnosci_lelfow[ktora_komorka][a+1];
      }

   return 0;
}

int
gs_hook_start_meditating()
{
    return 1;
}


void
gs_hook()
{
    write("Usuwasz sie troche na bok, blisko skraju polany. Siadasz, zamykasz oczy i pozwalasz, aby panujaca tu "
      + "atmosfera ciszy i spokoju zawladnela calym toba. Zaczynasz czuc kazda partie swego ciala "
      + "niezwykle dokladnie, a jednak jest to stan pewnego przytepienia. Po chwili zapominasz "
      + "o calym swiecie.\n");

    say(QIMIE(this_player(), PL_MIA) + " podchodzi do skraju polany, siada, zamyka oczy i rozpoczyna medytacje.\n");

}

int
gs_hook_rise()
{
    write("Potezna moc powoli ucieka z twego ciala, twoje zmysly odzyskuja wrazliwosc. "
     + "czujesz sie, jakbys budzil"+this_player()->koncowka("","a")+" sie z glebokiego snu.\n");

    say(QIMIE(this_player(), PL_MIA) + " zakonczyl"+this_player()->koncowka("","a")+" medytacje.\n");
}

void
set_up_skills()
{
 int a;

 for(a=0;a<sizeof(umiejetnosci_lelfow);a++)
    {
       sk_add_train(umiejetnosci_lelfow[a][0],umiejetnosci_lelfow[a][2]);
    }
}

public int
sk_hook_unknown_skill(string skill)
{
    notify_fail(sk_answer("Chyba nie ma takiej umiejetnosci..."));
    return 0;
}

public int
sk_hook_untrained_skill(int snum)
{
    notify_fail(sk_answer("Niestety nie mozesz szkolic tutaj tej umiejetnosci..."));
    return 0;
}

public int
sk_hook_improved_max(int snum, int level)
{
    if(!moze_szkolic(this_player(),snum))
          notify_fail(sk_answer("Na tym poziomie w hierarchii naszej gildii "
                  + "nie mozesz juz szkolic tej umiejetnosci..."));
    else
      notify_fail(sk_answer("W tej dziedzinie nie nauczysz sie juz nic nowego. " + (level > 99 ? "Osiagn"
                        + this_player()->koncowka("ales", "elas") + " juz "
                        + "absolutne mistrzostwo." : "Moze sprobuj jeszcze "
                        + "gdzie indziej...?")));
    return 0;
}

public int
sk_hook_cant_pay(int snum, int level, int cost)
{
    notify_fail(sk_answer("Masz za malo pieniedzy, aby oplacic trening tej umiejetnosci."));
    return 0;
}

public void
sk_hook_list_skills()
{
    write(sk_answer("Oto umiejetnosci, w jakich mozesz sie tutaj szkolic :"));
}

public int
sk_hook_no_more_improve()
{
    if(wytrenowal_na_maxa(this_player()))
      {
        notify_fail(sk_answer("Tutaj nie nauczysz sie juz niczego... Moze sprobuj gdzie indziej ?"));
        return 0;
      }
         notify_fail(sk_answer("Na tym poziomie w hierarchii naszej gildii nie mozesz szkolic juz zadnej "
            + "umiejetnosci..."));
         return 0;
}

public int
sk_filter_improve(int snum)
{
    if(this_player()->query_base_skill(snum) < max_max_skill(snum) && moze_szkolic(this_player(),snum)) return 1;

    return 0;
}
