inherit "/std/weapon";
object wielder;
#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>
#include <formulas.h>
#include <filter_funs.h>
#include <options.h>
int which_hit;
int spec_delay;
int enemy_dex;
int wielder_dex;
int dam_ench_ratio;
#define TP              this_player()
#define TO              this_object()
void
create_weapon()
{    
    ustaw_nazwe(({"ostrze","ostrza","ostrzu","ostrze","ostrzem","ostrzu"}), 
    ({"ostrza","ostrzy","ostrzom","ostrza","ostrzami","ostrzach"}),PL_NIJAKI_NOS);
                
    dodaj_przym("kruczoczarny","kruczoczarni");
    dodaj_przym("cienisty","cienisci");
    set_long("Gdy patrzysz na ta bron po twych plecach przebiega dreszcz podniecenia " +
             "i strachu. Ostrze jest wykonane z nieznanej ci substancji, ktora pochalania " +
             "swiatlo wokol siebie. Rekojesc okrecona dziwna biala skora, wolisz nie " +
             "wiedziec jakiego pochodzenia. Glownia jest zrobiona z szczurzej czaszki.\n");
             
    set_likely_dull(0);
    add_prop(OBJ_M_NO_BUY, 1);
    
    add_prop(OBJ_I_IS_MAGIC_WEAPON, 1);
    
    add_prop(MAGIC_AM_MAGIC, ({ 100, "death"}));
    set_hit(57);
    set_pen(59);
    set_wt(W_SWORD);
    set_dt(W_SLASH | W_IMPALE);
    set_hands(W_RIGHT);
    add_prop(OBJ_I_WEIGHT, 1500);
    add_prop(OBJ_I_VOLUME, 1000);
    add_prop(OBJ_I_VALUE, 10000);
    which_hit = 0;
    
}    
static void tell_watcher(string str, object enemy)
{
   object me,*ob;
   int i;
   me = wielder;
   ob = FILTER_LIVE(all_inventory(environment(me))) - ({ me });
   ob -= ({ enemy });
   for (i = 0; i < sizeof(ob); i++)
   if (!ob[i]->query_option(OPT_BLOOD) && CAN_SEE_IN_ROOM(ob[i]))
   {
     if (CAN_SEE(ob[i], me)) ob[i]->catch_msg(str);
     else tell_object(ob[i], "Ktos trafil kogos.\n");
   }
}    
mixed
wield(object what)
{  
   if (TP->query_align() > 0)
    {
        TP->heal_hp(-500);
        return "\nW twej glowie pojawiaja sie obrazy. Straszliwe obrazy. " +
               "Widzisz wielkie wzgorze na ktorym zamiast drzew rosna krzyze. " +
               "Gigantyczny czarny rumak pedzacy jak wicher, tratuje niewinne " +
               "male dzieci. Ich czaszki pekaja jak swierze arbuzy roztrzaskiwane " +
               "o ziemie. Zawartosc malych glowek wylewa sie na ziemie z chlupotem. " +
               "Pozniej wizja rozmywa sie i jest zastapiona przez niezrozumialy dla " +
               "ciebie widok. Ciezarna kobieta, krzyczaca przerazliwie. Widzisz jak " +
               "jej spocone cialo wije sie w spazmach strasznego bolu. Czerwona, rozgrana " +
               "stal zbliza sie do jej...nieee. Nie mozesz tego wytrzymac. Puszczasz " +
               "ostrze i opadasz na kolana. Szlochu, ktory wyrywa sie z twojej piersi " +
               "nie mozesz opanowac.\n\n";
               
    }
   set_alarm(0.1,0.0,"add_wielder");
   write("W twej glowie slyszysz rozdzierajacy glos: Jam jest Agardail!!!\n" +
         "Glos kontynuuje: Teraz pomoge ci w twej walce.\n");
   say(QCIMIE(this_player(),PL_MIA)+" dobywa miecza, ktory rozblyska na moment.\n");
    set_alarm(4.0, 0.0, &dojeb_graczowi(TP));
   TP->set_stat_extra(SS_STR, TP->query_stat_extra(SS_STR) + 10);
   TP->set_stat_extra(SS_DEX, TP->query_stat_extra(SS_DEX) + 10);
   TP->set_stat_extra(SS_CON, TP->query_stat_extra(SS_CON) + 10);
   TP->set_stat_extra(SS_INT, TP->query_stat_extra(SS_INT) + 10);
   TP->set_stat_extra(SS_WIS, TP->query_stat_extra(SS_WIS) + 10);
   TP->set_stat_extra(SS_DIS, TP->query_stat_extra(SS_DIS) + 10);
   TP->set_skill_extra(0, 30);
   TP->set_skill_extra(23, 30);
   return 1;
}
void
add_wielder()
{
    wielder = environment(this_object());
}
object
query_wielder()
{
    return wielder;
}    
mixed
unwield(object what)
{
   set_this_player(wielder);
   if(environment(this_object())!=wielder) 
   return 1;
   write("Opuszczasz swoja wspaniala bron i czujesz potworny bol w glowie.\n");
   say(QCIMIE(this_player(),PL_MIA)+" opuszcza miecz, ktorego ostrze przygasa momentalnie.\n");
   TP->set_combat_speed(15);
   TP->set_stat_extra(SS_STR, TP->query_stat_extra(SS_STR) - 10); 
   TP->set_stat_extra(SS_DEX, TP->query_stat_extra(SS_DEX) - 10);
   TP->set_stat_extra(SS_CON, TP->query_stat_extra(SS_CON) - 10);
   TP->set_stat_extra(SS_INT, TP->query_stat_extra(SS_INT) - 10);
   TP->set_stat_extra(SS_WIS, TP->query_stat_extra(SS_WIS) - 10);
   TP->set_stat_extra(SS_DIS, TP->query_stat_extra(SS_DIS) - 10);
   TP->set_skill_extra(0, 0);
   TP->set_skill_extra(23, 0);
   TP->heal_hp(-500);
   return 1;
}
int did_hit(int aid, string hdesc, int phurt, object enemy, int phit, int dam)
{
  string how;
  object wielder=query_wielded();
  ::did_hit(aid, hdesc, phurt, enemy, phit, dam);
     
  switch (phurt)
  {
    case 1..10:
       how = "lekkie";
       break;
    case 11..30:
       how = "duze";
       break;
    case 31..60:
       how = "potezne";
       break;
    case 61..100:
       how = "straszliwe";
       break;       
    default:
       how = "nieznaczne";
  }
  spec_delay = 600/(wielder->query_skill(SS_WEP_SWORD));  
  if (which_hit == spec_delay)
  {
    which_hit = 0;
    enemy_dex=enemy->query_stat(1);
    wielder_dex=wielder->query_stat(1);
    dam_ench_ratio=1+((wielder_dex-enemy_dex)/50);
    if(enemy_dex <= wielder_dex)
    {
      enemy->heal_hp(-(dam*dam_ench_ratio));   
      if (enemy->query_hp() > 1)
      {
         wielder->catch_msg("\nNagle ostrze " + short(PL_DOP) + " jasnieje i wiesz, ze uderzenie " +
         "w tym momencie bedzie najodpowiedniejsze. Ruszasz wiec bez zastanowienia " +
         "na " + QIMIE(enemy, PL_BIE)+" i z calych sil wbijasz miecz w przeciwnika " +
         "zadajac " + how + " obrazenia.\n\n");
         
         enemy->catch_msg("\nNagle ostrze " + short(PL_DOP) + " jasnieje i wiesz, ze zaraz stanie " +
         "sie cos zlego. " + QCIMIE(wielder, PL_MIA) + " rusza w twym kierunku w " +
         "zaskakujeacym tempie i jakby od niechcenia wbija sa bron w twe cialo. " +
         "Czujesz potworny bol i przez chwile nie mozesz sie otrzasnac.\n\n"); 
                 
         tell_watcher("\nNagle ostrze " + short(PL_DOP) + " jasnieje i widzisz " +
         "jak " + QIMIE(wielder, PL_MIA) + " rusza w kierunku " + QIMIE(enemy, PL_DOP)+ " z " +
         "niesamowita szybkoscia. Po jednym krotkim uniku " + QIMIE(wielder, PL_MIA) + " wbija " +
         "swa bron w cialo " + QIMIE(enemy, PL_DOP)+". Krew tryska fontanna tuz pod twoje " +
         "stopy.\n\n", enemy);
      }
      else
      {
         wielder->catch_msg("\nOstrze " + short(PL_DOP) + " na moment rozjaza sie na czerwono i wiesz, " +
         "ze to jest ostatni cios jaki zadasz w tej walce" +
         ". " + QCIMIE(enemy, PL_BIE)+" jest juz wyczerpany a ty trzymasz starozytny " +
         "'Agardail'. Jeden krotki wypad w przod i cztery szybie ciecia w " +
         "przeciwnika zostawiaja tylko krwawa miazge. Przygladasz sie obojetnie trupowi " +
         "drgajacemu pod twoimi nogami.\n\n");
         
         enemy->catch_msg("\nJak przez mgle widzisz jak ostrze " + short(PL_DOP) + " rozjaza sie na czerwono. Wiesz, " +
         "ze smierc nadchodzi. Rany na twym ciele krwawia poteznie i nie masz juz sil aby sie bronic. " +
         "Ostatnia rzecza jaka widzisz jest zblizajacy sie do ciebie " + QIMIE(wielder, PL_MIA) + " pozniej " +
         "tylko ostatni w zyciu bol i odplywasz w ciemnosc.\n\n");
         
         tell_watcher("\nOstrze " + short(PL_DOP) + " na moment rozjaza sie na czerwono. Widzisz " +
         "jak " + QCIMIE(wielder, PL_MIA) + " dochodzi szybim wykrokiem do " + QIMIE(enemy, PL_BIE)+". " +
         "Bron, ktora sieje takie spustoszenia jeszcze raz pokazuje na co ja stac. Cztery ciecia, tak " +
         "szybkie, ze prawie niewidoczne. Potem zostal tylko stygnacy trup " + QIMIE(enemy, PL_BIE)+" w " +
         "powiekszajacej sie kaluzy krwi.\n\n", enemy);
         enemy->heal_hp(enemy->query_hp(-2));
         enemy->do_die(wielder);
       }
       return 1;
    }
  }
  else
  which_hit = which_hit + 1; 
  return 0;
}
