skylib_mudos_v1/
skylib_mudos_v1/bin/
skylib_mudos_v1/bin/db/
skylib_mudos_v1/mudlib/banish/a/
skylib_mudos_v1/mudlib/banish/b/
skylib_mudos_v1/mudlib/banish/c/
skylib_mudos_v1/mudlib/banish/d/
skylib_mudos_v1/mudlib/banish/e/
skylib_mudos_v1/mudlib/banish/f/
skylib_mudos_v1/mudlib/banish/g/
skylib_mudos_v1/mudlib/banish/h/
skylib_mudos_v1/mudlib/banish/j/
skylib_mudos_v1/mudlib/banish/l/
skylib_mudos_v1/mudlib/banish/m/
skylib_mudos_v1/mudlib/banish/n/
skylib_mudos_v1/mudlib/banish/o/
skylib_mudos_v1/mudlib/banish/p/
skylib_mudos_v1/mudlib/banish/r/
skylib_mudos_v1/mudlib/banish/s/
skylib_mudos_v1/mudlib/banish/t/
skylib_mudos_v1/mudlib/banish/u/
skylib_mudos_v1/mudlib/banish/w/
skylib_mudos_v1/mudlib/cmds/
skylib_mudos_v1/mudlib/cmds/admin/
skylib_mudos_v1/mudlib/cmds/guild-race/
skylib_mudos_v1/mudlib/cmds/guild-race/crafts/
skylib_mudos_v1/mudlib/cmds/guild-race/magic/
skylib_mudos_v1/mudlib/cmds/guild-race/other/
skylib_mudos_v1/mudlib/cmds/living/broken/
skylib_mudos_v1/mudlib/cmds/player/group_cmds/
skylib_mudos_v1/mudlib/d/admin/
skylib_mudos_v1/mudlib/d/admin/room/
skylib_mudos_v1/mudlib/d/admin/room/we_care/
skylib_mudos_v1/mudlib/d/admin/save/
skylib_mudos_v1/mudlib/d/admin/text/
skylib_mudos_v1/mudlib/d/learning/TinyTown/buildings/
skylib_mudos_v1/mudlib/d/learning/TinyTown/map/
skylib_mudos_v1/mudlib/d/learning/TinyTown/roads/
skylib_mudos_v1/mudlib/d/learning/chars/
skylib_mudos_v1/mudlib/d/learning/functions/
skylib_mudos_v1/mudlib/d/learning/handlers/
skylib_mudos_v1/mudlib/d/learning/help_topics/
skylib_mudos_v1/mudlib/d/learning/help_topics/npcs/
skylib_mudos_v1/mudlib/d/learning/help_topics/objects/
skylib_mudos_v1/mudlib/d/learning/help_topics/rcs_demo/
skylib_mudos_v1/mudlib/d/learning/help_topics/rcs_demo/RCS/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/crowd/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/situations/
skylib_mudos_v1/mudlib/d/learning/save/
skylib_mudos_v1/mudlib/d/learning/school/
skylib_mudos_v1/mudlib/d/learning/school/add_sc/
skylib_mudos_v1/mudlib/d/learning/school/characters/
skylib_mudos_v1/mudlib/d/learning/school/general/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/basic_commands/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/edtutor/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/unix_tutor/
skylib_mudos_v1/mudlib/d/learning/school/items/
skylib_mudos_v1/mudlib/d/learning/school/npc_school/
skylib_mudos_v1/mudlib/d/learning/school/room_school/
skylib_mudos_v1/mudlib/d/learning/school/room_school/room_basic/
skylib_mudos_v1/mudlib/d/learning/school/room_school/situations/
skylib_mudos_v1/mudlib/d/learning/school/room_school/terrain_tutor/
skylib_mudos_v1/mudlib/d/learning/text/
skylib_mudos_v1/mudlib/d/liaison/
skylib_mudos_v1/mudlib/d/mudlib/
skylib_mudos_v1/mudlib/d/mudlib/changes/
skylib_mudos_v1/mudlib/d/playtesters/
skylib_mudos_v1/mudlib/d/playtesters/effects/
skylib_mudos_v1/mudlib/d/playtesters/handlers/
skylib_mudos_v1/mudlib/d/playtesters/items/
skylib_mudos_v1/mudlib/d/sage/
skylib_mudos_v1/mudlib/doc/
skylib_mudos_v1/mudlib/doc/creator/
skylib_mudos_v1/mudlib/doc/driver/
skylib_mudos_v1/mudlib/doc/driver/efuns/arrays/
skylib_mudos_v1/mudlib/doc/driver/efuns/buffers/
skylib_mudos_v1/mudlib/doc/driver/efuns/compile/
skylib_mudos_v1/mudlib/doc/driver/efuns/filesystem/
skylib_mudos_v1/mudlib/doc/driver/efuns/floats/
skylib_mudos_v1/mudlib/doc/driver/efuns/functions/
skylib_mudos_v1/mudlib/doc/driver/efuns/general/
skylib_mudos_v1/mudlib/doc/driver/efuns/mappings/
skylib_mudos_v1/mudlib/doc/driver/efuns/mixed/
skylib_mudos_v1/mudlib/doc/driver/efuns/mudlib/
skylib_mudos_v1/mudlib/doc/driver/efuns/numbers/
skylib_mudos_v1/mudlib/doc/driver/efuns/parsing/
skylib_mudos_v1/mudlib/doc/known_command/
skylib_mudos_v1/mudlib/doc/login/
skylib_mudos_v1/mudlib/doc/lpc/basic_manual/
skylib_mudos_v1/mudlib/doc/lpc/intermediate/
skylib_mudos_v1/mudlib/doc/new/add_command/
skylib_mudos_v1/mudlib/doc/new/events/
skylib_mudos_v1/mudlib/doc/new/handlers/
skylib_mudos_v1/mudlib/doc/new/living/race/
skylib_mudos_v1/mudlib/doc/new/living/spells/
skylib_mudos_v1/mudlib/doc/new/object/
skylib_mudos_v1/mudlib/doc/new/player/
skylib_mudos_v1/mudlib/doc/new/room/guild/
skylib_mudos_v1/mudlib/doc/new/room/outside/
skylib_mudos_v1/mudlib/doc/new/room/storeroom/
skylib_mudos_v1/mudlib/doc/object/
skylib_mudos_v1/mudlib/doc/playtesters/
skylib_mudos_v1/mudlib/doc/policy/
skylib_mudos_v1/mudlib/doc/weapons/
skylib_mudos_v1/mudlib/global/
skylib_mudos_v1/mudlib/global/creator/
skylib_mudos_v1/mudlib/global/handlers/
skylib_mudos_v1/mudlib/global/virtual/setup_compiler/
skylib_mudos_v1/mudlib/include/cmds/
skylib_mudos_v1/mudlib/include/effects/
skylib_mudos_v1/mudlib/include/npc/
skylib_mudos_v1/mudlib/include/room/
skylib_mudos_v1/mudlib/include/shops/
skylib_mudos_v1/mudlib/net/daemon/
skylib_mudos_v1/mudlib/net/daemon/chars/
skylib_mudos_v1/mudlib/net/inherit/
skylib_mudos_v1/mudlib/net/obj/
skylib_mudos_v1/mudlib/obj/amulets/
skylib_mudos_v1/mudlib/obj/b_day/
skylib_mudos_v1/mudlib/obj/clothes/
skylib_mudos_v1/mudlib/obj/dwarmours/plate/
skylib_mudos_v1/mudlib/obj/dwclothes/transport/horse/
skylib_mudos_v1/mudlib/obj/dwscabbards/
skylib_mudos_v1/mudlib/obj/dwweapons/axes/
skylib_mudos_v1/mudlib/obj/dwweapons/chains/
skylib_mudos_v1/mudlib/obj/faith/symbols/
skylib_mudos_v1/mudlib/obj/fungi/
skylib_mudos_v1/mudlib/obj/gatherables/
skylib_mudos_v1/mudlib/obj/instruments/
skylib_mudos_v1/mudlib/obj/magic/
skylib_mudos_v1/mudlib/obj/media/
skylib_mudos_v1/mudlib/obj/misc/player_shop/
skylib_mudos_v1/mudlib/obj/monster/godmother/
skylib_mudos_v1/mudlib/obj/monster/transport/
skylib_mudos_v1/mudlib/obj/rings/
skylib_mudos_v1/mudlib/obj/spells/
skylib_mudos_v1/mudlib/obj/stationery/
skylib_mudos_v1/mudlib/obj/stationery/envelopes/
skylib_mudos_v1/mudlib/obj/stationery/papers/
skylib_mudos_v1/mudlib/obj/toys/
skylib_mudos_v1/mudlib/obj/vessels/
skylib_mudos_v1/mudlib/obj/weapons/swords/
skylib_mudos_v1/mudlib/save/autodoc/
skylib_mudos_v1/mudlib/save/leaflets/
skylib_mudos_v1/mudlib/save/mail/
skylib_mudos_v1/mudlib/save/new_soul/data/
skylib_mudos_v1/mudlib/save/parcels/
skylib_mudos_v1/mudlib/save/playerinfo/
skylib_mudos_v1/mudlib/save/players/d/
skylib_mudos_v1/mudlib/save/random_names/
skylib_mudos_v1/mudlib/save/random_names/data/
skylib_mudos_v1/mudlib/save/terrains/
skylib_mudos_v1/mudlib/save/terrains/tutorial_desert/
skylib_mudos_v1/mudlib/save/terrains/tutorial_grassy_field/
skylib_mudos_v1/mudlib/save/terrains/tutorial_mountain/
skylib_mudos_v1/mudlib/save/todo_lists/
skylib_mudos_v1/mudlib/secure/
skylib_mudos_v1/mudlib/secure/cmds/admin/
skylib_mudos_v1/mudlib/secure/cmds/lord/
skylib_mudos_v1/mudlib/secure/config/
skylib_mudos_v1/mudlib/secure/handlers/autodoc/
skylib_mudos_v1/mudlib/secure/handlers/intermud/
skylib_mudos_v1/mudlib/secure/include/global/
skylib_mudos_v1/mudlib/secure/save/
skylib_mudos_v1/mudlib/secure/save/handlers/
skylib_mudos_v1/mudlib/secure/std/classes/
skylib_mudos_v1/mudlib/secure/std/modules/
skylib_mudos_v1/mudlib/std/commands/
skylib_mudos_v1/mudlib/std/commands/shadows/
skylib_mudos_v1/mudlib/std/creator/
skylib_mudos_v1/mudlib/std/dom/
skylib_mudos_v1/mudlib/std/effects/
skylib_mudos_v1/mudlib/std/effects/external/
skylib_mudos_v1/mudlib/std/effects/fighting/
skylib_mudos_v1/mudlib/std/effects/priest/
skylib_mudos_v1/mudlib/std/effects/room/
skylib_mudos_v1/mudlib/std/environ/
skylib_mudos_v1/mudlib/std/guilds/
skylib_mudos_v1/mudlib/std/guilds/old/
skylib_mudos_v1/mudlib/std/languages/
skylib_mudos_v1/mudlib/std/languages/BACKUPS/
skylib_mudos_v1/mudlib/std/liquids/
skylib_mudos_v1/mudlib/std/npc/
skylib_mudos_v1/mudlib/std/npc/goals/
skylib_mudos_v1/mudlib/std/npc/goals/basic/
skylib_mudos_v1/mudlib/std/npc/goals/misc/
skylib_mudos_v1/mudlib/std/npc/plans/
skylib_mudos_v1/mudlib/std/npc/plans/basic/
skylib_mudos_v1/mudlib/std/npc/types/
skylib_mudos_v1/mudlib/std/npc/types/helper/
skylib_mudos_v1/mudlib/std/npcs/
skylib_mudos_v1/mudlib/std/outsides/
skylib_mudos_v1/mudlib/std/races/shadows/
skylib_mudos_v1/mudlib/std/room/basic/topography/
skylib_mudos_v1/mudlib/std/room/controller/
skylib_mudos_v1/mudlib/std/room/inherit/topography/
skylib_mudos_v1/mudlib/std/room/topography/area/
skylib_mudos_v1/mudlib/std/room/topography/iroom/
skylib_mudos_v1/mudlib/std/room/topography/milestone/
skylib_mudos_v1/mudlib/std/shadows/curses/
skylib_mudos_v1/mudlib/std/shadows/disease/
skylib_mudos_v1/mudlib/std/shadows/fighting/
skylib_mudos_v1/mudlib/std/shadows/healing/
skylib_mudos_v1/mudlib/std/shadows/magic/
skylib_mudos_v1/mudlib/std/shadows/poison/
skylib_mudos_v1/mudlib/std/shadows/rituals/
skylib_mudos_v1/mudlib/std/shadows/room/
skylib_mudos_v1/mudlib/std/shops/controllers/
skylib_mudos_v1/mudlib/std/shops/objs/
skylib_mudos_v1/mudlib/std/shops/player_shop/
skylib_mudos_v1/mudlib/std/socket/
skylib_mudos_v1/mudlib/std/soul/
skylib_mudos_v1/mudlib/std/soul/d/
skylib_mudos_v1/mudlib/std/soul/e/
skylib_mudos_v1/mudlib/std/soul/i/
skylib_mudos_v1/mudlib/std/soul/j/
skylib_mudos_v1/mudlib/std/soul/k/
skylib_mudos_v1/mudlib/std/soul/l/
skylib_mudos_v1/mudlib/std/soul/n/
skylib_mudos_v1/mudlib/std/soul/o/
skylib_mudos_v1/mudlib/std/soul/q/
skylib_mudos_v1/mudlib/std/soul/u/
skylib_mudos_v1/mudlib/std/soul/v/
skylib_mudos_v1/mudlib/std/soul/y/
skylib_mudos_v1/mudlib/std/soul/z/
skylib_mudos_v1/mudlib/std/stationery/
skylib_mudos_v1/mudlib/w/
skylib_mudos_v1/mudlib/w/default/
skylib_mudos_v1/mudlib/w/default/armour/
skylib_mudos_v1/mudlib/w/default/clothes/
skylib_mudos_v1/mudlib/w/default/item/
skylib_mudos_v1/mudlib/w/default/npc/
skylib_mudos_v1/mudlib/w/default/room/
skylib_mudos_v1/mudlib/w/default/weapon/
skylib_mudos_v1/mudlib/www/
skylib_mudos_v1/mudlib/www/download/
skylib_mudos_v1/mudlib/www/java/
skylib_mudos_v1/mudlib/www/secure/
skylib_mudos_v1/mudlib/www/secure/lpc/advanced/
skylib_mudos_v1/mudlib/www/secure/lpc/intermediate/
skylib_mudos_v1/v22.2b14-DSv10/
skylib_mudos_v1/v22.2b14-DSv10/ChangeLog.old/
skylib_mudos_v1/v22.2b14-DSv10/Win32/
skylib_mudos_v1/v22.2b14-DSv10/compat/
skylib_mudos_v1/v22.2b14-DSv10/compat/simuls/
skylib_mudos_v1/v22.2b14-DSv10/include/
skylib_mudos_v1/v22.2b14-DSv10/mudlib/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/clone/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/command/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/data/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/etc/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/include/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/inherit/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/inherit/master/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/log/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/compiler/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/efuns/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/operators/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/u/
skylib_mudos_v1/v22.2b14-DSv10/tmp/
skylib_mudos_v1/v22.2b14-DSv10/windows/
#include <tasks.h>
// #include "/d/playtesters/effects/splints.h"

