/*
 * Shadow Alfena
 */

#include "local.h"
#include <login.h>
inherit "/std/shadow";

#include <macros.h>
#include <std.h>

private static mapping racesound = RACESOUND;

private mixed *rrodzaj;
private string *plec, gender_s;
private string *rasa;
private string *prasa;
private mixed unmet_opis;
private mixed met_opis;
private string *nazwa;
private string *pnazwa;
private string *mm_flagi;
private string q_pres;
private int gender, rodzaj;
private mixed pname, name;
private mixed pprzym, przym;
private string race;
private mapping my_com_sounds;
static int prawdziwy=1;
private string *wiz =({"czarodziej","czarodzieja","czarodziejowi","czarodzieja",
    "czarodziejem","czarodzieju"});



nomask public void
sh_set_prawdziwy(int i)
{
  prawdziwy = i;
}

nomask public int sh_query_prawdziwy(){return prawdziwy;}



nomask public int
remove_alfen_shadow()
{
    tell_object(query_shadow_who(), "Wyloniles sie z Krainy Cienia.\n");
    destruct();
    return 1;
}


nomask public void
sh_zapisz_ksztalt()
{
  if ((nazwa[3]=="")||(!nazwa[3]))
    return ;
  setuid();
  seteuid(getuid());
  save_object(LPATH +"ksztalty/"+ nazwa[3]);
}


nomask public int
sh_odczytaj_ksztalt(string imie)
{
  setuid();
  seteuid(getuid());
  return restore_object(LPATH + "ksztalty/" + imie);
}



nomask public void
sh_kopiuj_osobe(object ob)
{
    int i,tem, tem2;
    mixed pom;
    
    
    for (i=0; i<6; i++)
    {
      nazwa[i]=ob->query_nazwa(i);
      pnazwa[i]=ob->query_pnazwa(i);
      unmet_opis[0][i]=ob->query_nonmet_name(i);
      unmet_opis[1][i]=ob->query_nonmet_pname(i);
      met_opis[0][i]=ob->query_met_name(i);
      met_opis[1][i]=ob->query_met_pname(i);
      pname[i] = ob->query_pname(1,i);
      rasa[i] = ob->query_rasa(i);
      plec[i] = ob->query_plec_string(i);
      prasa[i] = ob->query_prasa(i);
      tem = sizeof(pname[i]);
      rrodzaj[i] = ob->query_real_rodzaj(1,i);
      pom=ob->query_przym(1, i, rrodzaj[i][1]);
      tem2 =sizeof(pom);
      name[i] = ({nazwa[i], rasa[i],(ob->query_wiz_level()?wiz[i]:nazwa[i]),
        plec[i] });
      przym[i] = pom;
      pprzym[i] = ob->query_pprzym(1, i, rrodzaj[i][1]);
      
    }
    gender_s=ob->query_gender_string();
    mm_flagi[0]=ob->query_m_out();
    mm_flagi[1]=ob->query_m_in();
    mm_flagi[2]=ob->query_mm_out();
    mm_flagi[3]=ob->query_mm_in();
    gender=ob->query_gender();
    q_pres = ob->query_presentation();
    race = ob->query_race();
    rodzaj = ob->query_rodzaj();
    my_com_sounds = ob->query_com_sounds();
}


/*
 * Function name: shadow_me
 * Description  : This function is called to make this shadow shadow the
 *                player. It add the autoloading feature to the player.
 * Arguments    : player - the player
 * Returns      : 1 - everything went right
 *                0 - no player or player already shadowed
 */
nomask public int
shadow_me(object player)
{

    if (!::shadow_me(player))
    {
	tell_object(player,
	  "Cos jest nie tak z toba.\n");
	return 0;
    }
    prawdziwy = 1;
    met_opis = allocate(2);
    unmet_opis = allocate(2);
    met_opis[0] = allocate(6);
    met_opis[1] = allocate(6);
    unmet_opis[1] = allocate(6);
    unmet_opis[0] = allocate(6);
    nazwa = allocate(6);
    pnazwa = allocate(6);
    pname = allocate(6);
    name = allocate(6);
    pprzym = allocate(6);
    przym = allocate(6);
    rasa = allocate(6);
    prasa = allocate(6);
    plec = allocate(6);
    rrodzaj = allocate(6);
    mm_flagi = allocate(4);
    q_pres = "";
    race = "";
    my_com_sounds = 0;
    rodzaj = 0;
    tell_object(player, "Wkroczyles w kraine Cieni.\n");
    setuid();
    seteuid(getuid());
    return 1;
}



int
query_alfen_shadow()
{
  return 1;
}


public varargs string
query_met_name(int i=0)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_met_name(i);
  return met_opis[0][i];
}



public varargs string
query_met_pname(int i=0)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_met_pname(i);
  return met_opis[1][i];
}



public varargs string
query_nonmet_name(int i=0)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_nonmet_name(i);
  return unmet_opis[0][i];
}



