inherit "/std/armour";
inherit "/cmd/std/command_driver";


#include <pl.h>
#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>
#include <ss_types.h>
#include </sys/filter_funs.h>
#include </d/Imperium/std/reload.h>


#define A "_zbroja_chaosu_"
#define TP this_player()
#define TO this_object()
#define GUILD_NAME "khorne"
#define GUILD_TYPE "occupational"
#define GUILD_STYLE "occupational"

#define MUTATIONS ({"mut01","mut02","mut03","mut04","mut05","mut06"})


int rabnij( string str );
int szal( string str );
int trenuj( string str );
int wezwij( string str );
int gon( string str );
int mutuj( string str );
int set( string str );
int show( string str );
int nabij( string str );
int werbuj( string str );
int cpowiedz( string str );
int czeka=0;
int szal=0;
int demon=0;
int mut_nr = -1;

#define REL 15.0


object dem;

void propy();

void
create_armour()
{
    ustaw_nazwe(({"zbroja chaosu", "zbroi chaosu", "zbroi chaosu",
              "zbroje chaosu", "zbroja chaosu", "zbroi chaosu"}),
        ({"zbroje chaosu", "zbroj chaosu", "zbrojom chaosu",
              "zbroje chaosu", "zbrojami chaosu", "zbrojach chaosu"}),
        PL_ZENSKI);

    dodaj_nazwy(({"zbroja", "zbroi", "zbroi", "zbroje", "zbroja", "zbroi"}),
        ({"zbroje", "zbroj", "zbrojom", "zbroje", "zbrojami", "zbrojach"}),
        PL_ZENSKI);


    dodaj_przym("czarny", "czarni");
    dodaj_przym("potezny", "potezni");

    set_long("Potezny pancerz chaosu wykonano na samym dnie piekielnych czelusci, "+
        "gdzie arcymagowie przy pomocy magicznych kowadel i najmocniejszych "+
         "mlotow zdolali wykorzystac gwiezdny metal i stworzyc "+
         "to oto dzielo dla poslusznych Khorne'owi rycerzy.\n");

    set_ac(A_BODY, 75, 75, 75);
    set_af(this_object());
    set_alarm(1.0,0.0,"propy");
}

void
propy()
{
    add_prop(OBJ_I_VALUE, 700);
    add_prop(CONT_I_WEIGHT,4000);
    add_prop(CONT_I_VOLUME,1000);
    add_prop(OBJ_I_WEIGHT,4000);
    add_prop(OBJ_I_VOLUME,1000);
    add_prop(OBJ_M_NO_DROP,"Chyba ci sie to nie uda!\n");
    add_prop(OBJ_M_NO_SELL,"Wpierw to zdejmij.\n");
    add_prop(OBJ_M_NO_GIVE,"Wpierw to zdejmij.\n");

}

int
wear( object ob )
{
setuid();
seteuid(getuid());
write("Zbroja wrasta w twoje cialo!\n");
say(QIMIE(this_player(),PL_MIA)+" przyodziewa pelna zbroje plytowa, "+
    "az nagle ta zaglebia sie niedzpodziewanie w cialo stajac sie "+
    "jego czescia!\n");
    this_player()->remove_subloc(A);
    this_player()->add_subloc(A,this_object());
    this_object()->move(this_player(),A);
    this_player()->add_prop(LIVE_I_SEE_DARK,4);
    this_player()->add_prop("chaosnik",1);
    this_player()->set_skill(2,90);

this_player()->set_skill(4,90);
this_player()->set_skill(24,80);
this_player()->set_skill(23,82);
this_player()->set_skill(107,100);
this_player()->set_skill(103,60);
this_player()->remove_skill(54,100);
this_player()->remove_skill(55,100);
this_player()->add_prop("_imperium_i_stwor_chaosu",1);

return 1;
}



int
remove( object ob )
{
write("Zbroja stala sie czescia twego ciala.\n");
return -1;
}


string
query_recover()
{
    return 0;
}

