Fishing/
/*fish.cpp
Upon not being able to find a snippet being publicly shared to do this,
	I decided to try to write something simple myself.
	Feel free to use as you see fit and alter as needed. 
All of the rom/diku/dot/merc/oblivian anyhthing you can think of type licenses 
	forbidding profit made from this code apply.  
Please just keep this tag in the file if you're going to redistribute.
- Hera, of Athens - The Mud athens.boue.ca port 9000 
  	hera_of_athens@yahoo.com
*/
 
#include "include.h"
void fish_start( char_data *ch );

void do_fish( char_data *ch, char * )
{
   	OBJ_DATA *obj;
   	int chance;

   	chance = get_skill( ch, gsn_fish )+10;

   	if ( chance < 11)
	{
   		ch->println("You couldn't catch a cold, much less a fish.");
   		return;
   	}


	// make it easier for newbies
   	if (ch->level<30)
   		chance+=ch->level;

	if (chance<number_range(0,105))
	{
		ch->wrapln("You attempt to fish but the fish aren't biting.");
		return;
	}

   	if ( ch->in_room->sector_type == SECT_WATER_SWIM
   	|| ch->in_room->sector_type == SECT_WATER_NOSWIM)
	{

	 	if (!IS_NPC(ch)) 
 		{ 
			for ( obj = ch->carrying; obj; obj = obj->next_content )
    			{
        			if ( obj->item_type == ITEM_POLE && obj->wear_loc == WEAR_HOLD )
            			break;
    			}
    
			if ( !obj )
    			{
        			ch->println("`cYou are not holding a fishing pole.`x");
        			return;
    			} 
		}else{
			ch->println( "Mobiles don't need to fish." );
			return;
  		}

			fish_start( ch );
			return;
		
   	}
}

void fish_start( char_data *ch )
{
	OBJ_INDEX_DATA		*pObjIndex;
	OBJ_DATA		*pObj;
   	OBJ_DATA 		*bait;
   	int fishevent;
 	bool			foundbait  = false;

	if (!IS_NPC(ch)) 
 	{ 

   		for ( bait = ch->carrying; bait; bait = bait->next_content )
    		{

        		if ( bait->item_type == ITEM_BAIT )
			{	
				foundbait = true;
            			break;
			}
    		}

   
   		if ( !foundbait )
    		{
        	ch->println("`cYou need bait!`x");
        	return;
    		} 
	}

	if (( pObjIndex = get_obj_index( OBJ_VNUM_FISHCATCH )) == NULL ) {
		ch->println("catch item non-existant, please report this with a note to admin.");
		return;
	}
   
	pObj = create_object( pObjIndex);
	
   	//  Free up old object names and descriptions
		
   	free_string( pObj->description );
   	free_string( pObj->name );
   	free_string( pObj->short_descr );

   	//  Change food desc according to random luck

   	fishevent = dice(1,6); 
   	switch(fishevent) 
	{
		case 1:
			ch->println("`cYou get a nibble but the fish leaves without taking the bait.`x\n\r"); 
			break;
    					
		case 2:
			ch->println("`cA fish steals your bait without getting hooked!`x\n\r"); 
			extract_obj( bait );
			break;    
	
		case 3:
			pObj->description = str_dup( "A freshly caught tuna fish lies here." );
			pObj->short_descr = str_dup( "a tuna fish" );
			pObj->name		  = str_dup( "tuna fish" );
			pObj->cost = 300;
			extract_obj( bait );
   			//  Send the message to the world!
   			obj_to_char( pObj, ch );
      			ch->println("You caught something!");
   			act( "$n caught a fish!", ch, NULL, NULL, TO_ROOM );
 		   	check_improve( ch, gsn_fish, true, 2 );
			break;
		case 4:
			pObj->description = str_dup( "A freshly caught large mouth bass lies here." );
			pObj->short_descr = str_dup( "a large mouth bass" );
			pObj->name		  = str_dup( "bass" );
			pObj->cost = 200;
			extract_obj( bait );
    			//  Send the message to the world!
   			obj_to_char( pObj, ch );
      			ch->println("You caught something!");
   			act( "$n caught a fish!", ch, NULL, NULL, TO_ROOM );
 		   	check_improve( ch, gsn_fish, true, 2 );
			break;
		case 5:
			pObj->description = str_dup( "A freshly caught minnow lies here." );
			pObj->short_descr = str_dup( "a minnow" );
			pObj->name		  = str_dup( "minnow" );
			pObj->cost = 50;
			extract_obj( bait );
   			//  Send the message to the world!
   			obj_to_char( pObj, ch );
      			ch->println("You caught something!");
   			act( "$n caught a fish!", ch, NULL, NULL, TO_ROOM );
 		   	check_improve( ch, gsn_fish, true, 2 );
			break;
 		case 6:
			pObj->description = str_dup( "A freshly caught bullhead lies here." );
			pObj->short_descr = str_dup( "A bullhead" );
			pObj->name		  = str_dup( "bullhead" );
			pObj->cost = 100;
			extract_obj( bait );
			break;
   			//  Send the message to the world!
   			obj_to_char( pObj, ch );
      			ch->println("You caught something!");
   			act( "$n caught a fish!", ch, NULL, NULL, TO_ROOM );
 		   	check_improve( ch, gsn_fish, true, 2 );
			break;

	}


}