
#include </sys/czary.h>

int konc=0;
int konc2=0;
object *summon=({});


void
eat_mana( int ile )
{
TP->set_mana(TP->query_mana()-ile);
}


void
check_resist( object ob, object pl )
{

    if (ob->query_prop(MAGIC_I_RES_DEATH) > 0 )
	pl->catch_msg("Wyczuwasz, ze "+QIMIE(ob,PL_MIA)+" jest w jakims "+
	    "stopniu niewrazliwy na magie umarlych.\n");
	
}

void
hurt_all( int dem, string str)
{
int i;
object *livs = all_inventory(environment(TP));
livs = FILTER_LIVE(livs);
    if (!str)
	str="";

    for ( i = 0; i < sizeof(livs); i++ )
	{
	if (livs[i] != TP)
	    {
	    if (!livs[i]->query_prop("mag"))
	    livs[i]->reduce_hit_point(dem);	
	    livs[i]->catch_msg(""+str+"");
	    if (livs[i]->query_hp()<1)
		livs[i]->do_die();
	    }
	}

}


int
query_chance( int spell )
{
if (TP->query_prop("szef_nekro") && spell > 2 )
    return 95;

    if (TP->query_stat(7) > 135 && spell > 3 )
	return 80;
    
	
    switch(spell)
	{
	
	case 0:
	return 100;
	break;	
	    case 1:
	    return 90;
	    break;
		case 2:
		return 80;
		break;
		    case 3:
		    return 70;
		    break;
		         case 4:
			 return 60;
			 break;
			     case 5:
			     return 50;
			     break;
			case 6:
			return 40;
			break;
		    case 7:
		    return 30;
		    break;
		case 8:
		return 20;
		break;
	case 9:
	return 10;
	break;
default:
return 5;
break;	
}
}


void
think()
{
write("Koncentrujesz sie.\n");
konc=0;
}

void
think2()
{
write("Koncentrujesz sie.\n");
konc2=0;
}

void
hurt_player( object ob, int dem )
{
int tmp;
int h;

ob->reduce_hit_point(dem);

    if (ob->query_hp()<1)
	{
	setuid();
	seteuid(getuid());
	TP->add_exp(1,(ob->query_average_stat()*10));
	ob->do_die(TP);
	}
}

void
apar( object ob )
{
ob->remove_stun();
think();
}



int
pal( object *kogo )
{
int damage;

    if (!present(kogo[0],environment(TP)))
	{
	write("Twoj przeciwnik ci uciekl.\n");
	return 1;
	}
	
	TP->catch_msg("Syczac cicho slowa zaklecia kierujesz zacisnieta dlon w strone "+QIMIE(kogo[0],PL_DOP)+
		    ", po czym otwierasz ja uwalniajac szkarlatny ogien.\n"+QCIMIE(kogo[0],PL_MIA)+" zostaje "+
		    kogo[0]->koncowka("spowity", "spowita") + " plomieniami poteznego wybuchu.\n");
		    
	tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" syczac cicho jakies dziwne slowa kieruje zacisnieta "+
	"dlon w kierunku "+QIMIE(kogo[0],PL_DOP)+", po czym otwiera ja uwalniajac szkarlatny ogien.\n"+
	QCIMIE(kogo[0],PL_MIA)+" zostaje " + kogo[0]->koncowka("spowity", "spowita") +
	" plomieniami poteznego wybuchu.\n",({TP,kogo[0]}));

	kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" syczac cicho jakies dziwne slowa kieruje w twoja strone "+
	"zacisnieta dlon, po czym otwiera ja uwalniajac szkarlatny ogien.\nZostajesz " + kogo[0]->koncowka("spowity", "spowita") +
	" plomieniami poteznego wybuchu!\n");

        damage=modify_damage((TP->query_stat(4)*4),kogo[0],MAGIC_I_RES_DEATH);
        hurt_player( kogo[0], damage );
	TP->attack_object(kogo[0]);
    eat_mana(30);
	
    check_resist(kogo[0],TP);
}

