");$( "#content-area" ).prepend($addFlag);} }// This function handles animation for the new ToC, which currently includes:// 1. Fading the ToC in and out to prevent it from covering up the Info section in the footer ; function handleTocAnim( $tocBox, winHeight, docHeight, scrollTop ) { // We're going to check if we're near the bottom for an animation to hide the ToC so we don't // cover up the Info section in the footer var bottomBuffer = 384; //px var isNearBottom = scrollTop + winHeight > docHeight - bottomBuffer; // Fetch the value for the animFlag key var tocAnimating = $tocBox.data( "animFlag" ); // If ToC has been hidden by the fade anim, display will be 'none' when // finished animating var tocHidden = $tocBox.css( 'display' ) === 'none'; if( isNearBottom ) { // If we're near the bottom, and the ToC is not animating // and not hidden, then hide it if( !tocAnimating && !tocHidden ) { $tocBox.data( "animFlag", true ) $tocBox.fadeOut( 400, function() { $tocBox.data( "animFlag", false ); }); } } else { // If we're not near the bottom, and the ToC is not animating // and hidden, then unhide it if( !tocAnimating && tocHidden ) { $tocBox.data( "animFlag", true ); $tocBox.fadeIn( 400, function() { $tocBox.data( "animFlag", false ); }); } } }// Calculate the available height for the ToC Box ; function calcAvailableHeight( height ) {return height * 80.0 / 100.0;}// This function resizes specific page elements, depending on // window size and whether the ToC is present, to keep things // consistent.// The boolean debug arg enables verbose logging. ; function handleReflow( $, winOuterWidth, winInnerHeight, maxMobileWidth, debug ) {if( debug ) {console.log( "Checking if page layout should be reflowed..." );}// We want to reflow the layout whether or not we have the TOC, // with the hasTOC bool as a flag for if it exists on the pagevar tocFlag = $("#content-side");var hasToC = true; // FORCE HAS TOC, DEPLOYING SITEWIDE -supersoup// Check number of H2 elements. If <= 3, early returnvar numH2 = $("h2");if( numH2.length <= 3 ) {return;}// Cache varsvar $mainContainer = $("#main-content");var $logoContainer = $(".hgg-logo-space");var $navContainer = $(".hgg-menu-icon");var $contentArea = $("#content-area");// Null-check variablesvar anyNull = $mainContainer.length && $logoContainer.length && $navContainer.length && $contentArea.length;if( !($mainContainer.length) && debug ) {console.log( "$mainContainer null in reflowLayout..." );}if( !($logoContainer.length) && debug ) {console.log( "$logoContainer null in reflowLayout..." );}if( !($navContainer.length) && debug ) {console.log( "$navContainer null in reflowLayout...")}if( !($contentArea.length) && debug ) {console.log( "$contentArea null in reflowLayout..." );} if( debug ) {console.log( "anyNull: " + anyNull );console.log( "hasTOC: " + hasToC );}if( hasToC ) {// The previous process for initializing offsetTopForView didn't play well when// refreshing the page while partially down the post, switching to pulling the // header height for consistency -supersoupvar offsetTopForView = $("header").height() ; //pxif (offsetTopForView === undefined || offsetTopForView < 0) {offsetTopForView = 0;}var $toc = $( ".toc-box" );if( $toc.length > 0 ) {var availableHeight = calcAvailableHeight( winInnerHeight - offsetTopForView );if( debug ) {console.log( "window.innerHeight: " + winInnerHeight );console.log( "availableHeight: " + availableHeight );console.log( "toc[0].scrollHeight: " + $toc[0].scrollHeight );console.log( "toc.height(): " + $toc.height() );}if( $toc.outerHeight() > availableHeight ) {$toc.css( 'height', availableHeight );if( debug ) {console.log( "Setting ToC height to ", availableHeight );}} else {var newHeight = availableHeight < $toc[0].scrollHeight ? availableHeight : $toc[0].scrollHeight;$toc.css( 'height', newHeight );if( debug ) {console.log( "Setting ToC height to ", newHeight );}}/*// Update largest sizevar maxSize = $toc.data( "maxSize" );var outerHeight = $toc.outerHeight;if( maxSize === 0 || maxSize == undefined || maxSize == NaN || maxSize < cssHeight ) {$toc.data( "maxSize", $toc.outerHeight);console.log( "maxSize is now " + $toc.outerHeight );}*/if( $toc.height() < $toc[0].scrollHeight ) {$toc.css( 'overflow-x', 'hidden' );$toc.css( 'overflow-y', 'auto' );}else {$toc.css( 'overflow-x', 'hidden' );$toc.css( 'overflow-y', 'none' );}}if( winOuterWidth >= 1600 ) {$mainContainer.css( "margin-left", "15.95rem" );$logoContainer.css( "margin-left", "-6.1rem" );$navContainer.css( "margin-right", "-8.0rem" );} else if( winOuterWidth < 1600 && winOuterWidth > maxMobileWidth ) {$mainContainer.css( "margin-left", "14.8rem" );$logoContainer.css( "margin-left", "-3.8rem" );$navContainer.css( "margin-right", "-3.8rem" );} else if( winOuterWidth <= maxMobileWidth ) {// Clear applied CSS$mainContainer.css( "margin-left", "0" );$logoContainer.css( "margin-left", "0" );$navContainer.css( "margin-right", "0" );} else {if( debug ) {console.log( "Unhandled window width in reflowLayout() - With ToC" );}}} else {if( winOuterWidth >= 1600 ) {// Don't do anything yet on non-ToC pages} else if( winOuterWidth < 1600 && winOuterWidth > maxMobileWidth ) {$contentArea.css( "margin-left", "0");} else if( winOuterWidth <= maxMobileWidth ) {// Don't do anything yet on non-ToC pages} else {if( debug ) {console.log( "Unhandled window width in reflowLayout() - Without ToC" );}}} }// Handles reflowing content on the page depending on different variables; (function (window, $, undefined) {$.fn.reflowLayout = function() {// Mobile width for reflow, probably want to sync// with max mobile width for the ToCconst MAX_MOBILE_WIDTH = 1438;// Should we enable verbose logging for debugging?// SHOULD NOT BE TRUE IN PRODUCTION! -supersoupvar debug = false;handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );$(window).on( 'load', function () {handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );});// For reflowing when browser size changes$(window).on( 'resize', function () {handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );});/*$(window).on( 'scroll', function () {var $toc = $( ".toc-box" );if( $toc.length === 0 )return;console.log( "availableHeight: " + calcAvailableHeight( window.innerHeight ) );console.log( "toc[0].scrollHeight: " + $toc[0].scrollHeight );console.log( "toc.outerHeight(): " + $toc.outerHeight() );});*/};})(this, jQuery);// Transform guide content by visually organizing it into cards ; (function(window, $, undefined) { $.fn.cardify = function() { var $contentBody = $("#content-body"); if($contentBody === 0) { return; } var $contentBodyChildren = $contentBody.children(); var $h2s = $contentBody.children("h2"); console.log("H2 children of #content-body: " + $h2s.length); if($h2s.length === 0) { return; } for(var i = 0; i < $h2s.length; i++) { var $array = $contentBodyChildren.nextUntil("h2"); $array.each( function(index) { console.log("Element " + index + ": " + $(this).html()); }); // console.log("Card " + i + ":" + $contentBodyChildren.nextUntil("h2").html()); } } }(this, jQuery));// Create the top level TOC before the first heading // The boolean debug arg enables verbose logging. ; function createTopLevelTOC( $, debug ) {var $contentBody = $("#content-body");if( $contentBody === 0 ) {return;}var headingsToFind = ["h2", "h3"]; var $headings = $contentBody.find(headingsToFind.join(","));if( debug ) {console.log(`Headings found: ${$headings.length}`);}if( $headings.length === 0 ) {return;}var tocContainer = document.createElement("div");tocContainer.id="top_toc_container";tocContainer.classList.add("top_toc_container");var tocTitle = document.createElement("p");tocTitle.classList.add("top_toc_title");tocTitle.innerHTML = "Table of Contents";tocContainer.append(tocTitle);var tocList = document.createElement("ul");tocList.classList.add("top_toc_list");let h2Count = 1;let h3Count = 1;for( let i = 0; i < $headings.length; i++ ) {var item = document.createElement("li");var itemTagName = $headings[i].tagName;var tagIsH3 = itemTagName === "H3";if ( debug ) {console.log(`Item ${i} tagName: ${itemTagName}`);}var count = i+1;if( tagIsH3 ) {item.classList.add("top_toc_item_h3");count = h3Count;h3Count++;}else {item.classList.add("top_toc_item_h2");count = h2Count;h3Count = 1; // Reset h3 counth2Count++;}var innerText = `${tagIsH3 ? " - " : ""} ${$headings[i].innerText}`;item.innerHTML =`${innerText}`;tocList.append(item);}tocContainer.append(tocList);var $topHeading = $headings[0];$topHeading.before(tocContainer);if( debug ) {console.log("Successfully added top level ToC");}}// The main function for creating, populating, and managing the new ToC ; (function (window, $, undefined) { $.fn.createTOC = function (settings) {const MAX_MOBILE_WIDTH = 1438;// Before anything else, if this is a post in a Category that we // specifically want to force the ToC on, let's handle that// THIS IS NO LONGER NEEDED, as we're pushing ToC sitewide -supersoup// handleForceToC( $ );// We want to create the inline top level ToC if we're not generating // the sidebar tocif ( $(window).width() <= MAX_MOBILE_WIDTH ) {createTopLevelTOC( $, false );}// For now, we only want to add the new ToC to manually flagged posts.// The post is flagged with the presence of a
// contained within the content of the post. Originally, this div was being used// to wrap the ToC, but I (supersoup) am going to move the ToC out to a new div.// So, the first thing we want to do is test for this div, early return if not // found, or remove it and recreate a #content-side div elsewhere if it is found.var tocFlag = $("#content-side");var hasToC = !(tocFlag.length === 0);// If #content-side element is foundif( hasToC ) {// Get rid of tosFlag #content-side elementtocFlag.remove();}// Check number of H2 and H3 elements. If <= 3, early returnvar numH2 = $("h2");var numH3 = $("h3");if( numH2.length + numH3.length <= 3 ) {return;}// Proceed with .CreateTOC() var option = $.extend({ title: "hgg-toc", insert: "body", }, settings); var ACTIVE_CLASS = 'active'; var list = ["h2", "h3"]; var $headings = this.find(list.join(",")); var tocBox = document.createElement("ul"); var $tocBox = $(tocBox); tocBox.className = "toc-box"; var idList = []; $headings.map(function (i, head) { var nodeName = head.nodeName; var id = 'toc_' + i + '_' + nodeName; head.id = id; idList.push(id); var row = document.createElement("li"); row.className = 'toc-item toc-' + nodeName; var link = document.createElement('a'); link.innerText = head.innerText; link.className = 'toc-item-link'; link.href = '#' + id; row.appendChild(link); tocBox.appendChild(row); }); // Control the takeover of the highlighted elements var isTakeOverByClick = false; // Event delegate, add click ,Highlight the currently clicked item $tocBox.on("click", ".toc-item", function (ev) { // Set as true ,Represents the click event to take over the control of the highlighted element isTakeOverByClick = true; var $item = $(this); var $itemSiblings = $item.siblings(); $itemSiblings.removeClass(ACTIVE_CLASS); $item.addClass(ACTIVE_CLASS); });// Recreate #content-side element in new locationvar $tocDiv = $("
");$( "#content-area" ).prepend($tocDiv); // Want it to be the first subdiv of #content-areavar headBox = document.createElement("div");headBox.className = "toc-titler";headBox.innerHTML = option.title;var wrapBox = document.createElement("div");wrapBox.className = "wrap-toc";wrapBox.appendChild(headBox);wrapBox.appendChild(tocBox);// If on mobile, set sidebar hiddenif( $(window).width() <= MAX_MOBILE_WIDTH ) {wrapBox.style.display = 'none';} else {wrapBox.style.display = null;}var $insertBox = $(option.insert);var $helperBox = $("
");$helperBox.append(wrapBox);$insertBox.prepend($helperBox);// The style of the storage container boxvar CACHE_WIDTH = $insertBox.css('width');var CACHE_PADDING_TOP = $insertBox.css('paddingTop');var CACHE_PADDING_RIGHT = $insertBox.css('paddingRight');var CACHE_PADDING_BOTTOM = $insertBox.css('paddingBottom');var CACHE_PADDING_LEFT = $insertBox.css('paddingLeft');var CACHE_MARGIN_TOP = $insertBox.css('marginTop'); // var scrollTop = $('html,body').scrollTop(); // var offsetTop = $insertBox.offset().top; // var marginTop = parseInt($insertBox.css('marginTop')); // var offsetTopForView = offsetTop - scrollTop - marginTop; // For initialization on load$(window).on( 'load', function () {initTocAnimData( $insertBox );}); // Rolling ceiling $(window).scroll(function () {// The previous process for initializing offsetTopForView didn't play well when// refreshing the page while partially down the post, switching to pulling the // main-header height for consistency -supersoupvar offsetTopForView = $(".hgg-top-nav").height() ; //px// IE6/7/8: // For pages without doctype declaration, document.body.scrollTop can be used to get the height of scrollTop; // For pages with doctype declaration, document.documentElement.scrollTop can be used;// Safari: // Safari is special, it has its own function to get scrollTop: window.pageYOffset;// Firefox: // Relatively standard browsers such as Firefox can save more worry, just use document.documentElement.scrollTop;var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; // Scroll highlight // Only when the click event cancels the control of the highlighted element, the scroll event can have the control of the highlighted element !isTakeOverByClick && $.each(idList, function (index, id) { var $head = $('#' + id); var $item = $('[href="#' + id + '"]').parent(); var $itemSiblings = $item.siblings();var offsetBuffer = 64; // px, we want the class swap to trigger slightly before so we show an accurate active element// when zooming to a specific element var offsetTopHead = $head.offset().top - offsetBuffer; var isActived = $item.hasClass(ACTIVE_CLASS); if (scrollTop >= offsetTopHead) { $itemSiblings.removeClass(ACTIVE_CLASS); !isActived && $item.addClass(ACTIVE_CLASS); } else { $item.removeClass(ACTIVE_CLASS); } }); // Set to false, which means that the click event will cancel the control of the highlighted element isTakeOverByClick = false;// Handle animation for the ToChandleTocAnim( $insertBox, $(window).height(), $(document).height(), scrollTop );// Handle any changes to ToC CSS on scrollvar isFixed = $helperBox.css("position") === "fixed"; if (scrollTop >= offsetTopForView) {if (isFixed) return;$tocBox.css({overflow: 'auto',padding: 0,});$helperBox.css({position: 'fixed',top: CACHE_MARGIN_TOP,width: CACHE_WIDTH,paddingTop: CACHE_PADDING_TOP,paddingRight: CACHE_PADDING_RIGHT,paddingBottom: CACHE_PADDING_BOTTOM,paddingLeft: CACHE_PADDING_LEFT,backgroundColor: $tocBox.css('backgroundColor')});} else {if (!isFixed) return;$helperBox.css({position: 'static',padding: 0});$tocBox.css({overflow: 'auto',paddingTop: CACHE_PADDING_TOP,paddingRight: CACHE_PADDING_RIGHT,paddingBottom: CACHE_PADDING_BOTTOM,paddingLeft: CACHE_PADDING_LEFT,});} }); };}(this, jQuery));
by Gibson Ross | Last Updated: May 23, 2023

