// Buklak 
// Napisane przez Alfena

inherit "/std/receptacle.c";
#include "alfen.h"
#include <stdproperties.h>
#include <pl.h>
#include <macros.h>

#define CONT_I_CONTAINS_LIQUID "_cont_i_contains_liquid_"


private int Buklak_Value;
private int Buk_ilosc_cieczy;
private string *Buk_typ_cieczy;
private string *Buk_komendy;


void set_value(int va) {Buklak_Value=va;}
int buklak_value(){return Buklak_Value;}
void set_liquid(string *typ, int ilosc);
void add_liquid(int ilosc);
void sub_liquid(int ilosc);
int query_cuanitity_liquid(){return Buk_ilosc_cieczy;}
string *query_liquid(){return Buk_typ_cieczy;}


void create_buklak(){
  ustaw_nazwe(({"buklak", "buklaka", "buklakowi", "buklak",
    "buklakiem", "buklaku"}),
    		({"buklaki", "buklakow", "buklakom", "buklaki",
    		  "buklakami", "buklakach"}), PL_MESKI_NZYW);
  set_long("Buklak zostal zrobiony z wyprawionej skory jakiegos zwierzecia"+
      ". Nie zauwazasz jakis znakow szczegolnych, ale wyglada on na"+
      " solidna, garbarska robote. Dostrzegasz takze zamkniecie, chroniace"+
      " ciecz w buklaku przed wylaniem.\n");
  set_short("Skorzany buklak");
  
  add_prop(CONT_I_CONTAINS_LIQUID, 1);
  add_prop(OBJ_I_VALUE, buklak_value);
  add_prop(CONT_I_CLOSED, 1);
  add_prop(CONT_I_WEIGHT, 100);
  add_prop(CONT_I_VOLUME, 1000);
  add_prop(CONT_I_MAX_VOLUME, 1000);
  add_prop(CONT_I_MAX_WEIGHT, 1000);
  add_prop(CONT_M_NO_INS, "Nie jest najlepszym pomyslem wkladanie"+
  	" czegos do "+query_nazwa(PL_DOP)+".\n");
  set_value(30);
  set_liquid( ({"oliwa","oliwy","oliwie","oliwe","oliwa","oliwie"}), 999);
}



void create_receptacle(){
  cont_key = 0;
  create_buklak();
}


int prevent_enter(object ob){
  notify_fail("");
  return 0;
}



int prevent_leave(object ob){
  notify_fail("");
  return 0;
}


void init(){
  ::init();
  //add_action ("do_fill", "napelnij");
  add_action ("do_empty", "oproznij");
}




int do_fill(string s){
  int i;
  string pattern, s1;
  object o1, o2;
    
  pattern = " %o:" + PL_BIE + " %s 'z' %o:" + PL_DOP;
  if (!(i = parse_command(s, all_inventory(this_player()), pattern, o1, s1, o2))){
    notify_fail("Napelnic co, czym i skad?\n");
    return 0;
  }
  if (o2!=this_object()){
    notify_fail("Z czego chcesz cos przelac??\n");
    return 0;
  }
  if (query_prop(CONT_I_CLOSED)) {
    notify_fail("Wypadaloby otworzyc najpierw " + query_nazwa(PL_BIE) +
      " !\n");
    return 0;
  }
  if ((s1!=Buk_typ_cieczy[PL_NAR])&&!Buk_ilosc_cieczy){
    notify_fail("W " + query_nazwa(PL_MIE) + " tego nie ma.\n");
    return 0;
  }
  if (!o1->query_prop(CONT_I_CONTAINS_LIQUID)) {
    notify_fail(capitalize(o1->query_nazwa(PL_MIA)) + " nie nadaje sie"+
      " chyba do przechowywania "+ Buk_typ_cieczy[PL_DOP] + "!\n");
    return 0;
  }
  if (o1->query_prop(CONT_I_CLOSED)) {
    notify_fail(capitalize(o1->query_nazwa(PL_MIA)) + " jest przeciez "+
       "zamkniety.\n");
    return 0;
  }
  
  return 1;
}



void set_liquid (string *typ, int ilosc){
  Buk_typ_cieczy = typ;
  if (ilosc < query_prop(CONT_I_MAX_VOLUME))
    Buk_ilosc_cieczy = ilosc;
  else
    Buk_ilosc_cieczy = query_prop(CONT_I_MAX_VOLUME);
  
}




int do_empty(string str){
  string wzor;
  object o1;
  
  wzor = " %o:" + PL_BIE;
  
  if (!parse_command(str, all_inventory(this_player()), wzor, o1)) {
    notify_fail("Oproznic co z czego ?\n");
    return 0;
  }
  if (query_prop(CONT_I_CLOSED)) {
    notify_fail(capitalize(query_nazwa(PL_MIA)) + " jest zamkniety.\n");
    return 0;
  }
  if (!Buk_ilosc_cieczy) {
    notify_fail(capitalize(query_nazwa(PL_MIA)) + " jest pusty.\n");
    return 0;
  }
  Buk_ilosc_cieczy=0;
  
  tell_room (environment(this_player()), QCIMIE(this_player(), PL_MIA) + 
    " wylal "+ Buk_typ_cieczy[PL_BIE]+ 
     ".\n", this_player());
  write ("Wylales " + Buk_typ_cieczy[PL_BIE] + ".\n");
  return 1;
}



void add_liquid(int ilosc){
  Buk_ilosc_cieczy+=ilosc;
  if (Buk_ilosc_cieczy > query_prop(CONT_I_MAX_VOLUME))
    Buk_ilosc_cieczy = query_prop(CONT_I_MAX_VOLUME);
}


void sub_liquid(int ilosc){
  Buk_ilosc_cieczy-=ilosc;
  if (Buk_ilosc_cieczy < 0)
    Buk_ilosc_cieczy = 0;
}
