I originally wrote this for the DOT code base, but believe I've got it converted to ROM well. You will need to make a game specific object, called a 'gemstone' (if you're going to have players be able to find gemstones) , an object type 'pick' and and object type 'ore'. You will also need to create a sector type 'mine'. The basic concept of this snippet is that a character who walks into a room of sector type 'mine' and holds a pick in his hands will be able to mine any ore that is located in the room. If there is no ore, the room isn't a mine, or he isn't carrying a pick, he's told why he can't mine. You can make the ore objects invisible if you'd like, so that the player has to try to mine and then finds out that there isn't any ore in that room. If ore is set to reset in a room, once the room resets, players will be able to mine again. This prevents a player from simply botting in a mine and getting a fortune within half an hour. You could also have mobiles that are miners and sometimes act out that they're mining and purge an ore item in the room. Basically, there wasn't anything out there in the public forums that was like this, so even though it is very simple (My first full snippet), it should be easy to add in features and make this activity unique for your mud. It's a starting point anyways. -Hera /* mine.cpp Upon not being able to find a snippet being publicly shared to do this, I decided to try to write something simple myself. - Hera, of Athens - The Mud athens.boue.ca port 9000 hera_of_athens@yahoo.com */ #include "include.h" void do_mine( CHAR_DATA *ch, char * ) { OBJ_DATA *obj; OBJ_DATA *gemstone; int mineevent; if(!IS_SET(ch->in_room->room2_flags, ROOM2_MINE)) { send_to_char("You are not in a mine."); return; } if (!IS_NPC(ch)) { for ( obj = ch->carrying; obj; obj = obj->next_content ) { if ( obj->item_type == ITEM_PICK && obj->wear_loc == WEAR_HOLD ) break; } if ( !obj ) { send_to_char("You are not holding a pick."); return; }else{ for ( obj = ch->in_room->contents; obj; obj = obj->next_content ) { if ( obj->item_type == ITEM_ORE ) extract_obj( obj ); break; } if ( obj == NULL ) { send_to_char( "This is not a suitable place to mine." ); return; } mineevent = dice(1,9); switch(mineevent) { case 1: send_to_char("Your pick strikes a soft ore. It is gold!\n\r"); ch->gold=ch->gold+1; break; case 2: send_to_char("Your pick strikes a soft ore. It is silver!\n\r"); ch->silver=ch->silver+50; break; case 3: send_to_char("Your pick strikes a soft ore. It is gold!\n\r"); ch->gold=ch->gold+2; break; case 4: send_to_char("Your pick strikes a soft ore. It is silver!\n\r"); ch->silver=ch->silver+25; break; case 5: send_to_char("Your pick strikes a soft ore. It is gold!\n\r"); ch->gold=ch->gold+3; break; case 6: send_to_char("Your pick strikes a soft ore. It is silver!\n\r"); ch->silver=ch->silver+75; break; case 7: send_to_char("Your pick strikes a soft stone. It contains nothing of value.\n\r"); break; case 8: send_to_char("Your pick strikes a hard stone. It contains nothing of value.\n\r"); break; case 9: if (get_obj_index(OBJ_VNUM_GEMSTONE)) { gemstone = create_object(get_obj_index(OBJ_VNUM_GEMSTONE)); send_to_char("Your pick strikes a very hard stone. It is a gem!\n\r"); obj_to_char(gemstone,ch); }else{ send_to_char( "BUG: No available gemstone object for mining - please report!" ); return; } } } } else send_to_char( "Mobiles don't need to mine." ); }