std::string get_denial( const item_location &loc ) const override {
        if( !p.has_enough_charges( *loc, false ) ) {
            return string_format(
                       ngettext( _( "Needs at least %d charge" ),
                                 _( "Needs at least %d charges" ), loc->ammo_required() ),
                       loc->ammo_required() );
        }

        return pickup_inventory_preset::get_denial( loc );
    }
        std::string get_denial( const item_location &loc ) const override {
            const auto &uses = loc->type->use_methods;

            if( uses.size() == 1 ) {
                const auto ret = uses.begin()->second.can_call( p, *loc, false, p.pos() );
                if( !ret.success() ) {
                    return trim_punctuation_marks( ret.str() );
                }
            }

            if( !p.has_enough_charges( *loc, false ) ) {
                return string_format(
                           ngettext( _( "Needs at least %d charge" ),
                                     _( "Needs at least %d charges" ), loc->ammo_required() ),
                           loc->ammo_required() );
            }

            return pickup_inventory_preset::get_denial( loc );
        }