/* shadow szaty
 * napisane przez ALfena
 */
#include "local.h"
#include <pl.h>
#include <const.h>
#include <macros.h>
#include <stdproperties.h>
inherit "/std/shadow.c";
int prawdziwy = 1;
int rodzaj;
string lon1, lon2;
mixed *obiekt;
mixed *parse;
mixed *r_parse;
mixed nazwa1 = ({"mezczyzni","mezczyzn","mezczyzna","mezczyzn",
		"mezczyznami","mezczyznach"});
mixed nazwa2 = ({"kobiety","kobiet","kobietom","kobiety","kobietami",
		"kobietach"});
		    
mixed nazwa = ({({}),({})});	  
int rodz = PL_ZENSKI;
mixed przym = ({ ({"czarnoodziany"}),
		 ({"czarnoodziani"}) });
public mapping query_com_sounds();
nomask int
query_shadow_szaty()
{
	return 1;
}
nomask int
remove_shadow_szaty()
{
	destruct();
	return 1;
}
nomask void
sh_ustaw(int i)
{
	prawdziwy = i;
}
nomask void
sh_kaptur(int i)
{
	if (i && sizeof(przym[0])==1)
	{
		przym[0] += ({"zakapturzony"});
		przym[1] += ({"zakapturzeni"});
		prawdziwy = 0;
	}
	if (!i && sizeof(przym[0])==2)
	{
		przym[0] -= ({"zakapturzony"});
		przym[1] -= ({"zakapturzeni"});
		
		set_alarm(2.0, 0.0, "ustaw");
	}
	
}
int
shadow_me(object ob)
{
	int j, i, tmp = ::shadow_me(ob);
	
	if (!tmp)
		tell_object(ob,"Zglos blad w programi shadow szaty.\n");
	rodzaj = ob->query_rodzaj_rasy();
	obiekt = allocate(6);
	parse = allocate(6);
	r_parse = allocate(6);
#if 0
	if (rodzaj==PL_ZENSKI)
		nazwa = nazwa1;
	else
		nazwa = nazwa2;
	rodz = rodzaj;
#endif
	rodz = rodzaj;
	nazwa[0]=ob->query_rasy();
	if (interactive(ob))
	{
	if (ob->query_race()=="czlowiek")
	{
	if (rodzaj==PL_ZENSKI)
		nazwa[1] = nazwa2;
	else
		nazwa[1] = nazwa1;
	
	for (i=0; i<6; i++)
		nazwa[0][i]=ob->query_plec_string(i) + " " + nazwa[0][i];
	}
	else
		nazwa[1]=ob->query_prasy();
	}
	else
	{
		nazwa[1] = ob->query_prasy();
		for (i=0; i<6; i++)
			nazwa[0][i] = ob->query_nazwa(i);
	}
	for (i=0; i<6; i++)
	{
		obiekt[i] = ob->query_nazwa(i);
		parse[i] = ob->parse_command_id_list(i);
		r_parse[i] = ob->parse_command_rodzaj_id_list(i);
	}
	if (interactive(ob) && (i = member_array(obiekt[0],parse[0]))!=-1)
	{
		for (j=0; j<6; j++)
		{
		parse[j] = exclude_array(parse[j], i, i);
		r_parse[j] = exclude_array(r_parse[j], i, i);
		}
		
	}
	return tmp;
}
public varargs string
query_met_name(int i=0)
{
  int j = sizeof(przym[0]);
  string tmp="";
  object ob;
  int n;
  for (n=-1; previous_object(n) && !living(previous_object(n)); n--);
  ob = previous_object(n);
  if ((i<0)||(i>5))
    i=0;
  if ( (prawdziwy && !query_shadow_who()->notmet_me(ob)) ||  
  	query_shadow_who()==ob)
    return query_shadow_who()->query_met_name(i);
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], i, rodz, 0)+" ";
  
  return tmp+nazwa[0][i];
}
public varargs string
query_met_pname(int i=0)
{
  int n;
  int j = sizeof(przym[0]);
  object ob;
  string tmp="";
  for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
  if ((i<0)||(i>5))
    i=0;
  if ((prawdziwy && !query_shadow_who()->notmet_me(ob)) || query_shadow_who()==ob)
    return query_shadow_who()->query_met_pname(i);
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], i, rodz, 0)+" ";
  return tmp+nazwa[1][i];
}
public varargs string
query_nonmet_name(int i=0)
{
  int j = sizeof(przym[0]);
  string tmp="";
  int n;
  object ob;
  
  for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
 
  if ((i<0)||(i>5))
    i=0;
  if ((prawdziwy && !query_shadow_who()->notmet(ob)) || query_shadow_who()==ob)
  	return query_shadow_who()->query_nonmet_name(i);
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], i, rodz, 0)+" ";
  return tmp + nazwa[0][i];
}
public varargs string
query_nonmet_pname(int i=0)
{
  int j = sizeof(przym[0]);
  string tmp="";
  if ((i<0)||(i>5))
    i=0;
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j],i, rodz, 1)+" ";
  return tmp+nazwa[1][i];
}
public varargs string
query_nazwa(int i)
{
  int n;
  
  for (n=-1; previous_object(n) && !living(previous_object(n)); n--);
  if ((i<0)||(i>5))
    i=0;
  if (prawdziwy || query_shadow_who()==previous_object(n))
    return query_shadow_who()->query_nazwa(i);
  if (query_shadow_who()->query_race()=="czlowiek")
  	return query_shadow_who()->query_rasy()[i];
  return nazwa[0][i];
}
public varargs string
query_pnazwa(int i)
{
  int n;
  for (n=-1; previous_object(n) && !living(previous_object(n)); n--);
  if ((i<0)||(i>5))
    i=0;
  if (query_shadow_who()==previous_object(n))
    return query_shadow_who()->query_pnazwa(i);
  return nazwa[1][i];
}
public varargs string
query_name(int i)
{
  int n;
  object ob;
  for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
  if ((i<0)||(i>5))
    i=0;
    
  if (!query_shadow_who()->notmet_me(ob))
    return query_shadow_who()->query_name(i);
  return capitalize(query_nazwa(i));
}
public varargs string
query_Imie(mixed pobj,mixed przyp)
{
  int n;
  int j = sizeof(przym[0]);
  string tmp="";
  object ob;
  for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
  if (!objectp(pobj))
  {
    przyp = pobj;
    pobj = previous_object(n);
  }
  if (!intp(przyp))
  {
    if (stringp(przyp))
      przyp = atoi(przyp);
    else
      przyp = 0;
  }
  if ((prawdziwy && !query_shadow_who()->notmet_me(pobj)) || query_shadow_who()==pobj)
  	return query_shadow_who()->query_Imie(pobj, przyp);
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], przyp, rodz, 0)+" ";
  if (query_shadow_who()->query_prop(OBJ_I_INVIS))
  	return "("+capitalize(tmp+nazwa[0][przyp])+")";
  if (query_shadow_who()->query_prop(OBJ_I_HIDE))
  	return "["+capitalize(tmp+nazwa[0][przyp])+"]";
  return capitalize(tmp+nazwa[0][przyp]);
}
#if 0
public string
query_presentation()
{
  int n;
  object ob;
  
  for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
  if (!ob)
  	ob = previous_object(n+1);
  if (prawdziwy || query_shadow_who()==ob ||
  	MASTER_OB(ob)=="/cmd/live/social")
    return query_shadow_who()->query_presentation();
  return "Mroczny podroznik i poszukiwacz nieskonczonych prawd";
}
#endif
mixed
query_prop(string p)
{
	
	object ob = query_shadow_who();
	int n;
  for (n=-1; previous_object(n) && !living(previous_object(n)); n--);
	if (prawdziwy || ob==previous_object(n))
		return ob->query_prop(p);
	if (p==IMPERIUM_I_STWOR_CHAOSU)
		return 0;
	return ob->query_prop(p);
}
public varargs string
query_imie(mixed pobj, mixed przyp)
{
  object ob;
  int j = sizeof(przym[0]);
  string tmp="";
	int n;
  for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
  if (!objectp(pobj))
  {
    przyp = pobj;
    pobj = previous_object(n);
  }
  if (!intp(przyp))
  {
    if (stringp(przyp))
      przyp = atoi(przyp);
    else
      przyp = 0;
  }
  if ((prawdziwy && !query_shadow_who()->notmet_me(pobj)) || query_shadow_who()==pobj)
  	return query_shadow_who()->query_imie(pobj, przyp);
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], przyp, rodz, 0)+" ";
  if (query_shadow_who()->query_prop(OBJ_I_INVIS))
  	return "("+tmp+nazwa[0][przyp]+")";
  if (query_shadow_who()->query_prop(OBJ_I_HIDE))
  	return "["+tmp+nazwa[0][przyp]+"]";
  return tmp+nazwa[0][przyp];
}
string
long(mixed o=0)
{
	string *tmp, *tmp1;
	object sh = query_shadow_who();
	
	if (prawdziwy || o==sh)
		return sh->long(o);
	if (sh->query_gender()==G_FEMALE)
		tmp = explode(sh->long(o), ", znana jako:");
	else
		tmp = explode(sh->long(o),", znanym jako:");
	if (sizeof(tmp)>1)
	{
		tmp1 = explode(tmp[1],"\n");
		if (sizeof(tmp1)>1)
			tmp1 = exclude_array(tmp1, 1, 1);
		tmp[1] = implode(tmp1,"\n");
		return implode(tmp,".")+"\n";
	}
	return sh->long(o);
}
varargs string
short (mixed pobj, mixed przyp)
{
	int n,j=sizeof(przym[0]);
	object ob;
	string tmp="";
	for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
	if (!objectp(pobj))
	{
		przyp = pobj;
		pobj = (previous_object(n)?previous_object(n):previous_object(-1));
	}
	if (!intp(przyp))
	{
		
		if (stringp(przyp))
			przyp = atoi(przyp);
		else
			przyp = 0;
	}
	if ((prawdziwy && !query_shadow_who()->notmet_me(pobj)) || query_shadow_who()==pobj)
	{
  	return query_shadow_who()->short(pobj, przyp);
  	}
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], przyp, rodz, 0)+" ";
  
  return tmp+nazwa[0][przyp];
}
varargs string
plural_short (mixed pobj, mixed przyp)
{
	int n,j=sizeof(przym[0]);
	object ob;
	string tmp="";
	for (n=-1; (ob=previous_object(n)) && !living(ob); n--);
	if (!objectp(pobj))
	{
		przyp = pobj;
		pobj = (previous_object(n)?previous_object(n):previous_object(-1));
	}
	if (!intp(przyp))
	{
		
		if (stringp(przyp))
			przyp = atoi(przyp);
		else
			przyp = 0;
	}
	if ((prawdziwy && !query_shadow_who()->notmet_me(pobj)) || query_shadow_who()==pobj)
	{
  	return query_shadow_who()->plural_short(pobj, przyp);
  	}
  while (--j>=0)
  	tmp += oblicz_przym(przym[0][j], przym[1][j], przyp, rodz, 1)+" ";
  
  return tmp+nazwa[1][przyp];
}
public string *
parse_command_adjectiv1_id_list()
{
  return przym[0];
}
public string *
parse_command_adjectiv2_id_list()
{
  return przym[1];
}
public int *
parse_command_rodzaj_id_list(int i)
{
	mixed tmp=r_parse[i];
	if (prawdziwy)
		tmp += ({rodz});
	return tmp; 
}
public string *
parse_command_id_list(int k)
{
	mixed tmp=parse[k];
	if (prawdziwy)
		tmp += ({obiekt[k]});
	return tmp;
}
public string
race_sound()
{
/*
    mapping map;
    string str;
*/
	int n;
	string tmp;
  for (n=-1; previous_object(n) && !living(previous_object(n)); n--);
    if (prawdziwy)
        return query_shadow_who()->race_sound();
/*
    if ((map = racesound[race]) && (str = map[previous_object(n)->query_race()]))
        return str;
*/
    if (!(tmp = query_com_sounds()[previous_object(n)->query_race()]) || 
    	tmp=="")
    	tmp = "mowi z przekasem";
    return tmp;
}
public mapping
query_com_sounds()
{
  if (prawdziwy)
    return query_shadow_who()->query_com_sounds();
  return ([ "elf" : "mowi, zimnym przenikliwym szeptem",
  	    "gnom" : "szepcze, grobowym glosem",
  	    "krasnolud" : "wpatrujac sie w ciebie szepcze",
  	    "halfling" : "zlosliwie syczy",
  	    "ogr" : "paranoicznie chichoczac, mowi",
  	    "czlowiek" : "cedzac powoli slowa, mowi" ]); 
}
string
query_The_name(object ob)
{
	return query_Imie(ob, 0);
}
varargs string
query_the_name(mixed ob, mixed p)
{
	return query_imie(ob, p);
}
varargs string
query_art_name(mixed ob, mixed p)
{
	return query_imie(ob, p);
}
#if 0
void
notify_you_killed_my(object ob)
{
	object pom = query_shadow_who();
	mixed *tmp = ({ ({"Nachyli"+pom->koncowka("les","las")+
		" sie nad cialem "+
		ob->query_imie(tmp, PL_DOP)+" po czym szybkim ruchem "+
		"wyrywa"+pom->koncowka("les","las")+" cieply jeszcze "+
		"kawalek mieska.\nZacz"+pom->koncowka("ales","elas")+
		"przezuwac go ze smakiem.\n",
		QCIMIE(pom, PL_MIA)+" szybkim ruchem wyrwal"+
		pom->koncowka("","a")+" kawalek mieska z ciala "+
		QIMIE(ob, PL_DOP)+" i zacz"+pom->koncowka("al","ela")+
		" go powoli przezuwac.\n"}),
		({"command splun pod nogi "+ob->query_nazwa(PL_CEL)}) });
	query_shadow_who()->notify_you_killed_my(ob);
}
#endif
