This snippet is a ROM virgin version of Cybernetics System designed
for the Metaverse Project. Its free to use, change, whatever, as long
as some basic credits for it is displayed somewhere.
Note that none of the cyber enhancements has any effect, but in the 
do_cyber part are there a notice about where to add the effect of each 
part, be that a hp bonus, stat increase, armor enhancement or anything 
else that are coded for your mud. The effects were removed due to the
lack of those functions in a stock rom.
Also note that the purchase of enhancements only works with silver, as
metaverse only has one coin unit. If this is a problem in your mud,
look into how the original healer works.

The command for the snippet is cyber, which displays which parts a
character has, unless he happens to be in a room with a mob that has
ACT_IS_SURGEON, in which case he will get the price list.
Parts can then be purchased as: cyber <part>.

The second version of this code is currently being designed and tested
in Metaverse, expanding the list of possible parts, working with required
parts (a character must have cybernetic arms to get cybernetic muscle
replacements), the code has been cleaned up a lot and removal of parts
will also be added. 
As usual, if you happen to find bugs in the code, oversights, lacks or
just have a good way to improve it do contact me.

The below snippet has been implimented in a virgin ROM 2.4

Snippet start:

/********************************************************************
*  	Designed by Dex for the Metaverse Project.		    *
*	Charite@mail1.stofanet.dk				    *
*	home1.stofanet.dk/charite				    *
*	No fancy copyrights, you most likely know the drill	    *
********************************************************************/

in handler.c, below the 'char *part_bit_name(int part_flags)' section, but
above 'char *weapon_bit_name(int weapon_flags)'

char *cyber_bit_name(int cyber_flags)
{
    static char buf[512];

    buf[0] = '\0';
    if (cyber_flags & CYBER_COMM		) strcat(buf, " internal comm unit\n\r");
    if (cyber_flags & CYBER_EYES		) strcat(buf, " mirror eyes\n\r");
    if (cyber_flags & CYBER_LEGS		) strcat(buf, " leg replacements\n\r");
    if (cyber_flags & CYBER_CHEST		) strcat(buf, " chest plating\n\r");
    if (cyber_flags & CYBER_REFLEXES	) strcat(buf, " argumented reflexes\n\r");
    if (cyber_flags & CYBER_MIND		) strcat(buf, " internal computer\n\r");
    if (cyber_flags & CYBER_STRENGTH	) strcat(buf, " argumented muscles\n\r");

    return ( buf[0] != '\0' ) ? buf+1 : "none";
}
---------------------------------------------------------------------------------------
in healer.c, anywhere

