inherit "/d/Imperium/std/weapon";

#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>
#include <formulas.h>
#include <filter_funs.h>
#include <options.h>

#define LIVE_I_NO_FLESH "_live_i_no_flesh"

object wielder;

create_weapon()
{
    ustaw_nazwe( ({ "claymore", "claymora", "claymorowi",
      "claymore", "claymorem", "claymorze"}),
      ({"claymory", "claymorow", "claymorom",
      "claymory", "claymorami", "claymorach"}),
      PL_MESKI_NOS_NZYW );

    dodaj_nazwy( ({ "miecz","miecza","mieczowi","miecz","mieczem","mieczu"}),
      ({"miecze","mieczow","mieczom","miecz","mieczami","mieczach"}),
      PL_MESKI_NOS_NZYW );

    dodaj_przym("diamentowy","diamentowe");
    dodaj_przym("ognisty","ogniste");

    set_long("@@dlugi"); 


    set_hit(99);
    set_pen(123);

    add_prop(OBJ_I_VOLUME, 5000);
    add_prop(OBJ_I_WEIGHT, 17000);
    add_prop(OBJ_I_VALUE, F_VALUE_WEAPON(21,37) + 2222);
    
    set_dt(W_SLASH);
    
    set_wt(W_SWORD);

    set_hands(W_BOTH);

    add_prop(OBJ_M_NO_BUY, 1);
    
    add_prop(OBJ_I_IS_MAGIC_WEAPON, 1);
    
    add_prop(MAGIC_AM_MAGIC, ({ 70, "enchantment"}));
    
    add_prop(MAGIC_AM_ID_INFO,({"Olbrzymi miecz wykonany jest w calosci z diamentu. "+
    "Dla zwiekszenia obrazen obusieczne ostrze zostalo pokryte adamantytem. Jest bardzo ciezki, a "+
      "zawarta w nim magia dodatkowo zwieksza jego skutecznosc. Plomienie przeplywajace po ostrzu, "+
      "sprawiaja wrazenie jakby caly piekielny ogien zostal ukryty w tej broni.",15}));

    set_wf(this_object());

    set_alarm(0.5,0.0,"add_wielder");

}

string
dlugi()
{
    string str;
    str = "Ten olbrzymi miecz, przytlacza cie swoimi rozmiarami. Zdajesz sobie sprawe, "+
      "iz potrzebna jest ogromna sila zeby go utrzymac w rekach, a jeszcze wieksza by nim "+
      "skutecznie wladac. Rekojesc tej broni jest idealnie wyprofilowana i wykonana z diamentu, "+
      "podobnie jak klinga, ktorej obusieczne ostrze pokryte jest adamantytem. Plomienie "+
      "przeplywaja po ostrzu, sprawiajac wrazenie, ze caly piekielny ogien ukryty zostal w tej "+
      "broni. \n";
    return str;
}

mixed
wield(object what)
{
   if(this_player()->query_stat(0) < 163)
     {
         say(QCIMIE(this_player(),PL_MIA) + " z wielkim trudem unosi "+
           short(PL_BIE) + ", lecz nie ma dosc sil, by go utrzymac.\n");
         return"Z wielkim trudem unosisz "+short(PL_DOP) + ", lecz po chwili "+
           "opadasz z sil, i opuszczasz go.\n";
     }        
   set_alarm(0.1,0.0,"add_wielder");
   write("Chwytasz rekojesc "+short(PL_DOP)+" w obie rece i z niewielkim trudem "+
         "unosisz go. Ciarki przechodza ci po plecach, "+
         "gdy twe rece bezwiednie dopasowuja sie do uchwytu. Czujesz ze jakas magiczna sila "+
         "wkrada sie do twojego umyslu, przejmujac nad nim kontrole. "+
         "Miecz zaczyna plonac zywym ogniem, a ty uswiadamiasz sobie ze to on jest panem. \n");
   say(QCIMIE(this_player(),PL_MIA) + " unosi "+short(PL_BIE)+" obiema rekami. "+
        "Miecz zaczyna plonac zywym ogniem, "+
        "a w oczach "+QCIMIE(this_player(),PL_DOP)+ " pojawiaja sie plomienie.\n");
   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("Toczysz walke z dusza  " +
       short(PL_DOP)+". Przez chwile wydaje ci sie ze nie masz szans jednak "+
       "uspokajasz sie i nagle czujesz sie soba. Ogien na mieczu przygasa, a ty czujesz "+
       "wielka pustke.\n");
   say("Plomien w oczach "+QCIMIE(this_player(),PL_DOP)+" gasnie, "+
       "a klinga "+short(PL_DOP)+" przestaje plonac, "+
       "gdy "+QCIMIE(this_player(),PL_MIA)+" opuszcza swoj miecz.\n");     
   return 1;
}

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");
   }
}

