/* plik:       mlotb.c
 * autor:      Silvy
 * date:       16.05.98
 * update:     16.05.98
 * opis:       Magiczny mlot bojowy szefa trolli.
 */

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()
{
    dodaj_nazwy( ({ "mlot", "mlota", "mlotowi", "mlot", "mlotem",
                   "mlocie" }), ({ "mloty", "mlotow", "mlotom",
                   "mloty", "mlotami", "mlotach" }), PL_MESKI_NOS_NZYW );

    dodaj_przym("adamantytowy","adamantytowi");
    dodaj_przym("ciezki","ciezcy");

    ustaw_nazwe( ({ "mlot bojowy", "mlota bojowego", "mlotowi bojowemu ",
                    "mlot bojowy", "mlotem bojowym", "mlocie bojowym"}),
                  ({"mloty bojowe", "mlotow bojowych", "mlotom bojowym",
                    "mloty bojowe", "mlotami bojowymi", "mlotach bojowych"}), PL_MESKI_NOS_NZYW );

    set_long("@@dlugi"); 

    add_item(({"znaki","runy","napisy"}),"@@runy");

    add_cmd_item(({"znakow","runow","napisow"}),"dotknij","@@znaki");

    set_hit(45);
    set_pen(60);

    add_prop(OBJ_I_VOLUME, 3000);
    add_prop(OBJ_I_WEIGHT, 9500);
    add_prop(OBJ_I_VALUE, F_VALUE_WEAPON(24,34) + 3000);
    
    set_dt(W_BLUDGEON|W_IMPALE);
    
    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,({"Jest to magiczny, adamantytowy mlot bojowy, "+
        "wykuty wieki temu przez krasnoludzkich kowali. Nosi nazwe "+
        "Aegis-fang i jest naznaczony runami, ktore czynia go lepiej "+
        "wywazonym, niz normalne mloty i bardziej skutecznym.",15}));

    set_wf(this_object());

    set_alarm(0.5,0.0,"add_wielder");

}

string
dlugi()
{
    string str;
    str = "Masz przed soba wspanialy, dwureczny mlot bojowy, dzielo "+
       "najwyzszej klasy. Glowice wykonane z najtwardszego "+
       "znanego metalu - adamantytu, zostaly dodatkowo pokryte cienka "+
       "warstwa mithrylu, w ktorym wyryto delikatne znaki runiczne. Rekojesc "+
       "jest dluga i smukla, idealnie dopasowana do reki wprawnego wojownika."; 
    if(this_player()->query_race_name() == "krasnolud" || this_player()->query_race_name() == "krasnoludka")
      str+=" Wyglada na to, ze jest to Aegis-fang, magiczny mlot bojowy, "+
       "najwspanialsze dzielo anonimowego krasnoludzkiego kowala. Legenda "+
       "glosi, ze bron dotknieta zostala reka "+
       "bogow, przez co zyskala niezwykla sile i skutecznosc.";
    str+="\n";
    return str;
}

string
runy()
{
    string str;
    str="Na obu glowicach wygrawerowane sa w warstwie mithrylu tajemne "+
        "krasnoludzkie runy, ktore maja ponoc wzmocnic sile i wytrzymalosc "+
        "broni.\n";
    if(this_player()->query_race_name() == "krasnolud" || this_player()->query_race_name() == "krasnoludka")
      str="Na jednej z glowic, w warstwie mithrylu zostalo wyryte imie "+
         "krasnoludzkiego boga wojny, na drugiej boga tworzenia, Kowala Dusz."+
         " Z podziwem przygladasz sie tajemniczym linion i krzywiznom tajemnych runow "+
         "mocy, przeniesionych wprawna reka kowala na ten wspanialy mlot.\n";    
    return str;
}
             