string
query_auto_load()
{
return MASTER + ":";
}


string
show_subloc( string subloc, object ob, object obf )
{
if ( subloc != A ) return "";
    if ( obf == ob )
    return "";
    return "Jego cialo zakute jest w czarna stal, zas na masywnym, "+
    "plytowym napiersniku widnieje krwawy symbol Khorne'a.\n";

return MASTER+":";


}



int
czekaj()
{
czeka=0;
TP->catch_msg("Wracaja ci sily.\n");
TP->add_prop(LIVE_I_SEE_DARK,4);
}

int
zniszcz( string str )
{

    if (!str)
    {
    dem->remove_object();
    return 1;
    }
}

void
init()
{
    ::init();
    add_action("rabnij","rabnij");
    add_action("szal","szal");
    add_action("trenuj","trenuj");
    add_action("wezwij","wezwij");
    add_action("gon","gon");
    add_action("zniszcz","zniszcz");
    add_action("mutuj","mutuj");
    add_action("set","set");
    add_action("show","show");
    add_action("nabij","nabij");
    add_action("cpowiedz","cpowiedz");
//    add_action("werbuj","werbuj");

}


void
szal_off()
{
write("Odzyskujesz swiadomosc...\n");
szal=0;
TP->set_stat_extra(0,0);
TP->set_stat_extra(1,1);
TP->set_stat_extra(2,2);
}

int
szal( string str )
{

    if (!str)
    {
        if (szal)
        {
        write("Warczysz opetanczo!\n");
        say(QCIMIE(TP,PL_MIA)+" warczy opetanczo.\n");
        return 1;
        }

    write("Nagle twa swaidomosc nawiedza wizerunek Khorne'a! "+
        "Morza krwi osaczaja cie zewszad, a ty czujac niewyobrazalne "+
        "jej laknienie popadasz w fanatyczne oblakanie, chec "+
        "zniszczenia i zadze mordu!\n");
    say(QCIMIE(TP,PL_MIA)+" nagle wzbiera sie w sobie i wydaje "+
        "potworny ryk, ktory roznosi sie echem po okolicy "+
        "siejac przestrach i groze!\n");

    TP->set_stat_extra(0,40+random(15));
    TP->set_stat_extra(1,27);
    TP->set_stat_extra(2,35+random(15));
    TP->heal_hp(TP->query_average_stat());
    szal=1;

    set_alarm(120.0,0.0,"szal_off");
    return 1;
    }


}


int
rabnij( string str )
{
mixed result;
mixed hp,hp_po;
int rana=0;
object bron;
object *kogo = parse_this(str,"%l:"+PL_BIE);

bron = TP->query_weapon(W_BOTH);
    if (bron==0)
    {
    bron=TP->query_weapon(W_RIGHT);
    if ( bron==0 )
        {
        bron=TP->query_weapon(W_LEFT);
        }
    }

    if (!str)
    {
    if ( TP->query_attack() )
        kogo = ({TP->query_attack()});
    }

    if (!sizeof(kogo))
    {
    write("Rabnij kogo?\n");
    return 1;
    }

    if ( bron == 0 )
    {
    write("Dobadz topora!\n");
    return 1;
    }

    if ( czeka==1 )
    {
    write("Odsapnij chwile!\n");
    return 1;
    }

//  rana = TP->query_stat(0)+bron->query_pen()*2+random(150);

//    hp = ftoi((itof(kogo[0]->query_max_hp()) / itof(kogo[0]->query_max_hp()))*100.0);
//  kogo[0]->reduce_hit_point(rana);
//    hp_po = ftoi((itof(kogo[0]->query_hp()) / itof(kogo[0]->query_max_hp()))*100.0);

//    result = hp - hp_po;

if(kogo[0]->query_npc())
rana = TP->query_skill(2)*18+TP->query_stat(0)-kogo[0]->query_stat(1)*2;
else
rana = TP->query_skill(2)*6+TP->query_stat(0)-kogo[0]->query_stat(1)+(bron->query_pen()+bron->query_hit())*2;
result = kogo[0]->hit_me(rana,W_SLASH,50,TP,-1,A_BODY);

      if ( result[0]< 0 )
          {
      TP->catch_msg("Probujesz rabnac "+QIMIE(kogo[0],PL_BIE)+", "+
          "lecz nie trafiasz.\n");
      tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" probuje "+
          "rabnac "+QIMIE(kogo[0],PL_BIE)+" "+bron->short(PL_NAR)+", "+
          "lecz pudluje.\n",({TP,kogo[0]}));
      kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" wykonuje morderczy "+
          "zamach "+bron->short(PL_NAR)+", lecz pudluje.\n");
