#include "halfy.h"

inherit STD_HALF;

#include "tigr.h"
#include <composite.h>

create_halfling()
{
   ustaw_imie(({"friederich","friedericha","friederichowi",
   		"friedericha","friederichem","friederichu"}), PL_MESKI_OS);
   
   dodaj_nazwy(({ "straznik", "straznika", "straznikowi", "straznika",
       "straznikiem", "strazniku" }), ({ "straznicy", "straznikow",
       "straznikom", "straznikow", "straznikami", "straznikach" }),
       PL_MESKI_OS);
   
   set_long("Stary halfling, siedzacy w fotelu. Wciagnal swe kudlate stopy " +
   	"na podnozku i pyka z lubosciafajke. Mimo tego, ze siwe, jego wlosy " +
   	"sa wciaz geste. Jego ubranie ma pastelowe barwy. Na nosie ma " +
   	"okragle binokle, przez ktore uwaznie patrzy na ciebie.\n");
   
   set_gender(G_MALE);
   
   ustaw_odmiane_rasy(PL_HALFLING);
   
   add_prop(CONT_I_HEIGHT, 135);
   add_prop(CONT_I_WEIGHT, 75);
}

std_odp()
{
   command("powiedz Nic o tym nie wiem.");
}

int
czy_nasz(object ob)
{
   return CZY_NASZ(ob);
}

int
porownaj(object arg1,object arg2)
{
   if (arg1->query_real_name()<arg2->query_real_name())
      return -1;
   return 1;
}
            

lista_obecnych()
{
   object *obecni = filter(users(),czy_nasz);
   int i;
   string str="\n";
   
   if (!CZY_NASZ(TP)&&!TP->query_wiz_level())
      {
         write(std_odp());
         return;
      }
      
   if (!sizeof(obecni))
      {
         command("powiedz do " + OB_NAME(TP) + " W tej chwili nie ma " +
         	"zadnego czlonka Zgromadzenia.");
         return;
      }
      
   obecni=sort_array(obecni,porownaj);
   
   for (i=0;i<sizeof(obecni);i++)
       {
          str+="\t" + obecni[i]->query_name() + " " +
          	obecni[i]->query_guild_title_race() + "\n";
       }
   command("powiedz do " + OB_NAME(TP) + " Mam tu tabliczke...");
   write(short(TP, PL_MIA) + " pokazuje ci tabliczke:");
   saybb(QCIMIE(TO,PL_MIA) + " pokazuje " + QIMIE(TP,PL_CEL) + " tabliczke.");
   TP->catch_msg();
   return;
}

string *
cap(string * arr)
{
   int i;
   string *tmp=arr;
   
   for (i=0;i<sizeof(arr);i++)
       {
          tmp[i]=capitalize(arr[i]);
       }
   return tmp;
}

pokaz_czlonkow()
{
   string * czl = GILDIA->query_czlonkowie(), * nies=GILDIA->query_rada();
   int i;
   string str="\t\t"; 
   
   if (!CZY_NASZ(TP)&&!TP->query_wiz_level())
      {
         write(std_odp());
         return;
      }
   
   czl-=nies;
   czl=sort_array(czl);
   nies=sort_array(nies);
   
   if (sizeof(nies)) 
      {
         str+="Rada Wielkich Niesytych:\n";
         str+=COMPOSITE_WORDS(cap(nies));
         str+=".\n";
      }
       
   if (sizeof(czl)) 
      {
         str+="\t\tCzlonkowie Zgromadzenia:\n";
         str+=COMPOSITE_WORDS(cap(czl));
         str+=".\n";
      }
   
   command("powiedz do " + OB_NAME(TP) + " Mam tu spis.");
   write(short(TP, PL_MIA) + " pokazuje ci duza kartke:\n");
   saybb(QCIMIE(TO,PL_MIA) + " pokazuje " + QIMIE(TP,PL_CEL) + " spora kartke.\n");
   TP->catch_msg(str);
   return;
}

pokaz_rade()
{
   string *nies=GILDIA->query_rada();
   int i;
   string str=" "; 
   
   if (!CZY_HALF(TP)&&!TP->query_wiz_level())
      {
         write(std_odp());
         return;
      }
   
   nies=sort_array(nies);
   
   if (!sizeof(nies)) 
      {
         command("powiedz do " + OB_NAME(TP) + " W tej chwili Zgromadzenie " +
         	"nie posiada Rady.");
         return;
      }
   
  str+=COMPOSITE_WORDS(cap(nies));
   
   command("powiedz do " + OB_NAME(TP) + " Oto imiona Wielkich Niesytych:"+str+".");
   return;

}

int
porown(string arg1, string arg2)
{
   if (file_time(PDIR + arg1)<file_time(PDIR + arg2)) return -1;
   if (file_time(PDIR + arg1)>file_time(PDIR + arg2)) return 1;
   if (arg1<arg2) return -1;
   if (arg2<arg1) return 1;
   return 0;
}

int
czy_nowe(string file)
{
   return sscanf(file,"%s.nowe");
}

pokaz_podania()
{
   string * pliki;
   int i;
   string str="\n";
   
   if (!CZY_RADNY(TP)&&!TP->query_wiz_level())
      {
         std_odp();
         return;
      }
   
   pliki=filter(pliki, czy_nowe);   
   pliki=sort_array(get_dir(PDIR),porown);
   
   if (!sizeof(pliki)) 
      {
         command("powiedz do " + OB_NAME(TP) + " Na razie nikt nowy nie " +
         	"zlozyl podania.");
         return;
      }
   
   for (i=0;i<sizeof(pliki);i++)
       {
         sscanf(pliki[i],"%s.nowe",pliki[i]);
         str+=capitalize(pliki[i]) + "\t-\t" + ctime(file_time(PDIR + pliki[i])) + "\n"; 
       }
   
   write(str);
   return;
}

pokaz_podanie(string kogo)
{
   string str="\n";
   
   kogo+=".nowe";
   
   if (file_size(PDIR + kogo)>0)
      {
         str=read_file(PDIR + kogo);
         TP->more(str);
         return;
      }
   command("powiedz do " + OB_NAME(TP) + " Nie mam podania od takiego osoby.");
   return;
}

catch_question(string tresc)
{
   switch(tresc)
      {
         case "obecnych":
         case "obecnych halflingow": lista_obecnych(); return;
         
         case "czlonkow": pokaz_czlonkow(); return;
         
         case "rade": pokaz_rade(); return;
         case "podania" : pokaz_podania(); return;
      }
      
   if (sscanf(tresc,"podanie %s",tresc))
      {
         pokaz_podanie(tresc);
         return;
      }

   std_odp();
}