/*
 * Ogr w gildii ogrow szarych przyjmujacy do gildii, opowiadajacy o niej itd.
 * Kaes '98
 * UWAGA NA KOD! DANGER! DANGER! CZYTANIE GROZI SMIERCIA!
 * _TO SAMO ODNOSI SIE DO WSZYSTKICH INNYCH NASZYCH PLIKOW!!!_
 * EWENTUALNY NASLADOWCO! POMYSL DWA RAZY!!!!! bo pozniej nie bedziesz juz 
 * W STANIE MYSLEC!!!
 *  biedaku...
 */
 
inherit "/d/Imperium/std/monster";
inherit "/cmd/std/command_driver";
// inherit "/std/act/add_things";

#include "ogry.h"
#include "ogry_npc.h"

int do_I_want_this_player_in_my_guild(object kto);
int do_I_accept_the_guild_this_player_has_joined(object kto);

create_monster()
{
  ustaw_odmiane_rasy(PL_OGR);
  
  ustaw_imie(({"ghelegl","ghelegla","gheleglowi","ghelegla","gheleglu",
      "gheleglem"}),PL_MESKI_OS);
  
  dodaj_przym(({"duzy"}),({"duzi"}));
  dodaj_przym(({"gruby"}),({"grubi"}));
  
  set_long("Duzy, spasly ogr, lezacy leniwie na lozku i powoli obserwujacy "+
       "cie swoimi oczkami. Jego lapy bardziej przypominaja ci bochny "+
       "chleba, i na pewno nie masz ochoty zapoznac sie z nimi blizej. "+
       "Pomimo, ze nie wydaje ci sie on najprzyjemniejsza istota jaka "+
       "znasz, to wydaje ci sie on raczej przyjazny do swiata i do "+
       "niektorych istot po nim chodzacych.\n");
  set_living_name("straznik_gildii_ogrow_szarych");
   
  set_gender(G_MALE);
  
  add_prop(CONT_I_HEIGHT, 210);
  add_prop(CONT_I_WEIGHT, 190000);
  add_prop(NPC_M_NO_ACCEPT_GIVE, 1);
  ustaw_znajomosc();
  
  set_skill(SS_UNARM_COMBAT, 90);
  set_skill(SS_DEFENCE, 90);
  set_skill(SS_BLIND_COMBAT, 50);
  
  set_stats(({100, 50, 120, 70, 60, 70, 80, 0, 0}));
  
  set_default_answer(VBFC_ME("std_odp"));
  add_ask(({"obrecz","nowa obrecz"}),VBFC_ME("ans_obrecz"));
  add_ask(({"przyjecie","przyjecie do gildii","wstapienie","wstapienie do gildii"}),
            VBFC_ME("wstapienie"));
  add_ask(({"bractwo","gildie"}),VBFC_ME("ans_gildia"));            
  add_ask( ({"obecnych"}),VBFC_ME("ans_obecni"));
  add_ask( ({"czlonkow","kompanie"}),VBFC_ME("ans_czlonkowie"));
  setuid();
  seteuid(getuid());         
  add_armour(NPATH + "obj/obrecz.c");
}
  
void 
add_introduced(string name)
{  
   set_alarm(2.0,0.0,"return_info", name);
}

varargs void
return_info(string kto)
{
  command("przedstaw sie "+find_player(kto)->query_real_name(PL_CEL));
}

string
query_presentation()
{
  return"Ghelegl, Straznik Gildii, ogr";
}

void
init_living()
{
  object kto_to;
  
  ::init_living();
   add_action("do_join","wstap");
   add_action("do_leave","opusc");
   add_action("poprzyj","poprzyj");

  kto_to=this_player();
  if (!(kto_to->check_seen(this_object()))) return;
  
  if(CZY_OGR(kto_to))
  {
   if (!CZY_W_GILDII(kto_to))
   {
     set_alarm(6.0,0.0,"nie_czlonek_gildii",kto_to);
   } 
   else
   {
   set_alarm(5.0,0.0,"ogr_czlonek",kto_to);
   }
  }
  
  if(!CZY_OGR(kto_to)) 
  {
    set_alarm(2.0,0.0,"nie_ogr",kto_to);
  }

}

void 
nie_czlonek_gildii(object kto_to)
{
        if (!kto_to||environment(kto_to)!=environment(this_object())) return;
        command("przedstaw sie "+KOMU);
        command("emote usmiecha sie.");
        command("emote odstawia dzban z piwem na podloge.");
        command("powiedz Witaj w naszych progach! Moze zechcesz sie przylaczyc do "+
             "naszego wesolego bractwa?");
        command("czknij");
        command("emote siega po dzban i glosno pije piwo, ktorego krople "+
          "sciekaja mu po brodzie.");
}

