inherit "/d/Imperium/std/monster.c";

#include "/sys/stdproperties.h"
#include "/sys/macros.h"
#include "/sys/ss_types.h"

#define WANTED "/d/Imperium/khazzar/inne/lista_wrogow" 
#define TP     this_player();

void
create_monster()
{
    set_long("Spogladasz w ponure oblicze lowcy nagrod, jego " +
             "twarz oszpecona jest licznymi bliznami co daje mu ogolnie " + 
             "nieprzyjemny wyglad. Nosi na sobie ciemna skorzana kurtke i " +
             "dlugie, czarne wytarte spodnie. " +
             "Jego ruchy zdradzaja iz niemal kazdy kto z nim zadrze skonczy " +
             "jak setki tych ktorzy staneli mu kiedys na drodze. Jego " +
             "chlodne spojrzenie zawodowca wodzi po obliczach przechodzacych " +
             "jakby wypatrujac w nich slabych punktow.\n"); 

    dodaj_przym("spokojny", "spokojni");
    dodaj_przym("ciemnoodziany", "ciemnoodziani");
    
    ustaw_odmiane_rasy(PL_CZLOWIEK);
    set_gender(G_MALE);

    set_skill(SS_DEFENCE,       150); 
    set_skill(SS_WEP_WARHAMMER, 150); 
    set_skill(SS_PARRY,         150); 
    set_skill(SS_BLIND_COMBAT,  150);
    set_skill(SS_UNARM_COMBAT,  150); 
    set_skill(SS_AWARENESS,     150);

    set_all_hitloc_unarmed(95); /* gruboskorny skubaniec */

    set_alignment(1000);
    set_combat_speed(100);
    set_exp_factor(250); 

    add_prop(CONT_I_HEIGHT, 250);
    add_prop(CONT_I_WEIGHT, 310000);

    set_default_answer(VBFC_ME("odpowiedz_zazwyczaj"));

    set_aggressive("@@atak"); 

    add_prop(LIVE_I_NEVERKNOWN, 1);

    set_stats(({350, 350, 550, 50, 50, 350}));
    
    add_weapon("/d/Imperium/Kraina/STAW/mlotb");

    set_act_time(10 + random(10));
    add_act("emote rozglada sie spokojnie."); 
    add_act("emote usmiecha sie do siebie."); 
     
    set_cact_time(random(10));
    add_cact("emote porusza sie niezwykle szybko."); 
    add_cact("emote szuka luki w obronie przeciwnika."); 
    add_cact("ziewnij ."); 
    add_cact("emote usmiecha sie spokojnie.");
}

string
odpowiedz_zazwyczaj()
{
    command("us . do siebie");
    return ""; 
}

varargs public mixed
hit_me(int wcpen, int dt, int hitsuc, object attacker, int attack_id,
       int target_hitloc = -1)
{
    if ( wcpen > 500 ) wcpen = 500;
    return ::hit_me(wcpen,dt,hitsuc,attacker,attack_id,target_hitloc);
}

int
atak()
{
    string imie = TP->query_real_name();
    string opis = TP->query_nonmet_name();

    if (WANTED->czy_wrog(imie,opis))
    {
        set_alarm(0.5, 0.0, "okrzyk");
        return 1;
    }

    return 0;    
}

void
attacked_by(object wrog)
{
    string imie = wrog->query_real_name();
    string opis = wrog->query_nonmet_name();

    if( !wrog->query_npc() )
    {
        WANTED->dodaj_wroga(imie,opis);
        set_alarm(0.5, 0.0, "okrzyk");
    }

    set_alarm(0.0, 0.0, "pomocy");

    return ::attacked_by(wrog);
}

public void
do_die(object killer)
{
    string imie = killer->query_real_name();
    string opis = killer->query_nonmet_name();

    if( !killer->query_npc() )
    {
        WANTED->dodaj_wroga(imie,opis);
    }

    ::do_die(killer);
}

public int
block_exit()
{
    int r = random(100);
    string action = query_verb();
    
    if ( !sizeof(({ TP }) & query_enemy(-1)) )
    {
        return 0;
    }

    if ( TP->query_fatigue()<=10 )
    {
        write("Jestes zbyt zmeczon"+TP->koncowka("y","a")+" aby to zrobic.\n");
        return 1;
    }

    if ( r <= 97 )
    {
        TP->set_fatigue(TP->query_fatigue()-10);    
        TP->catch_msg(QCIMIE(TO,PL_MIA) + " blokuje ci droge ucieczki.\n");    
        tell_room(environment(TO),QCIMIE(TO,PL_MIA) + " blokuje " +
                  QIMIE(TP,PL_CEL) + " droge ucieczki.\n",({TP}));
        return 1;
    }
    return 0; 
}

public void
init_living()
{
    string *exit;
    int size;
    
    ::init_living();

    if (environment(TO))
    {
        exit = environment(TO)->query_exit_cmds();
        size = sizeof(exit);
        while (--size >= 0) { add_action(block_exit, exit[size]); }
    }
}

public void
set_hp(int hp)
{
    if (hp > 100) then hp = 100;
    ::set_hp(hp);
} 
