#include <ss_types.h>
#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>

#include "morley.h"

inherit "/std/creature";
inherit "/std/combat/unarmed";
inherit "/std/act/domove";
inherit "/std/act/attack";			 

mixed przymiotniki1 = ({ ({"zwiewny", "zwiewni"}), ({"przerazajacy", "przerazajacy"}),
			 ({"ledwo widoczny", "ledwo widoczni"}), ({"mglisty", "mglisci"}) });
mixed przymiotniki2 = ({ ({"czerwonooki", "czerwonoocy"}), ({"swietlisty", "swietlisci"}),
			 ({"zadziorny", "zadziorni"}), ({"niebezpieczny", "niebezpieczni"}) });
object owner = 0;

void  set_owner(object ob)
{
	owner = ob;
}

int q_att();

void
create_creature()
{
    int tmp;
    ustaw_odmiane_rasy(({"upior", "upiora", "upiorowi", "upiora", "upiorem", "upiorze"}),
		       ({"upiory", "upiorow", "upiorom", "upiory", "upiorami", "upiorach"}),
		       PL_MESKI_OS);
    
    tmp = random(sizeof(przymiotniki1));
    dodaj_przym(przymiotniki1[tmp][0], przymiotniki1[tmp][1]);
    tmp = random(sizeof(przymiotniki2));
    dodaj_przym(przymiotniki2[tmp][0], przymiotniki2[tmp][1]);
    
    set_gender(G_MALE);

    set_long("Istota ta przypomina mroczny cien owity w bialy powiewajacy calun. Z daleka upior " +
	     "byc moze moglby nawet ujsc za zywa istote, ale z bliska widac, ze jest on mglisty " +
	     "i niematerialny. Do tego dochodza krwisto-czerwone, plonace oczy emanujace nienawiscia " +
	     "zawieszone gdzies w miejscu glowy u normalnego czlowieka.\n");
    
    add_prop(LIVE_I_NEVERKNOWN, 1);
    add_prop(CONT_I_VOLUME, 60000 + random(30000));
    add_prop(CONT_I_HEIGHT, 150 + random(40));
    add_prop(CONT_I_WEIGHT, 0);
    add_prop(NPC_I_NO_FEAR, 1);
    add_prop(LIVE_I_SEE_DARK, 10);
    add_prop(LIVE_I_SEE_INVIS, 1);
    add_prop(LIVE_I_NO_CORPSE, 1);
    add_prop(NPC_M_NO_ACCEPT_GIVE, " nie bardzo ma jak to wziac.\n");
    add_prop(OBJ_S_WIZINFO, "by Morley '99\n");

    set_stats(({65 + random(10), 55 + random(10), 50 + random(20), 40, 40, 45 + random(10)}));

    set_hitloc_unarmed(0, 10, 50, "widmowy korpus");
    set_hitloc_unarmed(1, 10, 20, "widmowa reke");
    set_hitloc_unarmed(2, 10, 30, "widmowa noge");

    set_combat_speed(6);

    set_skill(SS_DEFENCE, 30);
    set_skill(SS_AWARENESS, 100);

    set_alignment(-400 - random(100));

    set_random_move(30);

    set_aggressive(q_att);
}

