/* plik:       toporb.c
 * autor:      Silvy
 * date:       12.07.98
 * update:     12.07.98
 * opis:       Magiczny topor dla szefa reptilionow.
 */

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"
#define TO this_object()
#define TP this_player()

object wielder;


create_weapon()
{
    ustaw_nazwe( ({ "mlot bojowy", "mlota bojowego", "mlotowi bojowemu ",
      "mlot bojowy", "mlotem bojowym", "mlocie bojowym"}),
      ({"mloty bojowe", "mlotow bojowych", "mlotu bojowemu",
      "mloty bojowe", "mlotami bojowymi", "mlotach bojowych"}),
      PL_MESKI_NOS_NZYW );

    dodaj_nazwy( ({ "mloty","mlota","mlotowi","mlot","mlotem","mlocie"}),
      ({"mloty","mlotow","mlotom","mloty","mlotami","mlotach"}),
      PL_MESKI_NOS_NZYW );

    dodaj_przym("diamentowy","diamentowi");
    dodaj_przym("blyszczacy","blyszczacy");

    set_long("@@dlugi"); 


    set_hit(20);
    set_pen(40);

    add_prop(OBJ_I_VOLUME, 6000);
    add_prop(OBJ_I_WEIGHT, 11200);
    add_prop(OBJ_I_VALUE, F_VALUE_WEAPON(21,37) + 2222);
    
    set_dt(W_BLUDGEON);
    
    set_wt(W_WARHAMMER);

    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,({"Dwureczny topor wykonany jest z hartowanej stali z "+
      "domieszka skladnikow, nadajacych mu opalizujacej barwy. Jest bardzo ciezki, a "+
      "zawarta w nim magia dodatkowo zwieksza jego skutecznosc, powodujac, ze zadawane "+
      "nim obrazenia sa wieksze niz te, powodowane przez zwykly orez. "+
      "Wykuty zostal przed wiekami w jednej z kuzni w Karak Varn, po czym "+
      "zaginal na dlugie lata.",15}));

    set_wf(this_object());

    set_alarm(0.5,0.0,"add_wielder");

}

