/*
 * Przyklad najprostszego sklepu Imperium.
 * Napisane prze Alfena
 */



#include "alfen.h"
#include "silvy.h"
inherit NPATH + "std/room"; /* ten obiekt jest pokojem */
inherit "/lib/shop"; /* ten obiekt jest sklepem */

#include <stdproperties.h> /* standardowe wlasciwosci */

object set_shop_keeper(string str);
object query_shop_keeper();

nomask object sprzed;
nomask string str_sprzed;
nomask string sell_emote;
nomask string value_emote;
nomask string buy_emote;
nomask string show_emote;
nomask string store_emote;
nomask string list_emote;


nomask string s_item;
nomask string s1_item;


void do_emote_value();
void do_emote_list();
void do_emote_buy();
void do_emote_sell();
void do_emote_show();
void do_emote_store();

// s -lp biernika,  s1- lm biernika przedmiotu na tabliczce
void set_standard_shop_item(string s, string s1);

void set_value_emote(string s);
void set_list_emote(string s);
void set_buy_emote(string s);
void set_sell_emote(string s);
void set_show_emote(string s);
void set_store_emote(string s);

#define OBJ_I_WZIETY_Z_URNY    "_obj_i_wziety_z_urny"

void create_imperium_shop(){
  set_store_room(APATH + "obj/magazyn_std.c"); /* ktory obiekt jest
    							naszym magazynem */
  add_exit(APATH + "obj/magazyn_std.c", "zachod", "@@wiz_check", 1);
    				/* do magazynu */
    				/*  Sprawdza czy gostek moze tam wejsc */
  set_short("Sklep U Wokulskiego.\n");
  set_long("Znajdujesz sie w przykladowym sklepie. Wydaje sie byc "+
        "bardzo... niewykonczony. Na scianie wisi jakas tabliczka. "+
        "Oprocz niej jest jeszcze wyjscie do magazynu, bedacego "+
        "na zachod stad.\n");
  set_shop_keeper("/doc/examples/npce/dowodczyni.c");
  set_standard_shop_item("miecz", "miecze");
}

void
create_imperium_room()
{


    config_default_trade(); /* ustawia standardowe wartosci */


    add_item( ({ "instrukcje", "tabliczke" }), "Tabliczka ze wskazowkami "+
        "dla klientow.\n");

    add_cmd_item( ({ "instrukcje", "tabliczke" }), "przeczytaj",
        "@@standard_shop_sign@@");


   set_value_emote("zakrecil sie przy ladzie.");
   set_list_emote("nerwowo rozejrzal sie na boki.");
   set_buy_emote("radosnie potrzasnal twoja reka.");
    set_sell_emote("nieufnie spojrzal na ciebie.");
   set_show_emote("zatarl rece.");
   set_store_emote("przyjrzal ci sie uwaznie.");

   sprzed=0;
   str_sprzed="";
   
   add_prop(ROOM_I_INSIDE, 1);
   
   create_imperium_shop();
}


void reset_imperium_shop(){
}


void reset_imperium_room(){
/*
  if ((!objectp(sprzed))&&(!str_sprzed)){
    sprzed = clone_object(str_sprzed);
    sprzed -> move(this_object());
  }
*/

  reset_imperium_shop();
}




void
init()
{
    ::init(); /* MUSI byc wywolane w kazdym inicie */

    init_shop(); /* dodanie komend takich jak 'kup', 'sprzedaj' itp */
}


void shop_hook_list_object(object ob, int price){
  string str, mess;
  int i;

  str = sprintf("%-36s", capitalize(ob->short(PL_MIA)));

  if (mess=("/d/Imperium/std/ziola")->money_short(split_values(price),1))
    mess = sprintf("%-35s", mess);
  else{
    mess = "Ten przedmiot nie ma wartosci. Zglos buga!";
    mess = sprintf("%-36s", mess);
  }
  write("| " + str + " | " + mess + " |\n");
  /*
  for (i=0; i < 7; i++)
    write("----------");
  write("---------\n");
  */
}


int do_list(string str){
  string pom;
  int i, tmp;
  
  if (!objectp(sprzed)) {
    notify_fail("Niestety nie ma sprzedawcy, wiec sklep jest nieczynny.\n");
    return 0;
  }

  do_emote_list();
  for (i=0; i < 7; i++)
    write("----------");
  write("---------\n");
  pom = sprintf("%-36s","Nazwa przedmiotu");
  write("| "+pom+" | ");
  pom = sprintf("%-36s","Cena przedmiotu");
  write(pom+" |\n");
  
  for (i=0; i < 7; i++)
    write("----------");
  write("---------\n");
  tmp = (::do_list(str));
  for (i=0; i < 7; i++)
    write("----------");
  write("---------\n");
  return tmp;
}


int do_buy(string str){
  if (!objectp(sprzed)) {
    notify_fail("Niestety nie ma sprzedawcy, wiec sklep jest nieczynny.\n");
    return 0;
  }

  do_emote_buy();
  return ::do_buy(str);
}


