/*
 * Plik  : solkan.c
 * Autor : Torg
 * Opis  : Centrum sterowania gildia Solkanitow
 * Data  : 16 sierpnia 2002
 *
 * Copyright (C)
 */

inherit "/d/Imperium/std/room";

#include "defs.h"

mapping czlonkowie=([]);
mapping do_wyrzucenia=([]);

create_imperium_room()
{
        set_short("Centrum Dowodzenia");
        set_long("Centrum Dowodzenia Gildia Wyznawcow Solkana.\n");
        restore_object(SOLKAN);
}

void
nagraj()
{
        save_object(SOLKAN);
}

void
nowy_czlonek(mixed kto)
{
        kto=IMIE(kto);
        czlonkowie[kto]=1;
        nagraj();
}

int wyrzuc(mixed kogo)
{
        kogo=IMIE(kogo);
        if(!czlonkowie[kogo]) return 0;
        czlonkowie=m_delete(czlonkowie, kogo);
        do_wyrzucenia=m_delete(do_wyrzucenia, kogo);
        nagraj();
        return 1;
}

int
query_szef(mixed kto)
{
   kto=IMIE(kto);
   if (!czlonkowie[kto]) return 0;
   if (czlonkowie[kto] == 3)  return 1;
   else return 0;
}

int
query_czlonek(mixed kto)
{
        kto=IMIE(kto);
        if (!czlonkowie[kto]) return 0;
        return 1;
}

int
query_ranga(mixed kto)
{
        kto=IMIE(kto);
        if (!czlonkowie[kto]) return 0;
        if (czlonkowie[kto] == 1) return 1;
        if (czlonkowie[kto] == 2) return 2;
        if (czlonkowie[kto] == 3) return 3;
}

int
dodaj_do_wyrzucenia(mixed kto)
{
        kto = IMIE(kto);
        if(!query_ranga(kto))
        return 0;
        do_wyrzucenia[kto] = 1;
        nagraj();
        return 1;
}

int
query_wyrzuc(mixed kto)
{
        kto=IMIE(kto);
        if(do_wyrzucenia[kto]) 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";
  if(i==0) s="W tej chwili nie ma zadnych Wyznawcow Solkana!\n";
  for(a=1;a<i;a++)
   {
           s+="[" + a + "] " + capitalize(men[a]);
           if(query_szef(men[a])) s+= " (Arcykaplan)";
           s+="\n";
   }
  s+="\n";
  return s;
}

void
logowanie(object kto)
{
    string imie=kto->query_real_name();
    object *guilditem;

    int i;

    if(query_wyrzuc(imie))
    {
        if (!kto->clear_guild_stat(SS_OCCUP))
        {
        }

        if (kto->remove_guild_occ())
        {
            kto->remove_cmdsoul(SOLKAN_SOUL);
            kto->update_hooks();
            wyrzuc(kto);
            kto->catch_msg("Twe czlonkowstwo w spolecznosci Wyznawcow "
            + "Solkana wlasnie sie zakonczylo!!\n");
            nagraj();
        }

        guilditem = deep_inventory(kto);
        for (i= 0; i < sizeof(guilditem); i++)
        if (guilditem[i]->czy_pas_solkana())
        guilditem[i]->remove_object();
        return;
    }

    if(!czlonkowie[imie])
    {
        if (!kto->clear_guild_stat(SS_OCCUP))
        {
        }

    if (kto->remove_guild_occ())
    {
        kto->remove_cmdsoul(SOLKAN_SOUL);
        kto->update_hooks();
        wyrzuc(kto);
        tell_object(kto, "Twe czlonkowstwo w spolecznosci Wyznawcow "
            + "Solkana wlasnie sie zakonczylo!!\n");
        nagraj();
    }

    guilditem = deep_inventory(kto);
    for (i= 0; i < sizeof(guilditem); i++)
    if (guilditem[i]->czy_pas_solkana())
    guilditem[i]->remove_object();
    return;
    }

    set_alarm(1.0, 0.0, "powitanie", kto);
}

void
powitanie(object kto)
{
        kto->catch_msg("Podazaj droga wyznaczana przez Solkana a zyc "
            + "bedziesz w dobrobycie.\n");
        kto->command("zaloz pas");
}

int
promote(mixed kogo)
{
        kogo=IMIE(kogo);
        if(!query_czlonek(kogo)) return 0;
        if(czlonkowie[kogo] == 1)
        {
                czlonkowie[kogo] = 2;
                nagraj();
                return 1;
        }
        if(czlonkowie[kogo] == 2)
        return 0;
}

int
demote(mixed kogo)
{
        kogo=IMIE(kogo);
    if(!query_czlonek(kogo)) return 0;
        if(czlonkowie[kogo] == 2)
        {
                czlonkowie[kogo] = 1;
                nagraj();
                return 1;
        }
        if(czlonkowie[kogo] == 1)
        return 0;
}

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;
    kto=IMIE(kto);
    ind = m_indices(czlonkowie);
    if(!query_czlonek(kto)) return 0;
    if(query_szef(kto)) return 1;
    old_szef=znajdz_szefa();
    czlonkowie[old_szef] = 2;
    czlonkowie[kto] = 3;
    nagraj();
    return 2;
}