int
nie_ogr(object kto_to)
{
    if (!kto_to||environment(kto_to)!=environment(this_object())) return 1;
    command("przedstaw sie "+KOMU);
    command("emote przez chwile rozglada sie niezdecydowany, "+
      "po czym odstawia dzban z piwem na podloge.");
    command("powiedz Lepiej stad odejdz, nic tu po tobie.");
    return 1;
}

void
ogr_czlonek(object kto_to)                              
{
      if (!kto_to||environment(kto_to)!=environment(this_object())) return;
      kto_to->catch_msg(capitalize(short(kto_to)) + " usmiecha sie szeroko.\n");
        command("powiedz Witam ponownie. "+
            "Jak leci? Moze napijesz sie piwka ze mna?\n");
      command("beknij");            
}

string
std_odp()
{
  command("powiedz Nie moge odpowiedziec na to pytanie...");
  return"";
}

int
do_join(string str)
{
  object shadow;
  object kto=this_player();
//  object obrecz;
  int result;
  string s;
  
  
  if(str!="do gildii")
  {
    notify_fail("Gdzie chcesz wstapic?\n");
    return 0;
  }
  if (!TP->query_prop(MA_POPARCIE))
  	return notify_fail("Musisz miec poparcie przynajmniej jednego Ogra z Gor.\n");

  if(!do_I_want_this_player_in_my_guild(kto))
   return 0;
  
  if(!do_I_accept_the_guild_this_player_has_joined(kto))
   return 0;

  notify_fail("Niestety, z niewiadomego powodu nie mozesz wstapic do "+
              "tej gildii. Zglos to komenda <zglos blad>.\n");
  shadow=clone_object(SHADOW);
 
  if(!(result=shadow->shadow_me(kto,GUILD_TYPE,GUILD_STYLE,GUILD_NAME)))
  {
    shadow->remove_object();
    s=sprintf("%-16s: blad shadow_me (res: %d) %s\n",
            kto->query_real_name(),result,ctime(time()));
    write_file(BUGS,s);
    return 0;
  }
  kto->clear_guild_stat(SS_RACE);
  command("zarechocz przyjaznie");
  command("emote mowi: Zostal"+TP->koncowka("es","as")+" wlasnie przyjet"+TP->koncowka("y","s")+" do naszej gildii. Pamietaj "+
          "o naszych zasadach, a nie bedziesz mial"+TP->koncowka("","a")+" zadnych problemow.");
  clone_object(OBRECZ)->move(kto,1);
  write("Ghelegl przytrzymuje cie chwile za reke, "+
   "po czym blyskawicznie zaklada ci na ramie ciezka, nowa obrecz.\n");
  say(QCIMIE(this_object(),PL_MIA)+" przytrzymuje "+QIMIE(this_player(),PL_BIE)+
      " za reke po czym zaklada "+TP->koncowka("mu","jej")+" na ramie obrecz.\n");
  command("powiedz do "+OB_NAME(kto)+" To twoja obrecz, znak przynaleznosci "+
          "do naszej gildii. Nos ja z duma!");
  s=sprintf("%-10s:%s\n",kto->query_real_name(),ctime(time()));
  write_file(NEW_MEMBERS,s);
  shadow->dodaj_soula(kto);
  GILDIA->add_imie(kto->query_real_name());
  return 1;
}

int 
do_I_want_this_player_in_my_guild(object kto)
{
   if(!CZY_OGR(kto))
   {
     notify_fail("Tylko ogry moga przestapic prog naszego zamku.\n");
     return 0;
   }
   if (member_array(SOUL,this_player()->query_cmdsoul_list())!=-1)
   {
    notify_fail("Przeciez juz jestes czlonkiem naszej gildii.\n");
    return 0;
   }
   return 1;
}

int
do_I_accept_the_guild_this_player_has_joined(object kto)
{

/* UWAGA UWAGA!
 * Pociag spozni sie...
 * TU _T_R_Z_E_B_A_ dodawac kolejne gildie w trakcie powstawania, 
 * ktore nie sa lubiane porzez tych losiow.. ogrow :) bez obrazy
*/
 if(kto->query_guild_member("lesniczy"))
 {
  notify_fail("Nalezysz juz do innego stowarzyszenia.\n");
  return 0;
 }
 return 1;
}