public varargs string
query_nonmet_pname(int i=0)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_nonmet_pname(i);
  return unmet_opis[1][i];
}

public varargs string
query_nazwa(int i)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_nazwa(i);
  return nazwa[i];
}


public varargs string
query_pnazwa(int i)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_pnazwa(i);
  return pnazwa[i];
}


public varargs string
query_name(int i)
{
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy)
    return query_shadow_who()->query_name(i);
  return capitalize(nazwa[i]);
}


public varargs string
query_Imie(mixed pobj,mixed przyp)
{
  if (!objectp(pobj))
  {
    przyp = pobj;
    pobj = previous_object(-1);
  }
  if (!intp(przyp))
  {
    if (stringp(przyp))
      przyp = atoi(przyp);
    else
      przyp = 0;
  }
  return capitalize(query_shadow_who()->query_imie(pobj, przyp));
}


public int
query_gender()
{
  if (prawdziwy)
    return query_shadow_who()->query_gender();
  return gender;
}


public string
query_m_in()
{
  if (prawdziwy)
    return query_shadow_who()->query_m_in();
  return mm_flagi[1];
}


public string
query_m_out()
{
  if (prawdziwy)
    return query_shadow_who()->query_m_out();
  return mm_flagi[0];
}


public string
query_mm_out()
{
  if (prawdziwy)
    return query_shadow_who()->query_mm_out();
  return mm_flagi[2];
}



public string
query_mm_in()
{
  if (prawdziwy)
    return query_shadow_who()->query_mm_in();
  return mm_flagi[3];
}


public string
query_presentation()
{
  if (prawdziwy)
    return query_shadow_who()->query_presentation();
  return q_pres;
}


public string *
parse_command_adjectiv_id_list3()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_adjectiv_id_list3();
  return przym[3] + pprzym[3];
}




public string *
parse_command_adjectiv_id_list0()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_adjectiv_id_list0();
  return przym[0] + pprzym[0];
}



public string *
parse_command_adjectiv_id_list2()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_adjectiv_id_list2();
  return przym[2] + pprzym[2];
}




public string *
parse_command_adjectiv_id_list4()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_adjectiv_id_list4();
  return przym[4] + pprzym[4];
}



public string *
parse_command_adjectiv_id_list5()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_adjectiv_id_list5();
  return przym[5] + pprzym[5];
}




public string *
parse_command_plural_id_list0()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_plural_id_list0();
  return pname[0];
}


public string *
parse_command_plural_id_list1()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_plural_id_list1();
  return pname[1];
}


public string *
parse_command_plural_id_list2()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_plural_id_list2();
  return pname[2];
}


public string *
parse_command_plural_id_list3()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_plural_id_list3();
 return pname[3];
}


public string *
parse_command_plural_id_list4()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_plural_id_list4();
  return pname[4];
}


public string *
parse_command_plural_id_list5()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_plural_id_list5();
  return pname[5];
}


public string *
parse_command_id_list0()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_id_list0();
  return name[0];
}


public string *
parse_command_id_list1()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_id_list1();
  return name[1];
}


public string *
parse_command_id_list2()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_id_list2();
  return name[2];
}


public string *
parse_command_id_list3()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_id_list3();
  return name[3];
}


public string *
parse_command_id_list4()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_id_list4();
  return name[4];
}


public string *
parse_command_id_list5()
{
  if (prawdziwy)
    return query_shadow_who()->parse_command_id_list5();
  return name[5];
}

public string
query_gender_string()
{
  if (prawdziwy)
    return query_shadow_who()->query_gender_string();
  return gender_s;
}


public string
query_plec_string(int przyp)
{
  if ((przyp<0)||(przyp>5))
    przyp = 0;
  if (prawdziwy)
    return query_shadow_who()->query_plec_string(przyp);
  return plec[przyp];
}


public string
race_sound()
{
    mapping map;
    string str;

    if (prawdziwy)
        return query_shadow_who()->race_sound();

    if ((map = racesound[race]) && (str = map[previous_object(-1)->query_race()]))
        return str;

    return "mowi";
}


public mapping
query_com_sounds()
{
  if (prawdziwy)
    return query_shadow_who()->query_com_sounds();
  return my_com_sounds;
}


public varargs string
query_rasa(int p)
{
  if ((p<0)||(p>5))
    p =0;
  if (prawdziwy)
    return query_shadow_who()->query_rasa(p);
  return rasa[p];
}


public varargs string
query_prasa(int p)
{
  if ((p<0)||(p>5))
    p =0;
  if (prawdziwy)
    return query_shadow_who()->query_prasa(p);
  return prasa[p];
}


public int
query_rodzaj()
{
  if (prawdziwy)
    return query_shadow_who()->query_rodzaj();
  return rodzaj;
}



public mixed
querey_real_rodzaj(int w, int p)
{
  if (prawdziwy)
    return query_shadow_who()->query_real_rodzaj(w,p);
  if ((p<0)||(p>5))
    p=0;
  if (w)
    return rrodzaj[p];
  return rrodzaj[p][0];
}
