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 TP              this_player()
#define TO              this_object()

int which_hit;
int spec_delay;
int enemy_align;
int wielder_align;
int dam_ench_ratio;

void
create_weapon()
{    
    ustaw_nazwe( ({ "scimitar", "scimitara", "scimitarowi", "scimitar",
                    "scimitarem","scimitarze" }), ({ "scimitary",
                    "scimitarow", "scimitarom", "scimitary",
                    "scimitarami", "scimitarach" }), PL_MESKI_NOS_NZYW);
    dodaj_nazwy(({"miecz", "miecza", "mieczowi", "miecz", "mieczem",
                  "mieczu"}), ({"miecze", "mieczy", "mieczom", "miecze",
                  "mieczami", "mieczach"}), PL_MESKI_NZYW);
                
    dodaj_przym("gromowladny","gromowladni");
    dodaj_przym("adamantytowy","adamantytowi");
    set_long("Miecz zostal wykuty z jednego z najtwardszych metali " +
             "znanych w starym swiecie, adamantytu. Przygladajac sie " +
             "blizej ostrzu, koloru krwistej czerwieni zauwazasz, " +
             "ze mieni sie dziwnym wewnetrznym blaskiem. Bron ta " +
             "jest niezwyklym rodzajem flamberga, gdyz zostala " +
             "stworzona do jednorecznego chwytu. Miecz jest mimo tego " +
             "masywny i wladanie nim nie jest prostym zadaniem, " +
             "zwlaszcza dla cherlakow. Rekojesc jest dosc dluga i " +
             "bardzo dobrze wyprofilowana choc juz lekko zluzyta. " +
             "Glownia rzezbiona na ksztalt konskiej glowy prezentuje " +
             "sie nadzwyczaj okazale.\n");
             
    add_item("ostrze","Ostrze rozblyska jasnoczerwonymi plomieniami gdy " +
             "dobywasz tego wspanialego miecza.\n");          
    add_item("rekojesc","rekojesc jest dluga, pokryta skora jakiegos " +
             "nieznanego ci zwierzecia.\n");   
    add_item("glownie","glownia wyrzezbiona jest misternie przez nielada " +
             "artyste. Przedstawia ona konska glowe z nieprawdopodobnie " +
             "dopracowanymi detalami.\n");            
    set_likely_dull(1);
    add_prop(OBJ_M_NO_BUY, 1);
    
    add_prop(OBJ_I_IS_MAGIC_WEAPON, 1);
    
    add_prop(MAGIC_AM_MAGIC, ({ 40, "enchantment"}));
    set_hit(45);
    set_pen(50);
    set_wt(W_SWORD);
    set_dt(W_SLASH | W_IMPALE);
    set_hands(W_ANYH);
    add_prop(OBJ_I_WEIGHT, 9500);
    add_prop(OBJ_I_VOLUME, 9000);
    add_prop(OBJ_I_VALUE, 1300);
}    
mixed
wield(object what)
{  
    if (TP->query_stat(0) < 100)
    {
        return "Twa sila jest niewystarczajaca by wladac tak potezna " +
               "bronia.\n";
    }
   set_alarm(0.1,0.0,"add_wielder");
   write("Ostrze rozblyska razacymi blyskawicami gdy dobywasz " +
         "tego wspanialego miecza.\n");
   say("Gdy "+ QCIMIE(this_player(),PL_MIA) +" dobywa swego miecza " +
       "rozblyska on razacymi blyskawicami.\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("Blyskawice gasna gdy opuszczasz swoj wspanialy miecz.\n");
   say("Blyskawice na mieczu gasna gdy "+ (QCIMIE(this_player(),PL_DOP)+" opuszcza go.\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");
   }
}    
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 = "nieznacznie";
       break;
    case 11..30:
       how = "mocno";
       break;
    case 31..60:
       how = "solidnie";
       break;
    case 61..100:
       how = "smiertelnie";
       break;
    default:
       how = "nieznaczne";
  }
  spec_delay = 100/(wielder->query_skill(SS_WEP_SWORD));  
  if (which_hit == spec_delay)
  {
    which_hit = 0;
    enemy_align=enemy->query_alignment();
    wielder_align=wielder->query_alignment();
    dam_ench_ratio=1+(random(200)+200);
    if(enemy_align <= wielder_align)
    {
      enemy->heal_hp(-(dam_ench_ratio));
      if (enemy->query_hp() > 1)
      {
         wielder->catch_msg("\n" + capitalize(short(PL_MIA)) + " zaczyna nagle " +
           "pulsowac bladym blekitnym swiatlem. Czujesz, przy sobie obecnosc " +
           "olbrzymiej energii. Twoja reka, kierowana jej moca wykonuje szeroki zamach " +
   "i z ogromna sila godzisz w "+QIMIE(enemy, PL_BIE) + " " + how + " przypalajac.\n\n");
         enemy->catch_msg("\n" + capitalize(short(PL_MIA)) + " "
           + QCIMIE(wielder, PL_DOP) + " zaczyna nagle pulsowac bladym blekitnym " +
           "swiatlem.\n" + QCIMIE(wielder, PL_MIA) + " wykonuje szeroki zamach i " +
           "z ogromna sila godzi w ciebie i "+ how + " przypalajac.\n\n");
        
         tell_watcher("\n" + capitalize(short(PL_MIA)) + " " + QCIMIE(wielder, PL_DOP) +
           " zaczyna nagle pulsowac bladym blekitnym swiatlem.\n" +
           QCIMIE(wielder, PL_MIA) + " wykonuje szeroki zamach i z ogromna sila " +
           "godzi w " + QIMIE(enemy, PL_BIE)+" "+ how + " przypalajac.\n\n",
           enemy);
      }
      else
      {
         wielder->catch_msg("\nCzujesz, ze " + short(PL_MIA) + " przejmuje "+
           "kontrole nad toba.\n" + "Bezwiednie unosisz "+ short(PL_MIA) +
           " nad glowe i wykonujesz potezny cios miezdzacy cialo " +
           QIMIE(enemy, PL_DOP) + " na drgajaca papke. Krew tryska na wszystkie " +
           "strony.\nWybuchasz niekontrolowanym mrozacym krew w zylach smiechem." +
           "\nPo chwili odzyskujesz panowanie nad soba.\n\n");
         enemy->catch_msg("\n" + QCIMIE(wielder, PL_MIA) + " unosi swoj " +
           short(PL_MIA) + " nad glowe i wykonuje potezne uderzenie. Gdy " +
           "glowica mlota miazdzy twe cialo przeszywa cie nieludzki bol i potworne " +
           "zimno bijace od " + short(PL_DOP) + "Czujesz jak ucieka z ciebie " +
           "zycie, gdy twoje cialo rozpada sie na setki czesci.\n\n");
         tell_watcher("\n" + QCIMIE(wielder, PL_MIA) + " unosi swoj " +
            short(PL_MIA) + " nad glowe i wykonuje potezne cios miazdzac " +
            "cialo " + QIMIE(enemy, PL_DOP) + "! Krew tryska na " +
            "wszystkie strony.\n" + QIMIE(wielder, PL_MIA) + "wybucha mrozacym " +
            "krew w zylach smiechem.\nPo chwili opanowuje sie i wraca do " +
            "siebie.\n\n", enemy);
         enemy->heal_hp(enemy->query_hp(-2));
         enemy->do_die(wielder);
       }
       return 1;
    }
  }
  else
  which_hit = which_hit + 1; 
  return 0;
}

