/* plik:       kosab.c
 * autor:      Silvy
 * date:       14.04.98
 * update:     26.04.98
 * opis: Magiczna kosa bojowa dla demona Khorna
 */

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(({"kosa bojowa","kosy bojowej","kosie bojowej","kose bojowa",
        "kosa bojowa","kosie bojowej"}),
        ({"kosy bojowe","kos bojowych","kosom bojowym","kosy bojowe",
        "kosami bojowymi","kosach bojowych"}),PL_ZENSKI);
    dodaj_nazwy(({"kosa","kosy","kosie","kose","kosa","kosie"}),
        ({"kosy","kos","kosom","kosy","kosami","kosach"}), PL_ZENSKI);
            
    dodaj_przym("srebrzysty","srebrzysci");

    set_long("Widzisz niesamowita bron, srebrzysta kose bojowa, tak ostra, "+
        "ze moglaby ona przeciac w locie motyla. Azurowe ostrze wykonane jest "+
        "ze stali o srebrzystej barwie, polyskujacej "+
        "wlasna, magiczna poswiata. Jest ono osadzone na dlugim drzewcu, dodatkowo "+
        "wzmocnionym stalowymi okuciami. Zaraz ponizej ostrza, na drzewcu, "+
        "widnieja dziwne znaki, najprawdopodobniej runy. Bron ta nieodparcie "+
        "przywodzi ci na mysl smierc.\n"); 

    add_item(({"ostrze","azurowe ostrze"}),"Azurowe ostrze jest ostre jak "+
        "brzytwa. Zdobienia maja postac archaicznych motywow roslinnych.\n");
    add_item(({"runy","znaki"}),"Starozytne runy pulsuja srebrzysta "+
        "poswiata. Masz nieodparta ochote dotknac ich.\n");
    add_item("okucia","Stalowe okucia wzmacniaja drzewiec kosy.\n");
    add_item("drzewiec","Drewniany drzewiec wykonany jest z niezwykle "+
       "twardego materialu, dodatkowo wzmocnionego metalowymi "+
       "okuciami.\n");        
    
    add_cmd_item(({"znakow","runow","znaki","runy"}),"dotknij","@@znaki");
    
    set_hit(25);
    set_pen(44);

    add_prop(OBJ_I_VOLUME, 3000);
    add_prop(OBJ_I_WEIGHT, 4500);
    add_prop(OBJ_I_VALUE, F_VALUE_WEAPON(25,39) + 2000);
    
    set_likely_dull(0);
    
    set_dt(W_SLASH|W_IMPALE);
    
    set_wt(W_POLEARM);

    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,({"Srebrzysta kosa bojowa to potezny "+
        "artefakt, wykuty w krasnoludzkich kuzniach Gor Kranca Swiata "+
        "przed wiekami. Nalozona na nia magia powoduje jej nienaturalna "+
        "wrecz ostrosc i ofektywnosc z jaka posluzyc ona moze wprawnemu wojownikowi "+
        "w walce.\n",15}));

    set_wf(this_object());

    set_alarm(0.5,0.0,"add_wielder");

}

string
znaki()
{
    write("Dotykasz runow, a te rozblyskuja intensywnym, srebrzystym swiatlem, "+
        "ktore sprawia, ze ornamenty na ostrzu wydaja sie poruszac.\n");
    say(QCIMIE(this_player(),PL_MIA) + " dotyka runow, a te rozblyskuja intensywnym, srebrzystym swiatlem, "+
        "ktore sprawia, ze ornamenty na ostrzu wydaja sie poruszac.\n");
    return"";
}

