/* magiczny pierscien ognia
 * napisane przez Alfena
 */


#include "local.h"
#include <filter_funs.h>
#include <cmdparse.h>
#include <composite.h>
#include <pl.h>
#include <macros.h>
#include <wa_types.h>
#include <stdproperties.h>

inherit "/std/armour";


void
create_armour()
{
	ustaw_nazwe(({ "pierscien", "pierscienia", "pierscieniowi",
            "pierscien", "pierscieniem", "pierscieniu" }),
            ({ "pierscienie", "pierscieni", "pierscieniom", "pierscienie",
            "pierscieniami", "pierscieniach" }), PL_MESKI_NOS_NZYW);
	dodaj_przym("zakrwawiony","zakrwawieni");
	
	set_long(capitalize(short(PL_MIA))+" zostal wykonany z dziwnego, "+
		"czerwonego metalu. Wzdluz scianek wyryto znaki "+
		"runiczne, teraz jednak pokryte sa zakrzepla krwia. "+
		"Zwienczeniem pierscienia zdaje sie byc ognistoczerwony "+
		"kamien, z wygladu przypominajacy rubin. We wnetrzu "+
		"owego kamienia tli sie niewielka iskierka.\n");
	
	set_slots(A_ANY_FINGER);
	
	add_item(({"runy","zakrwawione runy"}),
		"Zauwazasz, iz lekki zielonkawy poblask, otaczjacy runy, "+
		"jest w calosci "+
		"pochlaniany przez zakrzepla krew.\n");
	add_item(({"ognistoczerwony rubin","rubin"}),
		"Ten pieknie oszlifowany kamien tylko wygladem przypomina "+
		"rubin. W rzeczywistosci jest to zwykly kawalek krysztalu, "+
		
	add_prop(OBJ_I_VALUE, 24000);
	add_prop(OBJ_I_WEIGHT, 10);
	add_prop(OBJ_I_VOLUME, 1);
	
	add_prop(MAGIC_AM_MAGIC, ({22, "enchantment"}));
	add_prop(MAGIC_AM_ID_INFO, ({30,
	"Pierscien ten tylko, w rekach zlego moc swa objawi.",
	40,"Wrogow kula ognista porazi, tym silniejsza, im "+
	"wladca pierscienia silnij z mrokiem zwiazan bedzie"}) );
	add_prop(OBJ_I_IS_MAGIC_ARMOUR,1);
}


void
init()
{
	::init();
	add_action("do_skieruj","skieruj");
}


int
do_skieruj(string s)
{
	object *ob = all_inventory(environment(this_player())), *wr, *tmp;
	int align, r_hp, dam;
	object tp = this_player();
	
	notify_fail("Skieruj pierscien w czyja strone ?\n");
	if (!ob || !s || s==""  || !query_worn())
		return 0;
	ob = FILTER_LIVE(ob);
	ob -= ({tp});
	tmp = ob + ({});
	if (!ob)
		return 0;
	ob = FILTER_IS_SEEN(tp, ob);
	if (!ob)
		return 0;
	if (!parse_command(s, ob, " 'pierscien' 'w' 'strone' %l:"+PL_DOP, wr))
	{
		if (!parse_command(s, ob, " 'pierscien' "+
		"'w' %o:"+PL_DOP+" 'strone' ", wr))
		return 0;
	}
	wr = NORMAL_ACCESS(wr,0,0);
	if (sizeof(wr) && sizeof(wr)>1)
		return 0;
	tp->set_obiekty_zaimkow(wr);
	say(QCIMIE(tp, PL_MIA) + " skierwal"+tp->koncowka("","a")+
			" "+short(PL_BIE)+ " w strone "+
			QIMIE(wr[0], PL_DOP)+".\n", ({tp, wr[0]}));
	wr[0]->catch_msg(QCIMIE(tp, PL_MIA) + " skierwal"+tp->koncowka("","a")+
			" "+short(PL_BIE)+ " w Twoja strone.\n");
	align = tp->query_alignment();
	dam = 2;
	if (align < 0)
		dam = -align;
	align += 300;
	if (align<0)
		align = -align;
	if ((tp->query_mana()-align)<0)
	{
		align /= 2;
		dam /= 2;
		if ((tp->query_mana()-align)<0)
		{
		write("Nie jestes w stanie zmusic "+
			short(PL_DOP)+" do posluszenstwa.\n");
		return 1;
		}
	}
	set_alarm(10.0, 0.0, "uderzenie",tp, wr[0], dam);
	
	write("Czujesz jak tajemnicza moc wysysa z Ciebie "+
		"czesc sil umyslowych.\n");
	tell_room(environment(tp), capitalize(short(PL_MIA))+
			" rozjarzyl sie "+
			"ognistoczerwona poswiata.\n");
	tp->add_mana(-align);
	return 1;
}



void
uderzenie(object tp, object wr, int dam)
{
	mixed *tmp = ({}), *kogo=({}), *ob = all_inventory(environment(tp));
	int i, j, k;
	string jak="",co="";
	mixed *p1, *p2;
	
#if 0
	if (!wr->query_attack())
		tp->attack_object(wr);
	else
#endif
		if (member_array(wr, (tmp = tp->query_enemy(-1)))!=-1)
			kogo += tmp- ({wr});
	kogo += ({wr});
	ob -= kogo;
	switch(dam)
	{
		case 0..20:
			co="Blyskawica";
			jak = "wyladowaniami";
			break;
		case  21..100:
			co="Zielonkawa kula";
			jak="zgnilozielona poswiata";
			break;
		case 101..200:
			co="Ognista wlocznia";
			jak = "plomieniami";
			break;
		case 201..400:
			co="Kula ognia";
			jak="plomieniami";
			break;
		default:
			co="Potezna kula ognia";
			jak="palacymi plomieniami";
	}
	ob = FILTER_PLAYERS(ob);
	i = sizeof(ob);
	while (--i>=0)
	{
	ob[i]->catch_msg(co+" uformowala "+
			"sie tuz przed skrzacym sie na pierscieniu rubinem,"+
			" po czym"+(sizeof(kogo)>1?", rozdzielajac sie,":"")+
			" blyskawicznie poszybowala w kierunku ");
	ob[i]->catch_msg(FO_COMPOSITE_LIVE(kogo, ob[i], PL_DOP)+".\n");
	}
#if 0
	write(", rozbijajac sie na "+(sizeof(kogo)>1?
			"cialach":"ciele") + " i spowijajac je "+jak+".\n");
#endif
	
	

	ob = kogo+({});
	tmp = ({({})});
	tmp[0] = ({kogo[0]});
	ob -= ({kogo[0]});
	i = sizeof(ob);
	j = 0;
	while (sizeof(ob))
	{
		while (--i>=0)
			if (environment(ob[i])==environment(tmp[j][0]))
			{
				tmp[j] += ({ob[i]});
			}
		ob -= tmp[j];
		j++;
		if (sizeof(ob))
			tmp += ({ob[0]});
		ob -= ({ob[0]});
	}
	i=sizeof(tmp);
	while (--i>=0)
	{
		j = sizeof(tmp[i]);
		if (j>1)
		{
			if (environment(tmp[i][0])==environment(tp))
			while (--j>=0)
			{
				tmp[i][j]->catch_msg(co+" uformowala "+
			"sie tuz przed skrzacym sie na pierscieniu rubinem,"+
			" po czym"+(sizeof(tmp[i])>1?", rozdzielajac sie,":"")+
			" blyskawicznie poszybowala w kierunku ");
				tmp[i][j]->catch_msg(FO_COMPOSITE_LIVE(
					tmp[i]-tmp[i][j], tmp[i][j], PL_DOP)+
					" oraz twoim, spowijajac was "+
					""+jak+".\n");
			}
			else
			while(--j>=0)
			{
				tmp[i][j]->catch_msg(co+" nadleciala "+
			" po czym"+(sizeof(tmp[i])>1?", rozdzielajac sie,":"")+
			" blyskawicznie poszybowala w kierunku ");
				tmp[i][j]->catch_msg(FO_COMPOSITE_LIVE(
					tmp[i]-tmp[i][j], tmp[i][j], PL_DOP)+
					" oraz twoim, spowijajac was "+
					jak+".\n");
			}
		}
		else
			if (environment(tmp[i][0])==environment(tp))
				tmp[i][0]->catch_msg(co+" uformowala "+
			"sie tuz przed skrzacym sie na pierscieniu rubinem,"+
				", po czym uderzyla w Twoje cialo"+
					", spowijajac "+
					"je "+jak+".\n");
			else
				tmp[i][0]->catch_msg(co+" nadleciala "+
			"z ogromna predkoscia"+
				", po czym uderzyla w Twoje cialo"+
					", spowijajac "+
					"je "+jak+".\n");
		p1 = FILTER_PLAYERS(all_inventory(environment(tmp[i][0])));
		p1 -= tmp[i];
		k = sizeof(p1);
		while (--k>=0)
		p1[k]->catch_msg(co + 
			" uderzyla w "+FO_COMPOSITE_LIVE(tmp[i],p1[k],PL_BIE)+
			", rozbijajac sie na "+(sizeof(tmp[i])>1?
			"ich cialach":
			(tmp[i][0]->koncowka("jego","jej")+" ciele")) + 
			" i spowijajac je "+jak+".\n");
	}
	i=sizeof(kogo);
	while(--i>=0)
	{
		kogo[i]->hit_me(dam, MAGIC_DT, random(80)+20, tp, -1);
		dam /= 2;
	}
}