string
znaki()
{
    if(this_player()->query_race_name() == "krasnolud" || this_player()->query_race_name() == "krasnoludka")
    {
      write("Dotykasz runow, a te rozblyskuja intensywnym, jasnym swiatlem, "+
        "ktore sprawia, ze mruzysz oczy.\n");
      say(QCIMIE(this_player(),PL_MIA) + " dotyka runow, a te rozblyskuja intensywnym, jasnym swiatlem.\n");
      return"";
    }
    return"Dotykasz znakow, lecz nic sie nie dzieje.\n";
}

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("Czujesz w sobie niezwykla moc, gdy dobywasz "+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("Czujesz nieokreslona pustke, gdy opuszczasz " +
       short(PL_BIE)+".\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","je")+" w " +
          hdesc +
          " swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " lekko kaleczy cie w "
          + hdesc +
          " swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " lekko kaleczy " +
          QIMIE(enemy,PL_BIE) + ", trafiajac "+enemy->koncowka("go","ja","je")+
          " w " + hdesc + " "+
          "swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n",enemy);
      break;

      case 5..9:

      wielder->catch_msg("Kaleczysz " + QIMIE(enemy,PL_BIE) +
          " zamaszystym ciosem" +
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " kaleczy cie" +
          " zamaszystym ciosem " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " kaleczy " + QIMIE(enemy,PL_BIE) +
          " zamaszystym ciosem " + short(PL_DOP) + ".\n",enemy);
      break;
      
      case 10..19:

      wielder->catch_msg("Lekko ranisz " + QIMIE(enemy,PL_BIE) +
          ", trafiajac "+enemy->koncowka("go","ja","je")+
          " w " + hdesc + " zamaszystym uderzeniem" +
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " lekko rani cie"+
          " zamaszystym uderzeniem " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " lekko rani " + QIMIE(enemy,PL_BIE) +
          " zamaszystym uderzeniem " + short(PL_DOP) + ".\n",enemy);
      break;

      case 20..34:
      
      wielder->catch_msg("Wykonujesz potezny cios " +
          short(PL_NAR) + ", raniac " + QIMIE(enemy,PL_BIE) +
          " w " + hdesc + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " wykonuje potezny cios " +
          short(PL_NAR) + ", raniac cie w " + hdesc +".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wykonuje potezny cios " +
          short(PL_NAR) + ", raniac " + QIMIE(enemy,PL_BIE) +
          " w " + hdesc + ".\n",enemy);
      break;

      case 35..49:

      wielder->catch_msg("Wykonujesz zamaszysty cios " + short(PL_NAR)+
          ", miazdzac czlonki " + QIMIE(enemy,PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " wykonuje zamaszysty cios "+
          short(PL_NAR) + ", miazdzac twe czlonki.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wykonuje zamaszysty cios " + short(PL_NAR)+
          ", miazdzac czlonki " + QIMIE(enemy,PL_DOP) + ".\n",enemy);
      break;

      case 50..75:

      wielder->catch_msg("Potezne uderzenie twojego " + short(PL_DOP) +
          " dosiega " + QIMIE(enemy,PL_DOP) + ", zostawiajac glebokie rany na " +
          enemy->koncowka("jego","jej") + " ciele.\n");
      enemy->catch_msg("Potezne uderzenie " + short(PL_DOP) + " " +
          QIMIE(wielder,PL_DOP) + 
          " dosiega cie, zostawiajac glebokie rany na twym ciele.\n");
      tell_watcher("Potezne uderzenie " + short(PL_DOP) + " " +
          QCIMIE(wielder,PL_DOP) + 
          " dosiega " + QIMIE(enemy,PL_DOP) +
          ", zostawiajac glebokie rany na " +
          enemy->koncowka("jego","jej") + " ciele.\n",enemy);
      break;

      case 76..99:

      wielder->catch_msg("Masakrujesz " + QIMIE(enemy,PL_BIE) + 
           " " + short(PL_NAR) + ", trafiajac " + enemy->koncowka("go","ja") +
           " w " + hdesc + ".\n"); 
      enemy->catch_msg(QIMIE(wielder,PL_MIA) + " masakruje cie " +
           short(PL_NAR) + ".\n"); 
      tell_watcher(QCIMIE(wielder,PL_MIA) + " masakruje " + 
          QIMIE(enemy,PL_BIE) + " " +
          short(PL_NAR) + ".\n",enemy); 
      break;

      default:
      wielder->catch_msg("Potezne uderzenie twojego "+short(PL_DOP)+
         " miazdzy glowe " + QIMIE(enemy,PL_DOP) +". Martwe cialo "+
         "pada u twych stop bez zycia.\n");
      enemy->catch_msg("Potezne uderzenie "+short(PL_DOP)+
         " miazdzy twa glowe. Ostatnia rzecza jaka widzisz, jest "+
         "sylwetka "+QIMIE(wielder,PL_DOP) + " wznoszaca sie nad toba. "+
         "Potem zapada ciemnosc.\n");
      tell_watcher("Potezne uderzenie "+short(PL_DOP)+
         " miazdzy glowe " + QIMIE(enemy,PL_DOP) +". Martwe cialo "+
         "pada u stop "+ QIMIE(wielder,PL_DOP) +".\n",enemy);
      break;

   }

   return 1;
}
