// Petrarch // Merentha Lib 1.0 // bar.c #include <std.h> #include "bar.h" inherit ROOM; mapping __Menu=([]); string __Currency; void set_currency(string str) { __Currency=str; } void set_menu(mapping menu) { __Menu=menu; } mapping query_menu() { return __Menu; } void init() { ::init(); add_action("cmd_read", ({"read","list"})); add_action("cmd_buy", "buy"); } int buy_item(string type, mapping item) { object food; int cost=item["strength"]/2; if(this_player()->query_money(__Currency) < cost) return notify_fail("That will cost "+cost+" "+__Currency+" coins which you do not have.\n"); food=new(type); food->set_name(item["name"]); food->set_short(item["short"]); food->set_long(item["long"]); food->set_id(item["id"]); food->set_strength(item["strength"]); food->set_mass(item["weight"]); if(food->move(this_player())) { food->remove(); return 1; } this_player()->add_money(__Currency, -cost); message("shop", "You purchase "+food->query_short()+".",this_player()); return 1; } int cmd_buy(string str) { mapping foods, drinks; string *items; int i; if(!str) return notify_fail("Syntax: buy <item>\n"); drinks=__Menu["drinks"]; foods=__Menu["foods"]; if(!drinks) drinks=([]); if(!foods) foods=([]); i=sizeof(items=keys(foods)); while(i--) if(member_array(str, foods[items[i]]["id"])!=-1) return buy_item(FOOD,foods[items[i]]); i=sizeof(items=keys(drinks)); while(i--) if(member_array(str, drinks[items[i]]["id"])!=-1) return buy_item(DRINK,drinks[items[i]]); return notify_fail("That is not for sale here.\n"); } int cmd_read(string str) { mapping foods, drinks; string *items, *food=({}), *drink=({}); string tmp="............................"; int i,j,x,z,y; if(query_verb()!="list" && (!str || str!="menu")) return notify_fail("Read what?\n"); x=this_player()->getenv("SCREEN"); if(!x) x=75; x-=6; drinks=__Menu["drinks"]; foods=__Menu["foods"]; if(!drinks) drinks=([]); if(!foods) foods=([]); i=sizeof(items=keys(foods)); while(i--) food+=({"%^RED%^"+arrange_string(foods[items[i]]["short"]+"%^GREEN%^"+arrange_string(tmp,(x/2-9)-strlen(foods[items[i]]["short"]))+".%^ORANGE%^"+foods[items[i]]["strength"]/2+" coins",x/2-1)}); i=sizeof(items=keys(drinks)); while(i--) drink+=({"%^RED%^"+arrange_string(drinks[items[i]]["short"]+"%^GREEN%^"+arrange_string(tmp,(x/2-9)-strlen(drinks[items[i]]["short"]))+".%^ORANGE%^"+drinks[items[i]]["strength"]/2+" coins",x/2-1)}); i=sizeof(drink); j=sizeof(food); z=(j>i?j:i); y=0; tmp=""; if(j) tmp+=arrange_string(center("%^ORANGE%^Food", x/2),x/2); if(i) tmp+=arrange_string(center("%^ORANGE%^Drinks", x/2),x/2); tmp+="\n"; while(y<z) { if(j) { if(y<j) tmp+=food[y]; else if(j) tmp+=arrange_string("",x/2-1); tmp+=" "; } if(y<i) tmp+=drink[y]; tmp+="\n"; y++; } tmp+=center("%^ORANGE%^All prices are in "+__Currency+" coins.",x+2); message("read", border(tmp, "Menu", x+6), this_player()); return 1; } void reset() { object menu; ::reset(); if(!present("menu")) { menu=new(OBJECT); menu->set_short("a menu sitting on the counter"); menu->set_name("menu"); menu->set_long("The menu has today's specials on it."); menu->set_id(({"menu"})); menu->set_prevent_get("The menu is attached to the counter and can not be taken."); menu->move(this_object()); } }