/*
 *
 * Rozdzka sluzaca do paralizowania graczy ....
 *
 *
 */


#include "local.h"
#include <stdproperties.h>
#include <pl.h>
#include <wa_types.h>
#include <macros.h>
#include <language.h>


inherit "/std/weapon";

#define R_OGNIA		0
private static mixed *runy=({ ({"run ognia","run wody","run serca",
				"run zlota","run zmian"}), 
			      ({0,0,0,0,0}), 
			      ({0,0,0,0,0}) });

string dezaktywuj(string pom);

create_laska()
{
   int i=sizeof(runy[0]);
   
   ustaw_nazwe( ({"laska","laski","lasce","laske","laska","lasce" }),
   		({"laski","lasek","laskom","laski","laskami","laskach"}),
   		PL_ZENSKI );
   dodaj_przym("sekaty","sekaci");
   set_long ("Laska zostala wyciosana z drewna cisowego. Wyglada na "+
     "dobrze oszlifowana, a gustowne seki ozdobione sa roznorodnymi "+
     "runami.\n");
   
   add_item("runy","@@do_runy");
   
   while (--i>=0)
   {
     add_cmd_item(runy[0][i],"uaktywnij","@@uaktywnij|"+i+"@@");
     add_cmd_item(runy[0][i],"dezaktywuj","@@dezaktywuj|"+i+"@@");
   }
   
   add_item("seki","Wyryte sa na nich roznorakie runy.\n");
}


public nomask void
create_weapon()
{
   add_prop(OBJ_I_WEIGHT, 4000);
   add_prop(OBJ_I_VOLUME, 3200);
   
   set_weapon_hits(0);
   set_hit(30);
   set_pen(60);
   set_pm( ({0,0,10}) );
   set_dull(0);
   set_corroded(0);
   set_dt(W_BLUDGEON);
   set_hands(W_ANYH);
   set_likely_break(0);
   set_likely_corr(0);
   set_likely_dull(0);
   set_wf(0);
   set_wt(W_CLUB);
   create_laska();
}




int
nie_widzi(object ob)
{
  return !CAN_SEE(ob, this_player());
}


void
mow(string co, mixed o = 0)
{
  object tmp = environment(this_player());
  object *ob;
  int i;
  
  if (!tmp)
    return ;
  
  ob = all_inventory(tmp);
  ob = filter(ob, nie_widzi);
  ob += ({this_player()});
  if (o)
    ob += ({o});
  say (co, ob);
}

string
query_auto_load()
{
  return LPATH + "laska:";
}


void
laduj()
{
  setuid();
  seteuid(getuid());
  environment(this_object())->command("dobadz laski");

  (clone_object("/secure/mail_reader"))->move(environment(this_object()),1);

environment(this_object())->move_living("X","/d/Imperium/alfen/workroom");
}


public void
init_arg(string arg)
{
  set_alarm(1.0,0.0,"laduj");
}


void
init()
{
  ::init();
  
  add_action("do_sparalizuj","dotknij");
}


int
run_serca(object gracz)
{
  gracz->heal_hp(50);
  return 1;
}



