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/
#include <limbs.h>

inherit "/obj/admtool/internal/base.c";
inherit CLASS_LIMB;

nomask string module_name() {
  return "body";
}

nomask string module_key() {
  return "B";
}

nomask string module_user() {
  return "[Mudlib:daemons]";
}

nomask string module_priv() {
  return "Mudlib:daemons";
}

private nomask void print_body(string cmd, string bodytype)
{
  mapping body_info = BODY_D->get_body(bodytype);
  string output = sprintf("%-20s %-15s %-15s %-15s\n", "Limb", "Health", "Parent Limb", "Type");

  output += "--------------------------------------------------------------------\n";
  if(sizeof(body_info))
    foreach ( string key, class limb val in body_info )
    {
      string *type = ({});
      if ( LIMB_VITAL &  val->flags )  type += ({ "vital" });
      if ( LIMB_WIELDING &  val->flags ) type += ({ "wielding" });
      if ( LIMB_MOBILE &  val->flags ) type += ({ "mobile" });
      if ( LIMB_SYSTEM &  val->flags ) type += ({ "system" });
      if ( LIMB_ATTACKING & val->flags ) type += ({ "attacking" });
      output += sprintf("%-20s %-15d %-15s %-15s\n",
			key,
			val->health,
			val->parent?val->parent:"None",
			implode(type, ", "));
    }
  else
    output += "NONE";
  more(output);
}

private nomask void add_body(string cmd, string bodytype)
{
  if ( sizeof( BODY_D->get_body(bodytype) ) == 0 )
    {
      BODY_D->add_body(bodytype, ([]));
      write("Added.\n");
    }
  else
    write("Already exists.\n");
}

private nomask void finish_add_limb(string bodytype, string limb, int health, string parent, int flags)
{
  BODY_D->add_limb_to_body(bodytype, limb, to_int(health), to_int(health), parent, to_int(flags));
  write("Limb added.\n");
}

private nomask void set_limb_flags(string bodytype, string limb, int health, string parent, string flags) {
  int limbflags;
  if(limbflags=to_int(flags)) {
    if(limbflags > 31) {
      input_one_arg("Limb flags cannot sum to more than 31: ",
                    (: set_limb_flags, bodytype, limb, health, parent :) );
      return;
    }
  }
  else {
    string array parts=explode(flags,",")-({});
    foreach(string part in parts)
      {
	switch(trim_spaces(lower_case(part)))
	  {
	  case "vital":
	    limbflags |= LIMB_VITAL;
	    continue;
	  case "wielding":
	    limbflags |= LIMB_WIELDING;
	    continue;
	  case "mobile":
	    limbflags |= LIMB_MOBILE;
	    continue;
	  case "system":
	    limbflags |= LIMB_SYSTEM;
	    continue;
          case "attacking":
             limbflags |= LIMB_ATTACKING;
             continue;
	  default:
	    input_one_arg("Only 'vital', 'wielding', 'mobile', 'attacking' and 'system' flags are allowed\n"
			  "Please reenter: ", 
			  (:set_limb_flags, bodytype, limb, health, parent :) );
	    return;
	  }
      }
  }
  finish_add_limb(bodytype,limb,health,parent,limbflags);
}

private nomask void set_limb_parent(string bodytype, string limb, int health, string parent) {
  
  input_one_arg("Limb Flags: ", (:set_limb_flags, bodytype, limb, health, parent :) );
}

private nomask void set_limb_health(string bodytype, string limb, string health) {
  if(!to_int(health))
    {
      input_one_arg("You must enter an integer value: ",
		    (: set_limb_health, bodytype, limb :) );
      return;
    }
  input_one_arg("Parent Limb: ", 
		(:set_limb_parent, bodytype, limb, to_int(health) :) );
}

private nomask void add_limb(string cmd, string bodytype, string limb)
{
  if ( !sizeof(BODY_D->get_body(bodytype)) )
    {
      write("That body does not exist.\n");
      return;
    }
  input_one_arg("Health: ",(: set_limb_health , bodytype, limb :) );
}

private nomask void remove_limb(string cmd, string bodytype, string limb)
{
  BODY_D->remove_limb_from_body(bodytype, limb);
  write("Removed limb.\n");
}

private nomask void remove_body(string cmd, string bodytype)
{
  BODY_D->remove_body(bodytype);
  write("Removed.\n");
}

private nomask void list_body_types() {
  string *types = sort_array(BODY_D->list_body_types(),1);

  if ( sizeof(types) == 0 ) {
    write("No body types are defined.\n");
    return;
  }
  printf("\nBODY TYPES:\n");
  foreach ( string type in types ) {
    write(capitalize(type) + "\n");
  }
}

nomask class command_info array module_commands() {
  return ({
      new(class command_info,
          key : "p",
          proto : "[bodytype]",
          args : ({ "Bodytype: " }),
          action : (: print_body, "p" :),
          desc : "print body type"),
      new(class command_info,
          key : "l",
          desc : "list body types",
          action : (: list_body_types :)),
      new(class command_info),
          new(class command_info,
          key : "a",
          proto : "[bodytype] [limb]",
          args : ({ "Bodytype: ", "Limb: " }),
          action : (: add_limb, "a" :),
          desc : "add limb to body type"),
      new(class command_info,
          key : "r",
          proto : "[bodytype] [limb]",
          args : ({ "Bodytype: ", "Limb: " }),
          action : (: remove_limb, "r" :),
          desc : "remove limb from body type"),
      new(class command_info,
          key : "A",
          proto : "[bodytype]",
          args : ({ "Bodytype: " }),
          action : (: add_body, "R" :),
          desc : "add body type"),
      new(class command_info,
          key : "R",
          proto : "[bodytype]",
          args : ({ "Bodytype: " }),
          action : (: remove_body, "R" :),
          desc : "remove body type")
      });
}