public mixed
did_hit(int aid,string hdesc,int phurt,object enemy,int dt,int phit,int dam,int tohit,mixed
def_ob,object armour)
{
   object blinding;

   wielder = query_wielded();

   if(enemy->query_prop(LIVE_I_NO_FLESH))
      return ::did_hit(aid,hdesc,phurt,enemy,dt,phit,dam,tohit,def_ob,armour);

   switch(phurt)
   {
      case -1:
      case 0:
      return ::did_hit(aid,hdesc,phurt,enemy,dt,phit,dam,tohit,def_ob,armour);

      case 1..4:
      wielder->catch_msg("Z lekkiego zamachu trafiasz " + QIMIE(enemy,PL_BIE) + " w " +
          hdesc + " koncowka klingi"+
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + " zostawiajac lekkie drasniecie.\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " trafia cie w "
          + hdesc +" koncowka klingi"+
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + " rozcinajac lekko skore.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " trafia " +
          QIMIE(enemy,PL_BIE) + " w " + hdesc + " koncowka klingi"+
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + " rozcinajac lekko skore.\n",enemy);
      break;

    case 5..9:

      wielder->catch_msg("Trafiasz " + QIMIE(enemy,PL_BIE) + 
          " zamaszystym cieciem" +
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + ", lekko kaleczac "+
          enemy->koncowka("go","ja","je") + " w " + hdesc +".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + 
          " trafia w twoje cialo" +
          " zamaszystym cieciem " + short(PL_DOP) + ", lekko cie kaleczac.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " trafia w " + hdesc + " " + QIMIE(enemy,PL_DOP) +
          " zamaszystym ciosem " + short(PL_DOP) + ", kaleczac " +
          enemy->koncowka("go","ja","je") + " lekko.\n",enemy);
      break;
      
     case 10..19:

      wielder->catch_msg("Zbijasz cios " + QIMIE(enemy,PL_DOP) +
          " swo" + koncowka("im ","ja ") + short(PL_NAR) +
          " i szybko kontrujesz, raniac "+ QIMIE(enemy,PL_BIE) +
          " w " + hdesc + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " paruje twoj powolny cios "+
          "swo" + koncowka("im ","ja ") + short(PL_NAR) + 
          " i wyprowadza zdradziecka kontre, raniac cie przy tym w "+ hdesc +".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " paruje powolny cios " + QIMIE(enemy,PL_DOP) +
          " i szybko kontrujac rani " + enemy->koncowka("go","ja","je") + " w "+ hdesc +
          ".\n",enemy);
      break;

      case 20..34:
      
      wielder->catch_msg("Szybkim piruetem unikasz ciosu " + QIMIE(enemy,PL_DOP) +
          " i rabiesz na odlew zaglebiajac " + short(PL_BIE) +
          " w ciele "+ QIMIE(enemy,PL_DOP) +".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " wykonuje piruet unikajac twojego ciosu " +
          "i rabie na odlew zaglebiajac "+ short(PL_BIE) + " w twoim ciele.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wykonuje szybki piruet by uniknac ciosu " +
          QIMIE(enemy,PL_DOP) + " i rabie na odlew zaglebiajac " + short(PL_BIE) +
          " w ciele "+ QIMIE(enemy,PL_DOP) + ".\n",enemy);
      break;

      case 35..49:

      wielder->catch_msg("Unoszac "+ short(PL_BIE) +" nad glowe, wykonujesz potezne ciecie " +
          ", celujac w " + hdesc + " " + QIMIE(enemy,PL_DOP) + ". Ostrze wnika w cialo, " +
          "pozostawiajac spora rane.\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " unosi "+ short(PL_NAR) +" nad glowe, "+
          "i wykonuje potezne ciecie."+ 
          " Ostrze pozostawia spora rane, z ktorej cieknie krew.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " unosi "+ short(PL_NAR) +" nad glowe " +
          "i wykonuje potezne ciecie, celujac w " + hdesc + " " + QIMIE(enemy,PL_DOP) + 
          ". Ostrze wnika w cialo, pozostawiajac spora rane.\n",enemy);
      break;

      case 50..75:

      wielder->catch_msg("Klinge " + short(PL_DOP) + " zaczynaja otaczac plomienie, gdy "+
          " wyprowadzasz cios w " + hdesc + " " + QIMIE(enemy,PL_DOP) + 
          ". Czujesz smrod palonej skory, kiedy twoj cios dosiega celu, "+
          "rozrywajac cialo przeciwnika.\n");
      enemy->catch_msg("Klinga " + short(PL_DOP) + " zaczyna plonac, gdy " +
          QIMIE(wielder,PL_MIA) + 
          " wyprowadza zamaszysty cios. Miecz rozrywa twoje cialo, a w miejscu rany "+
          "odczuwasz palenie. Smrod spalenizny uderza w twoje nozdrza.\n");
      tell_watcher("Klinga " + short(PL_DOP) + " zaczyna plonac, gdy " +
          QIMIE(wielder,PL_MIA) + 
          " wyprowadza zamaszysty cios. Czujesz smrod palonej skory, "+
          "kiedy miecz rozrywa cialo " + QIMIE(enemy,PL_DOP) +
          ", otwierajac krwawiaca rane.\n",enemy);
	wielder->heal_hp(200)+random(100);
      break;

      case 76..99:

      wielder->catch_msg("Bezlitosnie masakrujesz " + QIMIE(enemy,PL_BIE) + 
           " " + short(PL_NAR) + ", trafiajac " + enemy->koncowka("go","ja") +
           " w " + hdesc + ". Gdy zaglebiasz miecz w ciele przeciwnika ten bucha "+
           "ogniem, przypiekajac wnetrznosci.\n"); 
      enemy->catch_msg(QIMIE(wielder,PL_MIA) + " bezlitosnie masakruje cie " +
           short(PL_NAR) + 
           ". Zaglebiajac sie w twym ciele, miecz rozpala sie, przypiekajac wnetrznosci.\n"); 
      tell_watcher(QCIMIE(wielder,PL_MIA) + " bezlitosnie masakruje " + 
          QIMIE(enemy,PL_BIE) + " " +
          short(PL_NAR) + ". Zauwazasz plomienie, gdy miecz zaglebia sie w ciele.\n",enemy); 
	wielder->heal_hp(300)+random(300);
      break;

      default:
      wielder->catch_msg("Poteznym cieciem " + short(PL_DOP) + " lamiesz kosci " +
         "i rozrywasz miesnie " + QIMIE(enemy,PL_BIE) + ". Krew tryska na wszystkie strony. " +
         " Nagle z klingi wystrzeliwuje slup ognia spopielajac "+ QIMIE(enemy,PL_BIE) +
         ". Czarne cialo pada pod twoje stopy.\n");
      enemy->catch_msg("Potezne ciecie " + short(PL_DOP) +" trzymanego przez "+
         QIMIE(wielder,PL_BIE) +" lamie twoje kosci i rozrywa miesnie. " +
         "Zauwazasz jeszcze krew tryskajaca z rany. Po chwili "+
         "czujesz ogien rozchodzacy sie po calym ciele i nie widzisz juz nic.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " poteznym cieciem " + short(PL_DOP) +
         " trafia " + QIMIE(enemy,PL_DOP) +". Slyszysz chrzest lamanych kosci, " +
         " a po chwili slup ognia wystrzeliwuje z klingi spopielajac " + QIMIE(enemy,PL_BIE) +
         ". Czujesz ogromny smrod i zauwazasz czarne cialo lezace na ziemi.\n",enemy);
	wielder->heal_hp(500)+random(500);
	break;

   }

   return 1;
}