int
mspal( string str )
{
int szansa;
int kosc;
object *kogo = parse_this(str,"%l:"+PL_BIE);
if ((str == "przeciwnika" || str == "wroga") && this_player()->query_attack())
    kogo+=({TP->query_attack()});
    

    if (!sizeof(kogo))
	{
	write("Mspal kogo?\n");
	return 1;
	}

    if ( TP->query_mana() < 30 )
	    {
	    write("Jestes zbyt wyczerpany.\n");
	    return 1;
	    }
	if ( konc == 1 )
	    {
	    write("Musisz troche odpoczac.\n");
	    return 1;
	    }
    kosc = random(100);

    szansa = query_chance( 1 );
	if ( kosc > szansa )
	    {
	    write("Koncentrujesz swoje magiczne moce starajac sie "+
		"opanowac zaklecie, jednak nie udaje ci sie to.\n");
	        eat_mana(25);
		return 1;
    	}

	
    
    set_alarm(8.0,0.0,"think");
    TP->catch_msg("Koncentrujesz sie.\n");
    tell_room(environment(TP),"Nagle dlonie "+QIMIE(TP,PL_DOP)+" zaczynaja "+
	    "plonac czarnym ogniem.\n",({TP}));
    set_alarm(2.0,0.0,"pal",kogo);
    
    konc=1;

    return 1;
}


int
mprzywolaj( string str )
{
int szansa;
int kosc;
int i,j;
object ob;
object *enemy;
int mummy=0;
int upior=0;
object player = environment(this_object());
szansa = query_chance( 3 );

    
    if ( str == "pomoc" )
	{
	enemy=player->query_enemy(-1);
	for ( i = 0; i < sizeof(summon); i++ )
	    {
	if (!present(summon[i],environment(player)))
	    {
	    summon[i]->move(environment(TP));
	    summon[i]->set_follow(TP,0.1,1);
	    }
	    summon[i]->command("wesprzyj "+player->query_real_name(PL_BIE)+"");
	    }
	return 1;
	}

    if ( str == "zniszczenie" )
	{
	for ( i = 0; i < sizeof(summon); i++ )
	    {
		summon->remove_object();
	    }
	return 1;
	}





    if ( str != "szkielety" )
	{
	if ( str == "mumie" || str == "upiora" )
	    {
	    if (str=="mumie")
	    mummy=1;    
	    if (str=="upiora")
	    upior=1;
	    
	    } else {
	write("Mprzywolaj co?\n");
	return 1;
	}

	}

    for ( i = 0; i < sizeof(summon); i++ )
	if (summon[i]->query_hp() < 1)
	    summon-=({summon[i]});

    if (sizeof(summon) >= 6)
	{
	write("Nie zdolasz utrzymac tylu ozywiencow.\n");
	return 1;
	}
    
	if (player->query_mana() < 150)
	    {
	    write("Jestes zbyt wyczerpany.\n");
	    return 1;
	    }
	if ( upior == 1 && player->query_mana() < 700 )
	    {
	    write("Jestes zbyt wyczerpany.\n");
	    return 1;
	    }

	    
	    
	if ( konc == 1 )
	    {
	    write("Musisz troche odpoczac.\n");
	    return 1;
	    }
	if ( mummy == 1 && konc2 == 1 )
	    {
	    write("Odsapnij troche.\n");
	    return 1;
	    }
	if ( upior == 1 && player->query_prop("h_upior") )
	    {
	    write("Tylko raz mogles przyzwac upiora.\n");
	    return 1;
	    }
	
    kosc = random(100);
    
    set_alarm(15.0,0.0,"think2");
    konc2=1;
    eat_mana(150);
    if ( kosc < szansa )
	{
	write("Skupiasz swoje magiczne moce, zakreslasz krag dlonia, a przed "+
	    "toba otwieraja sie wrota do sfer smierci! Zen przywolujesz "+
	    "umarlych, by ci wiernie ci sluzyli.\n");
	tell_room(environment(player),""+QCIMIE(player,PL_MIA)+" mamrocze "+
	    "jakies slowa pod nosem, zakresla krag dlonia, a przed "+
	    "nim otwiera sie migaczacy, czarny portal! Slyszysz "+
	    "jeki umarlych, ktorzy po chwili zaczynaja z niego "+
	    "wychodzic i stawac obok swojego wladcy.\n",({player}));
	setuid();
	seteuid(getuid());
	
	if ( mummy == 1 )
	    {
	    ob=clone_object("/d/Imperium/Necro/npc/mumia.c");
	    ob->move(environment(player));
	    ob->command("wesprzyj "+player->query_real_name(PL_BIE)+"");
	    ob->set_master(player);
	    ob->set_follow(player,0.1,1);
	    summon += ({ob});
	    mummy=0;
	    player->set_mana(player->query_mana()-250);
	    return 1;
	    }
	if ( upior == 1 )
	    {
	    ob=clone_object("/d/Imperium/Necro/npc/upior.c");
	    ob->move(environment(player));
	    ob->command("wesprzyj "+player->query_real_name(PL_BIE)+"");
	    ob->set_master(player);
	    ob->set_follow(player,0.1,1);
	    summon += ({ob});
	    upior=0;
	    player->add_prop("h_upior",1);
	    player->set_mana(player->query_mana()-700);
	    return 1;
	    }
	
	for ( i = 0; i < 3; i++ )
	    {
	    ob=clone_object("/d/Imperium/Kreutz/npc/szkielet");
	    ob->modify_stat(0,120);
	    ob->modify_stat(1,90);
	    ob->modify_stat(2,90);
	    ob->set_hp(4000);
	    ob->set_skill(SS_WEP_SWORD,90);
	    ob->set_skill(SS_SHIELD_PARRY,90);
	    ob->set_skill(SS_DEFENCE,70);
	    ob->set_skill(SS_PARRY,50);
	    summon += ({ob});
	    ob->move(environment(player));	    
	    ob->set_follow(player,0.1,1);
	    ob->command("wesprzyj "+player->query_real_name(PL_BIE)+"");
	    }
	return 1;
	
	}
	
	write("Nie udaje ci sie skupic.\n");
	return 1;
	
}




