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; }