/* Obiekt szefujacy gildia Garou.
 * nie dotykac
 * Autor: Levisek
 */
#pragma no_clone

inherit "/std/room";

#include "defs.h"

string query_title(mixed komu);

mapping czlonkowie = ([]);
mapping do_wyjebania = ([]);


create_room()
{
	set_short("Centrum Dowodzenia");
	set_long("Centrum Dowodzenia Gildia Skavenow.\n");
	restore_object(MASTER_ENG);
}

void
load_data()
{
	restore_object(MASTER_ENG);
}

void
nagraj()
{
	save_object(MASTER_ENG);
}

int
nowy_czlonek(object kto)
{
	string *rekrut;
	string imie;
	int wiek;
	int avg;
    imie = find_player("+kto+")->query_real_name();
    if(!imie) return 0;
    wiek = kto->query_age();
    avg = kto->query_average_stat();
    // ({ Imie, Wiek, Srednia, Level, Titel})
    rekrut = ({imie, wiek, avg, SKAVEN_LEV_REKRUT, "Swiezy Wojownik Skavenski"});

    if(czlonkowie[imie]) return 0;

	czlonkowie[imie]= rekrut;
	nagraj();
	return 1;
}

int wyjeb(mixed kogo)
{
    string imie;
    if(stringp(kogo)) imie = kogo;
    if(objectp(kogo)) imie = kogo->query_real_name();
    if(!czlonkowie[imie]) return 0;
	czlonkowie=m_delete(czlonkowie, imie);
	nagraj();
	return 1;
}

int
query_szef(mixed kto)
{
    string imie;
    if(stringp(kto)) imie = kto;
    if(objectp(kto)) imie = kto->query_real_name();
   if (!czlonkowie[imie]) return 0;
   if (czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_SZEF)  return 1;
   else return 0;
}

int
query_czlonek(mixed kto)
{
    string imie;
    if(stringp(kto)) imie = kto;
    if(objectp(kto)) imie = kto->query_real_name();
	if (!czlonkowie[imie]) return 0;
	return 1;
}

int
query_ranga(mixed kto)
{
    string imie;
    if(stringp(kto)) imie = kto;
    if(objectp(kto)) imie = kto->query_real_name();
	if (!czlonkowie[imie]) return 0;
    return czlonkowie[imie][TAB_LEVEL];
}

int
dodaj_do_wyjebania(mixed kto)
{
	string imie;
    string *tablica;
    if(stringp(kto)) imie = kto;
    if(objectp(kto)) imie = kto->query_real_name();
	if(!query_ranga(imie))
	return 0;
	czlonkowie[imie][TAB_LEVEL] = SKAVEN_LEV_WYJEB;
	nagraj();
	return 1;
}
int
query_wypierdol(mixed kto)
{
    string imie;
    if(stringp(kto)) imie = kto;
    if(objectp(kto)) imie = kto->query_real_name();
	if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_WYJEB) return 1;
	return 0;
}

string
czlonkowie_gildii()
{
  string s;
  string *men=({});
  int i,a,b;
  mixed ind;
  ind = m_indices(czlonkowie);
  b = m_sizeof(czlonkowie);
   for(a=0;a<b;a++)
      men+=({ind[a]});
  i=sizeof(men);
  s="Aktualni czlonkowie gildii to :\n";

  for(a=1;a<i;a++)
   {
	   s+="[" + a + "] " + capitalize(men[a]);
	   s+= " " + query_title(men[a]);
	   s+="\n";
   }
  s+="\n";
  return s;
}

int
delete_eq(object kto)
{
	object *guilditem;
	int i;
    guilditem = deep_inventory(kto);
	for (i= 0; i < sizeof(guilditem); i++)
	 if (guilditem[i]->garou_eq())
	    { guilditem[i]->remove_object(); return 1; }
	return 0;
}

void
logowanie(object kto)
{
	string imie=kto->query_real_name();
	int i;
    if(query_wypierdol(imie))
       {
          if (!kto->clear_guild_stat(SS_OCCUP))
           {
		   }
          if (!kto->clear_guild_stat(SS_LAYMAN))
           {
		   }
          if (!kto->clear_guild_stat(SS_RACE))
           {
		   }
	      if (kto->remove_guild_occ())
	       {
		           kto->remove_cmdsoul(MASTER_SOUL);
		           kto->update_hooks();
		           wyjeb(kto);
		           kto->catch_msg("Skaven mowi papa!\n");
		           kto->remove_guild_layman();
		           kto->remove_guild_race();
		           nagraj();
           }
		if (delete_eq(kto) == 1) return;
	   }
	if(!czlonkowie[imie])
       {
          if (!kto->clear_guild_stat(SS_OCCUP))
           {
		   }
	      if (kto->remove_guild_occ())
	       {
		           kto->remove_cmdsoul(MASTER_SOUL);
		           kto->update_hooks();
		           wyjeb(kto);
	               tell_object(kto, "Skaven mow papa!\n");
		           nagraj();
           }
    	   if (delete_eq(kto) == 1) return;
	   }

	set_alarm(1.0, 0.0, "powitanie", kto);
}
void
powitanie(object kto)
{
	int infra;
	string *przymiotniki;
	int i;
	kto->catch_msg("Witaj moj wierny slugo - tymi slowami wita Cie Rogaty Szczur\nWpisz [spomoc] aby uzyskac informacje o swych zdolnosciach.\n");
	infra = MIN(10, (TP->query_stat(SS_OCCUP)/40));
	kto->add_prop(LIVE_I_SEE_DARK, infra);
	kto->update_skaven_form();
	kto->add_soul();
	przymiotniki = kto->query_przym(1, 0, 1);
	setuid();
	seteuid(getuid());
	for(i=0; i<sizeof(przymiotniki); i++)
	{
		if(przymiotniki[i] != "wlochaty" || przymiotniki[i] != "masywny") kto->remove_adj(przymiotniki[i]);
	}
	przymiotniki = kto->query_przym(1, 0, 1);
	if(!sizeof(przymiotniki))
	{
		kto->dodaj_przym("masywny", "masywni");
		kto->dodaj_przym("wlochaty", "wlochaci");
	}

	if(kto->query_rasa() != "skaven")
	   kto->ustaw_odmiane_rasy( ({"skaven", "skavena", "skavenowi", "skavena", "skavenem", "skavenie"}), 
  ({"skaveni", "skavenow", "skavenom", "skavenow", "skavenami", "skavenach"}), PL_MESKI_OS);

}

