/*
Obiekt kowala.
2 Maja 2003 by Lord Simon
*/
#pragma strict types
inherit "/std/monster";
inherit "/lib/trade";
#include <macros.h>
#include <stdproperties.h>
#include <ss_types.h>
#include <language.h>
#include <composite.h>
#include <money.h>
#include <pl.h>
#include <time.h>
#include <formulas.h>
#include <std.h>
#include <money.h>
#define TP       this_player()
#define TO       this_object()
#define STORE_ROOM TO
#define NF(x)	 notify_fail(x)

string *imie;
static object *przedstawieni=({ });
static string *wlasciciele;
static object *przedmioty;
static int *czas;
int czas_naprawiania;
void return_introduce(string imie);
void plac_kase(string str,string reszta);
void oddaj_rzecz(object what);
void
create_monster()
{
    imie=({"anrzej","andrzeja","andrzejowi","andrzeja","andrzejem","andrzeju"});
    set_gender(G_MALE);
    dodaj_nazwy(PL_MEZCZYZNA);
    ustaw_odmiane_rasy(PL_CZLOWIEK);		   
    dodaj_przym("wielki","wielcy");
    dodaj_przym("barczysty","barczysci");
    ustaw_imie(imie,PL_MESKI_OS);
    set_long("Ten barczysty czlowiek jest nieprzecietnego wzrostu."+
	     "Sadzac po jego muskulach musial ciezko pracowac cale "+
	     "zycie. Jego ramiona sa bardzo brudne. Na dloniach "+
	     "nosi czarne rekawice. Ma na sobie fartuch , ktory gdzie "+
	     "niegdzie jest lekko poprzepalany. Ma geste krzaczaste brwi, "+
	     "a jego czarne blyszczace oczy sa pelne glebi.\n");
    add_prop(CONT_I_WEIGHT, 90000); //90 kg
    add_prop(CONT_I_VOLUME, 92000); //92 litry
    add_prop(CONT_I_HEIGHT, 205);//2m 5cm :)
    set_title("Lipa");    
    set_stats ( ({ 70, 55, 35, 35, 50, 60 }) );    
    set_skill(SS_UNARM_COMBAT, 50);
    set_skill(SS_DEFENCE, 60);
    config_default_trade();
    set_money_give_reduce( ({ 0, 2, 3, 3 }) );
}
void
enter_inv(object what, object from)
{
    ::enter_inv(what,from);
    if(!from)
    return;
   if (!przedmioty)
      przedmioty = ({ });

   if (!wlasciciele)
      wlasciciele = ({ });
      
   if (!czas)
      czas = ({ });
            
   przedmioty += ({ what });
   wlasciciele += ({ from->query_real_name()});
   czas+=({time() - SECURITY->query_start_time()+120});
   set_alarm(120.0, 0.0, "oddaj_rzecz",from->query_real_name());
}

void
add_introduced(string imie_mia, string imie_bie)
{
    set_alarm(2.0, 0.0, "return_introduce", find_player(imie_mia));
}

void
return_introduce(object ob)
{
    if (ob && environment(ob) == environment())
        if (member_array(ob, przedstawieni -= ({0})) != -1)
        {
            command("powiedz Witaj ponownie, " + ob->query_wolacz() + ".");
            command("usmiechnij sie do " + OB_NAME(ob));
        }
        else
        {
            przedstawieni += ({ob});
            command("przedstaw sie " + OB_NAME(ob));
            command("uklon sie " + OB_NAME(ob) + " z godnoscia");
        }
}