#define COST 50     /* placeholder gp cost for now */
#define SPLINT_OB "/d/guilds/witches/items/splint"

/* Which skills do we use? */

#define HEALING     "magic.methods.physical.healing"
#define LEV_REQ     25
#define HEAL_DIF    120
#define WHIT        "crafts.carpentry.whittling"
#define WHIT_DIF    50
#define MAX_TIME    3500  /* minus 120*6 = aprox 45 minutes */
#define MIN_TIME    600  /* 10 minutes */

#define SPLINT_EFF "dummy" // Doesn't exist.

inherit COMMAND_BASE;

varargs int cmd( object patient, string limb, string which, object
    *withes, object *bandages ) {

  int *bnums;              /* break effect numbers */
  string whose;            /* for tidy messages */
  object withe, bandage;   /* individual wotsits */
  string *breaks = ({ });  /* args of the break effects */
  object splint;           /* the splint item */
  int time;                /* time until break heals */
  object *inv;             /* patient's inventory */

  /* Some playtesting checks - these will come out when it's in play */
  
  if( !PLAYTESTERS_H->query_tester( this_player() ) ) {
    add_failed_mess( "Here now, where'd you learn that?  "
        "You're not a playtester!\n" );
    return 0;
  }

  if( !PLAYTESTERS_H->query_tester( patient ) &&
      !creatorp(TP) ) {
    add_failed_mess( patient->query_short() + " is not a playtester.\n" );
    return 0;
  }

  if( patient == this_player() ) 
    whose = "your";

  else 
    whose = patient->query_short() + "'s";

  this_player()->remove_hide_invis( "hiding" );

  /* Has he really got a broken limb? */

  /* Check for only the pt version of the break effects ...
   *
  bnums = patient->effects_matching( "body.damage." + limb + 
          ".broken" );
   *
   * Use the above line once the effects are out of pt. */

  bnums = patient->effects_matching( "body.damage." + limb +
          ".broken.pt" );

  if( !sizeof( bnums ) ) {
    add_failed_mess( sprintf( "%s %s doesn't need splinting.\n",
      capitalize( whose ), limb ) );
    return 0;
  }

  /* Did I specify which arm or leg I want to splint? */

  foreach( int i in bnums )
    breaks += ({ patient->arg_of( i ) });

  if( !which ) 
    which = breaks[ random( sizeof( breaks ) ) ];

  if( member_array( which, breaks ) == -1 ) {
    add_failed_mess( sprintf( "%s %s %s doesn't need splinting.\n",
      capitalize( whose ), which, limb ) );
    return 0;
  }

  /* I cannot bind a leg if my patient has things on his leg. */

  if( limb == "leg" ) {
    inv = all_inventory( patient );

    foreach( object item in inv ) 
      if( item->query_worn_by() && !item->id("splint") && 
          member_array( item->query_type(), 
          ({ "trousers", "garter" }) ) != -1 ) {
        add_failed_mess( sprintf( "You can't splint %s leg with %s "
            "in the way.\n", whose, patient == this_player() ? 
            item->poss_short() : patient->query_possessive() + " " + 
            item->query_short() ) );
        return 0;
      }
  }

 /* I cannot bind an arm if my patient has things on his arm. */

  if( limb == "arm" ) {
    inv = all_inventory( patient );

    foreach( object item in inv ) 
      if( item->query_worn_by() && !item->id("splint") && 
          member_array( item->query_type(), 
          ({ "shirt", "armband" }) ) != -1 ) {
        add_failed_mess( sprintf( "You can't splint %s arm with %s "
            "in the way.\n", whose, patient == this_player() ?
            item->poss_short() : patient->query_possessive() + " " + 
            item->query_short() ) );
        return 0;
      }
  }

  /* Did I specify which things to use for making the splint? */

  if( undefinedp( withes ) ) {
    withes = match_objects_for_existence( "withes", ({this_player(), environment(this_player()) }));
  }

  if( undefinedp( bandages ) ) {
    bandages = match_objects_for_existence( "bandages", ({this_player(), environment(this_player()) }));
  }

  /* Have I got enough withes and bandages? */
  
  if( limb == "leg" ) {    /* legs require 8 withes and 4 bandages */

    if( sizeof( withes ) < 8 ) {
      add_failed_mess( "You haven't got enough withes to fashion "
          "a splint out of.\n" );
      return 0;
    }
    withes = withes[0..7];
    if( sizeof( bandages ) < 4 ) {
      add_failed_mess( sprintf( "You haven't got enough bandages "
          "to bind the splints to %s %s.\n", whose, limb ) );
      return 0;
    }
    bandages = bandages[0..3]; 
  }

  if( limb == "arm" ) {    /* arms require 5 withes and 3 bandages */

    if( sizeof( withes ) < 5 ) {
      add_failed_mess( "You haven't got enough withes to fashion "
          "a splint out of.\n" );
      return 0;
    }
    withes = withes[0..4];
    if( sizeof( bandages ) < 3 ) {
      add_failed_mess( sprintf( "You haven't got enough bandages "
          "to bind the splints to %s %s.\n", whose, limb ) );
      return 0;
    }
    bandages = bandages[0..2]; 
  }

  /* Have I got enough "magic" gp? */

  if( this_player()->query_specific_gp( "magic" ) < COST ) {
    add_failed_mess( sprintf( "You try to bind %s %s %s but can't "
        "concentrate well enough.\n", whose, which, limb ) );
    return 0;
  }
  else this_player()->adjust_gp( -COST );

  /* I have a patient, the materials and the ability.  Now I will 
     shape splints and bind them on with bandages */

  /* 1) Shape splints: Whittling check (chance to tm).  Some withes
        may be consumed regardless of whether the command fails or
        succeeds. */

  foreach( withe in withes ) 
      if( !random( 4 ) ) withe->move( "/room/rubbish" );

  switch( TASKER->perform_task( this_player(), WHIT, WHIT_DIF, 
      TM_COMMAND ) ) {

    case FAIL :   
      tell_room( environment( this_player() ), 
          this_player()->the_short() + " attempts to fashion some "
          "willow withes into a useable splint but makes a mess of "
          "the job.\n", ({ this_player() }) );
      add_failed_mess( "You attempt to fashion the withes into a "
          "useable splint but make a mess of the job.\n" );  
      return 0;

    case AWARD :   
      write( "%^YELLOW%^You find yourself more able to "
          "whittle.%^RESET%^\n" );

    case SUCCEED : 
      write( "You fashion the withes into a useable splint.\n" );

  }

  /* 2) bind the splints to his leg with bandages - healing
        check - chance to tm */

  patient->remove_hide_invis( "hiding" );
  patient->set_position( "sitting" );

  switch( TASKER->perform_task( this_player(), HEALING, HEAL_DIF, 
      TM_COMMAND ) ) {

    case FAIL :   
      tell_room( environment( this_player() ), 
          this_player()->the_short() + " attempts to splint and bind "
          + ( patient == this_player() ? patient->query_possessive() : 
          patient->the_short() + "'s" ) + " " + limb + " but makes a "
          "mess of the job.\n", ({ this_player(), patient }) );

      if( patient != this_player() )
        tell_object( patient, this_player()->the_short() + 
            " attempts to splint and bind your " + limb + 
            " but makes a mess of the job.\n" );
      add_failed_mess( sprintf( "You attempt to splint and bind "
          "%s %s but make a mess of the job.\n", whose, limb ) );
      return 0;

    case AWARD :   
      write( "%^YELLOW%^You manage to grasp the principles of "
          "practical healing more firmly.%^RESET%^\n" );

    case SUCCEED : 
      write( sprintf( "You bind the splints tightly to %s %s with "
          "the bandages.\n", whose, limb ) );
  }

  /* Get rid of all the remaining withes and bandages */

  foreach( withe in withes ) 
    withe->move( "/room/rubbish" );

  foreach( bandage in bandages ) 
    bandage->move( "/room/rubbish" );

  /* Remove patient's broken limb and replace it with a splinted
     one.  */

  /* subtract 6 * healing bonus from MAX_TIME - this is how many 
     seconds until break heals.  If this is less than MIN_TIME,
     use MIN_TIME instead */

  time = this_player()->query_skill_bonus( HEALING ) * 6;
  time = MAX_TIME - time;
  time = time < MIN_TIME ? MIN_TIME : time;

  patient->add_effect( SPLINT_EFF + limb, ({ which, time, 0 }) );
  splint = clone_object( SPLINT_OB );
  splint->set_limb( ({ which, limb }) );
  splint->move( patient );
  patient->wear_armour( splint );

  /* This works because there will only ever be one effect 
   * per limb */

  foreach( int i in bnums ) 
    if( patient->arg_of( i ) == which ) 
      patient->delete_effect( i );

  write( sprintf( "You splint %s %s %s.\n", whose, which, limb ) );

  if( patient != this_player() )
    tell_object( patient, sprintf( "%s fashions a splint out of "
        "willow withes and binds it to your %s %s with bandages.\n", 
        this_player()->the_short(), which, limb ) );

  tell_room( environment( this_player() ), sprintf( "%s fashions "
      "a splint out of willow withes and binds it to %s %s %s with "
      "bandages.\n", this_player()->the_short(), patient == 
      this_player() ? this_player()->query_possessive() : 
      patient->the_short() + "'s", which, limb ), 
      ({ this_player(), patient }) );
  return 1;
}

