tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
// potion.c
// Written by Valkyrie@TMI-2
// Cleaned up a little by Mobydick@TMI-2 on 8-17-93
// This is the basic potion object. A user can open the potion and
// drink it. If that happens, the potion takes effect after 5-15
// seconds, and the function do_effect() is called. After the effect
// time passes, the function do_wear_off() is called, and the object
// destructs itself.
// To create a potion for yourself, make an object that inherits this
// object, and just add a do_effect() and a do_wear_off() function
// which do what you want your potion to do. See /obj/strength_potion.c
// for an example.
// When the user drinks the potion, an empty vial is created and move
// to him, and the potion object goes invisible. The call_out remains
// active in the potion object: the potion object stays on the user
// until the effect wears off, and it's dested then. This isn't the
// most robust way to handle things but it is very easy and flexible,
// and it's wonderfully OO.  ;)
// A couple of bugs cleared up by Blue, 940527.  Thanks to Shredder
// for pointing them out and showing me the fixed code on his mud.
// When the potion was desting itself, it wasn't fixing the weight
// correctly.  Also moved /u/m/mobydick/vial.c into a #define.
// I'm sure we can spare the disk space to put it in /std.

#define VIAL_OBJECT "/obj/vial"

#include <config.h>
#include <mudlib.h>

inherit OBJECT;

// Drinker stores an object pointer to the person who drunk the potion.
// This is needed because this_player() isn't defined in the call_out.
object drinker ;
int closed;
int delay;
int full;

int do_effect();
int do_wear_off() ;

void create() {
  set ("id", ({ "potion", "vial" }) ) ;
  set("bulk",30);
  set("mass",30);
  closed=1;
  full=1;
// effect_time is the length of time the potion is in effect.
  if (!query("effect_time")) set ("effect_time", 200) ;
// color is the color of the potion...
    if (!query("color")) set ("color", "red") ;
}


void init() {
    add_action("open_bottle","open");
    add_action("close_bottle","close");
    add_action("close_bottle","cork");
    add_action("quaff_potion","drink");
    add_action("quaff_potion","quaff");
}

int close_bottle(string str) {
    if (str=="potion" || str == "vial"|| str==query("color") ) {
  if(closed==0) {

  closed=1;
  write("You cork the vial containing a "+query("color")+" potion.\n");
  say(this_player()->query("cap_name") +" corks a small vial.\n"); 
  return 1; 
  }
  write("The vial containing the "+query("color")+" potion is already corked.\n");
  return 1;
  }
  return 0;
}

int open_bottle(string str) {
if (!full) {return 1; }
  if (str=="potion" || str == "vial"||str==query("color") ) {
  if(closed==1) {
  closed=0;
  write("You open a vial containing a "+query("color")+" potion.\n");
  say(this_player()->query("cap_name") +" opens a small vial.\n"); 
  return 1; 
  }
  write("The vial containing the "+query("color")+" potion is already open.\n");
  return 1;
  }
  return 0;
}

int quaff_potion(string str) {

    object vial;
    int temp ;

    if (!full) {return 0; }
    if( str=="potion"||str=="vial"|| str==query("color")){
	if(closed==1) {
	    write("Perhaps you should open the potion vial first.\n");
	    return 1;
	}
    write("You quickly quaff the draught from the "+query("color")+" potion.\n");
    say(this_player()->query("cap_name") +" drinks a small vial.\n");
    seteuid(getuid()); 
    drinker = this_player() ;
    full=0; 
    delay=5+(random(15));
    call_out("potion_effect",delay);
// Don't want anyone messing with this while it's in effect.
// this isn't the Right Way to do this but it's better than
// any equally easy alternative.
    set ("id", ({ }) ) ;
    delete("short");
    move(VOID);
    delete("mass");
    delete("bulk");
    move(this_player());
// Now the mass and bulk are correctly removed from the player
// when the object is drunk.  There should probably be a place
// to put objects like this in the mud, to keep them somewhere
// safer than the player's inventory.  Maybe I'll make one.
    vial=clone_object(VIAL_OBJECT);
     vial->move(this_player()); 
    return 1;
    }
    return 0;
}


int potion_effect() {

    int temp;

    do_effect();
    call_out ("wear_off", query("effect_time")) ;
    return 1;
}

int do_effect() {    // define potion effect here
    return 1;      
}

int wear_off() {
	do_wear_off() ;
        remove();
        return 1;
}