/* plik:       tops.c
 * autor:      Dhor 
 * opis:       Specjalny topor dla szefa .
 */

inherit "/d/Imperium/std/weapon";
// inherit "/std/living";

#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>
#include <formulas.h>
#include <filter_funs.h>
#include <options.h>

#include <dhor.h>

#define LIVE_I_NO_FLESH	"_live_i_no_flesh"

object wielder;

create_weapon()
{
    ustaw_nazwe( ({ "topor bojowy", "topora bojowego", "toporowi bojowemu ",
      "topor bojowy", "toporem bojowym", "toporze bojowym"}),
      ({"topory bojowe", "toporow bojowych", "toporom bojowym",
      "topory bojowe", "toporami bojowymi", "toporach bojowych"}),
      PL_MESKI_NOS_NZYW );

    dodaj_nazwy( ({ "topor","topora","toporowi","topor","toporem","toporze"}),
      ({"topory","toporow","toporom","topory","toporami","toporach"}),
      PL_MESKI_NOS_NZYW );

    dodaj_przym("runiczny","runiczni");
    dodaj_przym("obosieczny","obosieczni");

    set_long("@@dlugi"); 

    add_item(({"znaki","runy","napisy"}),"@@runy");
    add_item(({"trzonek","trzon"}),"@@trzon");
    set_hit(37);
    set_pen(38);

    add_prop(OBJ_I_VOLUME, 6000);
    add_prop(OBJ_I_WEIGHT, 7000);
    add_prop(OBJ_I_VALUE, F_VALUE_WEAPON(21,37) + 2222);
    
    set_dt(W_BLUDGEON);
    
    set_wt(W_AXE);

    set_hands(W_BOTH);

    add_prop(OBJ_M_NO_BUY, 1);
    

    set_wf(this_object());

    set_alarm(0.5,0.0,"add_wielder");

}

string
dlugi()
{
    string str;
    if ((TP->query_race())=="krasnolud")
    {	
    str = "Z niedowierzaniem spogladasz na ten cudownie wykonany topor. "+
    "Bez trudu rozpoznajesz wspaniale rzemioslo krasnoludzkich kowali, "+
    "ktore pod wplywem czasu staje sie jeszcze piekniejsze i imponuje swa "+
    "dokladnoscia. "+
    "Topor ten posiada charakterystyczne obosieczne ostrze. Sa to dwa "+
    "polksiezycowate platy dokladnie wypolerowanej krasnoludzkiej stali, "+
    "zaostrzone tak ze nie ma zludzen co do skutecznosci tej broni. Do "+
    "stali dodano domieszek ktore powoduje ze ostrze sie latwo nie sciera, "+
    "a bok ostrzy jest pokryty runami rytmi w zdobiacym topor mithrylu. "+
    "Wsrod motywow zdobiacych dostrzegasz run Bakraz-Rhun ktoremu poswiecono "+
    "te bron. Run krasnoludzkich berserkerow, kultu niemalze juz "+
    "zapomnianego. "+
    "Ostrza osadzone sa na debowym trzonie wzmacniany dodatkowo stalowymi "+
    "trzpieniami, a uchwyt sklada sie z chropowatej powierzchni co pozwala na "+
    "pewne trzymanie w rekach tej zabojczej broni. "+
    "Topor ten nieodparcie przypomina ci dzieje i okres swietnosci krasnoludzkich "+
    "rodow. \n";
    say(QCIMIE(TP, PL_MIA) + " mruzy oczy i kiwajac glowa z podziwem przyglada sie "+
    "swemu toporowi. \n");
    }
    else
    {
    str = "Jest to obosieczny topor bojowy, wykonany zapewne przez krasnoludy. "+
    "Na debowym trzonie osadzono niezle zaostrzone, duze ostrze, "+
    "na bokach ktorego dostrzegasz jakies znaki. "+
    "Topor na pewno jest wartosciowy, co wnioskujesz po zdobiacym go mithrylu. \n";
    }
    return str;
}

string
runy()
{
    string str;
    if ((TP->query_race())=="krasnolud")
    { 
    str="Na boku ostrzy widnieja misternie wykonane runy Bakraz-Rhun. "+
    "Jest to run poswiecony krasnoludzkim berserkerom, ktorzy juz "+
    "wieki temu odeszli w zapomnienie, tak jak i caly kult. "+
    "Podobno jeszcze w Norsce mozna spotkac kilku z nich. \n";
    }
    else
    {
    str = "Kilka znakow na ostrzu. \n";
    }
    return str;
}
string
trzon()
{
    string str;
    str="Jest to debowy, wzmacniany stala trzon. \n"; 
    return str;
}

