/*
 *  file    : skrzynia.c
 *  autor   : Hastur
 *  data    : 28.06.98
 *  last update : 28.06.98
 *  description : skrzynia na eq dla gildii KM. Stoi w pijalania.c
 *  Dla zakonu przystosowal Silvy 8/98
 *  Na klona zmodyfikowal Torg -> 2002-11-19
 */

inherit "std/receptacle.c";

#include "mith.h"

#include <macros.h>
#include <stdproperties.h>
#include <cmdparse.h>
#include <pl.h>
#include <filter_funs.h>
#include <ss_types.h>
#include <wa_types.h>

#define SKRZYNKA ("/d/Imperium/Zakon/obj/skrzynia")
#define TO this_object()

/* ********************************************************************** */

string *olist = ({});
void
save_me()
{
    save_object(SKRZYNKA);
}


void
create_container()
{
    ustaw_nazwe(({"skrzynia","skrzyni","skrzyni","skrzynie","skrzynia",
                  "skrzyni"}),
        ({"skrzynie","skrzyn","skrzyniom","skrzynie","skrzyniami",
          "skrzyniach"}), PL_ZENSKI);

    dodaj_przym("zdobiony","zdobieni");

    set_long("Wielka, misternie zdobiona skrzynia ma za zadanie pomiescic "+
      "najcenniejszy sprzet czlonkow Zakonu. Dostep do niej maja tylko "+
      "Rycerze Zakonni, jednak rowniez Bracia Sluzebni moga wkladac do "+
      "srodka co lepsze czesci ekwipunku, ukazujac tym samym swe oddanie i "+
      "pokore.\n");

    add_prop(CONT_I_WEIGHT,50000);         // 50kg - waga urny
    add_prop(CONT_I_MAX_WEIGHT,900000);
    add_prop(CONT_I_MAX_VOLUME,900000);
    add_prop(CONT_I_RIGID,1);              // sztywny przedmiot
    add_prop(OBJ_M_NO_GET,"Przesuwasz, obracasz, popychasz ... na prozno,"
             +" skrzyni nie da sie ruszyc z miejsca.\n");
    setuid();
    seteuid(getuid());
    restore_object(SKRZYNKA);
}

int
czy_rycerz(object ob)
{
    return PRAWA->sprawdz_prawa(SKRZYNIA, ob);
}

int
prevent_leave(object ob)
{
    if(ARMAGEDDON->shutdown_active()) return 0;

    if(czy_rycerz(this_interactive())) return 0;

    write("Do tej skrzyni mozesz tylko wkladac przedmioty.\n");
    return 1;
}

void
enter_inv( object co, object skad )
{
    ::enter_inv(co, skad);
    olist += ({MASTER_OB(co)});
    save_me();
}
void
leave_inv( object co, object dokad )
{
    ::leave_inv(co, dokad);
    olist -= ({MASTER_OB(co)});
    save_me();
}
void
load()
{
    int i;
    object *items=({});
    for ( i = 0; i < sizeof(olist); i++ )
    items += ({clone_object(olist[i])});
    save_me();
    for ( i = 0; i < sizeof(items); i++ )
        items[i]->move(TO);
    olist->remove_object();
    olist=({});
    
}
void
init()
{
   ::init();
   set_alarm(2.0, 0.0,load);
}
