
// Pomysl Silvy, wykonanie Alfen
// Powazne zmiany i modyfikacje - Silvy III 98


inherit "/lib/trade.c";
inherit "/d/Imperium/std/room.c";

#include <time.h>
#include "alfen.h"
#include "silvy.h"
#include <stdproperties.h>
#include <language.h>
#include <money.h>
#include <cmdparse.h>
#include <composite.h>
#include <filter_funs.h>
#include <macros.h>

#define const 7200

static string store_room;
static string sprzedawca;
static string log_gieldy;

private object ob_sprzedawca;
private mixed aukcja; 
private object *przedmioty;
private int poprzeczka_cenowa;
private mixed forsa=({({}),({})});
static mixed tempor=({ ({}), ({}) });  
private string nieuczciwi="";
private string nieuczciwibak="";

static int WYSTAWIAJACY = 0;
static int KUPUJACY  = 1;
static int CENA = 2;
static int OBIEKT = 3;
static int CZAS = 4;

#define OBJ_O_WYSTAW_NA_AUKCJE "_obj_o_wystaw_na_aukcje_"
#define PNAZWA(ob, przyp) (ob->short(przyp) ? ob->short(przyp) : ob->query_nazwa(przyp))

int gielda_hook_wystaw_no_sell(object ob);
int gielda_hook_wystaw_worn_or_wielded(object ob);
int gielda_hook_wystaw_no_value(object ob);
int gielda_hook_wystaw_to_low_price(object ob);
int gielda_hook_wystaw_no_move(object ob);
int gielda_hook_wystaw_potwierdz(object ob);
int gielda_hook_wystaw_no_drop(object ob);
int gielda_hook_wystaw(object ob);

/* Dwie ponizsze funkcje sluza do okreslenia komentarza, czy tez konkretnej
*  akcji na uzycie magii badz zaatakowanie kogos na terenie gieldy
* 0 - uzycie odpowiednio magii lub zaatakowanie kogos jest dozwolone
* 1 - zabronione. Mozna pokryc te funkcje, powodujac 
* np.: okreslona reakcje ze strony npcow
*/
int gielda_hook_attack();
int gielda_hook_magic();
string gielda_hook_magic_txt();
string gielda_hook_attack_txt();

int gielda_hook_podbij(int nr, int *v, object o1);
int gielda_hook_podbij_low_cash(object gracz);
int gielda_hook_podbij_to_small(object o1);
int gielda_hook_podbij_koniec(int nr);

int gielda_hook_odbierz_ob_to_heavy(object o1);
int gielda_hook_odbierz_money(int *v, int nr);
int gielda_hook_odbierz_ob(int *v, object o1);
int gielda_hook_odbierz_no_end(int nr);
int gielda_hook_odbierz_incorrect_person_money(object ob, string kto);
int gielda_hook_end_of_aukcja(int i);
int gielda_hook_odbierz_incorrect_person_ob(object ob, string kto);
int gielda_hook_odbierz_cant_pay(object ob);

int gielda_hook_wycofaj(object ob, int *v);
int gielda_hook_wycofaj_armageddon(object ob);
int gielda_hook_wycofaj_cant_pay(object ob);
int gielda_hook_wycofaj_incorrect_person(object ob); 
int gielda_hook_wycofaj_ob_to_heavy(object ob);

int czy_player();
string standard_tablica();

// Ok
string 
query_log_file()
{
  return log_gieldy;
}

// Ok
void 
set_log_file(string s)
{
  log_gieldy=s;
}

// Ok
void
set_min_price(int price)
{
  poprzeczka_cenowa = price;
}

// Ok
int
query_min_price()
{
  return poprzeczka_cenowa;
}

// Ok
void 
set_shop_keeper(string sp)
{ 
    if (ob_sprzedawca = clone_object(sp))
    {
      ob_sprzedawca -> move(this_object());
      sprzedawca =  sp;
    }
}

// Ok
object
query_shop_keeper()
{
  return ob_sprzedawca;
}

// Ok
void 
set_store_room(string s)
{
  store_room = s;
}

// Ok
string 
query_store_room()
{
  return store_room;
}

// Ok
int
gielda_hook_magic()
{ 
  return 1;
}

// Ok
int
gielda_hook_attack()
{ 
  return 1;
}

// Ok
string
gielda_hook_attack_txt()
{
  if (this_player())
    if (czy_player())
    {
      say(QCIMIE(this_player(), PL_MIA) + this_player()->koncowka(" zostal otoczony"," zostala otoczona")+" "+
        "niebieska poswiata.\n");
      this_player()->command("w");
    }
  return "Tajemnicza sila zmusza Cie do opuszczenia terenu Gieldy.\n";
}

// Ok
string
gielda_hook_magic_txt()
{
  if (this_player())
    if (czy_player())
    {
      say(capitalize(QIMIE(this_player(), PL_MIA)) + this_player()->koncowka(" zostal otoczony"," zostala otoczona")+" "+
        "niebieska poswiata.\n");
      this_player()->command("w");
    }
  return "Wyczuwasz, ze magia, jaka sie posluzy"+this_player()->koncowka("les","las")+" obrocila sie przeciw "+
    "Tobie. Cos zmusilo Cie do opuszczenia budynku gieldy.\n";
}

// Ok
mixed 
query_aukcja()
{
  return aukcja;
}

// Ok
int 
czy_player()
{
  if (!interactive(this_player())) return 0;
  return !this_player()->query_wiz_level();
}