czeka=1;
set_alarm(5.0,0.0,"czekaj");
    return 1;
      }


switch(result[0])
{

    case 1..25:
        TP->catch_msg("Wykonujesz potezne ciecie "+bron->short(PL_NAR)+" "+
        "lekko nacinajac "+QIMIE(kogo[0],PL_BIE)+" w glowe.\n");
        tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" wykonuje "+
        "potezne ciecie "+bron->short(PL_NAR)+" lekko "+
        "nacinajac "+QIMIE(kogo[0],PL_BIE)+" w glowe.\n",({TP,kogo[0]}));
        kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" wykonuje potezne "+
        "ciecie z zamachu "+bron->short(PL_NAR)+" i trafia "+
        "cie w glowe pozostawiajac nieznaczna, acz bolesna rane.\n");

    break;

    case 26..50:
        TP->catch_msg("Bierzesz szeroki zamach "+bron->short(PL_NAR)+" "+
        "po czym wyprowadzasz perfekcyjne wrecz ciecie i trafiasz "+
        ""+QIMIE(kogo[0],PL_BIE)+" w glowe pozostawiajac "+
        "krwawiaca rane.\n");
       tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" bierze szeroki zamach "+
           ""+bron->short(PL_NAR)+" po czym wyprowadza perfekcyjne "+
           "wrecz ciecie i trafia "+QIMIE(kogo[0],PL_BIE)+" w "+
           "glowe pozostawiajac krwawiaca rane.\n",({TP,kogo[0]}));
       kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" bierze szeroki "+
           "zamach "+bron->short(PL_NAR)+" po czym wyprowadza "+
           "perfekcyjne wrecz ciecie, ktore z zawrotna predkoscia "+
           "trafia w twa glowe! Wilgotna struga krwi splynela ci po "+
           "skroni, a bol glowy po chwili stal sie lagodniejszy.\n");

    break;

    case 51..75:
        TP->catch_msg("Ruszasz ze wzniesionym w gore "+bron->short(PL_NAR)+" "+
        "wykonujac potezne ciecie, ktore z impetem rabie "+
        ""+QIMIE(kogo[0],PL_BIE)+" w korpus, po czym gladko zeslizguje "+
        "sie z ciala ciagnac za soba gesta wtege czerwonej "+
        "posoki.\n");
        tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" rusza "+
        "ze wzniesionym w gore "+bron->short(PL_NAR)+" "+
        "wykonujac potezne ciecie, ktore z impetem rabie "+
        ""+QIMIE(kogo[0],PL_BIE)+" w korpus, po czym "+
        "gladko zeslizguje sie z ciala ciagnac za soba "+
        "gesta wstege czerwonej posoki.\n",({TP,kogo[0]}));
        kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" rusza na ciebie "+
        "ze wzniesionym w gore "+bron->short(PL_NAR)+" "+
        "wykonujac mordercze ciecie, ktore z impetem "+
        "rabie cie w korpus zadajac zarazem przeniklywy, "+
        "niemilosierny bol, ktory powoli uchodzi, kiedy "+
        "ostrze opuszcza twoje krwawiace cialo.\n");

    break;

    default:
        TP->catch_msg("Ryczac wsciekle rabiesz na oslep "+
        ""+bron->short(PL_NAR)+" celujac w "+QIMIE(kogo[0],PL_BIE)+", "+
        "ktory pod naporem twych ciosow ugina sie w kolanach, "+
        "a ty z uczuciem tryumfu kolejnym ciosem rozbijasz jego czaszke w "+
        "drobiazgi wdajac w powietrze chmury  i strugi "+
        "krwi, ktore wytryskuja z rozdartych "+
        "konczyn!\n");
       tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" ryczac wsciekle "+
           "rabie na oslep "+bron->short(PL_NAR)+" celujac "+
           "w "+QIMIE(kogo[0],PL_BIE)+", ktory pod naporem "+
           "tak poteznych ciosow ugina sie w kolanach, a "+
           "okrutny oprawca klejnym ciosem rozbija "+kogo[0]->koncowka("jego","jej")+" "+
           "glowe w drobiazgi wdajac w powietrze chmury i strugi "+
           "krwi, ktore wytryskuja z rozdartych "+
           "konczyn!\n",({TP,kogo[0]}));
       kogo[0]->catch_msg(""+QCIMIE(TP,PL_MIA)+" ryczac wsciekle "+
       "rusza na ciebie z "+bron->short(PL_NAR)+" i rabie na oslep, "+
       "a ty nie mogac zniesc tak wielu silnych ciosow w chwili "+
       "slabosci uginasz sie w kolanach niemal upadajac, a oprawca "+
       "kolejnym ciosem rozrabuja ci glowe! ...\n");
       kogo[0]->set_hp(0);
       break;


}//switch

