player/a/
player/b/
player/c/
player/d/
player/e/
player/f/
player/g/
player/i/
player/j/
player/k/
player/m/
player/n/
player/r/
player/s/
player/v/
player/w/
player/x/
player/z/
player_fst/e/
player_fst/f/
player_fst/h/
player_fst/i/
player_fst/j/
player_fst/n/
player_fst/o/
player_fst/p/
player_fst/player/a/
player_fst/player/b/
player_fst/player/c/
player_fst/player/d/
player_fst/player/e/
player_fst/player/f/
player_fst/player/g/
player_fst/player/j/
player_fst/player/k/
player_fst/player/m/
player_fst/player/n/
player_fst/player/r/
player_fst/player/s/
player_fst/player/v/
player_fst/player/w/
player_fst/player/x/
player_fst/player/z/
player_fst/u/
player_fst/v/
player_fst/w/
player_fst/x/
/*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 ~  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        ~
 ~  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   ~
 ~                                                                         ~
 ~  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          ~
 ~  Chastain, Michael Quan, and Mitchell Tse.                              ~
 ~                                                                         ~
 ~  Ack 2.2 improvements copyright (C) 1994 by Stephen Dooley              ~
 ~  ACK!MUD is modified Merc2.0/2.1/2.2 code (c)Stephen Zepp 1998 Ver: 4.3 ~
 ~                                                                         ~
 ~  In order to use any part of this  PA  Diku Mud, you must comply with   ~
 ~  both the original Diku license in 'license.doc' as well the Merc       ~
 ~  license in 'license.txt', and the Ack!Mud license in 'ack_license.txt'.~
 ~  In particular, you may not remove any of these copyright notices.      ~
 ~                                                                         ~
 ~           _______      _____                                            ~
 ~          /  __  /\    / ___ \       222222        PA_MUD by Amnon Kruvi ~
 ~         /______/ /   / /___\ \            2       PA_MUD is modified    ~
 ~        / _______/   / _______ \           2       Ack!Mud, v4.3         ~
 ~       /_/          /_/       \_\        2                               ~
 ~                                      2                                  ~
 ~                                     2222222                             ~
 ~                                                                         ~
 ~                                                                         ~
 ~   Years of work have been invested to create DIKU, Merc, Ack and PA.    ~
 ~   Please show your respect by following the licenses, and issuing       ~
 ~   credits where due.                                                    ~
 ~                                                                         ~
 ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-*/
 
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ack.h"
#include "config.h"

extern char * const compass_name[];