// Ok
void 
create_gielda()
{
    
    if (file_size(NPATH + "inne/aukcja_kasa.o")>0)
    {
        setuid(); seteuid(getuid());
        restore_object(NPATH + "inne/aukcja_kasa");
        aukcja = ({});
        przedmioty = ({});
        tempor = ({});
    }
  
  set_long("@@dlugi");
  set_short("Dom Aukcyjny Hoffera");

  set_store_room(NPATH + "sklepy/magazyn_gieldy.c");
  set_log_file( NPATH + "inne/log_gieldy");
  set_shop_keeper(NPATH + "npc/aukcyjny.c");
  set_min_price(600); 

  set_alarm(3600.0, 3600.0, "nagrywamy_gielde");
  
//  add_exit( store_room, "polnoc", "@@czy_player", 1);
  add_exit(NPATH + "lokacje/magow.c","zachod");
  
  add_item (({"tabliczke", "srebrna tabliczke"}),
    "Jest cos na niej napisane.\n");
  add_item(({"tablice", "marmurowa tablice"}),
    "Jest cos na niej napisane.\n");
  add_item("dywan","Marmurowe posadzki wylozone sa miekkim miekkim, " +
      "puszystym dywanym, ozdobionym przedziwnymi ornamentami.\n");
  add_item("arrasy","Przywiezione tu z najdalszych zakadkow swiata arrasy " +
      "to oznaka bogactwa wlasciciela domu aukcyjnego.\n");
  add_item("kontuar","Obowiazkowy element kazdego domu akcyjnego. " +
      "Ustawiono na nim wystawione do licytacji przedmioty.\n");
  add_item("sztaluge","Przymocowano do niej tabliczke informacyjna.\n");     
  
    
  add_cmd_item(({"napis na tabliczce", "tabliczke", 
    "napis na srebrnej tabliczce", "srebrna tabliczke"}),
    "przeczytaj", "@@standard_tabliczka");
  add_cmd_item(({"napis na marmurowej tablicy", "napis na tablicy",
    "tablice", "marmurowa tablice"}), "przeczytaj", "@@standard_tablica");
  
  add_item("plakat", "Napisano na nim jakis tekst.\n");
  add_cmd_item(({"tekst","tekst z plakatu","plakat"}), "przeczytaj",
    "@@plakat");
}

string
dlugi()
{
    string str;
    str = "";
    str += "Znajdujesz sie w dobrze utrzymanym budynku. "+
     "Na podlodze rozlozono miekki, puszysty dywan. Sciany sa "+
     "ozdobine bogatymi arrasami. Przed toba znajduje sie kontuar. " +
     "Po lewej stronie kontuaru stoi machoniowa sztaluga. Przymocowano " +
     "do niej srebrna tabliczke. Na jednej za scian znajduje sie "+
     "okazaly plakat, obok niego zawieszona jest tablica";
//    if(nieuczciwi == "") 
      str += ".\n";
//    else 
//      str += "z tym oto tekstem:\n"+standard_tablica();
    return str;
}

// Ok
string
plakat()
{
  int i, tmp;
  string pom=query_short()+" wita Szanownych Gosci.\n";
  if (tmp=sizeof(forsa[0]))
  {
    pom = "Pieniedzy za zalegle aukcje nie odebrali:\n";
    for (i=0; i < tmp; i++)
      pom+=capitalize(forsa[0][i])+" ";
    pom+="\nZ gory dziekujemy i zapraszamy do korzystania z uslug "+
      "Domu Aukcyjnego Hoffera.\n";
  }
  return pom;
}

// Ok
string 
standard_tabliczka()
{
  return " Gielda przedmiotow drogocennych. Mozesz tu:\n" + 
    "  1 - wystawic przedmiot na licytajce.\n"+ 
    "np. wystaw szpilke na 2 godziny\n"+
    "  W celu potwierdzenia transakcji, nalezy wystawic przedmiot 2 razy.\n"+
    "  2 - podbic cene.\n"+
    "np. podbij cene szpilki do 0 0 0 1\n"+
    "  Pierwsze zero oznacza ilosc sztuk mithrylu, drugie zlota itd.\n"+
    "  Dozwolone jest nie pisanie koncowych zer.\n"+
    "np. podbij cene szpilki do 1\n"+
    "  3 - odebrac przedmiot, po wygraniu licytac.\n"+
    "np. odbierz szpilke\n"+
    "  4 - wycofac przedmiot z licytacji.\n"+ 
    "np. wycofaj szpilke\n"+
    "  Uwaga! Wycofujacy zaplaci 20% ceny wywolawczej.\n"+
    "  W przypadku gdy cena zostala podbita, nie mozna\n"+
    "  juz wycofac przedmiotu z licytacji.\n"+
    "  5 - przejrzec prowadzone wlasnie licytacje.\n"+
    "np. przejrzyj, przejrzyj aukcje, przejrzyj aukcje nr 1\n"+
    "  6 - odebrac pieniadze za przedmiot sprzedany na licytacji.\n"+
    "  Uwaga! Pobieramy prowizje w wysokosci 20% wylicytowanej kwoty.\n"+
    "np. odbierz pieniadze\n"+
    "  7 - wyplacic pieniadze za przedmiot sprzedany jakis czas temu.\n"+
    "np. wyplac pieniadze\n"+
    "  8 - obejrzec przedmiot wystawiony na licytacje.\n"+
    "np. pokaz miecz, pokaz trzecia halabarde\n\n";
} 

// Ok
string 
standard_tablica()
{
  string str;
  str = "";
  str += (" Oto lista tych, ktorzy wygrali licytacje przed ostatnia Apokalipsa, a nie zglosili sie z "+
      "pieniedzmi:\n");
  str += (nieuczciwi);
  return str;
}

// Ok
void 
create_imperium_room()
{
  aukcja=({}); 
  config_default_trade();
  add_prop (ROOM_I_INSIDE, 1);
  add_prop (ROOM_I_NO_SKY, 1);
  add_prop (ROOM_I_LIGHT, 3);
//  add_prop (ROOM_I_NO_ATTACK, "@@gielda_hook_attack");
  add_prop (ROOM_I_NO_MAGIC, "@@gielda_hook_magic");
  add_prop (ROOM_M_NO_MAGIC, "@@gielda_hook_magic_txt");
//  add_prop ( ROOM_M_NO_ATTACK, "@@gielda_hook_attack_txt");
  poprzeczka_cenowa = 0;
  ob_sprzedawca = sprzedawca = 0;
  create_gielda();
}

// Ok
void 
reset_gielda()
{
    if(!ob_sprzedawca)
    {
        ob_sprzedawca=clone_object(NPATH + "npc/aukcyjny.c");
        ob_sprzedawca->move(this_object());
    }    
}

// Ok
void 
reset_imperium_room()
{
  reset_gielda();
}

// Ok
void 
init_gielda()
{
  add_action ("do_wystaw", "wystaw");
  add_action ("do_przejrzyj", "przejrzyj");
  add_action ("do_podbij", "podbij");
  add_action ("do_odbierz", "odbierz");
  add_action ("do_wyplac", "wyplac");
  add_action ("do_wycofaj", "wycofaj");
  add_action ("do_pokaz", "pokaz");
}