if (kogo[0]->query_hp() <= 0 )
kogo[0]->do_die(TP);
czeka=1;
set_alarm(REL,0.0,"czekaj");

return 1;
}


int
trenuj( string str )
{
object sh;
object *kogo = parse_this(str,"%l:"+PL_BIE);

    if (sizeof(kogo))
    {
   if ( TP->query_real_name() != "grumsh" )
        return 0;
    }

    if (!sizeof(kogo))
    {
    write("Trenuj kogo?\n");
    return 1;
    }

setuid();
seteuid(getuid());

kogo[0]->ustaw_odmiane_rasy(({"rycerz chaosu","rycerza chaosu","rycerzowi chaosu",
        "rycerza chaosu","rycerzem chaosu","rycerzu chaosu"}),
        ({"rycerze chaosu","rycerzy chaosu","rycerzom chaosu",
            "rycerzy chaosu","rycerzami chaosu","rycerzach chaosu"}),
            PL_MESKI_OS);
/*
kogo[0]->ustaw_odmiane_rasy(({"wojowniczka chaosu","wojowniczki chaosu",
    "wojowniczce chaosu","wojowniczke chaosu","wojowniczka chaosu",
    "wojowniczce chaosu"}),
    ({"wojowniczki chaosu","wojowniczek chaosu","wojowniczkom chaosu",
    "wojowniczki chaosu","wojowniczka chaosu","wojowniczce chaosu"}),
    PL_ZENSKI);
*/
/*
kogo[0]->ustaw_odmiane_rasy(({"wojownik chaosu","wojownika chaosu","wojownikowi chaosu",
    "wojownika chaosu","wojownikiem chaosu","wojowniku chaosu"}),
    ({"wojownicy chaosu","wojownikow chaosu","wojownikom chaosu",
    "wojownikow chaosu","wojownikami chaosu","wojownikach chaosu"}),PL_MESKI_OS);
*/



    TP->catch_msg("Trenujesz swojego podwladnego.\n");

    sh=clone_object("/d/Imperium/vic/chaos_sh");
    clone_object("/d/Imperium/vic/chaos_armour")->move(kogo[0]);
    sh->shadow_me(kogo[0], GUILD_TYPE, GUILD_NAME, GUILD_STYLE);

return 1;


}


void
call_demon()
{
    write("Odzyskujesz sily mentalne.\n");
    demon=0;
}



