inherit "/cmd/std/command_driver";

#include "mith.h"
#include "ryc_zak.h"
#include "funkcje.h"

dodaj_paraliz(object komu, int czas);

spell_attack(object kto, object kogo)
{
    // Mor: znowu bezsensowne sprawdzanie RZ_SPECJAL...
    // on nie ma prawa tu byc! (usunalem)

    object mlot = kto->query_weapon(W_RIGHT) || kto->query_weapon(W_BOTH);
    string opis=mlot->short(PL_NAR);
    if (!mlot)
    {
   	// Mor: z racji tego, ze jezeli w tym miejscu nie ma mlota
	// tracony jest wlasciwy atak przydalby sie inny opis (ja sie nie podejmuje)
	// trzeba takze zauwazyc, ze jest krotka chwila w ktorej bron
	// mozna zmienic... ja osobiscie nie bardzo wiem co tu sprwdzic zeby
	// tak nie bylo
	kto->catch_msg("Aby moc ogluszac przeciwnika, musisz dzierzyc"
		       +" mlot.\n");
	return 0;
    }
    kto->add_prop(RZ_SPECJAL, set_alarm(PRZERWA, 0.0, "usun_specjala", kto));
    if (trafil (kto, kogo, mlot->query_wt(), RZ_OGLUSZANIE))
    {
	int efekt, czas;
	efekt = sila_ciosu(kto, kogo, RZ_OGLUSZANIE, A_HEAD);
	if (efekt == 0)
	{
	    target("niespodzianie uderza cie " + opis + " w glowe, "
		   +"nie wyrzadzajac ci jednak zadnej szkody.",
		   ({kogo}));
	    all2act("niespodziewanie uderza ",({kogo}),PL_BIE," " +
	            opis + " w glowe, nie wyrzadzajac "
	            +kogo->query_zaimek(PL_CEL)+" zadnej szkody.");
	    actor("Uderzasz ", ({kogo}), PL_BIE, " w glowe, nie " +
	          "wyrzadzajac "+kogo->query_zaimek(PL_CEL)
	          +" zadnej szkody.");

			return 1;
	}
	target("niespodzianie uderza cie "+opis+" mocno w glowe.",
	       ({kogo}));
	all2act("niespodziewanie uderza", ({kogo}) ,PL_BIE," " +
	        opis + " mocno w glowe.");
	actor("Uderzasz",({kogo}),PL_BIE," mocno w glowe, ");
	kto->catch_msg("ogluszasz go za "+efekt);
	kogo->add_prop(P_OGL,kogo->query_prop(P_OGL)+efekt);
	if (kogo->query_hp()<=kogo->query_prop(P_OGL))
	{
	    kogo->catch_msg("Robi ci sie ciemno przed oczyma.\n");
	    actor("",({kogo}),PL_MIA," pada na ziemie nieprzytomny.");
	    tell_room(environment(kogo),QCIMIE(kogo,PL_MIA)
		      +" pada na ziemie nieprzytomny.\n",({kto,kogo}));
	    czas=20-kogo->query_fatigue()*10/kogo->query_max_fatigue();
	    dodaj_paraliz(kogo,czas);
	}
	return 1;
    }
    target("niespodziewanie zamierza sie na ciebie "+
	   mlot->koncowka("swoim ","swoja ")+opis+", ale haniebnie chybia",
	   ({kogo}));
    all2act("niespodziwewanie zamierza sie na ",({kogo}),PL_BIE," "+opis
            +" ale haniebnie chybia.");
    actor("Zamierzasz sie na ",({kogo}),PL_BIE," ale chybiasz.");
    return 1;
}
/*
int
czy_trafil(object kto, object kogo)
{
	int sukces;
	sukces=kto->resolve_task(TASK_ROUTINE,({TS_DEX,RZ_OGLUSZANIE}),
                  kogo,({TS_DEX,SS_AWARENESS,SS_DEFENCE}));
	if (sukces>0) return 1;
	return 0;
}
*/
dodaj_paraliz(object komu, int czas)
{
    object p;
    setuid();
    seteuid(getuid());
    p = clone_object(RYCERZ+"paraliz");
    p->set_stop_object(p);
    p->set_stop_fun("stop_paralize");
    p->set_stop_message("Odzyskujesz przytomnosc.\n");
    p->set_fail_message("Jestes ogluszony, dopoki nie "
			+"odzyskasz przytomnosci nie mozesz nic robic.");
    if (czas>20) czas=20;
    p->set_remove_time(czas);
    komu->stop_fight(komu->query_attack());
    // To tylko zakonczy walke ogluszonemu...
    // Czy nie powinno sie jeszcze zakonczyc walki ogluszajacemu?
    // A moze tak to ma byc? Wlasciwie... co to za specjal jest???
    p->move(komu,1);
}