void do_hunt( CHAR_DATA *ch, char *argument )
{
	int dir;
	int x,y;
	char arg[MSL];
	char buf[MSL];

	if ( ch->in_vehicle )
	{
		send_to_char( "Not while in a vehicle!\n\r", ch );
		return;
	}

	if ( argument[0] == '\0' )
	{
		send_to_char( "Syntax: Hunt look <dir>\n\r        Hunt fire/shoot <dir>\n\r", ch );
		return;
	}
	if ( ch->z != 1 )
	{
		send_to_char( "You can only hunt on the surface.\n\r", ch );
		return;
	}
	argument = one_argument(argument,arg);

	x = ch->x;
	y = ch->y;
	if ( argument[0] == '\0' )
	{
		send_to_char( "You must specify a direction.\n\r", ch );
		return;
	}
	else if ( !str_prefix(argument,"north") )
	{
		x -= 1;
		dir = DIR_NORTH;
	}
	else if ( !str_prefix(argument,"south") )
	{
		x += 1;
		dir = DIR_SOUTH;
	}
	else if ( !str_prefix(argument,"east") )
	{
		y += 1;
		dir = DIR_EAST;
	}
	else if ( !str_prefix(argument,"west") )
	{
		y -= 1;
		dir = DIR_WEST;
	}
	else
	{
		send_to_char( "That is not a valid direction.\n\r", ch );
		return;
	}
	if ( ch->in_building && ch->in_building->exit[dir] == FALSE )
	{
		send_to_char( "You can only see a wall there.\n\r", ch );
		return;
	}
	if ( get_building(x,y) != NULL )
	{
		send_to_char( "That direction is blocked by a building.\n\r", ch );
		return;
	}
	if ( !str_prefix(arg,"look") )
	{
		if ( map_table2[x].animal[y] == -1 )
		{
			send_to_char("You can't find anything worth hunting over there.\n\r", ch );
			return;
		}
		sprintf( buf, "You can see %s over to the %s!\n\r", animal_table[map_table2[x].animal[y]].name, compass_name[dir] );
		send_to_char( buf, ch );
		return;
	}
	else if ( !str_prefix(arg,"fire") || !str_prefix(arg,"shoot") )
	{
		OBJ_DATA *weapon;
		int animal;
		int range;
                if (  ( weapon = get_eq_char( ch, WEAR_HOLD_HAND_L ) ) == NULL )
                {
                        send_to_char( "You aren't holding a weapon!\n\r", ch );
                        return;
                }
                if ( weapon->value[3] != 6 || weapon->item_type != ITEM_WEAPON )
                {
                        send_to_char( "This isn't a gun you're holding!\n\r", ch );
                        return;
                }
		if ( clip_table[weapon->value[2]].type != DAMAGE_BULLETS )
		{
			send_to_char( "You can only hunt with weapons that fire bullets.\n\r", ch );
			return;
		}
		if ( ( animal = map_table2[x].animal[y]) == -1 )
		{
			send_to_char("You can't find anything worth hunting over there.\n\r", ch );
			return;
		}
                if ( weapon->value[0] <= 0 )
                {
                        if ( IS_SET(ch->config, CONFIG_SOUND))
                                send_to_char( "!!SOUND(emptychamber V=60 L=1 P=25 T=combat U=http://fredrik.homelinux.org/Amnon/MSP/emptychamber.wav)\n\r", ch);
                        send_to_char( "You have no more ammo in that thing!\n\r", ch );
                        return;
                }
		range = weapon->value[4] + 1;
		if ( range < 5 && IS_SET(ch->config, CONFIG_SOUND))
                	send_to_char( "!!SOUND(shot1 V=40 L=1 P=25 T=combat U=http://www.assaultmud.com/sounds/shot1.wav)\n\r", ch);
	        else if ( range >= 5 && IS_SET(ch->config, CONFIG_SOUND))
        	        send_to_char( "!!SOUND(sniper V=60 L=1 P=25 T=combat U=http://fredrik.homelinux.org/Amnon/MSP/sniper.wav)\n\r", ch);
		sprintf( buf, "You fire %s to the %s!\n\r", weapon->short_descr, compass_name[dir] );
		send_to_char( buf, ch );
		sprintf( buf, "$n fires %s to the %s!", weapon->short_descr, compass_name[dir] );
		act( buf, ch, NULL, NULL, TO_ROOM );
		send_to_loc( "You hear a gunshot!\n\r", x,y,1);
		weapon->value[0]--;
		WAIT_STATE(ch,clip_table[weapon->value[2]].speed);
		if ( number_percent() < clip_table[weapon->value[2]].miss ) //Hit
		{
			char buf2[MSL];

			sprintf( buf, "You hit %s!\n\r", animal_table[animal].name );
			sprintf( buf2, "%s is hit!\n\r", animal_table[animal].name );
			ch->anim_hit++;
			if ( number_percent() < clip_table[weapon->value[2]].miss ) //Kill
			{
				ch->anim_kills++;
				sprintf( buf+strlen(buf), "%s falls down, dead.\n\r", animal_table[animal].name );
				sprintf( buf2+strlen(buf2), "%s falls down, dead.\n\r", animal_table[animal].name );
				create_animal_corpse(animal,x,y);
			}
			else //Wound
			{
				sprintf( buf+strlen(buf), "%s is wounded, and speeds away!\n\r", animal_table[animal].name );
				sprintf( buf2+strlen(buf2), "%s is wounded, and speeds away!\n\r", animal_table[animal].name );
			}
			send_to_char( buf, ch );
			send_to_loc( buf2, x,y,1 );
			map_table2[x].animal[y] = -1;
			return;
		}
		else //Miss
		{
			sprintf( buf, "The bullet misses %s!\n\r", animal_table[animal].name );
			ch->anim_miss++;
			if ( number_percent() < 50 ) // Animal runs away
			{
				sprintf( buf+strlen(buf), "%s is startled by the shot, and speeds away!\n\r", animal_table[animal].name );
				map_table2[x].animal[y] = -1;
			}
			send_to_char ( buf, ch );
			send_to_loc( buf, x, y, 1 );
			return;
		}
	}
	return;
}