int
wezwij( string str )
{
int i;
object paraliz;
object ob = environment(TO);
object *gracze = all_inventory(environment(TP));


if (TP->query_stat(7) < 51)
return 0;



    if ( dem != 0 )
    {
    dem->command("wesprzyj "+TP->query_real_name(PL_BIE)+"");
    return 1;
    }

if (!str)
    {
    write("Wezwij co?\n");
    return 1;
    }


    if ( str == "demona" )
    {
    if ( demon == 1 )
        {
        write("Jestes zbyt wyczerpany.\n");
        return 1;
        }

if (ob->query_stat(7) >= 100 )
{
    write("Wsrod pylow i ogni z powstalej w ziemi wyrwy z impetem "+
        "wylatuje demon, ktory z piekielnym wrecz hukiem "+
        "ryczy na cala gardziel wstrzasajac okolica i "+
        "zalewajac serca smiertelnikow strachem!\n");
    tell_room(environment(TP),"Nagle ziemia rozstepuje sie ujawniajac "+
        "buchajace ogniami wnetrze, a zen niczym z wulkanu "+
        "z hukiem i swistem wylatuje potezna sylwetka demona, "+
        "ktory ryczac i plujac krwia przeraza cie zalewajac twe "+
        "serce strachem i groza... \n",({TP}));
} else {
    write("Ziemia rozstepuje sie nieznacznie, a zen wypelza potezna "+
        "sylwetka kolczastego ogara.\n");
    tell_room(environment(TP), "Ziemia rozstepuje sie, a zen "+
        "wypelza sylwetka poteznej bestii, ogara, ktorego "+
        "wsciekle spojrzenie i ociekajace slina szczeki "+
        "wprawiaja cie w paniczny strach...\n",({TP}));
}

setuid();
seteuid(getuid());


if (ob->query_stat(7) >= 150 )
{
    dem->remove_object();
   dem = clone_object("/d/Imperium/vic/demon");
   dem->move(environment(TP));
   dem->command("wesprzyj "+TP->query_short(PL_BIE)+"");
   dem->set_follow(ob,0.1,1);
} else {
    dem->remove_object();
    dem = clone_object("/d/Imperium/vic/ogar");
    dem->move(environment(TP));
    dem->command("wesprzyj "+TP->query_short(PL_BIE)+"");
    dem->set_follow(ob,0.1,1);
}


    for ( i = 0; i < sizeof(gracze); i++ )
        {
        if ( living(gracze[i]) && !gracze[i]->query_prop("chaosnik") &&
        gracze[i] != TP )
        {
        paraliz = clone_object("/std/paralyze");
        paraliz->set_fail_message("Przerazenie nie pozwala ci sie ruszyc...\n");
        paraliz->set_stop_message("Odzyskujesz zmysly.\n");
        paraliz->set_remove_time(6);
    if ( TP->query_real_name() == "ghash" )
        paraliz->set_remove_time(12);

        paraliz->move(gracze[i]);
        }//if

        }

    demon=1;
    set_alarm(40.0,0.0,"call_demon");
    return 1;
    }

write("Wezwij demona?\n");
return 1;



}



int
gon( string str )
{
object *kogo = parse_this(str,"%l:"+PL_BIE);

if ( dem==0 )
return 0;

if (!sizeof(kogo))
{
write("Kogo ma gonic?\n");
}

dem->gon(kogo[0]);

write("Hrr...\n");
return 1;
}


int
set( string str )
{
    if (TP->query_real_name() != "moredziak" )
        return 0;



    if ( str == "jeden" )
    mut_nr=0;
    if ( str == "dwa" )
    mut_nr=1;
    if ( str == "trzy" )
    mut_nr=2;
    if ( str == "cztery" )
    mut_nr=3;
    if ( str == "piec" )
    mut_nr=4;
    if ( str == "szesc" )
    mut_nr=5;

write("Ustawione "+mut_nr+".\n");
return 1;

}

