/*
 *		Naszyjnik dla zabojcow {trolli, gigantow, smokow, demonow}.
 *
 *		Napisal : Mithandir ... 1998
 *
 */
 
inherit "/std/object.c";
inherit "/cmd/std/command_driver";

#include "mith_zabojcy.h"
#include <formulas.h>

#include "zabojcy.h";

#pragma no_inherit

setup_naszyjnik();

static mapping zabojcy=([]); // Tu przechowywujemy, kto jest jakim zabojca.
string *zatwierdzeni=({});

static object my_owner;

static int jaki_zabojca;
static int zalozony=0;

string szef;

create_object()
{
	ustaw_nazwe (({"naszyjnik","naszyjnika","naszyjnikowi","naszyjnik",
		"naszyjnikiem","naszyjniku"}),({"naszyjniki","naszyjnikow",
		"naszyjnikom","naszyjniki","naszyjnikami","naszyjnikach"}),
		PL_MESKI_NZYW);

	add_prop (OBJ_I_WEIGHT, 300);
	add_prop (OBJ_I_VALUE, 0);
	add_prop (OBJ_I_NO_DROP, "Nie mozesz wyrzucic naszyjnika. Jesli "+
		"chcesz sie go pozbyc, mozesz go zniszczyc.\n");
	setuid();
	seteuid(getuid());
		
	set_alarm(0.01, 0.0, setup_naszyjnik);	
	
}

int
usun_propy()
{
	remove_prop(OBJ_I_NO_DROP);
}

int
dodaj_propy()
{
	add_prop (OBJ_I_NO_DROP, "Nie mozesz wyrzucic naszyjnika. Jesli "+
		"chcesz sie go pozbyc, mozesz go zniszczyc.\n");
}


int
zatwierdzony(object kto)
{
	return (member_array(kto->query_real_name(), zatwierdzeni)>-1);
}


setup_naszyjnik()
{
	string przydawka, tmp;
	int przyp;
	string shorty=({});
	my_owner=environment(this_object());
	if (!(my_owner->query_login_from())) remove_object();
	restore_object(SAVE);
	if(!szef) szef="mithandir";
	zabojcy=restore_map(MAP);
	jaki_zabojca=zabojcy[my_owner->query_real_name()];
	przydawka=CZEGO_LM[PL_DOP][jaki_zabojca];
	while (przyp<=PL_MIE)
	{
		tmp=query_name(0, przyp++)+" zabojcy "+przydawka;
		shorty+=({tmp});
	}
	ustaw_shorty(shorty);
	add_prop (OBJ_I_VALUE, 240+240*10*jaki_zabojca);
	set_long("Jest to przepiekny "+short(PL_MIA)+" wykonany "+
	    WYKONANY[jaki_zabojca]+". Znac na nim slady mistrzowskiej roboty "+
	    "krasnoludzkich zlotnikow. Taki naszyjnik wykonany mogl zostac "+
	    "tylko w ktorejs z twierdz krasnoludzkich. Jest on symbolem "+
	    "przynaleznosci do Zabojcow "+
	    capitalize(CZEGO_LM[PL_DOP][jaki_zabojca])+".\n");
	update_actions();
}	
	
	

int
zniszcz(string str)
{
	if (str!="naszyjnik")
		return notify_fail("Co chcesz zniszczyc?\n");
	write("Niszczysz naszyjnik. Od tej pory nie jestes juz Zabojca.\n");
	zabojcy=restore_map(MAP);
	zabojcy=m_delete(zabojcy, TP->query_real_name());
	save_map(zabojcy, MAP);
	restore_object(SAVE);
	zatwierdzeni-=({TP->query_real_name()});
	save_object(SAVE);

  this_player()->clear_bit(1,0);

	say(QCIMIE(TP, PL_MIA)+" niszczy naszyjnik Zabojcy.\n");
	set_alarm(0.01, 0.0, remove_object);
	return 1;
}

int
wear(string co)
{
    notify_fail("Co chcesz zalozyc?\n");
    if (co!="naszyjnik") return 0;
    if (member_array(my_owner->query_real_name(), zatwierdzeni)==-1)
    {
    	notify_fail("Nie odwazysz sie zalozyc naszyjnik Zabojcow przed oficjalnym przyjeciem przez ich oficjalnego zwierzchnika.\n"); 
    	return 0;
    }
    this_player()->add_subloc(ZABOJCY_SUBLOC, this_object());
    write("Zakladasz na szyje "+short(PL_BIE)+".\n");
    say(QCIMIE(TP,PL_MIA)+" zaklada na szyje "+short(PL_BIE)+".\n");
    move(TP, ZABOJCY_SUBLOC);
    zalozony=1;
    update_actions();
    return 1;
}

int
remove(string co)
{
    notify_fail("Co chcesz zdjac?\n");
    if (co!="naszyjnik") return 0;
    this_player()->remove_subloc(ZABOJCY_SUBLOC);
    write("Zdejmujesz "+short(PL_BIE)+".\n");
    say(QCIMIE(TP,PL_MIA)+" zdejmuje "+short(PL_BIE)+".\n");
    zalozony=0;
    move(TP);
    update_actions();
    return 1;
}

