void do_shoot( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char arg3[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
ROOM_INDEX_DATA *to_room;
OBJ_DATA *Obj;
OBJ_DATA *bow;
to_room = ch->in_room;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if (!get_skill( ch, gsn_archery ) )
{ send_to_char( "Maybe you should learn to use a bow.\n\r", ch );
return;
}
if ( arg1[0] == '\0' )
{
send_to_char( "What do you intend on shooting?\n\r", ch);
return;
}
if ( ( Obj = get_obj_carry( ch, arg1 ) ) == NULL )
{
send_to_char( "You are not carrying that item.\n\r", ch );
return;
}
if (!(IS_SET(Obj->extra_flags, ITEM_AMMO)) )
{
send_to_char( "You cannot shoot that item.\n\r", ch );
return;
}
if (IS_SET( Obj->extra_flags, ITEM_NOREMOVE ) )
{
send_to_char( "You can't let go of it!\n\r", ch );
return;
}
if ( ( bow = get_eq_char( ch, WEAR_WIELD ) ) == NULL || bow->item_type != ITEM_BOWTYPE )
{
send_to_char( "You aren't holding a ranged weapon.\n\r", ch);
return;
}
if ( arg3[0] == '\0' )
{
if ( ( victim = get_char_room( ch, arg2 ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
}
if ( number_percent() > ch->pcdata->learned[gsn_archery] + get_curr_stat(ch,STAT_DEX) / 2)
{
send_to_char( "You fumble with your bow!\n\r", ch );
return;
}
act( "{c$n shoots $p at $N!{x", ch, Obj, victim, TO_ROOM );
act( "{cYou shoot $p at $N.{x", ch, Obj, victim, TO_CHAR );
damage(ch,victim,number_range(2, 30 + 2 * ch->level),gsn_archery);
check_improve(ch,gsn_archery,TRUE,2);
obj_from_char( Obj );
obj_to_room( Obj, ch->in_room );
return;
}