int
do_leave(string str)
{
 int ile,in;
 object kto=this_player();
 string s;
 if (member_array(SOUL,this_player()->query_cmdsoul_list())==-1)
  {
   notify_fail("Nie jestes czlonkiem gildii, nie mozesz jej opuscic.\n");
	   return 0;
  }
 if(str!="gildie" && str!="gildie ogrow z gor szarych" && str!="gildie ogrow")
  {
    notify_fail("Co chcesz opuscic?\n");
    return 0;
  }
 if(!this_player()->query_prop(OG_PLAYER_OPUSZCZA_GILDIE))
  {
   command("emote odstawia ze smutkiem dzban piwa.");
   command("emote mowi: Co? Chcesz nas opuscic? No coz, widocznie masz "+
           "jakies wazne powody... Ale zastanow sie jeszcze, a jesli nie "+
           "zmienisz swojego zdania potwierdz decyzje, jescze raz piszac "+
           "<opusc>.");
   kto->add_prop(OG_PLAYER_OPUSZCZA_GILDIE,1);
   return 1;
  } 
 
 if(kto->wywalenie_z_ogra(kto))
 {
   write("\nGhelegl odstawia powoli dzban mowiac: No coz, nie chce tego robic, "+
         "ale nie pozostawiasz mi wielkiego wyboru...\n");
   write("\nGhelegl podchodzi do ciebie, i nagle mocny cios zamroczyl cie "+
         "na chwile. Czujesz mocny bol na twoim ramieniu, a wszystko zdaje "+
         "sie wirowac wokol coraz szybciej. Jak zza sciany slyszysz jeszcze "+
         "znajomy glos mowiacy: Odejdz, nie pokazuj sie nam wiecej na oczy.\n");
   write("Opuscil"+kto->koncowka("es","as")+" Gildie Ogrow z Gor Szarych.\n");
   say(QCIMIE(kto,PL_MIA)+" opuscil"+TP->koncowka("","a")+" Gildie Ogrow z Gor Szarych.\n");
   kto->set_exp_combat(4*(kto->query_exp_combat())/5);
   kto->remove_cmdsoul(SOUL);
   kto->update_hooks();
   kto->remove_prop(OG_PLAYER_OPUSZCZA_GILDIE);
   (kto->query_subloc_obj(OBRECZ_SUBLOC))->remove_object();
   s=sprintf("%-16s:%s \n",kto->query_real_name(),ctime(time()));
   GILDIA->remove_imie(kto->query_real_name());
   write_file(LEAVE,s);
 }
  return 1;
}

string
ans_obrecz()
{
  object kto=this_player();
 if(CZY_OGR(kto))
 {  
  if(!kto->query_guild_member(GUILD_NAME))
  {
     command("usmiechnij sie szeroko");
     command("powiedz do "+KOGO+" Tak, te obrecze sa nasza duma! "+
           "Ale, jako ze nie nalezysz do naszej gildii, nie mozesz takiej "+
           "dostac.");
     return"";
   }
   if(this_player()->query_subloc_obj(OBRECZ_SUBLOC))
   {
    command("powiedz do "+KOGO+" Hehe, zachlann"+TP->koncowka("y","a")+" jestes! Po co ci dwie obrecze?");
    return "";
   }
  }
//   command("powiedz do "+KOGO+" Tej obreczy i tak nie mozesz dostac! Lepiej "+
//        "stad odejdz.");
    clone_object(OBRECZ)->move(this_player(),1);
    return "";
//  obrecz->dodaj_rycine(this_player()->query_stat(SS_RACE);
      
}

string 
wstapienie()
{
 object kto=this_player();
 if (!CZY_OGR(kto))
 {
  command("powiedz do "+KOGO+" Bardzo mi przykro... Chociaz nie, wcale mi nie "+
      "jest przykro. Nie mozesz wstapic do naszej gildii!");
  command("zasmiej sie ironicznie");
  return "";      
 }
 command("powiedz do "+KOGO+" Tak, wstepowanie do naszego stowarzyszenia jest bardzo "+
      "zlozonym procesem. Trzeba mnie az dwa razy o to poprosic! "+
      "Jest to dla niektorych bardzo trudnym zadaniem.");
  command("zarechocz");
  command("powiedz do "+KOGO+" Jestem jedynym, ktory ma taka wladze! ");
  return "";
}

string
ans_gildia()
{
 object kto=this_player();
 if (!CZY_OGR(kto))
 {
  command("powiedz do "+KOGO+" Hmmm... nie jestes jedn"+kto->koncowka("ym","na")+
          " z nas, ale mysle ze nic sie nie stanie, jak bedziesz cos wiecej "+
          "o nas wiedziec.");
  command("emote wskazuje wiszaca na scianie kartke.");   
  return "";
 }
  command("powiedz do "+KOGO+" Chcesz wiecej wiedziec o naszej gildii? Wspaniale! ");
  command("emote wskazuje przybita do sciany duza kartke.");
  return "";
}

int
query_member(object ob)
{
   if (ob->query_wiz_level()) return 0;
   return CZY_W_GILDII(ob);
}