special_attack(object ob)
{
    if (ob->query_ghost())
	return 0;

    if (ob->resolve_task(TASK_IMPOSSIBLE + 200, ({TS_DEX, SS_DEFENCE}) ) <= 0)
    {
	mixed h_res = ob->hit_me(650, MAGIC_DT, 0, this_object(), -1);

	if (!ob->query_hp())
	{
	    ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " zwiodlszy cie wpierw " +
			  "niezwykle chytra finta wyprowadza bezlitosnie pchniecie swoim " +
			  "widmowym mieczem. Kiedy ostrze nierzeczywistego oreza " +
			  "zaglebia ci sie w trzewiach twoje zmysly zalewa eksplozja " +
			  "straszliwego bolu. Czujesz jak z ust wyrywa ci sie okropny " +
			  "krzyk, jednoczesnie zaczynasz osuwac sie na ziemie, a na twoje " +
			  "oczy opada nieprzenikniona kurtyna ciemnosci.\n");

	    say(QCIMIE(this_object(), PL_MIA) + " zwiodlszy " + QIMIE(ob, PL_BIE) +
		" niezwykle chytra finta wykonuje bezlitosnie pchniecie swoim " +
		"widmowym mieczem. Kiedy ostrze nierzeczywistego oreza zaglebia sie " + 
		"w trzewiach " + QIMIE(ob, PL_DOP) + " " + ob->koncowka("jego", "jej") +
		"twarz wykrzywia sie w grymasie straszliwego bolu, a z ust wyrywa " +
		ob->koncowka("mu", "jej") + " sie mrozacy krew w zylach wrzask. " +
		"Chwile potem " + QIMIE(ob, PL_MIA) + " osuwa sie bez zycia na ziemie.\n",
		ob);

	    ob->do_die(this_object());
	    return 1;
	}
	
	switch(h_res[0])
	{
	case 0..6:
	    ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " z okrutnym usmiechem wykonuje " +
			  "szerokie ciecie. Ostrze widmowego miecza na szczescie jedynie " +
			  "muska twoje cialo, powodujac lekki bol. Ze zdziwieniem jednak " +
			  "stwierdzasz, ze nie pozostaly po nim zadne rany.\n");
	    say(QCIMIE(this_object(), PL_MIA) + " z okrutnym usmiechem zamierza " +
		"sie na " + QIMIE(ob, PL_BIE) + " i wykonuje szerokie ciecie. " +
		"Ostrze widmowego miecza na szczescie jedynie muska " +
		ob->koncowka("jego", "jej") + " cialo w dodatku nie pozostawiajac " +
		"po sobie zadnej rany. Zauwazasz jednak, ze przez twarz " +
		QIMIE(ob, PL_DOP) + " przechodzi lekki grymas bolu.\n", ob);
	    break;

	case 7..16:
	    ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " przyskakuje do ciebie zwinnie " +
			  "i wykorzystujac twoje zaskoczenie tnie cie dosyc gleboko " +
			  "swoim przezroczystym orezem. Ostrze mimo, ze nie powoduje " +
			  "zadnych trwalych uszkodzen przeszywa cie mocnym bolem.\n");
	    say(QCIMIE(this_object(), PL_MIA) + " przyskakuje do " + QIMIE(ob, PL_DOP) +
		" zwinnie i wykorzystujac " + ob->koncowka("jego", "jej") + 
		" zaskoczenie tnie " + ob->koncowka("go", "ja", "je") + " dosyc " +
		"gleboko swoim przezroczystym orezem. Ostrze mimo, ze nie powoduje " +
		"zadnych trwalych uszkodzen sprawia, ze twarz " + QIMIE(ob, PL_DOP) +
		" wykrzywia sie w grymasie bolu.\n", ob);
	    break;

	case 17..31:
	    ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " poprzedziwszy swoj atak zwodem " +
			  "przeszywa twoje cialo skutecznym pchnieciem widmowego miecza. " +
			  "Twoje wnetrznosci momentalnie wypelnia rwacy bol na tyle silny, " +
			  "ze nie jestes w stanie zdusic mimowolnego jeku.\n");
	    say(QCIMIE(this_object(), PL_MIA) + " poprzedziwszy swoj atak zwodem " +
		"przeszywa cialo " + QIMIE(ob, PL_DOP) + " skutecznym pchnieciem " +
		"widmowego miecza. Choc bron pozornie nie czyni " + 
		ob->koncowka("mu", "jej") + " zadnej szkody, grymas bolu oraz " +
		"zduszony jek zdaja sie temu przeczyc.\n", ob);
	    break;

	case 32..70:
	    ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " wykorzystujac moment twojej " +
			  "nieuwagi wyprowadza potezne ciecie ze skretu bioder. Klinga " +
			  "widmowego miecza przechodzi skosnie przez twoja klatke " +
			  "piersiowa powodujac nieznosny, paralizujacy bol. Czujesz jak " +
			  "z twych ust wydostaje sie mimowolny krzyk.\n");
	    say(QCIMIE(this_object(), PL_MIA) + " wykorzystujac moment nieuwagi " +
		QIMIE(ob, PL_DOP) + " wyprowadza potezne ciecie ze skretu bioder. " +
		"Klinga widmowego miecza przechodzi skosnie przez " + 
		ob->koncowka("jego", "jej") + " klatke piersiowa, jedynie z pozoru " +
		ob->koncowka("go", "jej") + " nie raniac, albowiem z ust wydobywa " +
		ob->koncowka("mu", "jej") + " sie mimowolny, swidrujacy krzyk.\n", ob);
	    break;

	default:
	    ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " kpiac sobie z twych umiejetnosci " +
			  "omija twoja zaslone i tnie cie okrutnie przez szyje. Masz wrazenie, " +
			  "ze gdyby to byla normalna klinga twoja glowa zapewne szybowalaby " +
			  "w tej chwili w powietrzu. Jednakze szybko ta mysl ucieka, gdyz " +
			  "niemalze momentalnie twoja glowe wypelnia niemozliwy do " +
			  "zniesienia bol, a usta rozdziera przerazliwy wrzask.\n");
	    say(QCIMIE(this_object(), PL_MIA) + " kpiac sobie z umiejetnosci " +
		QIMIE(ob, PL_DOP) + " omija " + ob->koncowka("jego", "jej") + 
		" zaslone i tnie " + ob->koncowka("go", "ja", "je") + " okrutnie " +
		"przez szyje. Masz wrazenie, ze gdyby to byla normalna klinga " +
		ob->koncowka("jego", "jej") + " glowa zapewne szybowalaby " +
		"w tej chwili w powietrzu. Jednakze szybko ta mysl ucieka, gdyz " +
		"niemalze momentalnie powietrze wypelnia przerazliwy, niemozliwy " +
		"do zniesienia wrzask bolu.\n", ob);
	    break;
	}
    }
    else
    {
	ob->catch_msg(QCIMIE(this_object(), PL_MIA) + " wyprowadza obszerne ciecie swoim " +
		      "mieczem. Ty jednak, zawczasu odczytawszy jego zamiary, z latwoscia " +
		      "unikasz pedzacej klingi.\n");
	say(QCIMIE(this_object(), PL_MIA) + " wyprowadza obszerne ciecie swoim " +
	    "mieczem. Jednak " + QIMIE(ob, PL_MIA) + ", zawczasu odczytawszy " +
	    "jego zamiary, z latwoscia unika pedzacej klingi.\n", ob);
    }
    return 1;
}