mixed *query_patterns() {
  return ({
    "my {leg|arm}", 
        (: cmd( $( this_player() ), $4[0] ) :),
    "my <string'side'> {leg|arm}", 
        (: cmd( $( this_player() ), $4[1], $4[0] ) :),
    "my {leg|arm} with <indirect:object:me-here'withes'> and "
        "<indirect:object:me-here'bandages'>",
        (: cmd ( $( this_player() ), $4[0], 0, $1[0], $1[1] ) :),
    "my <string'side'> {leg|arm} with <indirect:object:me-here'withes'> "
        "and <indirect:object:me-here'bandages'>",
        (: cmd( $( this_player() ), $4[1], $4[0], $1[0], $1[1] ) :),
    "<indirect:living:here'name'> {leg|arm}",
        (: cmd( $1[0], $4[1] ) :),
    "<indirect:living:here'name'> <string'side'> {leg|arm}",
        (: cmd( $1[0], $4[2], $4[1] ) :),
    "<indirect:living:here'name'> {leg|arm} with <indirect:object:me-here"
        "'withes'> and <indirect:object:me-here'bandages'>",
        (: cmd( $1[0][0], $4[1], 0, $1[1], $1[2] ) :),
    "<indirect:living:here'name'> <string'side'> {leg|arm} with "
        "<indirect:object:me-here'withes'> and <indirect:object:me-here"
        "'bandages'>", 
        (: cmd( $1[0][0], $4[2], $4[1], $1[1], $1[2] ) :)
  });
}