// Ok
void 
init()
{
  ::init();
  init_gielda();
}

// Ok
object 
wystaw_to(object ob, int czas)
{
  int value, err, cena, *value_arr, *null_arr, *null;
  
  cena = 0;
  
  call_other(store_room, "load_me"); // zaladuj store room
  
  value_arr = allocate(sizeof(query_money_types()));
  null_arr = value_arr + ({});
  
  
  // przedmiot nie posiada wartosci
  if (!(value=ob->query_prop(OBJ_I_VALUE))) 
  {
    gielda_hook_wystaw_no_value(ob);
    return 0;
  }
  
  //przedmiot jest zalozony lub wyciagniety
  if ((ob->query_worn()) || ob->query_wielded()) 
  {
    gielda_hook_wystaw_worn_or_wielded(ob);
    return 0;
  }  
  
  // obiekt nie na sprzedaz
  if (ob->query_prop(OBJ_M_NO_SELL))
  {
    gielda_hook_wystaw_no_sell(ob);
    return 0;
  }
  
  cena = ob->query_value();

  if ((cena <= poprzeczka_cenowa)&&(!ob->query_prop(MAGIC_AM_ID_INFO))) {
    gielda_hook_wystaw_to_low_price(ob);
    return 0;
  } 

  if (ob->query_prop(OBJ_I_NO_DROP)) 
  {
    gielda_hook_wystaw_no_drop(ob);
    return 0;
  }
  
    
  // blad w przesowaniu obiektu
  if (err = ob ->move (store_room)) 
  {
    gielda_hook_wystaw_no_move(ob);
    return 0;
  }

  aukcja+=allocate(1);  // dodaj kolejnego wystawiajacego
  aukcja [sizeof(aukcja)-1] = allocate(5);
  //  przedmioty+=({ob});
  aukcja [sizeof(aukcja)-1] [WYSTAWIAJACY]=this_player()->query_real_name(PL_MIA);   
  // wystawiajacy
  aukcja [sizeof(aukcja)-1] [KUPUJACY]=query_short();
  // kupujacy
  aukcja [sizeof(aukcja)-1] [CENA]=cena; 
  // proponowana cena
  aukcja [sizeof(aukcja)-1] [CZAS]=czas; 
  // czas licytacji
  aukcja [sizeof(aukcja)-1] [OBIEKT]=ob; 
  // obiekt

  return ob; 
}

// Wystawianie
// Ok
int 
do_wystaw (string s)
{
  string wzor, pom;
  mixed obiekty;
  object o1;
  int czas1, c1, i;
  
  if(sizeof(aukcja) > 20)
  {
      notify_fail("Niestety nie jestesmy w stanie "+
          "prowadzic wiecej niz 20 licytacji na raz.\n");
      return 0;
  }        
  
  if (!s) 
  {
    notify_fail("Co wystawic na licytacje?\n");
    return 0;
  }
  
  wzor = " %i:" + PL_BIE + " 'na' %d [godzin] / [godziny] / [godzine]";
  
  if (!parse_command(s, all_inventory(this_player()), wzor, obiekty, c1))
  {
    notify_fail("Wystaw <co> na <ile godzin> ?\n");
    return 0;
  }
  
  obiekty = NORMAL_ACCESS(obiekty, 0, 0);
  // Teraz obiekty zawiera liste obiektow, ktore mial na mysli gracz
  
  if (!sizeof(obiekty))
  {
       notify_fail("Co chcesz wystawic na licytacje?\n");
       return 0;
  }
  
  if (sizeof(obiekty) > 1)
  {
       notify_fail("Mozesz naraz wystawic tylko jeden przedmiot.\n");
       return 0;
  }

  o1 = obiekty[0];
  
  czas1 = time() + c1*3600+const;

  if (c1 < 1 ) 
  {
   notify_fail("Na aukcje wystawia sie rzeczy co najmniej na godzine.\n");
    return 0;
  }

  
  if ( c1 > 2 ) 
  {
    notify_fail("Przedmiot mozna wystawic najwyzej na 2 godziny.\n");
    return 0;
  }
  
  // nie wystawiac tego co ma sie na sobie lub nie posiada wartosci
   
  if (this_player()->query_prop(OBJ_O_WYSTAW_NA_AUKCJE)==o1)
  {
    this_player()->remove_prop(OBJ_O_WYSTAW_NA_AUKCJE);
    if (!(o1 = wystaw_to(o1, czas1))) 
    {
      return 0;
    }
    else
    {
      if (!(pom=o1->query_short(PL_BIE))) 
        pom=o1->query_nazwa(PL_BIE);

      gielda_hook_wystaw(o1);
      return 1;
    }
  }
  else 
  {
    if (!this_player()->query_prop(OBJ_O_WYSTAW_NA_AUKCJE))
      this_player()->add_prop(OBJ_O_WYSTAW_NA_AUKCJE, o1);
    else 
      this_player()->change_prop(OBJ_O_WYSTAW_NA_AUKCJE, o1);
    gielda_hook_wystaw_potwierdz(o1);
  }
  return 1;
}

// Ok
int
gielda_hook_wystaw_no_sell(object ob)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("powiedz " +capitalize(PNAZWA(ob, PL_MIA))+" nie posiada"+
      " zadnej wartosci.");
  }
  else
  {
    notify_fail (capitalize(PNAZWA(ob, PL_MIA))+" nie posiada"+
      " zadnej wartosci.\n");
  }
  return 0;
}

// Ok
int
gielda_hook_wystaw_no_drop(object ob)
{
  object o = query_shop_keeper();

  notify_fail("");
  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("powiedz Ten przedmiot nie nadaje sie do wystawienia.");
  }
  else
  {
    notify_fail (capitalize(PNAZWA(ob, PL_MIA))+
        " nie nadaje sie do wystawienia.\n");
  }
  return 0;
}

// Ok
int
gielda_hook_wystaw_to_low_price(object ob)
{
  object o = query_shop_keeper();

  notify_fail("");
  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("powiedz Ten przedmiot posiada "+
       "zbyt mala wartosc.");
  }
  else
  {
    notify_fail (capitalize(PNAZWA(ob, PL_MIA))+" posiada zbyt mala wartosc.\n");
  }
  return 0;
}