int
mwyssaj( string str )
{
int kosc;
int damage;
int szansa;
object *kogo = parse_this(str,"'zycie' 'z' %l:"+PL_DOP);
if ((str == "zycie z przeciwnika" || str == "zycie z wroga") && this_player()->query_attack())
    kogo+=({TP->query_attack()});
        

    if (!sizeof(kogo))
	{
	write("Wyssaj zycie z kogo?\n");
	return 1;
	}


szansa = query_chance( 0 );

    if (!sizeof(kogo))
	{
	write("Mwyssaj zycie z kogo?\n");
	return 1;
	}

	if ( TP->query_mana() < 50 )
	    {
	    write("Jestes zbyt wyczerpany.\n");
	    return 1;
	    }
	if ( konc == 1 )
	    {
	    write("Musisz troche odpoczac.\n");
	    return 1;
	    }
	
    kosc = random(100);
    
    set_alarm(15.0,0.0,"think");
    konc=1;
    eat_mana(2)
	if ( kosc < szansa )
	    {
	    TP->catch_msg("Wysysasz sily witalne z "+QIMIE(kogo[0],PL_DOP)+".\n");
	    kogo[0]->catch_msg("Czujesz, jak jakas potezna moc wdziera "+
		"sie w najglebsze zakadki twego umyslu i przez moment "+
		"wysysa z ciebie zycie.\n");
damage=modify_damage(500,kogo[0],MAGIC_I_RES_DEATH);
TP->set_hp(TP->query_hp()+damage);
kogo[0]->set_hp(kogo[0]->query_hp()-damage);


check_resist(kogo[0],TP);


	    return 1;
	    }
write("Nie udaje ci sie skupic.\n");
return 1;

}



