lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
/* Do not remove the headers from this file! see /USAGE for more info. */
// Modified by Uae.  May 23rd 1997.
// Functionality added to deal with renewable drink 
// sources like pools.  If the source has "<fluid>_source"
// in its id, it will be considered to be a source of 
// that fluid.  Drink_it() here will call drink_from() in the
// fluid source.

private int drinks_per_unit = 2;
private int drinks_current_unit;
private int num_drinks = 2;

private mixed taste_action = "Your thirst is quenched.";
private mixed drink_action = "$N $vdrink some $o.";
private mixed last_drink_action = "$N $vfinish off the $o.";

object drink_source;  //

string the_short();
string query_primary_id();
int query_size();
void set_size( int x );
void set_quantity( int x );
void remove();

//:FUNCTION set_taste_action
//set_taste_action( mixed x )
//Put this function in the drinkable
//fluid.  'x' is evaluated when the
//fluid is drunk.  By default it is
//a my_action, but it could be a
//function or an array of mixed.
//To have no taste action, pass a
//zero.
void set_taste_action( mixed x ){
  taste_action = x;
}

mixed get_taste_action(){
  return taste_action;
}

//:FUNCTION set_drink_action
//set_drink_action( mixed x )
//Put this function in the drinkable
//fluid.  'x' is evaluated when the
//fluid is drunk.  By default it is
//a simple_action, but it could be a
//function or an array of mixed.
//To have no drink action, pass a
//zero.
void set_drink_action(mixed action) {
    drink_action = action;
}

//:FUNCTION set_last_drink_action
//Just like set_drink_action, but only is used for the last drink.
void set_last_drink_action(mixed action) {
    last_drink_action = action;
}

//:FUNCTION set_num_drinks
//set_num_drinks( int x )
//This sets the number of drinks per 1 size-unit.
//The default is 3;
void set_num_drinks(int x) {
    drinks_per_unit = x;
}


//Not necessary, but kept for possible special effects.
//Actually, this doesn't appear to be used at all.
void set_drink_source( string source ){
drink_source = load_object(source);
}


int calculate_num_drinks(){
  num_drinks = query_size() * drinks_per_unit + drinks_current_unit;
  return num_drinks;
}


void reduce_drink_number(){

  drinks_current_unit --;
  if (!drinks_current_unit)
	{
	drinks_current_unit = drinks_per_unit;
	set_size( query_size() - 1 );
	set_quantity( query_size() );
	};
  calculate_num_drinks();
  if ( !num_drinks ) remove();

}


void drink_it(){// This is called by the verb.

	mixed action;
	object source;

// Are we in the presence of the source?
	source = present( query_primary_id() + "_source" );

    if ( source ) if ( source -> id( "drink_source" ) )
	{ source -> drink_from_it() ;
	return;}
    
    if ( num_drinks == 1 && last_drink_action)
	action = last_drink_action;
    else
	action = drink_action;

    if (arrayp( action ) ) action = choice( action );

    if (functionp(action))
	evaluate(action);
    else
	this_body() -> simple_action(action, this_object() );

    if (taste_action && num_drinks != 1)
	{
	action = taste_action;
        if (arrayp( action ) ) action = choice( action );
	if (functionp(action) ) evaluate(action);
	else this_body() -> my_action( action, this_object() );
	};
	
    reduce_drink_number();
}

//:FUNCTION query_num_drinks
// returns the number of drinks left in the drink.
int query_num_drinks(){
  calculate_num_drinks();
  return num_drinks;
}

mixed direct_drink_obj() {
    if (environment(this_object()) == environment( this_body() ) )
	return 0;
    if (environment(environment(this_object())) != this_body() ) return 0;
    calculate_num_drinks();
    if (!num_drinks)
	return capitalize(the_short()) + " is gone.\n";

    return 1;
}

mixed direct_drink_obj_from_obj(){
   return direct_drink_obj();
}