// Ok
int
gielda_hook_wystaw_no_move(object ob)
{
  object o = query_shop_keeper();

  notify_fail("");
  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("chrzaknij");
    o->command("powiedz " +"Ten " +PNAZWA(ob, PL_MIA)+" nie nadaje sie "+
       "do wystawienia.");
  }
  else
  {
    notify_fail (capitalize(PNAZWA(ob, PL_MIA))+
        " nie nadaje sie do wystawienia.\n");
  }
  return 0;
}

// Ok
int
gielda_hook_wystaw_worn_or_wielded(object ob)
{
  object o = query_shop_keeper();

  notify_fail("");
  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("chrzaknij");
    o->command("powiedz " +"Nie zajmuje sie stripitzem.");
    o->command("powiedz " + "Prosze zdejmij " + PNAZWA(ob, PL_BIE)+".");
  }
  else
  {
    notify_fail (capitalize(PNAZWA(ob, PL_MIA))+" jest dobyty lub zalozony.\n");
  }  
  return 0;
}

// Ok
int
gielda_hook_wystaw_no_value(object ob)
{
  object o = query_shop_keeper();

  notify_fail("");
  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("chrzaknij");
    o->command("powiedz " +capitalize(PNAZWA(ob, PL_MIA)) +
      " nie posiada zadnej wartosci.");
  }
  else
  {
    notify_fail (capitalize(PNAZWA(ob, PL_MIA))+" nie posiada zadnej wartosci.\n");
  }
  return 0;
}

// Ok
int 
gielda_hook_wystaw(object ob)
{
  object o = query_shop_keeper();

  if (o)
  {
    o->command("emote ponownie uwaznie ocenia " + PNAZWA(ob,PL_BIE)+".");
    o->command("mrugnij rad");
    o->command("powiedz " + "Dobrze. Wystawie na licytacje " +
     PNAZWA(ob, PL_BIE)+".");
  }
  else
  {
    write("Wystawiles " + PNAZWA(ob, PL_BIE) +" na licytacje.\n");
  }
  return 1;
}

// Ok
int 
gielda_hook_wystaw_potwierdz(object ob)
{
  object o = query_shop_keeper();

  if (o)
  {
    o->command("emote uwaznie ocenia " + PNAZWA(ob,PL_BIE)+"."); 
    o->command("powiedz Czy na pewno chcesz wystawic "+
       PNAZWA(ob, PL_BIE) + 
       " na licytacje? Jesli tak, wystaw przedmiot ponownie w celu "+
       "potwierdzenia transakcji.");
  }
  else
  {
    write("Wystaw " + PNAZWA(ob, PL_BIE) +" na licytacje w celu "+
        "potwierdzenia transakcji.\n");
  }
  return 1;
}

// Ok
void 
aukcja_hook_przejrzyj(int nr)
{ 
  int *p1;
  int p2 = 0;
  string jaki_przedmiot;
  int to_jest_obiekt = 0;
  
  p1 = split_values(aukcja[nr][CENA]);

  if( aukcja[nr][CZAS] < (time()+const) ) p2 = 2;

  if( aukcja[nr][KUPUJACY] == query_short() ) 
  { 
      if( aukcja[nr][CZAS] < (time()+const) ) 
      {
          p2 = 1;
          to_jest_obiekt = 1;
      }    
  }

  if(!aukcja[nr][KUPUJACY]) p2 = 1;

  if(p2 == 1)
  {
      if(to_jest_obiekt)
      {
          jaki_przedmiot = capitalize(PNAZWA(aukcja[nr][OBIEKT], PL_MIA));
      }
      else 
      {
          jaki_przedmiot = capitalize(aukcja[nr][OBIEKT]);
      }    
            
      write(sprintf("%-3i%-30s Pieniadze odbiera: " ,(nr+1),
      jaki_przedmiot));
      write(capitalize(aukcja[nr][WYSTAWIAJACY])+"\n");
      return;
  }
  
  if(p2 == 2)
  {
      write(sprintf("%-3i%-30s Placi: ",(nr+1),
      capitalize(PNAZWA(aukcja[nr][OBIEKT], PL_MIA)) ));
      write(capitalize(aukcja[nr][KUPUJACY])+"\n");
      return;
  }
    
  write(sprintf("%-3i%-35s%5d%-4s%5d%-3s%5d%-3s%5d%-4s%02i:%02i", 
      (nr+1),
      capitalize(PNAZWA(aukcja[nr][OBIEKT], PL_MIA)),
      p1[3], " mt,",
      p1[2], " z,", 
      p1[1], " s,",
      p1[0], " m",
      TIME2NUM(aukcja[nr][CZAS])[1], 
      TIME2NUM(aukcja[nr][CZAS])[2] ));
  write("\n");
}

// Ok  
void 
aukcja_hook_przejrzyj_info(int nr)
{
  string p, pom, pom1;

  p=text(split_values(aukcja[nr][CENA]), PL_MIA);

  write("Przedmiot: ");
  if(!aukcja[nr][KUPUJACY])
      write((aukcja[nr][OBIEKT])+"\n");
  else
      write(PNAZWA(aukcja[nr][OBIEKT],PL_MIA) + "\n");
  write("Wystawiajacy: " + capitalize(aukcja[nr][WYSTAWIAJACY]) + "\n");
  write("Aktualna Cena: " + p + "\n");
  
  write("Cene podbil(a): ");
  if (!(pom=aukcja[nr][KUPUJACY]))
    write("Nieznany kupujacy, trasakcja sfinalizowana.");
  else
    write (capitalize(pom));
  write("\n");
  
  write("Zakonczenie aukcji: " +  sprintf("%02i:%02i",
    TIME2NUM(aukcja[nr][CZAS])[1],
    TIME2NUM(aukcja[nr][CZAS])[2]) + 
    "\n");
  if(aukcja[nr][KUPUJACY])
  {
  write("Przedmiot przetrwa Apokalipse: ");
  if (aukcja[nr][OBIEKT]->check_recoverable())
    write("Tak\n");
  else
    write("Nie\n");
  }
}

