public static function leaderboard_targets($this_userid, $player_limit = 12, $player_sort = '', $player_campaign = '')
 {
     global $db;
     // Check to see if the leaderboard targets have already been pulled or not
     if (!empty($db->INDEX['LEADERBOARD']['targets'])) {
         $this_leaderboard_target_players = $db->INDEX['LEADERBOARD']['targets'];
     } else {
         // Collect the leaderboard index and online players for ranking
         $this_leaderboard_index = rpg_prototype::leaderboard_index();
         $this_leaderboard_targets = array();
         $this_leaderboard_targets_ids = array();
         $this_leaderboard_targets['custom'] = rpg_prototype::leaderboard_custom($player_campaign, $this_userid);
         $this_leaderboard_targets['online'] = rpg_prototype::leaderboard_online();
         $this_leaderboard_targets['rival'] = rpg_prototype::leaderboard_rivals($this_leaderboard_index, $this_userid, 10);
         $this_leaderboard_targets_ids['custom'] = array();
         $this_leaderboard_targets_ids['online'] = array();
         $this_leaderboard_targets_ids['rival'] = array();
         if (!empty($this_leaderboard_targets['custom'])) {
             shuffle($this_leaderboard_targets['custom']);
         }
         if (!empty($this_leaderboard_targets['online'])) {
             shuffle($this_leaderboard_targets['online']);
         }
         if (!empty($this_leaderboard_targets['rival'])) {
             shuffle($this_leaderboard_targets['rival']);
         }
         //die('<pre>$this_leaderboard_targets(this:'.$player_campaign.'/target:'.$player_sort.') = '.print_r($this_leaderboard_targets, true).'</pre>');
         //$this_leaderboard_include_players = array_merge($this_leaderboard_targets['online'], $this_leaderboard_targets['rival']);
         //$this_leaderboard_include_players = array_slice($this_leaderboard_include_players, 0, $player_limit);
         //shuffle($this_leaderboard_include_players);
         // Generate the custom username tokens for adding to the condition list
         $temp_include_raw = array();
         $temp_include_userids = array();
         $temp_include_usernames = array();
         $temp_include_usernames_count = 0;
         $temp_include_usernames_string = array();
         // Add the include data to the raw array
         if (!empty($this_leaderboard_targets)) {
             foreach ($this_leaderboard_targets as $kind => $players) {
                 if (!empty($players)) {
                     if (!isset($this_leaderboard_targets_ids[$kind])) {
                         $this_leaderboard_targets_ids[$kind] = array();
                     }
                     foreach ($players as $key => $info) {
                         $id = isset($info['user_id']) ? $info['user_id'] : $info['id'];
                         $this_leaderboard_targets_ids[$kind][] = $id;
                         if (!isset($temp_include_raw[$id])) {
                             $temp_include_raw[$id] = $info;
                         } else {
                             continue;
                         }
                     }
                 }
             }
         }
         //die('<pre>$this_leaderboard_targets_ids(this:'.$player_campaign.'/target:'.$player_sort.') = '.print_r($this_leaderboard_targets_ids, true).'</pre>');
         // Re-key the array to prevent looping errors
         $temp_include_raw = array_values($temp_include_raw);
         // Loop thrugh the raw array and collect filter variables
         if (!empty($temp_include_raw)) {
             foreach ($temp_include_raw as $info) {
                 if (isset($info['id']) && $info['id'] != $this_userid) {
                     $temp_include_usernames[] = $info['token'];
                     $temp_include_userids[] = $info['id'];
                 } elseif (isset($info['user_id']) && $info['user_id'] != $this_userid) {
                     $temp_include_usernames[] = $info['user_name_clean'];
                     $temp_include_userids[] = $info['user_id'];
                 }
             }
             $temp_include_usernames_count = count($temp_include_usernames);
             if (!empty($temp_include_usernames)) {
                 foreach ($temp_include_usernames as $token) {
                     $temp_include_usernames_string[] = "'{$token}'";
                 }
                 $temp_include_usernames_string = implode(',', $temp_include_usernames_string);
             } else {
                 $temp_include_usernames_string = '';
             }
         } else {
             $temp_include_usernames_string = '';
         }
         //die('<pre>$temp_include_raw(this:'.$player_campaign.'/target:'.$player_sort.') = '.print_r($temp_include_raw, true).'</pre>');
         // Define the array for pulling all the leaderboard data
         $temp_leaderboard_query = 'SELECT
                 mmrpg_leaderboard.user_id,
                 mmrpg_leaderboard.board_points,
                 mmrpg_users.user_name,
                 mmrpg_users.user_name_clean,
                 mmrpg_users.user_name_public,
                 mmrpg_users.user_gender,
                 mmrpg_saves.save_values_battle_rewards AS player_rewards,
                 mmrpg_saves.save_values_battle_settings AS player_settings,
                 mmrpg_saves.save_values AS player_values,
                 mmrpg_saves.save_counters AS player_counters
                 FROM mmrpg_leaderboard
                 LEFT JOIN mmrpg_users ON mmrpg_users.user_id = mmrpg_leaderboard.user_id
                 LEFT JOIN mmrpg_saves ON mmrpg_users.user_id = mmrpg_saves.user_id
                 WHERE board_points > 0
                 AND mmrpg_leaderboard.user_id != ' . $this_userid . '
                 ' . (!empty($temp_include_usernames_string) ? 'AND mmrpg_users.user_name_clean IN (' . $temp_include_usernames_string . ') ' : '') . '
                 ORDER BY board_points DESC
             ';
         //AND board_points >= '.$this_player_points_min.' AND board_points <= '.$this_player_points_max.'
         //'.(!empty($temp_online_usernames_string) ? ' FIELD(user_name_clean, '.$temp_online_usernames_string.') DESC, ' : '').'
         //LIMIT '.$player_limit.'
         // Query the database and collect the array list of all online players
         //die('<pre>$temp_leaderboard_query(this:'.$player_campaign.'/target:'.$player_sort.') = '.print_r($temp_leaderboard_query, true).'</pre>');
         $this_leaderboard_target_players = $db->get_array_list($temp_leaderboard_query);
         //die('<pre>$this_leaderboard_target_players(this:'.$player_campaign.'/target:'.$player_sort.') = '.print_r($this_leaderboard_target_players, true).'</pre>');
         // Sort the target players based on position in userid array
         usort($this_leaderboard_target_players, function ($u1, $u2) use($temp_include_userids) {
             $id1 = isset($u1['user_id']) ? $u1['user_id'] : $u1['id'];
             $id2 = isset($u2['user_id']) ? $u2['user_id'] : $u2['id'];
             $pos1 = array_search($id1, $temp_include_userids);
             $pos2 = array_search($id2, $temp_include_userids);
             if ($pos1 > $pos2) {
                 return 1;
             } elseif ($pos1 < $pos2) {
                 return -1;
             } else {
                 return 0;
             }
         });
         //die('<pre>$this_leaderboard_target_players(this:'.$player_campaign.'/target:'.$player_sort.') = '.print_r($this_leaderboard_target_players, true).'</pre>');
         //die('<pre>(this:'.$player_campaign.'/target:'.$player_sort.')'."\n\n".'$temp_leaderboard_query = '.print_r($temp_leaderboard_query, true).''."\n\n".'$this_leaderboard_target_players = '.print_r($this_leaderboard_target_players, true).'</pre>');
         // Loop through and decode any fields that require it
         if (!empty($this_leaderboard_target_players)) {
             foreach ($this_leaderboard_target_players as $key => $player) {
                 $player['player_rewards'] = !empty($player['player_rewards']) ? json_decode($player['player_rewards'], true) : array();
                 $player['player_settings'] = !empty($player['player_settings']) ? json_decode($player['player_settings'], true) : array();
                 $player['values'] = !empty($player['player_values']) ? json_decode($player['player_values'], true) : array();
                 $player['counters'] = !empty($player['player_counters']) ? json_decode($player['player_counters'], true) : array();
                 unset($player['player_values']);
                 unset($player['player_counters']);
                 $player['player_favourites'] = !empty($player['values']['robot_favourites']) ? $player['values']['robot_favourites'] : array();
                 $player['player_starforce'] = !empty($player['values']['star_force']) ? $player['values']['star_force'] : array();
                 if (!empty($player_sort)) {
                     $player['counters']['player_robots_count'] = !empty($player['player_rewards'][$player_sort]['player_robots']) ? count($player['player_rewards'][$player_sort]['player_robots']) : 0;
                 }
                 $player['values']['flag_custom'] = in_array($player['user_id'], $this_leaderboard_targets_ids['custom']) ? 1 : 0;
                 $player['values']['flag_online'] = in_array($player['user_id'], $this_leaderboard_targets_ids['online']) ? 1 : 0;
                 $player['values']['flag_rival'] = in_array($player['user_id'], $this_leaderboard_targets_ids['rival']) ? 1 : 0;
                 $this_leaderboard_target_players[$key] = $player;
             }
         }
         // Update the database index cache
         //if (!empty($player_sort)){ uasort($this_leaderboard_target_players, 'mmrpg_prototype_leaderboard_targets_sort'); }
         $db->INDEX['LEADERBOARD']['targets'] = $this_leaderboard_target_players;
         //die($temp_leaderboard_query);
     }
     // Return the collected online players if any
     return $this_leaderboard_target_players;
 }