/*
 * Glowny obiekt lasu Loren.
 * by Tanis - marzec 1998
 *
 * Kazda lokacja lasu powinna miec funkcje void create_las(),
 *  zamiast void create_imperium_room()
 * Opisy lokacji dodaje sie w funkcjach:
 *   string opis_elfi(), ktora ma zwracac opis widziany przez
 *          elfy, a jesli lokacja jest czescia sciezki do Athel Loren,
 *          na koncu opisu powinna znajdowac sie wskazowka, jak isc.
 *          Funkcja powinna tez zwracac opis zawierajacy opis pory dnia,
 *          okreslany przez string elfia_pora_roku().
 *   string opis_innych(), Podobna do poprzedniej funkcji, lecz z opisem
 *          dla innych ras niz elfy. Nie powinna zawierac wskazowek co do tego,
 *          jak dalej isc, i zawierac odwolanie do string inna_pora_roku().
 *   int dodaj_item(string/tablica stringow nazwa, string opis_elfi, string opis_nieelfi)
 *       Funkcja dodaje item, jednak inaczej on wyglada dla elfow ( 2 parametr - string )
 *        i nieelfow (3 parametr - string). Nazwa itemu jest dla wszystkich ras taka sama.
 *   W normalnych lokacjach lasu wyjsc nie dodaje sie chyba, ze jest to lokacja
 *     laczaca las ze swiatem zewnetrznym, jednak w takim przypadku mapa nie moze
 *     zawierac takiego samego wyjscia z lokacji. ( Wyjscie dodane recznie nie moze 
 *     istniec na mapie).
 *    Obiekt dodaje tez komende "mapka", pod warunkiem, ze jest sie wizem, ktora zwraca 
 *     aktualna mape lasu.
 *   Plik korzysta z "maper_lasu_loren_ktorego_sie_nie_updatuje.c", obslugujacego cala mape.
 *   W lokacji dziedziczacej las.c powinno sie znalezc wywolanie wyjscia(int x,int y),
 *     gdzie x -pozycja x-owa lokacji na mapie, a y - pozycja y-owa. Pozycje sa liczone od 1,
 *     przy czym 2 to juz nastepna lokacja, a nie przejscie miedzy lokacjami ( ponumerowane
 *     sa tylko komorki zaw. lokacje.
 *   Stala WIDOK odpowiada za to, czy wyjscia sa widoczne ( 1 ), czy nie ( 0 )
 */


#include "ogolne.h"

#define ZIOLAPATH "/d/Imperium/ziola/"

// Jesli WIDOK bedzie = 0 - wyjscia w lesie beda widoczne
//   jesli WIDOK = 1 - niewidoczne

#define WIDOK 1

#define DEF_DIRS ({ "polnoc", "poludnie", "wschod", "zachod", "gora", "dol",\
		    "polnocny-wschod", "polnocny-zachod", \
		    "poludniowy-wschod", "poludniowy-zachod" })

inherit PATH + "std/pogodal.c";
inherit "/d/Imperium/std/las.c";

inherit "/lib/drink_water";

#include "zwierzeta.h"

void
zwierzeta(int liczba)
{
}

void
dodaj_zwierzeta()
{
    int a,x,y,suma,liczba_zwierzat;
    string ktory;
    mixed *rodzaj=JAKIE_ZWIERZETA;
 
    a=random(10);

    if(a<5) liczba_zwierzat=0;
    if(a>4 && a<9) liczba_zwierzat=1;
    if(a==9) liczba_zwierzat=2;

    suma=0;    

    for(x=0;x<sizeof(rodzaj);x=x+3)
       {
         suma=suma+rodzaj[x];
       }         

    for (x = 0; x < liczba_zwierzat; x++)
        {
            a=random(suma);        
            for(y=0;y<sizeof(rodzaj);y=y+3)
               {
                  a=a-rodzaj[y];
                  if(a<0)
                    {
                         if(rodzaj[y+1]==ZAWSZE) dodaj_npca(PATH + "zwierzeta/" + rodzaj[y+2]);
                         else dodaj_npca(PATH + "zwierzeta/" + rodzaj[y+2], rodzaj[y+1]);
                         y=sizeof(rodzaj);
                    }
              }
        }
    return;
}

void
create_las()
{
} 

void
create_las_room()
{   
    int a;

    set_short("Las Loren");
    set_long("@@dlugi_opis");

    add_prop(ROOM_I_INSIDE, 0); 
    add_prop(ROOM_I_LIGHT, 1); 
 
    set_event_time(50.0, 200.0); 

    add_event("Z ciemnosci dobiega cie cichy szelest.\n",2);
    add_event("Ktores z drzew zaszelescilo glosno.\n",0);
    add_event("Z pobliskich krzakow dobiegl cie glosny szelest.\n",1);
    add_event("Slyszysz odglosy nocnych ptakow.\n",2);
    add_event("Dobiegl cie glosny ptasi swiergot.\n",1);
    add_event("Galaz pod twymi stopami pekla z trzaskiem.\n",0);
    add_event("Zza drzew dobiegl cie glosne tupniecie jakiegos duzego zwierzecia.\n",0);
    add_event("Z gestwiny dobiega cie szybki tupot malych nozek.\n",0);
    add_event("Slyszysz drapanie pazurow po korze ktoregos z drzew.\n",1);
    add_event("Slyszysz skrzypienie jakiegos olbrzymiego drzewa.\n",0);

     
    set_events_on(1);

    create_las();

    dodaj_zwierzeta();
} 