// Przegladanie
// Ok 
int  
do_przejrzyj(string s)
{
  int i;

  if (!s) 
  {
    if (!sizeof(aukcja)) 
    {
      notify_fail ("Aktualnie nie odbywa sie zadna aukcja.\n");
      return 0;
    }
   
    say (QCIMIE(this_player(), PL_MIA) + " przeglada przedmioty "+
    "wystawione na licytacje.\n");

    for (i=0; i < sizeof(aukcja); i++)
      aukcja_hook_przejrzyj(i);
    return 1;
 }
 
 if ((s=="aukcje")||(s=="licytacje"))
 {
    for (i=0; i < sizeof(aukcja); i++) 
    {
      aukcja_hook_przejrzyj_info(i);
      write ("\n");
    }
    return 1;
 }
  
 if (!sscanf(s,"aukcje nr %d", i)) 
 {
    notify_fail("Przejrzyj aukcje nr ???\n");
    return 0;
 }
  
 if ((i < 1)||(i > sizeof(aukcja)))
 {
    notify_fail("Nie ma aukcji o podanym numerze.\n");
    return 0;
 }
  
 aukcja_hook_przejrzyj_info(i-1);
 return 1;
}


// Podbijanie
// Ok
int 
do_podbij(string s) 
{
  string wzor, *typ, str;
  mixed obiekty;
  object *rzeczy = ({});
  int nr, i, suma, pom, czas_a, czas_w, *czas1;
  int *null_arr, *value_arr;
  object o1;
  
  // Przygotowania

  value_arr= allocate(sizeof(query_money_types()));

  for (i=0; i < sizeof(value_arr); i++)
    value_arr[i]=0;
    
  null_arr=value_arr+({});

  if (!s)
  {
    notify_fail("Podbij cene <nazwa przedmiotu> do [ilosc sztuk "+
        "mithrylu] [ilosc sztuk zlota] [ilosc sztuk srebra] "+
        "[ilosc sztuk miedzi]\n");
    return 0;
  }

  for(i=0; i < sizeof(aukcja); i++)
  {
      rzeczy += ({aukcja[i][OBIEKT]});
  }    
  
  // Jedziemy z parse command

  wzor = " 'cene' %i:" + PL_DOP + " 'do' %s ";
  
  if (!parse_command(s , rzeczy, wzor, obiekty, str))
  {
    notify_fail("Podbij cene <nazwa przedmiotu> do [ilosc sztuk "+
         "platyny] [ilosc sztuk zlota] [ilosc sztuk srebra] "+
         "[ilosc sztuk miedzi]\n");
    return 0;
  }
  
  // Pieniazki  
  
  if (!str) 
  {
    notify_fail("Nalezaloby podac jeszcze podac wysokosc przebicia.\n");
    return 0;
  }
  
  typ = query_money_types();
  wzor = " %d %s ";
  i=0;
  while ((str!="")&&(++i<sizeof(typ))) 
  {
    if (!parse_command(str, all_inventory(this_player()), wzor, pom, str))
    {
       notify_fail("Co?\n");
       return 0;
    }
    value_arr[sizeof(typ)-i]+=pom;
  }
  
  // Co to za obiekt ? 

  nr = obiekty[0];
    
  if (nr == 0 || nr > 1)
  {
      notify_fail("Musisz podac konkretnie, cene ktorego przedmiotu chcesz podbic.\n");
      return 0;
  }

  if (nr < 0)
      nr = -nr;

  if (nr >= sizeof(obiekty))
  {
      notify_fail("Cene czego chcesz podbic?\n");
      return 0;
  }

  o1 = obiekty[nr];

  for(nr = 1; nr < (sizeof(rzeczy)+1); nr++)
  {
      if(o1 == rzeczy[nr-1]) break;
  }
    
  nr--;
  
  if(!(o1 == aukcja[nr][OBIEKT]))
  {
      notify_fail("No to mamy klops. Zglos buga.\n");
      return 0;
  }    

  // Sprawdzamy wszystko

  czas_a = time() + const;
  czas1 = TIME2NUM(aukcja [nr][CZAS]);
  czas_w = czas1[0]*24*3600+czas1[1]*3600+czas1[2]*60+czas1[3];
  
  if (czas_a > czas_w) 
  {
    gielda_hook_podbij_koniec(nr);
    return 0;
  }
  
  suma = money_merge(value_arr);
  
  if (!can_pay(suma, this_player()))
  {
    gielda_hook_podbij_low_cash(this_player());
    return 0;
  }
  
  if (suma <= aukcja[nr][CENA])
  {
    gielda_hook_podbij_to_small(o1);
    return 0;
  }
  
  if(aukcja[nr][WYSTAWIAJACY] == this_player()->query_real_name(PL_MIA))
  {
     return notify_fail("Nie mozesz podbic ceny przedmiotu, ktory "+
       this_player()->koncowka("sam wystawiles ","sama wystawilas ")+
       "na licytacje.\n");
  }
  
  aukcja[nr][KUPUJACY] = this_player()->query_real_name(PL_MIA);
  aukcja[nr][CENA] = suma;
  
  gielda_hook_podbij(nr, value_arr, o1);

  return 1;
}

// Ok
int
gielda_hook_podbij_koniec(int nr)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Licytacja nr "+(nr+1)+ 
        " zostala juz zakonczona.");
    o->command("powiedz Bardzo mi przykro.");
  }
  else
  {
    notify_fail("Ta licytacja zostala juz zakonczona.\n");
  }
  return 0;
}

// Ok
int
gielda_hook_podbij_low_cash(object gracz)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz do "+OB_NAME(gracz)+
       " Bardzo mi przykro, ale nie posiadasz przy "+
       "sobie tak duzej ilosci pieniedzy.");
  }
  else
  {
    notify_fail("Nie posiadasz tylu pieniedzy.\n");
  }
  return 0;
}

// Ok
int
gielda_hook_podbij_to_small(object o1)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Bardzo mi przykro, ale to zbyt mala suma, "+
      "by podbic cene "+ PNAZWA(o1, PL_DOP)+".");
  }
  else
  {
    notify_fail("To zbyt mala suma, by podbic cene "+
        PNAZWA(o1, PL_DOP)+".\n");
  }
  return 0;
}

// Ok
int
gielda_hook_podbij(int nr, int *v, object o1)
{
  object o = query_shop_keeper();
  
  if (o)
  {
    o->command("krzyknij Cena "+ PNAZWA(o1, PL_DOP) +
       " w licytacji nr "+(nr+1)+" podbita do "+
       text(v, PL_DOP)+".");
  }
  else
  {
    write("Cena "+PNAZWA(o1, PL_DOP) +
    " podbita do " + text(v, PL_DOP) + ".\n");
  }
  return 1;
}