mixed
wield(object what)
{
   set_alarm(0.1,0.0,"add_wielder");
   write("Ostrze kosy rozblyska nieziemskim blaskiem, gdy dobywasz broni "+
       "w obie rece.\n");
   say("Ostrze srebrzystej kosy bojowej rozblyska nieziemskim blaskiem, gdy "+
       QCIMIE(this_player(),PL_MIA) + " dobywa jej 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("Przechodzi cie nagly dreszcz, gdy opuszczasz srebrzysta kose "+
       "bojowa.\n");
   say(QCIMIE(this_player(),PL_MIA)+" opuszcza srebrzysta kose bojowa, "+
       "a jej ostrze przygasa na moment.\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:
      wielder->catch_msg("Wykonujesz potezny zamach " + short(PL_NAR) + 
          ", celujac w " + QIMIE(enemy,PL_BIE) +
          ", ale pudlujesz szpetnie.\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " wykonuje potezny zamach " +
          short(PL_NAR) + ", celujac w ciebie, ale pudluje szpetnie.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wykonuje potezny zamach " +
          short(PL_NAR) + ", celujac w "+
          QIMIE(enemy,PL_BIE)+", ale pudluje szpetnie.\n", enemy);
      break;
*/
      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) + " 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) + " w " + hdesc + " "+
          "swo" + koncowka("im ","ja ") + short(PL_NAR) + ".\n",enemy);
      break;

      case 5..9:

      wielder->catch_msg("Kaleczysz " + QIMIE(enemy,PL_BIE) +
          " zamaszystym cieciem" +
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " kaleczy cie" +
          " zamaszystym cieciem " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " kaleczy " + QIMIE(enemy,PL_BIE) +
          " zamaszystym cieciem " + short(PL_DOP) + ".\n",enemy);
      break;
      
      case 10..19:

      wielder->catch_msg("Lekko ranisz " + QIMIE(enemy,PL_BIE) +
          " w " + hdesc + " finezyjnym cieciem" +
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " lekko rani cie"+
          " finezyjnym cieciem " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " lekko rani " + QIMIE(enemy,PL_BIE) +
          " finezyjnym cieciem " + 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("Wyrywasz krwawe kawalki ciala " + QIMIE(enemy,PL_DOP) +
          ", tnac " + enemy->koncowka("go w ","ja w ") +
          hdesc + " ostrzem" +
          " swo" + koncowka("jego ","jej ") + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " wyrywa krwawe kawalki ciala, " + 
          "tnac cie w " + hdesc + " " + short(PL_NAR) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wyrywa krwawe kawalki ciala " +
          QIMIE(enemy,PL_DOP) + ", tnac go " + short(PL_NAR) + 
          " w " + hdesc + ".\n",enemy);
      break;

      case 50..75:

      wielder->catch_msg("Potezne uderzenie twojej " + short(PL_DOP) +
          " dosiega " + QIMIE(enemy,PL_DOP) + ", zostawiajac krwawe bruzdy na " +
          enemy->koncowka("jego","jej") + " ciele.\n");
      enemy->catch_msg("Potezne uderzenie " + short(PL_DOP) + " " +
          QIMIE(wielder,PL_DOP) + 
          " dosiega cie, zostawiajac krwawe bruzdy na twym ciele.\n");
      tell_watcher("Potezne uderzenie " + short(PL_DOP) + " " +
          QCIMIE(wielder,PL_DOP) + 
          " dosiega " + QIMIE(enemy,PL_DOP) +
          ", zostawiajac krwawe bruzdy 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 + ". Na ostrzu pozostaja krwawe kawalki ciala.\n"); 
      enemy->catch_msg(QIMIE(wielder,PL_MIA) + " masakruje cie " +
           short(PL_NAR) + ". Na ostrzu pozostaja krwawe kawalki twego ciala.\n"); 
      tell_watcher(QIMIE(wielder,PL_MIA) + " masakruje " + 
          QIMIE(enemy,PL_BIE) + " " +
          short(PL_NAR) + ". Na ostrzu pozostaja krwawe kawalki ciala.\n",enemy); 
      break;

      default:
      wielder->catch_msg("Slyszysz ochydny dzwiek rozdzieranej tkanki " +
         "i kruszonych kosci, gdy tw" + koncowka("oj","oja") +
         " " + short(PL_MIA) + " masakruje " + hdesc + " " + 
         QIMIE(enemy,PL_DOP) + ". Ostrze gleboko wnika w cialo, tak ze krew " +
         "tryska szerokim strumieniem z rany.\n");
      enemy->catch_msg("Slyszysz ochydny dzwiek rozdzieranej tkanki " +
         "i kruszonych kosci, gdy" +
         " " + short(PL_MIA) + " " + QIMIE(wielder,PL_DOP) + 
         " masakruje twoje cialo. Ostrze gleboko wnika w rane, tak ze krew " +
         "tryska wkolo szerokim strumieniem.\n");
      tell_watcher("Slyszysz ochydny dzwiek rozdzieranej tkanki " +
         "i kruszonych kosci, gdy" +
         " " + short(PL_MIA) + " " + QIMIE(wielder,PL_DOP) + 
         " masakruje cialo " + QIMIE(enemy,PL_DOP) +
         ". Ostrze gleboko wnika w rane, tak ze krew " +
         "tryska wkolo szerokim strumieniem.\n", enemy);
      break;

   }

   return 1;
}