string
dlugi()
{
    string str;
    str = "Jest to przepiekny wykonany w calosci z niezwykle "+
	"wytrzymalego materialu, jakim niewatpliwie jest diament. "+
	"Juz na pierwszy rzut oka widac, iz ta bron posiada niebywala moc. "+
	"Klinga Mlota to rozjasnia sie zlotym swiatlem to co chwile przygasa. "+
	"Na rekojesci widnieja zarysy starozytnego Pisma bogow. "+
	"Czy zatem mlot jest darem dla praworzadnych ludzi? "+
        "Wydaje ci sie ze ta bron jest niebywale skuteczna i zapewne "+
	"smiertelnie grozna we wprawnych dloniach.\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 mlot.\n");
   say(QCIMIE(this_player(),PL_MIA)+" opuszcza "+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("Kaleczysz lekko " + QIMIE(enemy,PL_BIE) + ", trafiajac "+
          ""+enemy->koncowka("go","ja")+" w "+hdesc+" swoim "+
	  ""+this_object()->short(PL_NAR)+".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " kaleczy cie lekko trafiajac "+
          "w "+hdesc+" swoim "+this_object()->short(PL_NAR)+".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " kaleczy lekko " +
          QIMIE(enemy,PL_BIE) + " swoim "+this_object()->short(PL_NAR)+" "+
          "trafiajac "+enemy->koncowka("go","ja","je")+" w "+hdesc+".\n",enemy);
      break;

      case 5..9:

      wielder->catch_msg("Lekko ranisz "+QIMIE(enemy,PL_BIE)+", trafiajac "+
          ""+enemy->koncowka("go","ja")+" w "+hdesc+" zamaszystym "+
	  "uderzeniem swojego "+this_object()->short(PL_DOP)+".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " lekko rani cie zamaszystym "+
      "uderzeniem "+this_object()->short(PL_DOP)+", trafiajac cie w "+
      ""+hdesc+".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " lekko rani "+QIMIE(enemy,PL_BIE)+" "+
	    "zamaszystym uderzeniem swojego "+this_object()->short(PL_DOP)+", "+
	    "trafiajac "+enemy->koncowka("go","ja","je")+" w "+hdesc+".\n",enemy);
      break;
      
      case 10..19:

      wielder->catch_msg("Ranisz "+QIMIE(enemy,PL_BIE)+", trafiajac "+
          ""+enemy->koncowka("go","ja")+" w "+hdesc+" wspanialym "+
	  "cieciem swojego "+TO->short(PL_DOP)+".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " rani cie wspanialym "+
          "cieciem "+TO->short(PL_DOP)+" trafiajac w "+hdesc+".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " rani "+QIMIE(enemy,PL_BIE) +" "+
          "wspanialym cieciem "+TO->short(PL_DOP)+", trafiajac "+
	  ""+enemy->koncowka("go","ja")+" w "+hdesc+".\n",enemy);
      break;

      case 20..34:
      
      wielder->catch_msg("Umiejetnie wyprowadzasz cios ognistym toporem "+
              "i ranisz "+QIMIE(enemy,PL_BIE)+" w "+hdesc+".\n");
      
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " umiejetnie wyprowadza "+
          "cios ognistym toporem raniac cie w "+hdesc+".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " umiejetnie wyprowadza "+
          "cios ognistym toporem raniac "+QIMIE(enemy,PL_BIE)+" "+
          "w "+ hdesc+".\n",enemy);
      break;

      case 35..49:

      wielder->catch_msg("Czujesz jak potezna glowica twojego topora "+
          "z potworna sila zanuza sie w ciele "+QIMIE(enemy,PL_DOP)+" "+
	  "pozostawiajac po sobie plonaca rane!\n");
	        
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " rozpedza glowice swojego "+
      "ognistego topora i z potwornym impetem trafia w ciebie! Czujesz "+
      "jak ogien niemilosiernie pali cie w zranione miejsce powodujac "+
      "zarazem straszliwy bol.\n");

      tell_watcher(QCIMIE(wielder,PL_MIA)+" rozpedza glowice "+
      "swojego topora i z potwornym impetem trafia w "+
      ""+QIMIE(enemy,PL_BIE)+" rozcinajac jego miesnie, a powstale "+
      "rany wypelniajac ogniem.\n",enemy);
      break;

      case 50..75:

      wielder->catch_msg("Bardzo ciezko ranisz "+QIMIE(enemy,PL_BIE)+".\n");
      enemy->catch_msg("Nagle ostrze topora wbija sie w twoje cialo "+
          "penetrujac twe zmysly straszliwym bolem!\n");
      tell_watcher(""+QCIMIE(wielder,PL_MIA)+" bardzo ciezko rani "+
          ""+QIMIE(enemy,PL_BIE)+" ostrzem swojego ognistego topora.\n",enemy);
      break;

      case 76..99:

      wielder->catch_msg("Twoj topor bucha ogniami, kiedy z mordercza "+
          "sila wtapia sie w cialo "+QIMIE(enemy,PL_DOP)+" masakrujac "+
	  ""+enemy->koncowka("go","ja")+".\n");
      
      enemy->catch_msg("Topor "+QIMIE(wielder,PL_DOP) + " bucha ogniem, "+
          "kiedy ostrze z mordercza sila wtapia sie w twoje cialo "+
	  "i pozostawia po sobie rozlegle, "+
	  "plonace rany .\n"); 
      tell_watcher(QCIMIE(wielder,PL_MIA)+" zanuza ostrze swego topora "+
              "w ciele "+QIMIE(enemy,PL_DOP)+" pozostawiajac "+
	      "rozlegle, plonace ogniem rany.\n",enemy); 
      break;

      default:
      wielder->catch_msg("Wrabujesz ostrze ognistego topora prosto "+
          "w glowe "+QIMIE(enemy,PL_DOP)+" rozchlapujac mozg i "+
	  "czaszke w drobiazgi.\n");
      enemy->catch_msg("Potezny cios " + QIMIE(wielder,PL_DOP) +
         " trafia cie glowe. Czujesz jak ogien rozsadza twoja czaszke... "+
	 "potem nie czujesz juz nic.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA)+" wrabuje ostrze ognistego "+
      "topora prosto w glowe "+QIMIE(enemy,PL_DOP)+". Krew wraz z "+
      "plomieniami wybucha strugami wdajac w powietrze nieprzyjemny "+
      "zapach palonego miesa.\n",enemy);
      break;

   }

   return 1;
}