int
czy_to_pieniadze(string s, object kto)
{
  int i;
  
  if(s == "pieniadze")
  {
    for(i = 0;i < sizeof(aukcja);i++)
    {
      if(aukcja[i][WYSTAWIAJACY] == kto->query_real_name(PL_MIA))
      {
        if(!aukcja[i][KUPUJACY]) return i;
        if((aukcja[i][KUPUJACY] == query_short()) && (time()+const > aukcja[i][CZAS]) )
          return i;
      }
    }
  }        
    return -1;
}    

// Odbieranie
// Ok

int 
do_odbierz(string s) 
{
  mixed obiekty;
  int i, *czas1, czas_w, czas_a, l_pien, *null_arr, *value_arr;
  int pie = -1;
  object o1;
  object *rzeczy = ({});
  string wzor, pom;
  
  if (!s) 
  {
    notify_fail("Co chcesz odebrac?\n");
    return 0;
  }
  
  if (!sizeof(aukcja)) 
  {
    notify_fail("Nie odbywa sie zadna aukcja.\n");
    return 0;
  }
  
  for(i=0; i < sizeof(aukcja); i++)
  {
      rzeczy += ({aukcja[i][OBIEKT]});
  }    
  
  
  
  l_pien = 0;
  
  pie = czy_to_pieniadze(s, this_player());
  
  if(!(pie == -1)) l_pien = 1;
  
 if(pie == -1)
 {
  wzor = " %i:" + PL_BIE;
  
  if (!parse_command(s, rzeczy, wzor, obiekty)) 
  {
  //  wzor = " 'pieniadze' 'za' %i:"+PL_BIE;
  //  
  //  if (!parse_command(s, rzeczy, wzor, obiekty))
  //  {
      notify_fail ("Co chcesz odebrac?\n");
      return 0;
  //  }
  //  else 
  //  l_pien = 1;
  }
 
    
  i = obiekty[0];
    
  if (i == 0 || i > 1)
  {
      notify_fail("Musisz podac konkretnie, ktory przedmiot chcesz odebrac.\n");
      return 0;
  }
    
  if (i < 0) i = -i;
        
  if (i >= sizeof(obiekty))
  {
      notify_fail("Co chcesz odebrac?\n");
      return 0;
  }

  o1 = obiekty[i];

  for(i = 1; i < (sizeof(rzeczy)+1); i++)
  {
      if(o1 == rzeczy[i-1]) break;
  }
    
  i--;
    
  if(!(o1 == aukcja[i][OBIEKT]))
  {
      notify_fail("No to mamy klops. Zglos buga.\n");
      return 0;
  }

  null_arr = allocate(sizeof(query_money_types()))+({});
  
  czas_a = time() + const;
  czas_w = aukcja [i][CZAS];
  
  if(!(ARMAGEDDON->shutdown_active()))
  {
     if (czas_a < czas_w) 
     {
        gielda_hook_odbierz_no_end(i);
        return 0;
     }
  }
 }
  if (l_pien) 
  {
    if (aukcja[pie][WYSTAWIAJACY]!=(this_player()->query_real_name(PL_MIA))) 
    {
      gielda_hook_odbierz_incorrect_person_money(o1,aukcja[i][WYSTAWIAJACY]);
      return 0;
    }

    pom = text(split_values(aukcja[pie][CENA]-aukcja[pie][CENA]/5), PL_MIA);
    
    value_arr = split_values(aukcja[pie][CENA]-aukcja[pie][CENA]/5);
    
    notify_fail("Transakcja nie zostala jeszcze zrealizowana przez "+
        "kupujacego.\n");
    if ((!aukcja[pie][KUPUJACY])||(aukcja[pie][KUPUJACY] == query_short())) 
      gielda_hook_odbierz_money(value_arr, pie);
    else 
    return 0;

    MONEY_ADD(this_player(), aukcja[pie][CENA]-aukcja[pie][CENA]/5);
    
    aukcja-= ({aukcja[pie]}); 
    gielda_hook_end_of_aukcja(pie);
        
    return 1;
  }
  
  if (this_player()->query_real_name(PL_MIA)!=aukcja[i][KUPUJACY])
  {
    gielda_hook_odbierz_incorrect_person_ob(o1,aukcja[i][KUPUJACY]);
    return 0;
  }
  
  if (!can_pay(aukcja[i][CENA], this_player()))
  {
    gielda_hook_odbierz_cant_pay(o1);
    return 0;
  }
  
  if (o1->move(this_player()))
  {
        gielda_hook_odbierz_ob_to_heavy(o1);
        notify_fail("Niestety ten przedmiot jest dla ciebie za ciezki.\n");
        return 0;
  }

  MONEY_ADD(this_player(), -aukcja[i][CENA]); 

  gielda_hook_odbierz_ob(split_values(aukcja[i][CENA]), o1);
    
  aukcja[i][KUPUJACY] = 0;
  aukcja[i][OBIEKT] = PNAZWA(o1,PL_MIA);

  return 1;
}

// Ok
int
gielda_hook_end_of_aukcja(int i)
{
  return 1;
}


// Ok
int 
gielda_hook_odbierz_no_end(int nr)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Bardzo mi przykro, ale licytacja nr "+
       (nr+1)+" nie zostala jeszcze zakonczona.");
  }
  else
  {
    notify_fail("Licytacja nr "+
       (nr+1)+" nie zostala jeszcze zakonczona.\n");
  }
  return 0;  
}

// Ok
int 
gielda_hook_odbierz_ob(int *v, object o1)
{
  object o = query_shop_keeper();
  
    write ("Odbierasz " + PNAZWA(o1, PL_BIE) +
      ", placac " + text(v, PL_MIA) + ".\n");
  return 1;
}

// Ok
int 
gielda_hook_odbierz_money(int *v, int nr)
{ 
  string pom = text(v, PL_BIE);
  string jaki_przedmiot;
  
      if(aukcja[nr][KUPUJACY])
      {
          jaki_przedmiot = PNAZWA(aukcja[nr][OBIEKT], PL_MIA);
      }
      else 
      {
          jaki_przedmiot = aukcja[nr][OBIEKT];
      }    
  
  write ("Sprzedano: "+
      jaki_przedmiot+"\n"+
      "Otrzymujesz wylicytowana sume "+
      "minus 20% prowizji, to znaczy:"+
      "\n" + pom + ".\n");
  return 1;
}