Image: Rockstar Games via HGG / Koby Gibson Ross
On the American frontier, everyone needs a good weapon by their side. The wild west is a dangerous place, and no one would last ten minutes without a decent firearm. One of the most versatile and useful firearms in RDR2 Online is none other than the humble repeater.
But out of all the repeaters that you can purchase in RDR2 Online, which one is the best? Which repeaters are worth buying, and which ones should you not bother with? We will be answering that and more in this article for Every Repeater in RDR2 Online, Ranked!
Looking for more Red Dead tips and tricks? View all our Red Dead guides.
Repeater Overview

Before we discuss what our picks are for the best repeater in RDR2 Online, let’s first go over just what exactly a repeater is. Repeaters are a type of rifle in Red Dead Redemption 2, but don’t confuse them with regular rifles.
In practice, repeaters are different from rifles in several ways. Firstly, they tend to fire faster and deal less damage per shot, whereas for a rifle it’s the other way around. Due to their high rate of fire, repeaters make for a great choice during Dead Eye.
However, repeaters also have less range, making them better suited for closer encounters. There are plenty of other differences in how repeaters operate and function, but I’m not a firearms expert, so that’s a question best left for your local gun store.
Speaking of which, repeaters can be purchased, upgraded, and customized at any gun store in the game, just like any other firearm in Red Dead Redemption 2. There are currently 4 repeaters available for purchase in RDR2 Online at the time this article has been released. It’s unknown if more will be added to the game, but we’ll be sure to update this article accordingly in that event.
Every Repeater in RDR2 Online, Ranked Worst to Best
And without further ado, let’s get into our list of the best repeaters in Red Dead Online.
Carbine Repeater