int
porownaj(object arg1,object arg2)
{
   if (arg1->query_real_name()<arg2->query_real_name())
      return -1;
   return 1;
}

string
ans_obecni()
{
   object *obecni;
   int i;
   string str="\n";
      
   if (!query_member(TP)&&!(TP->query_wiz_level()))
      {
         return std_odp();
      }
   
   obecni=users();
   obecni=filter(obecni,query_member);
      
   if (!sizeof(obecni))
      {
         command("powiedz do " + OB_NAME(TP) + " W tej chwili nie ma zadnego Ogra z Gor.");
         return "";
      }
   obecni=sort_array(obecni, "porownaj");
   for (i=0;i<sizeof(obecni);i++)
       {
          str+="\t"+
          capitalize(obecni[i]->query_real_name()) + " " +
                     obecni[i]->query_guild_title_race() + "\n";
       }
   command("powiedz do " + OB_NAME(TP) + " Gdzies to zapisalem...");
   write(short(TP,PL_MIA) + " pokazuje ci tabliczke, na ktorej jest napisane:\n");
   say(QCIMIE(TO,PL_MIA) + " pokazuje " + QIMIE(TP,PL_CEL) + " tabliczke.\n");
   TP->catch_msg(str);
   
   return "";
}
 
string
ans_czlonkowie()
{
   string *imiona;
   int i,j;
   string str="";
   string her=TP->query_herszt();
   
   if (!CZY_W_GILDII(TP)&&!TP->query_wiz_level()) return std_odp();
   
   imiona=(GILDIA->query_imiona());
   imiona=imiona-({her});
   
   for(i=0;i<sizeof(imiona)/5;i++)
      {
         for(j=0;j<5;j++)
            {
               str+=capitalize(imiona[5*i+j]) + (strlen(imiona[5*i + j])<8?"\t":"") + ((j==4)?"":"\t");
            }
         str += "\n";
      }
   for (j=(sizeof(imiona)/5)*5;j<sizeof(imiona);j++)
       {
          str+=capitalize(imiona[j]) + (strlen(imiona[j])<8?"\t":"") + "\t";
       }
   str += "\n";
   command("powiedz Mam tu spis, pokaze ci go.");
   write(short(TP,PL_MIA) + " pokazuje ci tabliczke, z ktorej odczytujesz:\n");
   say(QCIMIE(TO,PL_MIA) + " pokazuje " + QIMIE(TP,PL_CEL) + " jakas tabliczke,\n");
   TP->catch_msg("Herszt:\n" + capitalize(her) + "\nKompania:\n");
   TP->catch_msg(str);
   return "";
} 
                
int
poprzyj(string str)
{
	object *tab_kogo, kogo;
	if (!str)
		return notify_fail("Kogo chcesz poprzec?\n");
	if (TP->query_guild_name_race()!=GUILD_NAME&&!TP->query_wiz_level())
		return notify_fail("Sam"+TP->koncowka("","a")+" nie jestes czlonkiem Ogrow z Gor!\n");
	tab_kogo=parse_this(str, "%l:"+PL_BIE);
	if (!sizeof(tab_kogo))
		return notify_fail("Kogo chcesz poprzec?\n");
	if (sizeof(tab_kogo)>1)
		return notify_fail("Mozesz poprzec tylko jedna osobe naraz.\n");
	kogo=tab_kogo[0];
	if (kogo->query_rasa()!="ogr"&&kogo->query_rasa()!="ogrzyca")
		return notify_fail(Imie(kogo, PL_MIA)+" nie jest ogrem!\n");
	if (kogo->query_guild_name_race()==GUILD_NAME)
		return notify_fail(Imie(kogo, PL_MIA)+" juz jest Ogrem z Gor!\n");
	if (kogo->query_prop(MA_POPARCIE))
		return notify_fail(Imie(kogo, PL_MIA)+" juz ma poparcie.\n");
	if (!interactive(kogo)) 
	        return notify_fail("Nie mozesz poprzec " + kogo->short(PL_DOP) + ".\n");
	kogo->add_prop(MA_POPARCIE, TP);
	write("Poparl"+TP->koncowka("es ","as ")+imie(kogo, PL_BIE)+".\n");
	kogo->catch_msg(QCIMIE(TP, PL_MIA)+" poparl"+TP->koncowka("","a")+" twoja kandydature do Gildii Ogrow z Gor.\n");
	tell_room(Env, QCIMIE(TP, PL_MIA)+" poparl"+TP->koncowka("","a")+" kandydature "+QIMIE(kogo, PL_DOP)+" do Gildii Ogrow z Gor.\n", ({TP, kogo}));
	return 1;
}