int
mzniszcz( string str )
{
int i;
int kosc;
int szansa;
object *ar;
object *kogo = parse_this(str,"'zbroje' %l:"+PL_DOP);
if ((str == "zbroje przeciwnika" || str == "zbroje wroga") && this_player()->query_attack())
    kogo+=({TP->query_attack()});
        
    if (!sizeof(kogo))
	{
	write("Mzniszcz zbroje kogo?\n");
	return 1;
	}
    szansa = query_chance(6);
    
    if ( TP->query_mana() < 50 )
	    {
	    write("Jestes zbyt wyczerpany.\n");
	    return 1;
	    }
	if ( konc2 == 1 )
	    {
	    write("Musisz troche odpoczac.\n");
	    return 1;
	    }

    kosc = random(100);
    konc2=1;
    set_alarm(25.0,0.0,"think2");
    eat_mana(50);
    
    if ( kosc <= szansa )
	{
	TP->catch_msg("Koncentrujesz swoje magiczne moce, a "+
	"na twej dloni pojawia sie purpurowa kula dymu. Po chwili "+
	"z impetem pchasz ja w strone "+QIMIE(kogo[0],PL_DOP)+
	", a ta spowija " +kogo[0]->koncowka("go", "ja")+ ", po czym sie ulatnia...\n");
	tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" koncentruje "+
	"sie, a na jego dloni pojawia sie purpurowa kula dymu. "+
	"Po chwili z impetem pcha ja w strone "+QIMIE(kogo[0],PL_BIE)+
	", spowijajac " +kogo[0]->koncowka("jego", "jej")+ " cialo dymem, ktory po chwili sie ulatnia...\n",({TP,kogo[0]}));
	kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" koncentruje sie, "+
	"po czym uderza w ciebie purpurowa kula dymu, ktora "+
	"jednak nie zadaje zadnych obrazen...\n");
	
	ar=kogo[0]->query_armour(-1);
	for ( i = 0; i < sizeof(ar); i++ )
	    {
	    ar[i]->set_condition(ar[i]->query_condition()+10);
	    }
	    
	
	return 1;
	}
    
    
    
    
    
    
    write("Nie udaje ci sie rzucic zaklecia.\n");
    return 1;

}


int
mtell( string str )
{

  string who, what;
  object ob;
   if (!stringp(str))
   {
   notify_fail("Mtell who what?\n");
   return 0;
   }
   if (sscanf(str, "%s to %s", who, what) != 2 &&
   sscanf(str, "%s %s", who, what) != 2)
   {
   notify_fail("Mtell kto co?\n");
  return 0;
								   
 }
  ob = find_living(who);
     if (!objectp(ob))
     {
         notify_fail("Nie ma takiej osoby jak:" + who + ".\n");
             return 0;
    }

    if (ob->query_wiz_level())
	{
	write("Za cos takiego mozna dostac wpierdol, wiec kurwa wara!\n");
	return 1;
	}

	TP->catch_msg("Mowisz do "+QIMIE(ob,PL_DOP)+": "+what+"\n");	
	ob->catch_msg("Nagle ogarnia cie potworne zimno, po chwili "+
	"obecnosc smierci staje sie blizsza, a zza swiatow dobiega "+
	"cie jej powolny ton mowiacy: "+what+"\n");

		return 1;
				
}


int 
modeslij( string str )
{
int i;
object *kogo = parse_this(str, "%l:"+PL_BIE);


    if (!sizeof(kogo))
	{
	write("Odeslij kogo?\n");
	return 1;
	}
	
    if (!kogo[0]->query_prop(LIVE_I_UNDEAD))
	{
	write("Mozesz odeslac tylko ozywienca.\n");
	return 1;
	}
    if (interactive(kogo[0]))
	{
	write("Nie mozesz odeslac gracza.\n");
	return 1;
	}

	for ( i = 0; i < sizeof(summon); i++ )
	    {
	    if (kogo[0] == summon[i])
		{
		TP->catch_msg("Niszczysz "+QIMIE(kogo[0],PL_BIE)+".\n");
		summon -= ({kogo[0]});
		kogo[0]->remove_object();
		return 1;
		}	    
	    }
	    
	    TP->catch_msg("Niszczysz "+QIMIE(kogo[0],PL_BIE)+".\n");
		kogo[0]->remove_object();
	return 1;
}