void 
oddaj_rzecz(string kto)
{
    int num;
   int i;
   object who;

   if ((i = member_array(kto, wlasciciele)) < 0)
      return;
   if (who = present(wlasciciele[i], environment()))
    {
    command("daj "+przedmioty[i]->query_nazwa(PL_BIE)+" "+lower_case(who->query_name(PL_CEL)));
    command("powiedz To chyba twoje.");
    wlasciciele = exclude_array(wlasciciele, i, i);
    przedmioty = exclude_array(przedmioty, i, i);
    czas = exclude_array(czas,i,i);
    }
    else return;
}
void 
spowrotem(string kto)
{
    call_out("oddaj_rzecz",1,kto);
}
int
naprawianie(string co)
{
    object item;    
    int ile_napraw;
    int ile;
    int *arr;
    int num;
    num = sizeof(query_money_types());
    if (!strlen(co))
    {
	command("powiedz Nie wiem co mam naprawic.");
	return 1;
    }
    if (!parse_command(co, environment(this_player()), 
	"%o:" + PL_BIE, item))
	{
	command("powiedz Nie wiem co mam naprawic.");         
       return 1;
       }
    if((time() - SECURITY->query_start_time())<czas_naprawiania)
    {
	command("powiedz Jestem teraz zajety, przyjdz pozniej.");
	return 1;
    }

   if(function_exists("create_object", item) != "/std/armour")
   {
	command("powiedz Nie moge tego naprawic.");
	return 1;
   }
   if (member_array(TP, przedstawieni -= ({0})) == -1)
   {
	command("powiedz Nie naprawiam niczego nieznajaomym.");
	return 1;
   }
   ile=F_ARMOUR_MAX_REPAIR(item->query_condition());
   if(ile==0)
   {
	command("powiedz Tego sie nie da naprawic.");
	return 1;
   }
   arr=pay(ile*50, this_player(), "", 0, 0, "");
   if (sizeof(arr) == 1)
   return 0;
   command("powiedz To moze troche potrwac.");
   plac_kase(
		text(arr[0 .. num - 1], PL_BIE), 
		text(arr[num .. 2 * num - 1], PL_BIE));
   item->set_repair(ile);
   item->move(STORE_ROOM);

   czas_naprawiania=time() - SECURITY->query_start_time()+120;
   return 1;
}
int
naostrzanie(string co)
{
    object item;    
    int ile_napraw;
    int ile;
    int *arr;
    int num;

    num = sizeof(query_money_types());
    
    if (!strlen(co))
    {
	command("powiedz Nie wiem co mam naostrzyc.");
	return 1;
    }
    if (!parse_command(co, environment(this_player()), 
	"%o:" + PL_BIE, item))
	{
	command("powiedz Nie wiem co mam naostrzyc.");         
       return 1;
       }
    if((time() - SECURITY->query_start_time())<czas_naprawiania)
    {
	command("powiedz Jestem teraz zajety, przyjdz pozniej.");
	return 1;
    }


   if(function_exists("create_object", item) != "/std/weapon")
   {
	command("powiedz Nie moge tego naostrzyc.");
	return 1;
   }
   if (member_array(TP, przedstawieni) == -1)
   {
	command("powiedz Nie ostrze niczego nieznajaomym.");
	return 1;
   }
   ile=item->query_dull()-item->query_repair_dull();
   write(ile+"\n");
   if(ile==0)
   {
	command("powiedz Nie da rady tego bardziej naostrzyc.");
	return 1;
   }
   arr=pay(ile*50, this_player(), "", 0, 0, "");
   if (sizeof(arr) == 1)
   return 0;
   command("powiedz To moze troche potrwac.");
   plac_kase(
		text(arr[0 .. num - 1], PL_BIE), 
		text(arr[num .. 2 * num - 1], PL_BIE));
   item->set_repair_dull(ile);
   item->move(STORE_ROOM);
   czas_naprawiania=time() - SECURITY->query_start_time()+120;
   return 1;
}

void 
init_living()
{
    ::init_living();
    add_action(naprawianie,"napraw");
    add_action(naostrzanie,"naostrz");
}
void
plac_kase(string str, string reszta)
{
    write("Placisz " + str);
    if (reszta)
	write(" i dostajesz " + reszta + " reszty");
    write(".\n");
}
