/** * @author Pinkfish * Started Mon Jun 18 20:15:58 PDT 2001 */ inherit "/std/room/furniture/commercial"; #include <money.h> #define FEE_PER_USE 40 #define BOARD_TAG "pickler" private int _revenue; private int _cost; void setup() { set_name( "pickler" ); set_short( "pickler" ); set_long( "A small wooden box with a handle on it, it has some words " "written on it.\n"); add_read_mess("Pickler, pull for results", 0, "common"); set_allowed_positions(({"sitting", "lying", "kneeling", "meditating"})); set_allowed_room_verbs((["sitting" : "sits" ])); set_weight(2000); set_value(240000); add_help_file("pickler"); set_commercial_size(2); set_commercial_type("utility"); set_shop_use_types(({ "pickler" })); _cost = 80; } int do_pickle(object* obs) { object* pickleable; string place; int amt; int here_amt; if (!is_open_for("pickler", this_player()->query_name())) { add_failed_mess("The pickler is not open.\n"); return 0; } place = query_money_place(); pickleable = filter(obs, (: !$1->query_cured() && ($1->query_property("cureable") || $1->query_decay_speed()) :)); if (!sizeof(pickleable)) { add_failed_mess("You cannot pickle any of " + query_multiple_short(obs) + ".\n"); return 0; } amt = sizeof(pickleable) * _cost; here_amt = amt - sizeof(pickleable) * FEE_PER_USE; if (here_amt < 0) { if (query_float() < -here_amt) { add_failed_mess(environment()->the_short() + " does not " "have enough money to pickle anything.\n"); return 0; } } if (this_player()->query_value_in(place) < amt) { add_failed_mess("You do not have the needed " + MONEY_HAND->money_value_string(amt, place) + " to pay for $I to be pickled.\n", pickleable); return 0; } this_player()->pay_money(MONEY_HAND->create_money_array(amt, place), place); pickleable->do_cure(); adjust_float(here_amt); _revenue += here_amt; add_succeeded_mess("$N pickle$s $I on $D.\n", pickleable); return 1; } /* do_pickle() */ int do_set_cost(string amount) { int amt; string place; place = query_money_place(); amt = MONEY_HAND->value_from_string(amount, place); if (amt <= 0) { add_failed_mess("The value " + amount + " is invalid.\n"); return 0; } _cost = amt; add_succeeded_mess("$N set$s the cost of using $D to " + MONEY_HAND->money_value_string(amt, place) + ".\n"); return 1; } /* do_set_cost() */ string query_main_status(int hint) { string place; place = query_money_place(); return the_short() + " status:\n" "\n$I$6= Fee Per Use : " + MONEY_HAND->money_value_string(FEE_PER_USE, place) + " (fixed)" "\n$I$6= Cost Per Use: " + MONEY_HAND->money_value_string(_cost, place) + "\n$I$6= Profit : " + MONEY_HAND->money_value_string(_revenue, place) + "\n"; } /* query_main_status() */ int do_stats() { string ret; ret = query_main_status(0); write(ret); add_succeeded_mess(""); return 1; } /* do_stats() */ void init() { commercial::init(); add_command("use", "<direct:object> to [pickle] <indirect:object>", (: do_pickle :)); add_command("use", "<direct:object> with <indirect:object>", (: do_pickle :)); add_command("pickle", "<indirect:object> with <direct:object>", (: do_pickle :)); add_command("pull", "[handle] [on] <direct:object> with <indirect:object>", (: do_pickle :)); if (environment()->is_allowed(this_player()->query_name())) { add_command("status", "<direct:object>", (: do_stats() :)); add_command("set", "cost <string'cost'> on <direct:object>", (: do_set_cost($4[0]) :)); } } /* init() */ /** @ignore yes */ mapping query_dynamic_auto_load() { mapping map; map = commercial::query_dynamic_auto_load(); add_auto_load_value(map, BOARD_TAG, "revenue", _revenue); add_auto_load_value(map, BOARD_TAG, "cost", _cost); return map; } /* query_dynamic_auto_load() */ /** @ignore yes */ void init_dynamic_arg(mapping map, object player) { commercial::init_dynamic_arg(map, player); _revenue = query_auto_load_value(map, BOARD_TAG, "revenue"); _cost = query_auto_load_value(map, BOARD_TAG, "cost"); } /* init_dynamic_arg() */