string
item_rasowy(string elfi,string nieelfi)
{
     if((this_player()->query_race()=="elf") || (this_player()->query_race()=="elfka")) return (elfi);
    else return (nieelfi);
}

int
dodaj_item(mixed nazwa, string elfi, string inny)
{
 mixed *drzewa_las=({});

 if(stringp(nazwa) && nazwa=="drzewa")
   {
      drzewa_las=({"drzewa","las"});
      return add_item(drzewa_las,"@@item_rasowy|"+elfi+"|"+inny+"@@");

          // Po co ? Mialy byc itemy na las i drzewa, ale na las 
          // zostaly czesciowo wyciete, a 70 plikow zmieniac mi
          // sie nie chce ... ;-) 

   }

 return add_item(nazwa,"@@item_rasowy|"+elfi+"|"+inny+"@@");
}

string
opis_elfi()
{
   return("Jestes elfem i jestes w Lesie Loren.\n");
}

string
opis_innych()
{
   return("Jestes w Lesie Loren, choc bynajmniej nie jestes elfem.\n");
}

string
dlugi_opis()
{
    if((this_player()->query_race()=="elf") || (this_player()->query_race()=="elfka")) return(opis_elfi());
    else return(opis_innych());
}


int
mapka(string str)
{
  write(find_object(PATH + "obiekty/maper_lasu_loren_ktorego_sie_nie_updatuje.c")->wyswietl_mape());
  return 1;
}

int
init()
{
  ::init();
//  if (this_player()->query_wiz_level())
//    {
//     add_action(mapka,"mapka");
//    }
}

void
wyjscia(int x,int y)
{
 int a;
 string *tablica;
 
 tablica=(PATH + "obiekty/maper_lasu_loren_ktorego_sie_nie_updatuje.c")->losuj(x,y);

 for(a=0;a<8;a++)
    {
     switch(a)
       {
          case 0 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"polnocny-zachod","@@czy_mozna",1,WIDOK);
                   break;
          case 1 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"polnoc","@@czy_mozna",1,WIDOK);
                   break;
          case 2 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"polnocny-wschod","@@czy_mozna",1,WIDOK);
                   break;
          case 3 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"wschod","@@czy_mozna",1,WIDOK);
                   break;
          case 4 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"poludniowy-wschod","@@czy_mozna",1,WIDOK);
                   break;
          case 5 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"poludnie","@@czy_mozna",1,WIDOK);
                   break;
          case 6 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"poludniowy-zachod","@@czy_mozna",1,WIDOK);
                   break;
          case 7 : if(tablica[a]!="0") add_exit(LASPATH + tablica[a],"zachod","@@czy_mozna",1,WIDOK);
                   break;
        }
     } 
}

int
czy_mozna()
{
    if(this_player()->query_guild_member("Lesne Elfy"))
    {
        return 0;
    }    
    if(random(3)) return 0;
    write("Ruszasz razno na " + 
       query_verb() + ", lecz geste krzaki zatrzymuja cie.\n");
    return 1;
}
    
public int
unq_no_move(string str)
{ 
   switch(query_verb())
     {
       case "polnoc":
       case "poludnie":
       case "zachod":
       case "wschod":
       case "polnocny-wschod":
       case "polnocny-zachod":
       case "poludniowy-wschod":
       case "poludniowy-zachod": 
           if (member_array(query_verb(), DEF_DIRS) != -1)
             notify_fail("Ruszasz razno na " + 
                query_verb() + ", lecz geste krzaki zatrzymuja cie.\n");
           break;
       
       default:
           if (member_array(query_verb(), DEF_DIRS) != -1)
             notify_fail("Nie widzisz zadnego wyjscia prowadzacego na " + 
                (query_verb() == "gora" ? "gore" : query_verb()) + ".\n");
           break;
     }
    return 0;
}

/* Opis towarzyszacy piciu wody ze strumieni */

void
drink_effect(string str)
{
    write("Podchodzisz do brzegu strumienia, przyklekasz i czerpiesz z niego lyk chlodnej, orzezwiajacej wody.\n");
    say(QCIMIE(this_player(), PL_MIA) + " podchodzi do brzegu strumienia, przykleka i pije z niego lyk wody.\n");
}

int
czy_jestes()
{
    return 1;
}

void
enter_inv(object ob, object from)
{
  ::enter_inv(ob,from);
  if(ob->query_race() == "elf" || ob->query_race() == "elfka")
    return;
  ob->add_panic(5);
  return;
}