int
promote(mixed kogo)
{
    string imie;
    if(stringp(kogo)) imie = kogo;
    if(objectp(kogo)) imie = kogo->query_real_name();
	if(!query_czlonek(imie)) return 0;
    if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_SZEF) return 0;
    if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_SZAMAN) return 0;
    if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_WYJEB) return 0;
    czlonkowie[imie][TAB_LEVEL] = czlonkowie[imie][TAB_LEVEL] + 1;
    nagraj();
    return 1;
}

int
demote(mixed kogo)
{
    string imie;
    if(stringp(kogo)) imie = kogo;
    if(objectp(kogo)) imie = kogo->query_real_name();
    if(!query_czlonek(imie)) return 0;
    if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_SZEF) return 0;
    if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_WYJEB) return 0;
    if(czlonkowie[imie][TAB_LEVEL] == SKAVEN_LEV_REKRUT) return 0;
    czlonkowie[imie][TAB_LEVEL] = czlonkowie[imie][TAB_LEVEL] - 1;
    nagraj();
    return 1;
}

string
znajdz_szefa()
{
  string s;
  string *men=({});
  int i,a,b;
  mixed ind;
  ind = m_indices(czlonkowie);
  b = m_sizeof(czlonkowie);
   for(a=0;a<b;a++)
      men+=({ind[a]});
  i=sizeof(men);
  for(a=0;a<i;a++) if(query_szef(men[a])) return men[a];
}

int
set_szef(mixed kto)
{
    mixed ind;
    int i;
    string old_szef;
    string imie;
    if(stringp(kto)) imie = kto;
    if(objectp(kto)) imie = kto->query_real_name();

    ind = m_indices(czlonkowie);
    if(!query_czlonek(imie)) return 0;
    if(query_szef(imie)) return 1;
    old_szef=znajdz_szefa();
    czlonkowie[old_szef][TAB_LEVEL] = SKAVEN_LEV_SZAMAN;
    czlonkowie[imie][TAB_LEVEL] = SKAVEN_LEV_SZEF;
    nagraj();
    return 2;
}

int
set_title(string komu, string new_title)
{
	if(!czlonkowie[komu]) return 0;
	if (czlonkowie[komu][TAB_LEVEL] == SKAVEN_LEV_WYJEB) return 0;
	czlonkowie[komu][TAB_TITEL] = new_title;
	nagraj();
	return 1;
}

string
query_title(mixed komu)
{
    string imie;
    if(stringp(komu)) imie = komu;
    if(objectp(komu)) imie = komu->query_real_name();
	return czlonkowie[imie][TAB_TITEL];
}

int
query_skaven_age(mixed player)
{
    string name;
    int   age, join;

    if(stringp(player)) name = player;
    if(objectp(player)) name = player->query_real_name();

    if(!czlonkowie[name]) return 0;

    age  = player->query_age();
    join = czlonkowie[name][TAB_WIEK];

    return (age - join) * 2;
}

int
query_skaven_avg(mixed gracz)
{
	string imie;
	int join_avg, avg;
    if(stringp(gracz)) imie = gracz;
    if(objectp(gracz)) imie = gracz->query_real_name();
	join_avg = czlonkowie[imie][TAB_SREDNIA];
	avg = gracz->query_average_stat();
	return (avg - join_avg);
}


string
skaven_stat(string imie)
{
	string name;
	int avg;
	int age;
	string title;
	int level;
	string wsio;

	name = czlonkowie[imie][TAB_IMIE];
	age =  czlonkowie[imie][TAB_WIEK];
	avg =  czlonkowie[imie][TAB_SREDNIA];
	level= czlonkowie[imie][TAB_LEVEL];
	title= czlonkowie[imie][TAB_TITEL];
	wsio = "Tablica danych dla " + capitalize(imie) + ":";
	wsio += "\nImie: " + name;
	wsio += "\nWiek: " + age;
	wsio += "\nSrednia: " + avg;
	wsio += "\nLevel: " + level;
	wsio += "\nTytul: " + title + "\n";

    return wsio;
}

int
set_mapping(string imie, int nr, mixed value)
{
	czlonkowie[imie][nr] = value;
	nagraj();
	return 1;
}

void
tell_guild(string str)
{
	int i;
    mixed ind = m_indices(czlonkowie);
    for(i=0; i<m_sizeof(czlonkowie); i++)
       if(objectp(find_player(ind[i]))) find_player(ind[i])->catch_msg("W swym umysle slyszysz jak Rogaty Szczur przemawia do swych slug mowiac: " + str + "\n");
}