int
show( string str )
{
if (TP->query_real_name() != "moredziak" )
    return 0;


    write("1 - rogi.\n");
    write("2 - skrzydla.\n");
    write("3 - oczy.\n");
    write("4 - kopyta\n");
    write("5 - skora\n");
    write("6 - dlonie.\n");

return 1;
}

int
mutuj( string str )
{
object mm;
string *mutacje = MUTATIONS;
object *kogo = parse_this(str,"%l:"+PL_BIE);


    if ( TP->query_real_name() != "moredziak" )
        return 0;

    if (!sizeof(kogo))
    {
        write("Kogo chcesz zmutowac?\n");
        return 1;
    }

    if ( mut_nr == -1 )
        {
        write("Hm. Wpierw ustaw numer mutacji.\n");
        return 1;
        }

setuid();
seteuid(getuid());

clone_object("/d/Imperium/vic/"+mutacje[mut_nr]+"")->move(kogo[0]);

write("Zmutowany!\n");
kogo[0]->catch_msg("Zostales zmutowany!\n");
mut_nr=-1;
return 1;

}




int
nabij( string str )
{
object pal;
string u;
object *co = parse_this(str,"%i:"+PL_BIE);

    if (!sizeof(co))
    {
    write("Nabij co? Cialo?\n");
    return 1;
    }

    if (!co[0]->query_prop("_corpse_m_race"))
        {
        write("To nie jest cialo.\n");
        return 1;
        }

    TP->catch_msg("Nabijasz "+co[0]->short(PL_BIE)+" na pal!\n");
    tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" nabija "+
        ""+co[0]->short(PL_BIE)+" na pal! \n",({TP}));

    setuid();
    seteuid(getuid());

pal=clone_object("/d/Imperium/vic/pal");
pal->set_czyje(co[0]->short(PL_BIE));
u=co[0]->short(PL_NAR);
pal->ustaw_shorty(({"pal z nabitym nan "+u+"","pala z nabitym nan "+u+"",
           "palowi z nabitym nan "+u+"","pal z nabitym nan "+u+"",
           "palem z nabitym nan "+u+"","palu z nabitym nan "+u+""}),
          ({"pale z nabitym nan "+u+"","pali z nabitymi nan "+u+"",
          "palom z nabitym nan "+u+"","pale z nabitym nan "+u+"",
          "palami nabitymi nan "+u+"","palach z nabitymi nan "+u+""}));

pal->move(environment(TP));
co[0]->remove_object();

return 1;

}


int
werbuj( string str )
{
object *ob = parse_this(str,"%l:"+PL_BIE);

    if (!sizeof(ob))
    {
    write("Werbuj kogo?\n");
    return 1;
    }


    if (!ob[0]->query_prop("ch_twierdzy"))
    {
    write("Nie mozesz go zwerbowac.\n");
    return 1;
    }

    TP->catch_msg("Werbujesz "+QIMIE(ob[0],PL_BIE)+" do swojej druzyny.\n");
    TP->command("zapros "+ob[0]->short(PL_BIE)+"");
    ob[0]->command("dolacz do "+TP->query_real_name(PL_DOP)+"");
    return 1;
}


int
cpowiedz( string str )
{
int i;
object *liv = all_inventory(environment(TP));
liv = FILTER_LIVE(liv);

if (!str)
    {
    write("Grzmisz...\n");
    tell_room(environment(TP),""+QCIMIE(TP,PL_MIA)+" grzmi...\n",({TP}));
    return 1;
    }

    TP->catch_msg("Przemawiasz w czarnej mowie: "+str+"\n");
    for ( i = 0; i < sizeof(liv); i++ )
    {
    if ( liv[i]->query_prop("chaosnik") && liv[i] != TP )
        liv[i]->catch_msg(""+QCIMIE(TP,PL_MIA)+" przemawia w "+
        "czarnej mowie: "+str+"\n");
    else
        if (liv[i] != TP)
        liv[i]->catch_msg(""+QCIMIE(TP,PL_MIA)+" belkocze cos "+
        "w nieznanym ci jezyku.\n");

    }

return 1;
}