// Ok
int 
gielda_hook_odbierz_cant_pay(object ob)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Nie posiadasz odpowiedniej ilosci gotowki by odebrac "+
       PNAZWA(ob, PL_BIE)+".");
  }
  else
  {
    notify_fail("Nie posiadasz odpowiedniej ilosci gotowki by odebrac "+
       PNAZWA(ob, PL_BIE)+".\n");
  }
  return 0;
}

// Ok
int
gielda_hook_odbierz_incorrect_person_ob(object ob, string kto)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Niestety, nie mozesz odebrac "+
       PNAZWA(ob, PL_DOP)+". Licytacje wygral(a) "+
       capitalize(kto)+"."); 
  }
  else
  {
    notify_fail("Niestety, nie mozesz odebrac "+
        PNAZWA(ob, PL_DOP)+". Licytacje wygral(a) "+
        capitalize(kto)+".\n"); 
  }
  return 0;
}

// Ok
int 
gielda_hook_odbierz_incorrect_person_money(object ob, string kto)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Nie mozesz odebrac pieniedzy za "+ 
       PNAZWA(ob, PL_BIE)+". Ten przedmiot wystawil(a) "+
       capitalize(kto)+".");
  }
  else
  {
    notify_fail("Nie mozesz odebrac pieniedzy za "+
        PNAZWA(ob, PL_BIE)+". Ten przedmiot wystawil(a) "+
        capitalize(kto)+".\n");
  }
  return 0;
}

// Ok
int
gielda_hook_odbierz_ob_to_heavy(object ob)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Bardzo mi przykro, ale nie mozesz uniesc "+
    PNAZWA(ob, PL_DOP)+".");
  }
  else
  {
    notify_fail("Nie mozesz uniesc "+
    PNAZWA(ob, PL_DOP)+".\n");
  }
  return 0;
}

// Wycofanie
// Ok
int 
do_wycofaj (string s) 
{
    mixed obiekty;
    string wzor;
    object *rzeczy = ({});
    int i, null_arr, ok, czas_a, czas_w;
    object o1, o2;
    
    notify_fail("Co chcesz wycofac?\n");
    if (!s) return 0;
    
    for(i=0; i < sizeof(aukcja); i++)
    {
      rzeczy += ({aukcja[i][OBIEKT]});
    }    
  
    wzor = " %i:" + PL_BIE + " [z] [aukcji] ";
    
    if (!parse_command(s, rzeczy, wzor, obiekty)) 
    {
      notify_fail("Co chcesz wycofac?\n");
      return 0;
    }
    
    i = obiekty[0];
    
    if (i == 0 || i > 1)
    {
        notify_fail("Musisz podac konkretnie, ktory przedmiot chcesz wycofac.\n");
        return 0;
    }
    
    if (i < 0) i = -i;

    if (i >= sizeof(obiekty))
    {
        notify_fail("Co chcesz wycofac?\n");
        return 0;
    }

    o1 = obiekty[i];

    for(i = 1; i < (sizeof(rzeczy)+1); i++)
    {
        if(o1 == rzeczy[i-1]) break;
    }
    
    i--;
    
    if(!(o1 == aukcja[i][OBIEKT]))
    {
      notify_fail("No to mamy klops. Zglos buga.\n");
      return 0;
    }

    null_arr = allocate(sizeof(query_money_types())) + ({});

    if (aukcja[i][WYSTAWIAJACY]!=this_player()->query_real_name(PL_MIA))
    {
      gielda_hook_wycofaj_incorrect_person(o1);
      return 0;
    }
    
    ok = 0;

    if (!(ARMAGEDDON->shutdown_active()))
    {
       ok = 1;
       if (!can_pay(aukcja[i][CENA] / 5, this_player()))
       {  
          gielda_hook_wycofaj_cant_pay(o1);
          return 0;
       } 
       czas_a = time() + const;
       czas_w = aukcja[i][CZAS];
    }

    if(!aukcja[i][KUPUJACY])
    {
        notify_fail("Pieniadze zostaly juz wplacone. Nie mozesz wycofac "+
            PNAZWA(aukcja[i][OBIEKT], PL_DOP)+" z licytacji.");
        return 0;
    }    

    if(aukcja[i][KUPUJACY] != query_short())
    {
        notify_fail("Stawka za przedmiot zostala juz podbita. Nie mozesz "+
            "go wycofac z licytacji.\n");
        return 0;
    }    

    if (o1->move(this_player())) 
    {
       gielda_hook_wycofaj_ob_to_heavy(o1);
       return 0;
    }

    if (ok) 
    {
      MONEY_ADD(this_player(), -aukcja[i][CENA]/5); 
      gielda_hook_wycofaj(o1,split_values(aukcja[i][CENA]/5));
    }
    else
    {
      gielda_hook_wycofaj_armageddon(o1);
    }
    
    aukcja -= ({aukcja[i]});
    
    return 1;
}    

// Ok
int
gielda_hook_wycofaj(object ob,int *v)
{
  object o = query_shop_keeper();
  
  if (o)
  {
    o->command("powiedz "+capitalize(PNAZWA(ob, PL_MIA)) + " " +
        ob->koncowka("wycofany","wycofana") + " z licytacji. Wystawiajacy "+
        "zaplacil "+text(v,PL_MIA)+".");
  }
  else
  {
    write("Wycofujesz "+ PNAZWA(ob, PL_BIE) + " z licytacji, placac "+
        text(v, PL_MIA)+"\n");
  }
  return 1;
}

// Ok
int
gielda_hook_wycofaj_armageddon(object ob)
{
  object o = query_shop_keeper();
  
  if (o)
  {
    o->command("powiedz Poniewaz niedlugo swiat ogarna ciemnosci mozesz "+
      "wycofac "+PNAZWA(ob, PL_BIE) +" bez strat.");
  }
  else
  {
    write("Wycofujesz "+ PNAZWA(ob, PL_BIE) + " z licytacji "+
    "bez strat.\n"); 
  }
  return 1;
}

