/*
 * 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";

#include "tropiciele.h"
#include "tropiciele_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_CZLOWIEK);

  ustaw_imie(({"lars","larsa","larsowi","larsa","larsie",
      "larsem"}),PL_MESKI_OS);

  dodaj_przym(({"wysoki"}),({"wysocy"}));
  dodaj_przym(({"zakapturzony"}),({"zakapturzeni"}));

  set_long("Wysoki mezczyzna o smuklej budowie ciala stoi przy jednym "+
       "z masztow i wyglada jakby spal. Na glowe narzucony ma kaptur "+
       "bedacy czescia plaszcza, ktorym caly jest otulony. Pomimo "+
       "swej pozornej budowy widac jak miesnie pulsuja mu pod ubraniem\n");
  set_living_name("straznik_gildii_tropicieli_averlandu");

  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(({"klamre","nowa klamre"}),VBFC_ME("ans_klamra"));
  add_ask(({"przyjecie","przyjecie do gildii","wstapienie","wstapienie do gildii"}),
            VBFC_ME("wstapienie"));
  add_ask(({"tropicieli", "stowarzyszenie", "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/klamra.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 "Lars, Epicki Tropiciel z Averlandu";
}

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_CZL(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,"czl_czlonek",kto_to);
   }
  }

  if(!CZY_CZL(kto_to))
  {
    set_alarm(2.0,0.0,"nie_czl",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 jeczy cicho.");
        command("powiedz Chcesz sie do nas przylaczyc?");
        command("emote poprawia kaptur.");
        command("emote usmiecha sie milo.");
}

int
nie_czl(object kto_to)
{
    if (!kto_to||environment(kto_to)!=environment(this_object())) return 1;
    command("przedstaw sie "+KOMU);
    command("emote kreci glowa.");
    command("powiedz Chyba nie masz tu czego szukac.");
    return 1;
}

void
czl_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.\n");
}

string
std_odp()
{
  command("powiedz Nie moge odpowiedziec na to pytanie...");
  return"";
}

int
do_join(string str)
{
  object shadow;
  object kto=this_player();
  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 Przywodcy lub jego zaufanego.\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("usmiechnij sie szeroko");
  command("emote mowi: Zostal"+TP->koncowka("es","as")+
         " wlasnie przyjet"+TP->koncowka("y","a")+" do naszego "+
         "zgromadzenia. To dobra decyzja");
  clone_object(KLAMRA)->move(kto,1);
  write("Lars wprawnym ruchem przypina ci klamre.\n");
  say(QCIMIE(this_object(),PL_MIA)+" wprawnym ruchem przypina "
      + QIMIE(this_player(),PL_CEL)+ "klamre.\n");
  command("powiedz do "+OB_NAME(kto)+" Chron ta klamre jak swego oka.");
  command("emote usmiecha sie przyjaznie");
  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_CZL(kto))
   {
     notify_fail("Tylko ludzie moga wejsc w glab namiotu.\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 tropicieli z averlandu" && str!="gildie tropicieli" && str!="tropicieli")
  {
    notify_fail("Co chcesz opuscic?\n");
    return 0;
  }
 if(!this_player()->query_prop(CZ_PLAYER_OPUSZCZA_GILDIE))
  {
   command("emote kreci z niedowierzaniem glowa.");
   command("emote mowi: Czemu to robisz? Zastanow sie jeszcze... Jesli "+
           "to twoja ostateczna decyzja ponow probe wpisujac <opusc>.");
   kto->add_prop(CZ_PLAYER_OPUSZCZA_GILDIE,1);
   return 1;
  }

 if(kto->wywalenie_z_trop(kto))
 {
   write("\nLars prostuje sie i gwaltownym ruchem zrywa z ciebie klamre.\n");
   write("\nJednoczesnie grzmi: Zaluj przyjacielu... tylko to ci pozostalo\n");
   write("Opuscil"+kto->koncowka("es","as")+" Gildie Tropicieli z Averlandu.\n");
   say(QCIMIE(kto,PL_MIA)+" opuscil"+TP->koncowka("","a")+" Gildie Tropicieli z Averlandu.\n");
   kto->set_exp_combat(4*(kto->query_exp_combat())/5);
   kto->remove_cmdsoul(SOUL);
   kto->update_hooks();
   kto->remove_prop(CZ_PLAYER_OPUSZCZA_GILDIE);
   (kto->query_subloc_obj(KLAMRA_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_klamra()
{
  object kto=this_player();
 if(CZY_CZL(kto))
 {
  if(!kto->query_guild_member(GUILD_NAME))
  {
     command("usmiechnij sie szeroko");
     command("powiedz do "+KOGO+" Klamra to nasz znak. Jak do nas przystapisz "+
           "tez taka dostaniesz.");
     return"";
   }
   if(this_player()->query_subloc_obj(KLAMRA_SUBLOC))
   {
    command("powiedz do "+KOGO+" Hehe, zachlann"+TP->koncowka("y","a")+
           " jestes! Przeciez juz jedna masz?");
    return "";
   }
  }
    clone_object(KLAMRA)->move(this_player(),1);
    command("powiedz do "+KOGO+" Oto twoja klamra.");
    return "";

}

string
wstapienie()
{
 object kto=this_player();
 if (!CZY_CZL(kto))
 {
  command("zaprzecz");
  command("powiedz do "+KOGO+" Nie ma mowy. Nie mozesz do nas przystapic.");
  return "";
 }
  command("powiedz do "+KOGO+" Jesli chcesz to prosze. Bedziemy radzi majac "+
      "kolejnego czlonka.");
  return "";
}

string
ans_gildia()
{
 object kto=this_player();
 if (!CZY_CZL(kto))
 {
  command("powiedz do "+KOGO+" Hmmm... nie jestes jedn"+kto->koncowka("ym","na")+
          " z nas, lecz jesli az tak ci zalezy...");
  command("emote wskazuje wiszaca na maszcie tablice.");
  return "";
 }
  command("powiedz do "+KOGO+" Chcesz wiecej wiedziec o naszej gildii? Wspaniale! ");
  command("emote wskazuje wiszaca na maszcie tablice.");
  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 Tropiciela.");
         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 prz=TP->query_przywodca();

   if (!CZY_W_GILDII(TP)&&!TP->query_wiz_level()) return std_odp();

   imiona=(GILDIA->query_imiona());
   imiona=imiona-({prz});

   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("Przywodca:\n" + capitalize(prz) + "\nCzlonkowie:\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 Tropicieli!\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()!="czlowiek")
        return notify_fail(Imie(kogo, PL_MIA)+" nie jest czlowiekiem!\n");
    if (kogo->query_guild_name_race()==GUILD_NAME)
        return notify_fail(Imie(kogo, PL_MIA)+" juz jest w stowarzyszeniu!\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 Tropicieli z Averlandu.\n");
    tell_room(Env, QCIMIE(TP, PL_MIA)+" poparl"+TP->koncowka("","a")+" kandydature "+QIMIE(kogo, PL_DOP)+" do Gildii Tropicieli z Averlandu.\n", ({TP, kogo}));
    return 1;
}