Our first entry on our list is the Carbine Repeater! This is the most commonly owned (but not most commonly used) weapon in Red Dead Online. This is due to the fact that it’s the first weapon you get in the game, and you acquire it for free immediately after making a character. As you might expect from a weapon given to you at the start of the game, it isn’t really the best. Especially when you compare it to some of the other weapons on this list.
A Carbine Repeater cannot be purchased from a gun store, but you can get attachments for it. In my opinion, the biggest drawback of this gun is the fact that it can only hold 7 shots before needing to be reloaded. If you’re only using this gun to hunt, then it’s not a big concern. But this makes it hard to justify using it in a PvP encounter. Thankfully, the gun does have high reload speed, so you won’t have to spend too much time hiding behind cover before you can get back into the fight.
When it comes to its other stats, this weapon is pretty well-rounded. Damage and rate of fire are just okay, giving it a reliable DPS. The weapon is solid for most PvE encounters, but due to some of my previously made points, I don’t recommend it for PvP. I’ve seen lots of players use this weapon to go hunting, but I personally prefer using a regular rifle or a Litchfield Repeater. Speaking of which…
Evans Repeater

Moving onto our next entry in RDR2 Online, we have the Evans Repeater. This is a weapon that I find pretty fun to use, but I don’t think it’s the best in the game. There are many players who will tell you otherwise, but personally, I think it’s overrated. That isn’t to say it’s bad, however. It’s actually the best repeater when it comes to medium to long ranges.
This leads me to my first point about this gun. It has exceptionally good accuracy, making it great for hitting targets from all distances. It also features a good range as well, and like all repeaters, it can be fitted with a short scope. While it’s great at killing targets from a distance, you would be better off just using a sniper rifle at that point. Sniper rifles can be fitted with longer scopes, their accuracy and range is just as good, and they have better damage to boot.
This weapon does have a better rate of fire compared to a sniper rifle, but in my experience, I still prefer a sniper rifle to a repeater due to the higher damage. As for closer range encounters, its damage is acceptable, but not the most impressive out of all the repeaters. Additionally, its rate of fire is also just okay, meaning its DPS just isn’t anything to die for.
Many people will argue that it’s biggest selling point is the 26 ammo capacity, but I find this to be unnecessary in nearly all cases. In most fights, you’ll have already killed all the enemies by the time you’ve fired half that number. It may be a good benefit during Call-to-Arms, however.
Litchfield Repeater