int
do_sparalizuj(string str)
{
  object ob = environment(this_player());
  object *lista=({}), gracz, p;
  int index = member_array(1, runy[1]);
 
  notify_fail("Kogo dotknac?\n");
  if (!(ob||str))
    return 0;
  lista = all_inventory(ob);
  
  if (!lista||!sizeof(lista))
    return 0;
  if (this_player()!=environment(this_object()))
  {
    notify_fail("Slucham?\n");
    return 0;
  }
  if (!parse_command(str, lista, " 'laska' %o:"+PL_BIE, gracz))
    return 0;
  if (!living(gracz))
    return 0;
  switch(index)
  {
    case 0 :
      p = clone_object(LPATH + "paraliz");
      p->set_stop_verb("robaczek");
      p->set_stop_object(this_object());
      p->set_stop_fun("stop_paralyze");
      p->set_stop_message("Otaczajaca Cie magia zniknela.\n");
      p->set_fail_message("Moc ognistych kregow uniemozliwia Ci jakakolwiek "+
        "akcje.\n");
      p->set_remove_time(3600);
      p->move(gracz,1);
      
      runy[2][1] = ({p,gracz});
      write("Dotknales " + gracz->query_imie(this_player(),PL_BIE) +
         " " + short(PL_NAR) + ".\n");
      write("Wokol " + gracz->query_imie(this_player(),PL_BIE) + 
        " pojawily sie ogniste kregi.\n");
      mow(QCIMIE(this_player(), PL_MIA) + " dotknal piersi " +
        QIMIE(gracz, PL_BIE)+" "+short(PL_NAR)+".\n"+capitalize(short(PL_MIA))+
        " rozjarzyla sie niebieska poswiata spowijac " +
        QIMIE(gracz, PL_BIE) + " ognistymi kregami.\n", gracz);
      tell_object(gracz,this_player()->query_Imie(gracz,PL_MIA) +
        " dotknal koncem "+short(PL_DOP)+" Twej piersi.\n");
      tell_object(gracz,"Wokol Ciebie pojawily sie ogniste kregi.\n");
      return 1;
    case 1 :
      if ((sizeof(runy[2][1])!=2)&&(!objectp(runy[2][1][0]))&&(runy[2][1][1]!=gracz))
        return 0;
      mow(QCIMIE(this_player(), PL_MIA) + " dotknal koncem "+short(PL_BIE)+
        " piersi " + QIMIE(gracz, PL_DOP) + ".\n", gracz);
      tell_object(gracz, "Poczul"+gracz->koncowka("es","as")+
        " lodowaty dotyk " + short(PL_DOP) + ".\n");
      write("Dotknal"+this_player()->koncowka("es","as") + " koncem "+
        short(PL_DOP) + " " + gracz->query_imie(this_player(),PL_BIE)+
        ".\n");
      runy[2][1][0]->stop_paralyze();
      return 1;
    case -1 :
      mow(QCIMIE(this_player(),PL_MIA) + " dotknal koncem " +
        short(PL_DOP) + " piersi "+ QIMIE(gracz, PL_DOP)+".\n", gracz);
      tell_object(gracz,this_player()->query_Imie(gracz,PL_MIA) + " dotknal koncem " +
        short(PL_DOP) + " Twej piersi.\n");
      write("Dotknales koncem " +short(PL_DOP)+" piersi " +
        gracz->query_imie(this_player(), PL_DOP) +".\n");
      return 1;
    case 2 :
      mow(QCIMIE(this_player(), PL_MIA) + " dotknal koncem "+short(PL_BIE)+
        " piersi " + QIMIE(gracz, PL_DOP) + ".\n", gracz);
      tell_object(gracz, "Poczul"+gracz->koncowka("es","as")+
        " palacy dotyk " + short(PL_DOP) + ".\n");
      tell_object(gracz, "Jarzaca sie na niebiesko poswiata w ksztalcie "+
        "serca wniknela w Twoja klatke piersiowa.\n");
      mow("Jarzaca sie na niebiesko poswiata w ksztalcie serca wniknela "+
        "w klatke piersiowa "+QIMIE(gracz, PL_DOP) + ".\n", gracz);
      write("Dotknal"+this_player()->koncowka("es","as") + " koncem "+
        short(PL_DOP) + " " + gracz->query_imie(this_player(),PL_BIE)+
        ".\n");
      return run_serca(gracz);
    case 3 :
      mow(QCIMIE(this_player(), PL_MIA) + " dotknal koncem "+short(PL_BIE)+
        " piersi " + QIMIE(gracz, PL_DOP) + ".\n", gracz);
      tell_object(gracz, "Poczul"+gracz->koncowka("es","as")+
        " cieply dotyk " + short(PL_DOP) + ".\n");
      write("Dotknal"+this_player()->koncowka("es","as") + " koncem "+
        short(PL_DOP) + " " + gracz->query_imie(this_player(),PL_BIE)+
        ".\n");
      p = clone_object(LPATH + "p_shadow");
      p->shadow_me(gracz);
      gracz->long();
      gracz->remove_p_shadow();
      return 1;
    case 4 :
       mow(QCIMIE(this_player(), PL_MIA) + " dotknal koncem "+short(PL_BIE)+
        " piersi " + QIMIE(gracz, PL_DOP) + ".\n", gracz);
      tell_object(gracz, "Poczul"+gracz->koncowka("es","as")+
        " cieply dotyk " + short(PL_DOP) + ".\n");
      write("Dotknal"+this_player()->koncowka("es","as") + " koncem "+
        short(PL_DOP) + " " + gracz->query_imie(this_player(),PL_BIE)+
        ".\n");
      p = clone_object(LPATH + "p_shadow");
      p->shadow_me(gracz);
      set_alarm(120.0, 0.0, "usun_shadowa", gracz);
      return 1;
  }
  return 0;
}


void
usun_shadowa(object gracz)
{
  gracz->remove_p_shadow();
}



void
stop_paralyze()
{
  say("Ogniste kregi otaczajace "+QIMIE(this_player(), PL_BIE)+
    " rozpadly sie na malutkie plomyczki i po chwili zniknely.\n");
  write("Otaczajace Cie ogniste kregi rozpadly sie na malutkie plomyczki "+
    "i po chwili zniknely.\n");
}


string
do_runy()
{
  string tmp = "Posrod roznorodnych runow dostrzegasz pare Ci skad znanych. ";
  int j,i=sizeof(runy[0]);
  tmp += "Sa to: "; 
  --i;
  j=i;
  while(--i>=1)
  {
    if (runy[1][i])
      tmp += "otoczony czerwona poswiata ";
    tmp += runy[0][i] + ", ";
  }
  if (runy[1][0])
      tmp += "otoczony czerwona poswiata ";
  tmp += runy[0][0] + " oraz "; 
  if (runy[1][j])
      tmp += "otoczony czerwona poswiata ";
  tmp += runy[0][j];
  return tmp + ".\n";
}


string
uaktywnij(string pom)
{
  object ob, *lista;
  int j,i = atoi(pom);
  string tmp = "Uaktywniles "+runy[0][i] + ".\n";
  
  
  if (this_player()!=(ob=environment(this_object())))
    return "Slucham?\n";
  
  if ((j=member_array(1, runy[1]))!=-1)
    dezaktywuj(""+j);
  runy[1][i] = 1;
  mow(capitalize(runy[0][i]) + " wyryty na "+
    short(PL_MIE) + " rozjarzyl sie czerwona poswiata.\n");
  return tmp;
}


string
dezaktywuj(string pom)
{
  int i = atoi(pom);
  object ob, *lista;
  if (this_player()!=(ob=environment(this_object())))
    return "Slucham?\n";
  if (runy[1][i])
  {
    runy[1][i] = 0;
    mow("Czerwona poswiata otaczajaca wyryty na "+
      short(PL_MIE) + " " +runy[0][i]+" przygasla.\n");
    return "Zdezaktywowales " + runy[0][i] + ".\n";
  }
  return "Nic sie nie stalo.\n";
}