int
przekaz(string str)
{
	object *komu;
	NO_STR("Poprawna skladnia: przekaz wladze <komu>.\n");
	komu=parse_this(str, "'wladze' %l:"+PL_CEL);
	if (sizeof(komu)!=1)
	   return notify_fail("Komu chcesz przekazac wladze nad Zabojcami?\n");
	target("wyciaga rece w twoja strone, przekazujac ci blogoslawienstwo "+
		"Throrina i wladze nad Zabojcami.", komu);
	actor("Wyciagasz rece w kierunku",komu, PL_DOP," przekazujac "+
	    komu[0]->koncowka("mu","jej")+" blogoslawienstwo Throrina i wladze "+
	    "nad Zabojcami.");
	all2act("wyciaga rece w kierunku",komu, PL_DOP," szepczac "+
	    "niezrozumiale dla ciebie slowa blogoslawienstwa.");
	restore_object(SAVE);
	szef=komu[0]->query_real_name();
	save_object(SAVE);
	set_this_player(komu[0]);
	all_inventory(komu[0])->init();

	return 1;
	
}
	
int
przyjmij(string str)
{
	object kogo, *ktosie;
	NO_STR("Poprawna skladnia: przyjmij do zabojcow <kogo>.\n");
	ktosie=parse_this(str, "'do' 'zabojcow' %l:"+PL_BIE);
	if (sizeof(ktosie)!=1)
	   return notify_fail("Kogo chcesz przyjac do zabojcow?\n");
	kogo=ktosie[0];
	if (!(kogo->query_subloc_obj(ZABOJCY_SUBLOC)))
	   return notify_fail(kogo->query_Imie(TP, PL_MIA)+" musi miec zalozony "+
	   "naszyjnik zabojcy.\n");

  // KLUB  
  if(kogo->test_bit("imperium",1,0))
  {
    kogo->catch_msg("Nie mozesz przylaczyc sie do tego klubu, jestes juz bowiem "+
      "w innym.\n");
    return notify_fail(kogo->query_Imie(TP, PL_MIA)+" nie moze zostac Zabojca!\n");
  }


	if (zatwierdzony(kogo))
	   return notify_fail(kogo->query_Imie(TP, PL_MIA)+" juz jest Zabojca!\n");
	restore_object(SAVE);
	zatwierdzeni+=({kogo->query_real_name()});
	save_object(SAVE);
	TP->catch_msg("Wyciagasz rece w kierunku",ktosie, PL_DOP," blogoslawiac "+
	   kogo->koncowka("go","ja")+" w imieniu Throrina.\n");
	target("wyciaga rece w twoim kierunku, blogoslawiac cie w imieniu Throrina.", ktosie);
	all2act("wyciaga rece w kierunku",ktosie, PL_DOP," blogoslawiac "+
	           ktosie->koncowka("go","ja")+" w imieniu Throrina.");
	set_this_player(kogo);
	all_inventory(kogo)->init();
 	return 1;
}

void
init()
{
    ::init ();
    add_action(zniszcz,"zniszcz");
    if (zalozony) add_action(remove,"zdejmij");
    else add_action(wear,"zaloz");
    restore_object(SAVE);
    if (szef==my_owner->query_real_name())
    {
    	add_action(przekaz,"przekaz");
    	add_action(przyjmij,"przyjmij");
    }
    if (member_array(my_owner->query_real_name(), zatwierdzeni)>-1)
    	init_emoty();
}

void
leave_env(object from, object to)
{
    from->remove_subloc(ZABOJCY_SUBLOC);
    ::leave_env(from, to);
}

void
enter_env(object dest, object old)
{
    if (old->query_login_from())
   	remove_object();	
    if (!(dest->query_login_from()))
	remove_object();
}     

string
show_subloc(string subloc, object on_obj, object for_obj)
{
    if (on_obj == for_obj)
        return "Na szyi nosisz "+short(PL_BIE)+", wykonany z oprawionych w kosztowny kruszec zebow "+CZEGO_LP[PL_BIE][jaki_zabojca]+".\n";
    return "Na szyi nosi "+short(PL_BIE)+", wykonany z oprawionych w kosztowny kruszec zebow "+CZEGO_LP[PL_BIE][jaki_zabojca]+".\n";
}


string 
query_auto_load ()
{
	if (my_owner->query_hp() || szef==my_owner->query_real_name())
	        return MASTER_OB(this_object());
	zabojcy=restore_map(MAP);
	zabojcy=m_delete(zabojcy, my_owner->query_real_name());
	save_map(zabojcy, MAP);
	restore_object(SAVE);
	zatwierdzeni-=({my_owner->query_real_name()});
	save_object(SAVE);
	return 0;
}

set_szef(string str)
{
	restore_object(SAVE);
	szef=str;
	save_object(SAVE);
}
