/* Glowny obiekt sterujacy gildia 'Klan Tygrysa'
 *
 *
 *
 * Autor: Lisev
 */
#include "defs.h"
inherit "/d/Imperium/std/room";
// [imie] = ({ ranga, nazwisko, przydomek, poparcia })
private mapping system=([]);
// prototypy
void save_me();
void load_me();
void
create_imperium_room()
{
	set_short("Glowny obiekt sterujacy gildia Klan Tygrysa");
	set_long("Glowny obiekt sterujacy gildia Klan Tygrysa.\n");
	load_me();
}
void
save_me()
{
	save_object(SILNIK);
}
void
load_me()
{
	restore_object(SILNIK);
}
mixed
query_data(string imie, int value)
{
	if(!system[imie]) return 0;
	return system[imie][value];
}
void
set_data(string imie, int value, mixed info)
{
	if(!system[imie]) return;
	system[imie][value] = info;
	save_me();
}
int
query_czlonek(string imie)
{
	if(system[imie]) return 1;
	return 0;
}
int
query_ranga(string imie)
{
	return system[imie][KLAN_RANGA];
}
int
query_banished(string imie)
{
	if(system[imie][KLAN_RANGA] == BANISHED) return 1;
	return 0;
}
int
query_applicant(string imie)
{
	if(system[imie][KLAN_RANGA] == APPLICANT) return 1;
	return 0;
}
string
query_daimyo()
{
  mixed ind;
  int i;
  ind = m_indices(system);
  for(i=0;i<m_sizeof(system);i++)
      if (system[ind[i]][KLAN_RANGA] == DAIMYO) return ind[i];
}
string*
query_hatamoto()
{
	mixed ind;
	int i;
	string *hatamoto = ({});
	ind = m_indices(system);
	for(i=0; i<m_sizeof(system); i++)
	    if( system[ind[i]][KLAN_RANGA] == HATAMOTO) hatamoto += ({ ind[i] });
	return hatamoto;
}
string *
query_poparcia(string imie)
{
	return system[imie][KLAN_POPARCIA];
}
int
czy_mozna_przyjac(string imie)
{
	string *hatamoto = ({});
	string *poparcia = ({});
	int i;
	if(!system[imie]) return 0;
	hatamoto = query_hatamoto();
	poparcia = system[imie][KLAN_POPARCIA];
	for(i=0; i<sizeof(poparcia); i++)
	   hatamoto -= ({ poparcia[i] });
	if(sizeof(hatamoto)) return 0;
	return 1;
}
int
set_new_szef(string imie)
{
	if(!system[imie]) return 0;
	if(system[imie][KLAN_RANGA] == DAIMYO) return 0;
	set_data(query_daimyo(), KLAN_RANGA, REGULAR);
	set_data(imie, KLAN_RANGA, DAIMYO);
	return 1;
}
int
set_hatamoto(string imie)
{
	if(!system[imie]) return -1;
	if(system[imie][KLAN_RANGA] == HATAMOTO) return 0;
	if(system[imie][KLAN_RANGA] == DAIMYO) return 2;
	set_data(imie, KLAN_RANGA, HATAMOTO);
	return 1;
}
int
new_applicant(string imie)
{
	mixed *tablica;
//	if(system[imie]) return -1;
	tablica = ({ APPLICANT, 0, 0, ({}) });
	system[imie] = tablica;
	save_me();
	return 1;
}
int
add_poparcie(string imie, string kto)
{
	string *poparcia = ({});
//	if(!system[imie]) return 0;
	poparcia = system[imie][KLAN_POPARCIA];
	if(member_array(kto, poparcia) != -1) return 0;
	poparcia += ({ kto });
	set_data(imie, KLAN_POPARCIA, poparcia);
	return 1;
}
int
wywal(string imie)
{
	if(!system[imie]) return 0;
	set_data(imie,KLAN_RANGA,BANISHED);
	return 1;
}
int
promote(string imie)
{
	if(!system[imie]) return 0;
	if(system[imie][KLAN_RANGA] != APPLICANT) return 0;
	set_data(imie, KLAN_RANGA, REGULAR);
	return 1;
}
string
*query_applicants()
{
	mixed ind;
	int i;
	string *imiona = ({});
	ind = m_indices(system);
	for(i=0; i<m_sizeof(system); i++)
	   if(query_ranga(ind[i]) == APPLICANT) imiona += ({ ind[i] });
	return imiona;
}
string
*query_regular()
{
	mixed ind;
	int i;
	string *imiona = ({});
	ind = m_indices(system);
	for(i=0; i<m_sizeof(system); i++)
	   if(query_ranga(ind[i]) == REGULAR) imiona += ({ ind[i] });
	return imiona;
}
string
*query_banished_members()
{
	mixed ind;
	int i;
	string *imiona = ({});
	ind = m_indices(system);
	for(i=0; i<m_sizeof(system); i++)
	   if(query_ranga(ind[i]) == BANISHED) imiona += ({ ind[i] });
	return imiona;
}
void
set_nazwisko(string imie, string nazwisko)
{
	set_data(imie, KLAN_NAZWISKO, nazwisko);
}
void
set_przydomek(string imie, string przydomek)
{
	set_data(imie, KLAN_PRZYDOMEK, przydomek);
}
string
query_exp_title(object komu)
{
	return KLAN_TYGRYSA_TITLES[ (komu->query_stat(SS_OCCUP) / 10) > sizeof(KLAN_TYGRYSA_TITLES) - 1 ? sizeof(KLAN_TYGRYSA_TITLES) - 1 : komu->query_stat(SS_OCCUP) / 10];
}
int
remove_member(string imie)
{
	if(!system[imie]) return 0;
	system = m_delete(system, imie);
	save_me();
	return 1;
}
void
logowanie(object kto)
{
	object item;
	string imie = kto->query_real_name();
	if(!system[imie]) { kto->usun_gildia_occ(); return; }
	if(query_banished(imie))
	{
		kto->usun_gildia_occ();
		kto->catch_msg("Zostales wyrzucony z Klanu Tygrysa.\n");
		return;
	}
	kto->catch_msg("Witaj ponownie, samuraju.\n");
	kto->add_prop(LIVE_I_SEE_DARK, MIN(2, kto->query_stat(SS_OCCUP) / 80));
   kto->add_prop(LIVE_I_SEE_INVIS, MIN(2, kto->query_stat(SS_OCCUP) / 80));
	kto->add_klan_soul();
	setuid();
	seteuid(getuid());
	
    if (!present("_pas_samurajow", kto))
    {
        item = clone_object(GUILD_ITEM);
        item->move(kto, 1);
    }	
}
void
tell_guild(string str)
{
	int i;
    mixed ind = m_indices(system);
    for(i=0; i<m_sizeof(system); i++)
       if(objectp(find_player(ind[i]))) find_player(ind[i])->catch_msg("Slyszysz dziwny glos w swej glowie.. jakby sam Tygrys do ciebie przemawial: " + str + "\n");
}
string
*active_members()
{
	int i;
	string *imiona = ({});
    mixed ind = m_indices(system);
    for(i=0; i<m_sizeof(system); i++)
      if(objectp(find_player(ind[i])))
         imiona += ({ find_player(ind[i])->query_real_name() });
    return imiona;
}