void do_cyber(CHAR_DATA *ch, char *argument)
{
    CHAR_DATA *mob;
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    int cost;

    /* check for surgeon */
    for ( mob = ch->in_room->people; mob; mob = mob->next_in_room )
    {
        if ( IS_NPC(mob) && IS_SET(mob->act, ACT_IS_SURGEON) )
            break;
    }

    /* if there are no surgeon, display the characters enhancements*/ 
    if ( mob == NULL )
    {
    sprintf(buf, "Cyber Parts:\n\r %s\n\r", 
	cyber_bit_name(ch->cyber));
    send_to_char(buf,ch);
	return;
    }

    one_argument(argument,arg);

	/* if there are a surgeon, give a list*/
    if (arg[0] == '\0')
    {
        /* display price list */
	act("$N says 'I have these parts in stock:'",ch,NULL,mob,TO_CHAR);
	send_to_char("  comm    : Internal Comm Unit       5000 creds\n\r",ch);
	send_to_char("  eyes    : Mirror Linses            2000 creds\n\r",ch);
	send_to_char("  legs    : Cyber Replacements      12000 creds\n\r",ch);
	send_to_char("  chest   : External Chest Plating  20000 creds\n\r",ch);
	send_to_char("  reflex  : Argumented Reflexes     18000 creds\n\r",ch);
	send_to_char("  mind    : Internal Computer       25000 creds\n\r",ch);
	send_to_char("  muscle  : Argumented Muscles      35000 creds\n\r",ch); 
	send_to_char(" Type cyber <type> to buy one, or help cyber to get more info.\n\r",ch);
	return;
    }

    /* Lets see what the character wants to have */
    if (!str_prefix(arg,"comm"))
    {
	cost  = 5000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_COMM))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_COMM );
    /* add benefit here */
    }

    else if (!str_prefix(arg,"eyes"))
    {
    cost  = 2000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_EYES))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_EYES );	
   /* add benefit here */
    }

    else if (!str_prefix(arg,"legs"))
    {
	cost = 12000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_LEGS))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_LEGS );
   /* add benefit here */
	}

    else if (!str_prefix(arg,"chest"))
    {
	cost  = 20000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_CHEST))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_CHEST );
   /* add benefit here */
    }

    else if (!str_prefix(arg,"reflex"))
    {
    cost = 18000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_REFLEXES))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_REFLEXES );
   /* add benefit here */
    }

    else if (!str_prefix(arg,"mind"))
    {
    cost = 25000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_MIND))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_MIND );
   /* add benefit here */
    }
	
    else if (!str_prefix(arg,"muscle"))
    {
	cost = 35000;
    if (cost > (ch->silver))
    {
	act("$N says 'You do not have enough creds for my services.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }
	if (IS_SET(ch->cyber,CYBER_STRENGTH))
		{
		send_to_char( "You already got that part.\n\r", ch );
		return;
		}
    SET_BIT (ch->cyber, CYBER_STRENGTH );
   /* add benefit here */
    }

    else 
    {
	act("$N says 'Type 'cyber' for a list of cybernetics.'",
	    ch,NULL,mob,TO_CHAR);
	return;
    }

    WAIT_STATE(ch,PULSE_VIOLENCE);

    deduct_cost(ch,cost);
    act("$n says 'There we go, better then then the original'.",mob,NULL,NULL,TO_ROOM); 
}
-------------------------------------------------------------------------------------------
in interp.c :

    { "cyber",		do_cyber,	POS_RESTING,	 0,  LOG_NORMAL, 1 },

in interp.h :

DECLARE_DO_FUN(	do_cyber	);
-------------------------------------------------------------------------------------------
in merc.h, after parts are defined, but before this section :
/*
 * Bits for 'affected_by'.
 * Used in #MOBILES.
 */
add:

/* defines the cybernetic parts */
#define CYBER_COMM				(A)
#define CYBER_EYES				(B)
#define CYBER_LEGS				(C)
#define CYBER_CHEST				(D)
#define CYBER_REFLEXES				(E)
#define CYBER_MIND				(F)
#define CYBER_STRENGTH				(G)


in 'struct	char_data', below the entry for form and part.

	long		cyber;


below char *	part_bit_name	args( ( int part_flags ) );

char *  cyber_bit_name  args( ( int cyber_flags ) );

In the same section as ACT_IS_HEALER:

#define ACT_IS_SURGEON		(##)   <- any available letter
---------------------------------------------------------------------------------------------
in save.c, below    fprintf( fp, "Comm %s\n",       print_flags(ch->comm));

    fprintf( fp, "cyber %s\n",       print_flags(ch->cyber));

and below  KEY("Comm",		ch->comm,		fread_flag( fp ) );

KEY("Cyber",	ch->cyber,		fread_flag( fp ) );
---------------------------------------------------------------------------------------------

in tables.c, below the 'const struct flag_type part_flags[]'  section,
but above 'const struct flag_type comm_flags[]'

const struct flag_type cyber_flags[] =
{

    {	"internal comm unit",		CYBER_COMM,		TRUE	},
    {	"mirror eyes",			CYBER_EYES,		TRUE	},
    {	"leg replacements",		CYBER_LEGS,		TRUE	},
    {	"chest plating",		CYBER_CHEST,	        TRUE	},
    {	"argumented reflexes",		CYBER_REFLEXES,	        TRUE	},
    {	"internal computer",		CYBER_MIND,		TRUE	},
    {	"argumented muscles",		CYBER_STRENGTH,	        TRUE	},
    {	NULL,			0,			0	}
};

in tables.h,  below extern	const	struct	flag_type	part_flags[];

extern	const	struct	flag_type	cyber_flags[];
---------------------------------------------------------------------------------------------
in handler.c, 
below  'if (act_flags & ACT_IS_HEALER	) strcat(buf, " healer");' add:

       if (act_flags & ACT_IS_SURGEON	) strcat(buf, " surgeon");
---------------------------------------------------------------------------------------------
A small bonus, a spell that allows a player to see the cybernetics of
another player.

void spell_sense_cyber( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *mob;
    char buf[MAX_STRING_LENGTH];

    mob = get_char_room( ch, target_name );

    if ( mob == NULL )
    {
        send_to_char( "Sense in who?\n\r", ch );
        return;
    }

    sprintf(buf, "Cyber Parts:\n\r %s\n\r", 
	cyber_bit_name(mob->cyber));
    send_to_char(buf,ch);

}