/* -*- LPC -*- */ /* * $Locker: $ * $Id: glass.c,v 1.2 2002/08/28 16:46:00 carmine Exp $ * * */ /** * A nice little inheritable and constructible glass object thing. * * @author Taffyd */ inherit "/obj/vessel"; nosave string description, actual_drink, actual_glass_size; /** @ignore yes */ void create() { do_setup++; ::create(); do_setup--; set_name("glass"); set_weight(1); set_value(400); set_stuck(1); set_leak_rate(0); set_material("glass"); add_property("fragile", 200); if (!do_setup) { this_object()->setup(); } } /* setup() */ /** * This function is used to transform the glass into a new type of glass, changing the * short descriptions and adding aliases and adjectives. * * If the 'contents' parameter is 1, then the glass is automatically filled * up with a drink made from /obj/reagents/generic_liquid.ob * * @param drink The name of the drink to be created * @param glass_description The description given when there is something in the glass. * @param glass_size The size of the glass, (in words), for example "large glass", * @param amount The amount of liquid the glass should hold. * @param has_contents Fill the glass up with 'drink'. * @see /obj/bottle * @example * // Create a large glass of tomato juice * * glass = clone_object("/obj/glass"); * glass->make_glass("tomato juice", "Red, thick, delicious.\n", * "large glass", 4000, 1); * glass->move(this_object()); * * @example * inherit "/obj/glass"; * * void setup() { * // Do your own configuration of the glass, then call make_glass * * ... * make_glass("chocolate milkshake", "Yumm...", "shot glass", 100, 0); * ... * // Place your own contents in, do other funky stuff. * } */ void make_glass(string drink, string glass_description, string glass_size, int amount, int has_contents) { string *glass_adjectives; object contents; description = glass_description; actual_drink = drink; actual_glass_size = glass_size; glass_adjectives = explode( glass_size, " " )[0..<2]; set_short( glass_size ); set_long( (: this_object()->query_volume() ? description : "This is " "a dirty " + actual_glass_size + ", one that used to hold some " " " + actual_drink + ".\n" :) ); glass_adjectives = explode( glass_size, " " ); if (sizeof(glass_adjectives) > 1) add_alias(glass_adjectives[<1..]); else add_alias(glass_size); add_adjective(glass_adjectives); set_max_volume(amount); if (has_contents) { contents = clone_object("/obj/reagents/generic_liquid.ob"); contents->set_name("drink"); contents->set_short(drink); contents->set_long("This is some delicious looking " + drink + ".\n" ); contents->add_adjectives(explode(drink, " ")[0..<2]); contents->add_alias( explode( drink, " " )[ sizeof( explode( drink, " " ) ) - 1 ] ); contents->set_amount(amount); contents->move(this_object()); } } /* setup_drink() */ /** @ignore yes */ mapping int_query_static_auto_load() { return ([ "::": ::int_query_static_auto_load(), "description": description, "actual_drink" : actual_drink, "actual_glass_size" : actual_glass_size, ]); } /* int_query_static_auto_load() */ void init_static_arg(mapping map) { if (map["::"]) ::init_static_arg(map["::"]); if (!undefinedp(map["description"])) description = map["description"]; if (!undefinedp(map["actual_drink"])) actual_drink = map["actual_drink"]; if (!undefinedp(map["actual_glass_size"])) actual_glass_size = map["actual_glass_size"]; set_long((: this_object()->query_volume() ? description : "This is " "a dirty " + actual_glass_size + ", one that used to hold some " "sort of " + actual_drink + ".\n" :)); } /* init_static_arg() */ /** @ignore yes */ mixed query_static_auto_load() { if (base_name(this_object()) == "/obj/misc/glass" ) return int_query_static_auto_load(); return ([ ]); } /* query_static_auto_load() */