Next up on this ranking, let’s take a quick look at the Litchfield Repeater. This is one of my favorite repeaters to use in the game, as it’s very satisfying to get a kill with. This is a weapon that not many players use, mostly due to the fact that it’s not THE best repeater in the game. That being said, I still highly recommend you buy this weapon and give it a try for yourself, as I think it’s pretty underrated all things considered.
This repeater can be bought for a total of $348 in RDR2 Online. The most notable feature of this weapon is its high damage. A Litchfield Repeater does more damage per shot than any of the other repeaters available in the game. The drawback is that it has a somewhat slower rate of fire than what you’d expect, bringing down its overall DPS. Luckily, this problem can be negated if you’re a good shot and can reliably land hits on your targets.
Additionally, the gun features a decent range, and it can be fitted with a short scope. This makes it a good marksman rifle for medium-range engagements. One thing that I dislike about this weapon is that it has a pretty slow reload time. This isn’t a huge issue as the gun can fire 16 bullets at once, so you don’t need to reload that often to begin with. But in some PvP encounters, it can become an issue. Notably, it is a pretty good weapon for hunting certain wildlife game due to its high damage.
Lancaster Repeater

And finally, at spot number 1 on our ranking, we have the Lancaster Repeater! This is without a doubt the BEST repeater in the entirety of RDR2 Online, as well as being one of the best weapons in general. It’s one of the most commonly used weapons by other players, especially amongst low levels. If you are new to the game and want a great weapon you can get earlier–or you are a high-level looking for something versatile–then this is your gun.
You can buy this gun for $243, which isn’t too bad. It’s a very versatile weapon that is good for all types of encounters, especially PvE ones. It features low damage but makes up for it with a high rate of fire, allowing for pretty good DPS. While it’s not the most impressive weapon in the game when it comes to DPS, it makes up for it in other areas. It also has a good range and can be fitted with a scope. Lastly, its reload speed is great and can hold up to 14 bullets when fully loaded.
With its good DPS, decent range for close to mid-range combat, and it’s high bullet capacity, you’d be wise to take this weapon as one of your primary guns. If you have the Dead Eye ability that allows you to highlight targets, this gun can be combined with that to easily make work of enemy players with a quick headshot. I highly recommend every player pick up this weapon as soon as they can.
Join the High Ground
We hope that you enjoyed this article ranking every repeater in RDR2 Online. What does your list of the best repeaters in Red Dead Online look like? Be sure to let us know down below! And make sure to subscribe to our weekly newsletter for more regular content on all your favorite open-world games.
Happy gaming!
Every Repeater in RDR2 Online Ranked Worst to Best
10 Best Horses in Red Dead Redemption 2 (Story Mode)
Best Legendary Bounty in RDR2 Online, Ranked
Red Dead Online: Ember of the East Guide (Ruthless Mode)
Red Dead Online: Best Places to Find Cougars
Top 10 Fishing Tips for Red Dead Online
" );})(jQuery);