/* Plik:        sztyletboss.c 
 * Autor:       Cedar
 * Data:        15.08.2003
 * Opis: Sztylecik dla bossa expowiska Malali.
 */
inherit "/d/Imperium/std/weapon";
object wielder;
#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>
#include <formulas.h>
#include <filter_funs.h>
#include <options.h>
int which_hit;
int spec_delay;
int enemy_align;
int wielder_align;
int dam_ench_ratio;
#define TP              this_player()
#define TO              this_object()
void
create_weapon()
{
    dodaj_nazwy( ({ "sztylet", "sztyletu", "sztyletowi", "sztylet", "sztyletem", "sztylecie" }), 
                 ({ "sztylety", "sztyletow", "sztyletom", "sztylety", "sztyletami", "sztyletach" }), PL_MESKI_NOS_NZYW );
    dodaj_przym("trojkatki","trojkatni");
    dodaj_przym("dlugi","dludzy");
    dodaj_przym("adamentytowy","adamentytowi");
    ustaw_nazwe( ({ "sztylet", "sztyletu", "sztyletowi", "sztylet", "sztyletem", "sztylecie" }), 
                 ({ "sztylety", "sztyletow", "sztyletom", "sztylety", "sztyletami", "sztyletach" }), PL_MESKI_NOS_NZYW );
    
    set_long("Spogladasz na dlugi trojkatny adamentytowy sztylet. " +
             "Na pierwszy zut oka, nie rozni sie niczym od innych " +
             "sztyletow, moze troche materialem, z ktorego go wykonano. " +
             "Ogladasz dokladnie jego rekojesc, na samym poczatku " +
             "rekojesci, widzisz dziwna rune, po chwili dochodzisz " +
             "do wniosku, ze znak ten, nalezy do wyznawcow Malala. " +
             "Nagle czujesz jak z tej broni bije ogromna energia. " +
             "Nachodzi Cie chec dobycia tej broni, myslisz czy dasz " +
             "rade jej dobyc i czy Ci nic nie grozi.\n");
    set_likely_dull(0);
    add_prop(OBJ_M_NO_BUY, 1);
    
    add_prop(OBJ_I_IS_MAGIC_WEAPON, 1);
    
    which_hit = 0;
    
    add_prop(MAGIC_AM_MAGIC, ({ 100, "enchantment"}));
    set_hit(80);
    set_pen(80);
    set_wt(W_KNIFE);
    set_dt(W_SLASH);
    set_hands(W_ANYH);
    add_prop(OBJ_I_WEIGHT, 1500);
    add_prop(OBJ_I_VOLUME, 6000);
    add_prop(OBJ_I_VALUE, 10000);
}
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");
   }
}    
mixed
wield(object what)
{
   if (TP->query_alignment() < -1000)
    {
        TP->heal_hp(500);
        return "Twym oczom ukazuje sie wielka postac, ktora mowi: " +
               "NIE JESTES GODZIEN MEGO ARTEFAKTU!!!\nNagle wydaje " +
               "ci sie, ze jakas boska moc splywa na ciebie i " +
               "probuje rozerwac twe cialo na strzepy. Padasz na " +
               "ziemie w spazmach bolu.\nPo krotkiej chwili wszystko " +
               "znika. Niepewnie podnosisz sie na nogi.\n";
               
    } 
   set_alarm(0.1,0.0,"add_wielder");
   write("Nagle zaczyna wiac mocny wiatr, niebo zachodzi czarnymi " +
         "chmurami. Spogladasz szybko, do gory i wiszisz jak z czarne chmury " +
         "zaczynaja sie jak by zlepiac w jedna calosc. Po chwili z chmur " +
         "uklada sie twarz postaci, ktora mowi do Ciebie: Smiertelniku! " +
         "Ja Malal Pan nienawisci, stworzylem ten sztylet, wlasnymi rekoma " +
         "i powiezylem go mojemu mowcy. Myslalem, ze jest najsilniejszy  " +
         "na waszym nedznym swiecie smiertelnikow. Uwolnie teraz moc tej wspanialej " +
         "broni. Pamietaj, jezeli okaze sie, ze bedziesz nia walczyl przeciwko moich " +
         "slugach, spotka Cie kara. Postac znika. Po chwili chmury zaczynaja sie " +
         "rozbiegac po calym choryzacie po chwili znikaja, wiart ustaje. Czujesz w  " +
         "swoim ciele ogromna mac. Stajesz sie teraz wojownikiem Malala.\n");
   say(QCIMIE(this_player(),PL_MIA)+" dobywa cudownego sztyletu, niebo zachodzi " +
         "czarnymi chmurami i zaczyna wiac mocny wiatr. Widzisz jak magiczna moc " +
         "rozpiera jego cialo. Wszystko jednak po chwili ucicha.\n");
   TP->set_combat_speed(TP->query_comabt_speed()+40);
   TP->set_stat_extra(SS_STR, TP->query_stat_extra(SS_STR) + 35);
   TP->set_stat_extra(SS_DEX, TP->query_stat_extra(SS_DEX) + 35);
   TP->set_stat_extra(SS_CON, TP->query_stat_extra(SS_CON) + 35);
   TP->set_stat_extra(SS_INT, TP->query_stat_extra(SS_INT) + 35);
   TP->set_stat_extra(SS_WIS, TP->query_stat_extra(SS_WIS) + 35);
   TP->set_stat_extra(SS_DIS, TP->query_stat_extra(SS_DIS) + 35);
   TP->set_skill_extra(40, 60);
   TP->set_skill_extra(40, 60);
   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 swa cudowna bron. Wszystkie sily, ktora otrzymales" +
         "od Malala, odchodza wraz ze wspomnieniem o morderczej walce.\n");
   say(QCIMIE(this_player(),PL_MIA)+" opuszcza swoj cudowny sztylet, na pierwszy " +
         "zut oka widac, ze opuscily go magiczne sily.\n");
   TP->set_combat_speed(TP->query_combat_speed()-40);
   TP->set_stat_extra(SS_STR, TP->query_stat_extra(SS_STR) - 50); 
   TP->set_stat_extra(SS_DEX, TP->query_stat_extra(SS_DEX) - 50);
   TP->set_stat_extra(SS_CON, TP->query_stat_extra(SS_CON) - 50);
   TP->set_stat_extra(SS_INT, TP->query_stat_extra(SS_INT) - 50);
   TP->set_stat_extra(SS_WIS, TP->query_stat_extra(SS_WIS) - 50);
   TP->set_stat_extra(SS_DIS, TP->query_stat_extra(SS_DIS) - 50);
   TP->set_skill_extra(5, 0);
   TP->set_skill_extra(24, 0);
   return 1;
}
int did_hit(int aid, string hdesc, int phurt, object enemy, int phit, int dam)
{
  string how;
  object wielder=query_wielded();
  ::did_hit(aid, hdesc, phurt, enemy, phit, dam);
     
  switch (phurt)
  {
    case 1..10:
       how = "niewielkie";
       break;
    case 11..30:
       how = "znaczne";
       break;
    case 31..60:
       how = "powazne";
       break;
    case 61..100:
       how = "ogromne";
       break;
    default:
       how = "nieznaczne";
  }
  spec_delay = 400/(wielder->query_skill(SS_WEP_WARHAMMER));  
  if (which_hit == spec_delay)
  {
    which_hit = 0;
    enemy_align=enemy->query_alignment();
    wielder_align=wielder->query_alignment();
    dam_ench_ratio=1+((wielder_align-enemy_align)/100);
    if(enemy_align <= wielder_align)
    {
      enemy->heal_hp(-(dam*dam_ench_ratio));   
      if (enemy->query_hp() > 1)
      {
         wielder->catch_msg("\n" + capitalize(short(PL_MIA)) + " zaczyna nagle" +
           "odbierac panowanie nad Toba.\nCzujesz, przy sobie obecnosc "+
           "Malala. Twoja reka, kierowana jego moca wykonuje szybki szeroki zamach "+
           "i z ogromna sila godzisz w "+QIMIE(enemy, PL_BIE) + " zadajac " +
           how + " obrazenia.\n\n");
         enemy->catch_msg("\n" + capitalize(short(PL_MIA)) + " "
           + QCIMIE(wielder, PL_DOP) + " zaczyna plonac. Teraz wyglada jak by " +
           "ktos tknol w niego magiczna moc.\n" + QCIMIE(wielder, PL_MIA) + " wykonuje szeroki zamach i " +
           "z ogromna sila godzi w ciebie i zadajac "+ how + " obrazenia.\n\n");
        
         tell_watcher("\n" + capitalize(short(PL_MIA)) + " " + QCIMIE(wielder, PL_DOP) +
           " Zaczyna plonac i wyglada, ze ktos obdarzyl moca magiczna.\n" +
           QCIMIE(wielder, PL_MIA) + " wykonuje szeroki zamach i z ogromna sila" +
           "godzi w " + QIMIE(enemy, PL_BIE)+" zadajac "+ how + " obrazenia.\n\n",
           enemy);
      }
      else
      {
         wielder->catch_msg("\nCzujesz, ze " + short(PL_MIA) + " przejmuje "+
           "kontrole nad toba.\n" + "Bezwiednie zaciskasz palce na rekojesci "+ short(PL_MIA) +
           ". Rzucasz sie na " +
           QIMIE(enemy, PL_DOP) + " Zaczynasz coraz szybciej masakrowac cialo " +
           "swojego przeciwnika .\n Spogladasz z pogarda na Cialo." +
           "Po chwili odzyskujesz panowanie nad soba.\n\n");
         enemy->catch_msg("\n" + QCIMIE(wielder, PL_MIA) + " zaciska palce na " +
           short(PL_MIA) + " rzuca sie na Ciebie i wykonuje potezne uderzenie. " +
           "Twoja krew tryska na wszystkie strony, lecz czujesz jak sztylet " +
           "wbija sie w Twoje cialo. Czujesz ukojenie kiedy widzisz " +
           "jak bron przeciwnika wbija Ci sie w serce.\n\n");
         tell_watcher("\n" + QCIMIE(wielder, PL_MIA) + " zaciska palce na " +
            short(PL_MIA) + " rzuca sie " +
            "na " + QIMIE(enemy, PL_DOP) + "! Krew tryska na " +
            "wszystkie strony.\n" + QIMIE(wielder, PL_MIA) + "coraz szybciej" +
            "zadaje smiertelne ciosy.\n Po chwili jego przeciwnik" +
            "pada na ziemie zabity..\n\n", enemy);
         enemy->heal_hp(enemy->query_hp(-2));
         enemy->do_die(wielder);
       }
       return 1;
    }
  }
  else
  which_hit = which_hit + 1; 
  return 0;
}