int do_sell(string str){
  if (!objectp(sprzed)) {
    notify_fail("Niestety nie ma sprzedawcy, wiec sklep jest nieczynny.\n");
    return 0;
  }

/* Wylaczam to bo juz nie jest potrzebne
 *
  if(this_player()->query_prop("_gracz_i_wzial_rzecz") > 0) 
  {
       notify_fail("Czujesz boska obecnosc w swym umysle. Juz wiesz, ze "+
           "zanim cos sprzedasz, powinienes oddac cos potrzebujacym. " +
           "Jak przez mgle widzisz smukla swiatynie i stojaca w niej urne " +
           "ofiarna.\n");    
       return 0;
  }         
 *
 */

  do_emote_sell();
  return ::do_sell(str);
}


int do_value(string str){
  if (!objectp(sprzed)) {
    notify_fail("Niestety nie ma sprzedawcy, wiec sklep jest nieczynny.\n");
    return 0;
  }
  do_emote_value();
  return ::do_value(str);
}


int do_show(string str){
  if (!objectp(sprzed)) {
    notify_fail("Niestety nie ma sprzedawcy, wiec sklep jest nieczynny.\n");
    return 0;
  }
  do_emote_show();
  return ::do_show(str);
}


int do_store(string str){
  if (!objectp(sprzed)) {
    notify_fail("Niestety nie ma sprzedawcy, wiec sklep jest nieczynny.\n");
    return 0;
  }
  do_emote_store();
  return ::do_store(str);
}


object set_shop_keeper(string str){
  str_sprzed=str;
  if (!str)
    return 0;
  return (sprzed = dodaj_npca(str_sprzed));
}


object query_shop_keeper(){
 object *tmp = (this_object()->query_npce()[0]);
 if (sizeof(tmp)>0)
   return tmp[0];
 return 0;
}

void do_emote_list(){
  if (list_emote)
    sprzed->command("emote " + list_emote);
}

void do_emote_buy(){
  if (buy_emote)
    sprzed->command("emote " + buy_emote);
}


void do_emote_sell(){
  if (sell_emote)
    sprzed->command("emote "+ sell_emote);
}


void do_emote_show(){
  if (show_emote)
    sprzed->command("emote " +show_emote);
}


void do_emote_store(){
  if (store_emote)
    sprzed->command("emote " + store_emote);
}

void do_emote_value(){
  if (value_emote)
    sprzed->command("emote " + value_emote);
}


void set_list_emote(string s){
  list_emote=s;
}

void set_buy_emote(string s){
  buy_emote=s;
}


void set_value_emote(string s){
  value_emote=s;
}

void set_sell_emote(string s){
  sell_emote=s;
}


void set_show_emote(string s){
  show_emote=s;
}

void set_store_emote(string s){
  store_emote=s;
}


// nazwa przedmiotu w bierniku lp - s
// nazwa przedmiotu w w bierniku lm -s1

string
standard_shop_sign()
{
    return
"Oto przyklady tego, co mozesz tu uczynic:\n" +
"    kup " + s_item + " za zlote monety    (standardowo najmniejsza denominacja)\n" +
"    kup " + s_item + " za zloto i wez miedziaki reszty\n" +
"    sprzedaj " + s_item + " za miedziaki  (standardowo najwieksza denominacja)\n" +
"    sprzedaj wszystko  - dzieki czemu sprzedasz wszystkie przedmioty, poza\n"+
"                         tymi, ktore dobywasz lub masz na sobie. Pamietaj,\n"+
"                         ze gdy masz za duzo przedmiotow do sprzedania, byc\n"+
"                         moze zajdzie koniecznosc ponownego wykonania tej\n"+
"                         komendy.\n"+
"    sprzedaj wszystko! - pozwoli ci sprzedac WSZYSTKIE przedmioty, ktore\n"+
"                         masz przy sobie - za wyjatkiem tych, ktorych nie\n" +
"                         da sie odlozyc i z wyjatkiem monet.\n"+
"                         (patrz ostrzezenie dla 'sprzedaj wszystko')\n"+
"    sprzedaj " + s1_item + ", sprzedaj drugi " + s_item + ", sprzedaj dwa "+ s1_item + " - te komendy\n"+
"                         takze dzialaja. Pamietaj jednak, ze nigdy\n" +
"                         nie bedziesz w stanie kupic wiecej, niz jednego\n"+
"                         przedmiotu.\n" +
"    wycen              - Sprzedawca wyceni ile wart jest dany przedmiot,\n"+
"                         zanim zdecydujesz sie go sprzedac.\n" +
"    pokaz              - Pozwoli ci obejrzec dokladnie jakis przedmiot\n"+
"                         z magazynu, zanim podejmiesz decyzje o kupnie go.\n"+
"    przejrzyj          - Pozwala ci przejrzec zawartosc magazynu.\n";
}



void set_standard_shop_item(string s, string s1){
  s_item= s;
  s1_item=s1;
}

int
shop_hook_allow_sell(object ob)
{
    if (ob->query_prop(OBJ_I_WZIETY_Z_URNY))
    {
        write("Ten przedmiot zostal poswiecony bogom. Nie mozesz "+ 
            "go tu sprzedac.\n");
        
        return 0;
    }
    
    return ::shop_hook_allow_sell(ob);
}    