// Ok
int 
gielda_hook_wycofaj_ob_to_heavy(object ob)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Nie jestes w stanie uniesc "+
       capitalize(PNAZWA(ob, PL_MIA))+"."); 
  }
  else
  {
    notify_fail("Nie jestes w stanie uniesc "+
       capitalize(PNAZWA(ob, PL_MIA))+".\n");
  }
  return 0;
}

// Ok
int 
gielda_hook_wycofaj_cant_pay(object ob)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Nie posiadasz wystarczajacej gotowki, by odebrac "+
      PNAZWA(ob, PL_BIE)+".");
  }
  else
  {
    notify_fail("Nie posiadasz wystarczajacej ilosci gotowki, by odebrac "+
      PNAZWA(ob, PL_BIE) + ".\n");
  }
  return 0;
}

// Ok
int
gielda_hook_wycofaj_incorrect_person(object ob)
{
  object o = query_shop_keeper();
  
  notify_fail("");
  if (o)
  {
    o->command("powiedz Nie jestes osoba uprawniona do wycofania "+
      PNAZWA(ob, PL_DOP)+".");
  }
  else
  {
    notify_fail("Nie jestes osoba uprawniona do wycofania "+
      PNAZWA(ob, PL_DOP) + ".\n");
  }
  return 0;
}

mixed
query_forsa()
{
    return forsa;
}

string
query_nieuczciwi()
{
    return nieuczciwi;
}        


mixed
query_tempor()
{
    return tempor;
}

string
query_nieuczciwibak()
{
    return nieuczciwibak;
}

void
nagrywamy_gielde1()
{
  string s;
  int i, pom, ile_damy;
    
  s="";
  i = 0;
  
//  if(!sizeof(aukcja)) return;
  
  if (pom=sizeof(aukcja))
  {
    while(i < pom)
    {

      if ( (aukcja[i][KUPUJACY]!=query_short()) && aukcja[i][KUPUJACY] )
      {
          if ((time()+const) > aukcja[i][CZAS])
          {
              s+=capitalize(aukcja[i][KUPUJACY]) +" wylicytowal(a) " +
                 text(split_values(aukcja[i][CENA]), PL_BIE) + 
                 " za "+PNAZWA(aukcja[i][OBIEKT],PL_BIE)+", ktory to "+
                 "przedmiot wystawil(a) "+
                 capitalize(aukcja[i][WYSTAWIAJACY])+".\n";
          }       
      }
      
      if(aukcja[i][KUPUJACY])
      {
          ile_damy = aukcja[i][OBIEKT]->query_value(); 
      }              
      
      if(!aukcja[i][KUPUJACY])
      {
          ile_damy = aukcja[i][CENA];
      }
          
      forsa[0]+=({aukcja[i][WYSTAWIAJACY]});
      forsa[1]+=({ile_damy});

      if(!aukcja[i][KUPUJACY] || ( aukcja[i][KUPUJACY]==query_short() && (time()+const) > aukcja [i][CZAS]))
      {
          tempor[0]+=({aukcja[i][WYSTAWIAJACY]});
          tempor[1]+=({aukcja[i][CENA]});
          if(objectp(aukcja[i][OBIEKT]))
                      aukcja[i][OBIEKT]->remove_object();
          aukcja -= ({aukcja[i]}); 
          i -= 1;
          pom = sizeof(aukcja);
      }
      i += 1;
    }
  }
    
  nieuczciwi = s;
    
  setuid(); seteuid(getuid());
  
  rm(NPATH + "inne/aukcja_kasa.o");   
  save_object(NPATH + "inne/aukcja_kasa");

  forsa = ({({}),({})});
  forsa = query_tempor()+({});
  nieuczciwi = "";
  nieuczciwi = query_nieuczciwibak();

}

void
nagrywamy_gielde()
{
  tempor = ({({}),({})});
  tempor = query_forsa()+({});
  nieuczciwibak = "";
  nieuczciwibak = query_nieuczciwi();
  
  nagrywamy_gielde1();
}  
    

// Ok
public int
remove_object()
{
    nieuczciwi = "";

    nagrywamy_gielde();

    return ::remove_object();
}

// Ok
int
shop_hook_list_no_match(string str)
{
    notify_fail("Nic takiego nie jest wystawiono na aukcje.\n");
}

// Ok
int
do_pokaz(string str)
{
    object *item_arr;
    int i, *arr;

    notify_fail("Co pokazac?\n");
    if(!str) return 0;

    call_other(store_room, "load_me");

    item_arr = all_inventory(find_object(store_room));

    if (!sizeof(item_arr))
    {
        shop_hook_list_no_match(str);
        return 0;
    }

    item_arr = FIND_STR_IN_ARR(str, item_arr, PL_BIE);

    if (sizeof(item_arr) < 1)
    {
        return shop_hook_list_no_match(str);
    }

    item_arr[0]->appraise_object();

    return 1;
}

// Ok
int
do_wyplac(string s)
{
  int index;
  int ile = 0;
  
  notify_fail("Co chcesz wyplacic?\n");

  if (!s || s!="pieniadze")
  {
        return 0;
  }
  
  if((index=member_array(this_player()->query_real_name(PL_MIA),
       forsa[0]))==-1)
  {
    notify_fail("Niestety nie oczekuja na Ciebie zadne pieniadze.\n");
    return 0;
  }
    
  while(!((index=member_array(this_player()->query_real_name(PL_MIA),
       forsa[0]))==-1))
  {
  
  ile += (forsa[1][index]-forsa[1][index]/5);
  
  forsa[0] = exclude_array(forsa[0], index, index);
  forsa[1] = exclude_array(forsa[1], index, index);

  }

  MONEY_ADD(this_player(), ile);
  write("Odebral"+this_player()->koncowka("es","as")+" zalegle pieniadze w kwocie: "+
      text(MONEY_SPLIT(ile),PL_MIA)+".\n");
  say(QCIMIE(this_player(),PL_MIA) + " odbiera zalegle pieniadze.\n");    
  return 1;
}

// Ok
mixed
query_przedmioty()
{
    return przedmioty;
}    

void
korekta(int i, int j)
{
    forsa[0] = exclude_array(forsa[0],i,j);
    forsa[1] = exclude_array(forsa[1],i,j);
}
    
void
dodaj_forse(string kto, int ile)
{
    forsa[0] += ({kto});
    forsa[1] += ({ile});
}    