varargs mixed 
hit_me(int wcpen, int dt, int tohit, object attacker, int attack_id, int target_hitloc = -1)
{
    object bron;

    if (attacker->query_weapon(W_BOTH)->query_attack_id() == attack_id)
	bron = attacker->query_weapon(W_BOTH);
    else if (attacker->query_weapon(W_RIGHT)->query_attack_id() == attack_id)
	bron = attacker->query_weapon(W_RIGHT);
    else if (attacker->query_weapon(W_LEFT)->query_attack_id() == attack_id)
	bron = attacker->query_weapon(W_LEFT);

    if ((bron && bron->query_prop(OBJ_I_IS_MAGIC_WEAPON)) || (dt == MAGIC_DT) )
	return ::hit_me(wcpen, dt, tohit, attacker, attack_id, target_hitloc);

    if (!bron)
    {
	attacker->catch_msg("Twoj cios przenika przez widmowe cialo " + 
			    QIMIE(this_object(), PL_DOP) + " nie czyniac mu zadnej " +
			    "zauwazalnej szkody.\n");
	say("Cios " + QIMIE(attacker, PL_DOP) + " gladko przenika przez " +
	    "widmowe cialo " + QIMIE(this_object(), PL_DOP) + " nie czyniac " +
	    "mu zadnej zauwazalnej szkody.\n", attacker);
    }
    else
    {
	string co;
	switch (dt)
	{
	case W_CLUB:
	    co = "uderzeniem"; break;
	case W_IMPALE:
	    co = "pchnieciem"; break;
	case W_SLASH:
	    co = "cieciem"; break;
	default:
	    throw("Blad w upiorze. (mori)");
	}

	attacker->catch_msg("Trafiasz " + QIMIE(this_object(), PL_BIE) + " zrecznym " + co + 
			    " " + QSHORT(bron, PL_DOP) + ", jednakze twoja bron zwyczajnie " +
			    "przenika przez widmowe cialo przeciwnika.\n");
	say(QCIMIE(attacker, PL_MIA) + " trafia " + QIMIE(this_object(), PL_BIE) +
	    " zrecznym " + co + " " + QSHORT(bron, PL_DOP) + ", jednakze " +
	    attacker->koncowka("jego", "jej") + " bron zwyczajnie przenika " +
	    "przez widmowe cialo przeciwnika.\n", attacker);
    }

    return ({0, 0, 0, 0});
}

int
q_att()
{
    if (this_player()->query_prop(IMPERIUM_STWOR_CHAOSU) == 1)
    {
    	set_alarm(2.0, 0.0, "command","powiedz do "+
    		this_player()->query_nazwa(PL_DOP)+" Witaj w imie Chaosu !");
	return 0;
    }
    return 1;
}

void
notify_you_killed_me(object ob)
{
	owner->dodaj();
	say(QCIMIE(this_object(), PL_MIA) + " znika w klebach dymu.\n");
	remove_object();
}


void
notify_i_escaped(object ob)
{
	owner->dodaj();
	say(QCIMIE(this_object(), PL_MIA) + " znika w klebach dymu.\n");
	remove_object();
}