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

Leaderboards are a common feature in gaming and provide an easy way for players to track performance among all players. Black Ops 4’s have been found lacking.

The Leaderboards in Black Ops 4 have been quite the mess from the beginning. While other games in the industry regularly release with full playerbase leaderboard functions or APIs for third-party sites, Black Ops 4 now lacks both.

The API was recently changed and disabled support for third-party tracking sites. You can find the full article on the subject here: Call of Duty API changes kill third party statistic tracking websites and services

The Leaderboards with the Black Ops 4 game are very lackluster to say the least. Call of Duty titles in the past have tracked two sets of players within the leaderboards: friends and “all players.” This should be, but is no longer the case in Black Ops 4.

Black Ops 4 now uses a “Player List” which can be populated using your friends list or recent players. It is up to the player to go and remove/add players to the list before they are gone from “recent players.”

The list showing current players is often broken and displays blank names. Removing names can also be glitched. Adding names to the list does work as of now, but the Leaderboards may or may not update accordingly.

This is, in our opinion, just unacceptable from a triple A game. The Leaderboards should show all players on the player’s current platform of choice. All friends should be automatically shown using PSN or Xbox Live as a database.

In addition, the information shown in the leaderboards is barebones. Search and Destroy for League Play is a great example. The menu shows Kills & Deaths, Avg. Objectives, Score/Min, and Avg Damage. While K/D is nice, Avg. Objectives means nothing. The leaderboard should show plants/defuses along with the other stats.

Overall, the feature is drawn back from other Call of Duty games and lacks real depth. We need Treyarch to truly implement leaderboard support for all gamemodes and give us all the proper stats. It should not be too much to ask as Call of Duty did this well for over a decade.

comments below
A life-long Call of Duty player, Bachelor of Game Design, and a lover of eSports. Floodsye is my real name, Tommi is just the gamertag my parents gave me.