int
mwskaz( string str )
{
int szansa;
int damage;
int kosc;
object *kogo = parse_this(str,"%l:"+PL_BIE);
if ((str == "przeciwnika" || str == "wroga") && this_player()->query_attack())
    kogo+=({TP->query_attack()});
    
szansa = query_chance( 1 );

    if (!sizeof(kogo))
	{
	write("Mwskaz kogo?\n");
	return 1;
	}

    if ( TP->query_mana() < 50 )
	    {
	    write("Jestes zbyt wyczerpany.\n");
	    return 1;
	    }
	if ( konc2 == 1 )
	    {
	    write("Musisz troche odpoczac.\n");
	    return 1;
	    }
	
    kosc = random(100);
    
    set_alarm(5.0,0.0,"think2");
    konc2=1;
	if ( kosc > szansa )
	    {
	    write("Koncentrujesz swoje magiczne moce starajac sie "+
		"opanowac zaklecie, jednak nie udaje ci sie to.\n");
		eat_mana(10);
		return 1;
	}
	
	TP->catch_msg("Koncentrujesz sie.\n"+
	    "Skupiasz swe magiczne mocy, bo po chwili wskazac "+
	    ""+QIMIE(kogo[0],PL_BIE)+". Z twojej dloni wystrzeliwuje "+
	    "czarny piorun, ktory z impetem uderza w twoja ofiare "+
	    "wykrzywiajac jej twarz w grymasie zszokowania!\n"); 
	tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" wystawia "+
	    "swa szponiasta, spowita czarnym ogniem "+
	    "dlon w kierunku "+QIMIE(kogo[0],PL_DOP)+" wypuszczajac "+
	    "uwieziona wen energie!\n"+
	    "Widzisz jak czarny piorun z impetem trafia w ofiare!\n",({TP,kogo[0]}));
	kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" wystawia w twoim kierunku "+
	    "swa szponiasta, plonaca czarnym ogniem dlon, z ktorej "+
	    "nagle wystrzeliwuje czarny piorun, ktory z impetem "+
	    "uderza w twoje cialo!\n");
	    
        hurt_player( kogo[0], damage );
	TP->attack_object(kogo[0]);
    eat_mana(2);
	
    check_resist(kogo[0],TP);

    return 1;
}



int
mpomoc( string str )
{

    if (!str)
	{
	write("Pomoc:\n"+
	      "Mspal - kula czarnego ognia.\n"+
	      "Mwskaz - piorun smierci.\n"+
	      "Mwyssaj - odebranie sil witalnych.\n"+
	      "Mprzywolaj (mumie,szkielety,upiora) - przyzwania.\n"+
	      "Mprzywolaj zniszczenie - niszczy ozywiencow.\n"+
	      "Mprzywolaj pomoc - nakazuje ozywiencom wsparcie.\n"+
	      "Modeslij - odeslanie pojedynczego ozywienca.\n"+
	      "Mtell - Mowa poza wymiarem.\n"+
	      "Mzniszcz - Niszczenie zbroi przeciwnika.\n"+
	      "Mzbroja - Magiczny pancerz.\n"+
	      "Mdotknij - Mana z czaszki.\n"+
	      "\n");	
	return 1;
	}
write("Mpomoc?\n");
return 1;
}

int
mzbroja( string str )
{

    if (str)
	{
	write("Mzbroja?\n");
	return 1;
	}
    
    if (TP->query_mana() < 40 )
	{
	write("Jestes zbyt wyczerpany.\n");
	return 1;
	}
	
    if (TP->query_prop("_ma_mag_pancerz_"))
	{
	write("Nie mozesz jeszcze rzucic tego zaklecia.\n");
	return 1;
	}
	
	setuid();
	seteuid(getuid());
	
	clone_object(OBJ+"pancerz")->move(this_player());

	TP->catch_msg("Recytujesz slowa starozytnego zaklecia, a po "+
	    "chwili czujesz jak chlod smierci otacza twoje cialo.\n");
	
	tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" wypowiada "+
	    "zaklecie, ktora okrywa jego sylwetke mroczna aura "+
	    "smierci.\n",({TP}));
	
	eat_mana(40);
	    
    return 1;

}