mixed
wield(object what)
{
   if(this_player()->query_stat(0) < 50)
     {
         say(QCIMIE(this_player(),PL_MIA) + " proboje dobyc " +
           short(PL_DOP) + ", lecz nie ma dosc sil, by tego dokonac.\n");
         return"Probojesz dobyc "+short(PL_DOP) + ", lecz nie masz dosc "+
           "sil, by tego dokonac.\n";
     }        
   set_alarm(0.1,0.0,"add_wielder");
   write("Dobywasz oburacz "+short(PL_DOP)+ ".\n");
   say(QCIMIE(this_player(),PL_MIA) + " dobywa "+short(PL_DOP)+" obiema rekami.\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("Opuszczasz powoli swoj " + short(PL_MIA)+".\n"); 
   say(QCIMIE(this_player(),PL_MIA)+" opuszcza swoj "+short(PL_BIE)+".\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("Lekko muskasz " + QIMIE(enemy,PL_BIE) + " w " +
          hdesc +
          " swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " lekko muska cie w "
          + hdesc +
          " swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " muska " +
          QIMIE(enemy,PL_BIE) + " w " + hdesc + 
          " swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n",enemy);
      break;

      case 5..9:

      wielder->catch_msg("Bez wysilku niezbyt mocno ranisz " + QIMIE(enemy,PL_BIE) + " w " + hdesc+
          " lekkim ciosem " +
          "swo" + koncowka("jego ","jej ") + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " rani cie niezbyt mocno lekkim ciosem swojego " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " bez wysilku rani niezbyt mocno " + QIMIE(enemy,PL_BIE) +
          " w " + hdesc + " lekkim ciosem swojego" + short(PL_DOP) + ".\n",enemy);
      break;
      
      case 10..19:

      wielder->catch_msg("Skutecznym uderzeniem swojego " + short(PL_DOP) + " rozcinasz cialo " + QIMIE(enemy,PL_BIE) +
          " trafiajac " + enemy->koncowka("go","ja") + " w " + hdesc + ". \n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " skutecznym uderzeniem swojego "+ short(PL_DOP) 
      + " rozcina ci cialo trafiajac cie w " + hdesc + ". \n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " skutecznym uderzeniem rozcina "+
      "cialo " + QIMIE(enemy,PL_BIE) + " ciosem swojego "+ short(PL_DOP) + ". \n",enemy);
      break;

      case 20..34:
      
      wielder->catch_msg("Bierzesz mocny zamach i krotkim energicznym ciosem ranisz "
          + QIMIE(enemy,PL_BIE) + " w " + hdesc + " swoim " + short(PL_NAR) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " bierze mocny zamach i krotkim energicznym ciosem "+
          "rani cie swoim " +
          short(PL_NAR) + " w " + hdesc +".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " bierze mocny zamach i krotkim energicznym ciosem rani "
          + QIMIE(enemy,PL_BIE) + " swoim " 
          + short(PL_NAR) + " w " + hdesc + ".\n",enemy);
      break;

      case 35..49:

      wielder->catch_msg("Wyprowadzasz mocne uderzenie zza glowy swoim " + short(PL_NAR) +
          " i zmieniajac nagle kierunek ciosu, szerokim cieciem z boku ciezko ranisz " + QIMIE(enemy,PL_DOP) +  
          " w " + hdesc + ". \n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " wyprowadza mocne uderzenie zza glowy swoim "+
          short(PL_NAR) + " i nagle zmienia kierunek ciosu, tnac cie szerokim cieciem z boku w " + hdesc + " i ciezko cie raniac. \n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wyprowadza mocne uderzenie zza glowy swoim " + short(PL_NAR) +
          " i nagle zmienia kierunek ciosu tnac z boku " + QIMIE(enemy,PL_BIE) + " ciezko raniac " 
          + enemy->koncowka("go","ja") + " w " + hdesc + ". \n",enemy);
      break;

      case 50..75:

      wielder->catch_msg("Korzystajac z nieuwagi " + QIMIE(enemy,PL_DOP) + " w zrecznym uniku doskakujesz blisko do "
      + enemy->koncowka("niego","niej") + " i tniesz poteznie z polobrotu swym " + short(PL_NAR) + ", otwierajac ziejaca " +
      "czerwienia gleboka rane. " + QCIMIE(enemy,PL_DOP) + " krzywiac sie z bolu odskakuje w tyl. \n") +
      
      enemy->catch_msg("Nim sie spostrzeg" + enemy->koncowka("les","las") + " " 
          + QIMIE(wielder,PL_MIA) + " doskoczyl do ciebie w mylacym uniku i cial cie poteznie z polobrotu swym "
          + short(PL_NAR) + " powodujac powazna gleboka rane. Krzywiac sie z bolu odskakujesz w tyl.\n");

      tell_watcher("Korzystajac z nieuwagi " + QIMIE(enemy,PL_DOP) + ", " 
          + QIMIE(wielder,PL_MIA) + " robiac unik doskakuje do " 
          + enemy->koncowka("niego","niej") + " i tnac potezenie z polobrotu swym " 
          + short(PL_NAR) + " zadaje gleboka rane. "+ QCIMIE(enemy,PL_MIA) + " krzywiac sie z bolu odskakuje w tyl. \n", enemy);
      break;

      case 76..99:

      wielder->catch_msg("Unosisz poziomo swoj " + short(PL_MIA) + " na wysokosc ramion "+
      "i naglym ruchem uderzasz " + QIMIE(enemy,PL_BIE) + " koncowka styliska "+
      "w twarz miazdzac mu zuchwe, po czym z poteznego zamachu masakrujesz oszlomion" +enemy->koncowka("ego","na")+
      " przeciwni"+enemy->koncowka("ka","czke")+" skosnym uderzeniem. Bron przy odglosie miazdzonych kosci "+
      "grzeznie w ciele, a krew momentalnie bucha z potwornej rany na wszystkie strony. \n", enemy);
       
      enemy->catch_msg(QIMIE(wielder,PL_MIA) + " unosi nagle swoj topor poziomo do ramion " +
           "i uderza cie koncowka styliska w twarz, lamiac ci zuchwe ! Nim sie " +
           "otrzasn" + enemy->koncowka("ales","elas") + ", " + QIMIE(wielder,PL_MIA) + " wyprowadzil "+
           "mordercze skosne ciecie swoim "+ short(PL_NAR) + " masakrujac cie nim. Czujesz jak bron grzeznie "+
           "w twoim ciele przy odglosie miazdzonych kosci. \n"); 
      tell_watcher(QIMIE(wielder,PL_MIA) + " unosi nagle swoj topor poziomo do ramion " +
           " i uderza "+QIMIE(enemy,PL_DOP)+" koncowka styliska w twarz, lamiac "+enemy-koncowka("mu","jej")+" zuchwe ! Nim " +
           "otrzasn" + enemy->koncowka("al","ela") + " sie, " + QIMIE(wielder,PL_MIA) + " wyprowadzil "+
           "mordercze skosne ciecie swoim "+ short(PL_NAR) + " i przy odglosie miazdzonych kosci masakrujac "+enemy->koncowka("go","ja")+", wyrywajac "+
           "bron z powstalej potwornej rany, buchajacej na wszystkie strony krwia. \n",enemy);
      
      break;

      default:
      wielder->catch_msg("Z okrzykiem na ustach dopadasz do " + QIMIE(enemy,PL_CEL) + " tnac straszliwe z szerokiego zamachu "+
      "swoim " + short(PL_NAR) + ". Ostrze wnika w korpus i przechodzac przez kosci i sciegna grzeznie w polowie. "+
      QCIMIE(enemy,PL_MIA) +" z cichym jekiem i zdziwieniem w oczach osuwa sie na kolana i kleczac w momentalnie powstalej "+
      "kaluzy krwi, pada na ziemie. Opierasz noge na zwlokach i przytrzymujac je, wyszarpujesz z ciala swoja zakrwawiona bron. \n",enemy);
      
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " okrzykiem na ustach dopada do ciebie i nim zdarzyl"+enemy->koncowka("es","as")+" zareagowac "+
      "widzisz lecace w twoja strone ostrze. Probujesz uniknac mknacej w twoja strone smierci, lecz jest juz za pozno. "+
      "Bron wnika w twoj korpus, miazdzy kosci i przecinajac sciegna grzeznie w polowie. Z cichym jekiem i zdziwieniem w oczach "+
      "osuwasz sie na kolana. Czujesz przejmujace cieplo na brzuchu. Zamykasz oczy..... \n");
      
      tell_watcher(QCIMIE(wielder,PL_MIA) + " z okrzykiem na ustach dopada do " + QIMIE(enemy,PL_DOP) + " tnac straszliwe z szerokiego zamachu "+
      "swoim " + short(PL_NAR) + ". Ostrze wnika w korpus i przechodzac przez kosci i sciegna grzeznie w polowie. "+
      QCIMIE(enemy,PL_MIA) +" z cichym jekiem i zdziwieniem w oczach osuwa sie na kolana i kleczac w momentalnie powstalej "+
      "kaluzy krwi, pada na ziemie. "+QCIMIE(wielder,PL_MIA)+" opiera noge na zwlokach i przytrzymujac je, wyszarpuje z ciala swoja zakrwawiona bron. \n",enemy);
      
      break;

   }

   return 1;
}




