From: Paul Shinn <wombat@WPI.EDU>
Subject:  Embalmer

buy corpses for 1-2gp and make 1000gp trophy bags.  Because of how Merc
is set up, you also need to change the "level" of corpses to level 1
instead of level 0, shopkeepers don't buy level 0 stuff.
 
    Add this to the spell table in CONST.C
 
         "make bag",     { 37, 37, 37, 37 },
         spell_make_bag, TAR_OBJ_INV,            POS_STANDING,
         NULL,                   SLOT(50),       100,    24,
         "",                     "!Make Bag!"*/
 
    Put this in MAGIC.C
 
void spell_make_bag( int sn, int level, CHAR_DATA *ch, void *vo )
{
     static char *headers[] = { "corpse of the ", "corpse of The ",
                                "corpse of an ", "corpse of An ",
                                "corpse of a ", "corpse of A ",
                                "corpse of " }; // (This one must be last)
     OBJ_DATA *obj = (OBJ_DATA *) vo;
     char buf[MAX_STRING_LENGTH];
     int i;
 
     if ( obj->item_type != ITEM_CORPSE_NPC && obj->item_type != ITEM_CORPSE_PC)
         return;
 
     for (i = 0; i < 7; i++)
        {
        int len = strlen(headers[i]);
        if ( memcmp(obj->short_descr, headers[i], len) == 0 )
           {
           sprintf( buf, "bag %s", obj->short_descr+len );
           free_string( obj->name );
           obj->name = str_dup(buf);
 
           sprintf( buf, "A bag of fine %s hide catches your eye.  ",
              obj->short_descr+len );
           free_string( obj->description );
           obj->description = str_dup( buf );
 
           sprintf( buf, "bag made from %s hide", obj->short_descr+len );
           free_string( obj->short_descr );
           obj->short_descr = str_dup( buf );
 
           break;
           }
        }
 
     obj->item_type = ITEM_CONTAINER;
     obj->wear_flags = ITEM_HOLD|ITEM_TAKE;
     obj->timer = 0;
     obj->weight = 5;
     obj->level = level/3;
     obj->cost = level * 50;
     obj->value[0] = level * 10;                 /* Weight capacity */
     obj->value[1] = 1;                          /* Closeable */
     obj->value[2] = -1;                         /* No key needed */
     obj->pIndexData = get_obj_index( 5660 );    /* So it's not a corpse */
 
     act( "Your new $p looks pretty snazzy.", ch, obj, NULL, TO_CHAR );
     act( "$n's new $p looks pretty snazzy.", ch, obj, NULL, TO_ROOM );
 
     send_to_char( "Ok.\n\r", ch );
     return;
}
 
/*
 
  Put this in a zone.  If you change the number change it in the code
  as well.
 
#5660
bag~
a generic bag~
A generic bag generates the VNUM for the 'make purse' spell.  ~
~
15 0 1
50 0 0 0
5 50 0
*/

Put this in SPECIAL.C.  Remember to add this to spec_lookup() as well.
 
bool spec_taxidermist( CHAR_DATA *ch )
{
    OBJ_DATA *inv;
    int sn;

    if ( ch->position != POS_STANDING )
        return FALSE;

    if ( ch->pIndexData->pShop == 0 ||
         time_info.hour < ch->pIndexData->pShop->open_hour ||
         time_info.hour > ch->pIndexData->pShop->close_hour )
       return FALSE;

    for ( inv = ch->carrying; inv != NULL; inv = inv->next_content )
    {
    if (inv->item_type == ITEM_CORPSE_NPC)
       {
       if ( ( sn = skill_lookup( "make bag" ) ) >= 0 )
          (*skill_table[sn].spell_fun) ( sn, ch->level, ch, inv );
       return TRUE;
       }
    else if (inv->wear_loc == WEAR_NONE && number_percent() < 5)
       {
       act( "$n suggests you buy $p.", ch, inv, NULL, TO_ROOM );
       return TRUE;
       }
    }

    return FALSE;
}

