// initialize jwplayer var playerInstance = jwplayer('player');// player dom elements var playerContainerEl = document.querySelector('.player-container');// returns video player position from top of document function getElementOffsetTop(el) { var boundingClientRect = el.getBoundingClientRect(); var bodyEl = document.body; var docEl = document.documentElement; var scrollTop = window.pageYOffset || docEl.scrollTop || bodyEl.scrollTop; var clientTop = docEl.clientTop || bodyEl.clientTop || 0; return Math.round(boundingClientRect.top + scrollTop - clientTop); }// returns the current y scroll position function getScrollTop() { var docEl = document.documentElement; return (window.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); }// configure jwplayer instance playerInstance.setup({ autostart: true, playlist: 'https://cdn.jwplayer.com/v2/playlists/mYdavspX', primary: 'html5', setFullscreen: true, width: '100%' });// when jwplayer instance is ready playerInstance.on('ready', function() { var config = playerInstance.getConfig(); var utils = playerInstance.utils; // get height of player element var playerHeight = config.containerHeight; // flag determining whether close has been clicked var closed = true; // CHANGED // flag determing whether player is playing var playing = false; // ADDED // eventhandler for when close button is being pressed document.getElementsByClassName('icon-close')[0].addEventListener('click', () => { closed = true; onScrollViewHandler(); }); playerInstance.on('play', function() { closed = false; playing = true; // ADDED }).on('pause', function () { playing = false; // ADDED }).on('adPlay', function() { closed = false; // ADDED playing = true; // ADDED }).on('adPause', function() { playing = false; // ADDED });// get player element position from top of document var playerOffsetTop = getElementOffsetTop(playerContainerEl);// set player container to match height of actual video element playerContainerEl.style.height = playerHeight + 'px';// below we handle window scroll event without killing performance function onScrollViewHandler() { var minimized = getScrollTop() >= playerOffsetTop;if (closed && minimized) { minimized = false; jwplayer().pause(); playing = false; // ADDED } else if (!minimized && !playing) { closed = true; // ADDED } utils.toggleClass(playerContainerEl, 'player-minimize', minimized); // update the player's size so the controls are adjusted playerInstance.resize(); }// namespace for whether or not we are waiting for setTimeout() to finish var isScrollTimeout = false;// window onscroll event handler window.onscroll = function() { // skip if we're waiting on a scroll update timeout to finish if (isScrollTimeout) return; // flag that a new timeout will begin isScrollTimeout = true; // otherwise, call scroll event view handler onScrollViewHandler(); // set new timeout setTimeout(function() { // reset timeout flag to false (no longer waiting) isScrollTimeout = false; }, 80); };});

Detailed look at what the latest Contraband stream has to offer.

Looking at the new Contraband that comes with Operation Grand Heist, there are definitely some stand out items. The Warden Blackout skin, a sack of coins melee weapon, and even a new Shotgun. However, players have noticed a heavy amount of Calling Cards and Stickers.

Wondering how many of each type of loot there actually is in the Contraband, I tallied up every piece of loot and broke it down in this helpful chart. While Treyarch recently brought back the ability to earn reserves after completing the Contraband due to fan backlash, here are the guaranteed stats for the first 100 tiers in Operation Grand Heist:

  • Stickers – 45 (45 Common)
  • Calling Cards – 24 (24 Rare)
  • Outfits – 12 (2 Rare, 6 Legendary, 3 Epic, 1 Ultra/Character)
  • Warpaints – 5 (5 Rare)
  • Weapon Camos – 4 (1 Legendary, 2 Epic/Reactive, 1 Ultra/Mastercraft)
  • Gestures – 4 (2 Rare, 2 Legendary)
  • Weapons – 3 (3 Ultra)
  • Specialists – 1 (1 Ultra)
  • Jump Packs – 1 (1 Legendary)
  • Reticles – 1 (1 Legendary)

Looking at these numbers, there’s a lot of information to pull. The most frequently appearing items which are Stickers and Calling Cards make up 69% of the Contraband.

Ultra items that include Mastercrafts, new weapons, unique Blackout Skins, and a new Specialist make up only 6% of Contraband while Common and Rare items take up 78%.

Several categories are severely lacking such as Jump Packs, Reticles, and Gestures, making them as infrequent as Ultra items totaling at 6%.

Absent from the 100 tiers are Tags which are the spray paints that can be equipped and used in Multiplayer and Blackout. Luckily, there are no character specific items like Gestures or Warpaints, however all outfits are of course character specific.

After going over this data it’s clear the loot balance is not as even as it should be. Personally, I think Stickers and Calling Cards should be cut in half, and the Tiers should give more love to Weapon Camos, Reticles, Specialist Skins, and Jump Packs.

It doesn’t make sense why Stickers, which are used to create emblems, are so prevalent in the Contraband. I have seen user-created emblems that use just basic shapes that are more unique and original than some Stickers. Likewise, it baffles me that Calling Cards are so heavily featured when players can unlock Master Calling Cards that display their in-game skill rather than just time played. Hopefully, the next Operation in late April adds more variety.

Operation Grand Heist is currently live on PS4 and is set to drop on Xbox One and PC on February 26th.

If your’re wondering what each Tier looks like, check out the gallery below to see all 100 pieces of loot.

comments below
Brooklyn boy, born and raised. @MrBrawl96 everywhere on the World Wide Web.