mirror of
https://github.com/slawkens/myaac.git
synced 2025-10-13 17:24:54 +02:00
Highscores revamp a bit
* Show real rank, if 2 or more players have the same skill, show them with same rank * New setting: highscores_online_status * Additional fields passed to twig: updatedAt, totalResults, page, baseLink
This commit is contained in:
@@ -146,17 +146,24 @@ $cache = Cache::getInstance();
|
||||
if ($cache->enabled() && $highscoresTTL > 0) {
|
||||
$tmp = '';
|
||||
if ($cache->fetch($cacheKey, $tmp)) {
|
||||
$highscores = unserialize($tmp);
|
||||
$data = unserialize($tmp);
|
||||
$totalResults = $data['totalResults'];
|
||||
$highscores = $data['highscores'];
|
||||
$updatedAt = $data['updatedAt'];
|
||||
$needReCache = false;
|
||||
}
|
||||
}
|
||||
|
||||
$offset = ($page - 1) * $configHighscoresPerPage;
|
||||
$query->join('accounts', 'accounts.id', '=', 'players.account_id')
|
||||
->withOnlineStatus()
|
||||
$query->withOnlineStatus()
|
||||
->whereNotIn('players.id', setting('core.highscores_ids_hidden'))
|
||||
->notDeleted()
|
||||
->where('players.group_id', '<', setting('core.highscores_groups_hidden'))
|
||||
->where('players.group_id', '<', setting('core.highscores_groups_hidden'));
|
||||
|
||||
$totalResultsQuery = clone $query;
|
||||
|
||||
$query
|
||||
->join('accounts', 'accounts.id', '=', 'players.account_id')
|
||||
->limit($limit)
|
||||
->offset($offset)
|
||||
->selectRaw('accounts.country, players.id, players.name, players.account_id, players.level, players.vocation' . $outfit . $promotion)
|
||||
@@ -215,17 +222,24 @@ if (empty($highscores)) {
|
||||
|
||||
return $tmp;
|
||||
})->toArray();
|
||||
|
||||
$updatedAt = time();
|
||||
$totalResults = $totalResultsQuery->count();
|
||||
}
|
||||
|
||||
if ($highscoresTTL > 0 && $cache->enabled() && $needReCache) {
|
||||
$cache->set($cacheKey, serialize($highscores), $highscoresTTL * 60);
|
||||
$cache->set($cacheKey, serialize(
|
||||
[
|
||||
'totalResults' => $totalResults,
|
||||
'highscores' => $highscores,
|
||||
'updatedAt' => $updatedAt,
|
||||
]
|
||||
), $highscoresTTL * 60);
|
||||
}
|
||||
|
||||
$show_link_to_next_page = false;
|
||||
$i = 0;
|
||||
|
||||
$settingHighscoresVocation = setting('core.highscores_vocation');
|
||||
|
||||
foreach($highscores as $id => &$player)
|
||||
{
|
||||
if(++$i <= $configHighscoresPerPage)
|
||||
@@ -239,10 +253,22 @@ foreach($highscores as $id => &$player)
|
||||
|
||||
$player['link'] = getPlayerLink($player['name'], false);
|
||||
$player['flag'] = getFlagImage($player['country']);
|
||||
if($settingHighscoresOutfit) {
|
||||
$player['outfit'] = '<img style="position:absolute;margin-top:' . (in_array($player['looktype'], setting('core.outfit_images_wrong_looktypes')) ? '-15px;margin-left:5px' : '-45px;margin-left:-25px') . ';" src="' . $player['outfit_url'] . '" alt="" />';
|
||||
$player['outfit'] = '<img style="position:absolute;margin-top:' . (in_array($player['looktype'], setting('core.outfit_images_wrong_looktypes')) ? '-15px;margin-left:5px' : '-45px;margin-left:-25px') . ';" src="' . $player['outfit_url'] . '" alt="" />';
|
||||
|
||||
if ($skill != POT::SKILL__LEVEL) {
|
||||
if (isset($lastValue) && $lastValue == $player['value']) {
|
||||
$player['rank'] = $lastRank;
|
||||
}
|
||||
else {
|
||||
$player['rank'] = $offset + $i;
|
||||
}
|
||||
|
||||
$lastRank = $player['rank'] ;
|
||||
$lastValue = $player['value'];
|
||||
}
|
||||
else {
|
||||
$player['rank'] = $offset + $i;
|
||||
}
|
||||
$player['rank'] = $offset + $i;
|
||||
}
|
||||
else {
|
||||
unset($highscores[$id]);
|
||||
@@ -263,6 +289,8 @@ if($show_link_to_next_page) {
|
||||
$linkNextPage = getLink('highscores') . '/' . $list . ($vocation !== 'all' ? '/' . $vocation : '') . '/' . ($page + 1);
|
||||
}
|
||||
|
||||
$baseLink = getLink('highscores') . '/' . $list . ($vocation !== 'all' ? '/' . $vocation : '') . '/';
|
||||
|
||||
$types = array(
|
||||
'experience' => 'Experience',
|
||||
'magic' => 'Magic',
|
||||
@@ -297,4 +325,8 @@ $twig->display('highscores.html.twig', [
|
||||
'types' => $types,
|
||||
'linkPreviousPage' => $linkPreviousPage,
|
||||
'linkNextPage' => $linkNextPage,
|
||||
'totalResults' => $totalResults,
|
||||
'page' => $page,
|
||||
'baseLink' => $baseLink,
|
||||
'updatedAt' => $updatedAt,
|
||||
]);
|
||||
|
@@ -1080,6 +1080,12 @@ Sent by MyAAC,<br/>
|
||||
'desc' => 'Show player vocation under his nickname?',
|
||||
'default' => true,
|
||||
],
|
||||
'highscores_online_status' => [
|
||||
'name' => 'Display Online Status',
|
||||
'type' => 'boolean',
|
||||
'desc' => 'Show player status as red (offline) or green (online)',
|
||||
'default' => false,
|
||||
],
|
||||
'highscores_frags' => [
|
||||
'name' => 'Display Top Frags',
|
||||
'type' => 'boolean',
|
||||
|
@@ -66,7 +66,7 @@
|
||||
|
||||
<td>
|
||||
<a href="{{ player.link }}">
|
||||
<span style="color: {% if player.online > 0 %}green{% else %}red{% endif %}">{{ player.name }}</span>
|
||||
<span {% if setting('core.highscores_online_status') %}style="color: {% if player.online > 0 %}green{% else %}red{% endif %}"{% endif %}>{{ player.name }}</span>
|
||||
</a>
|
||||
{% if setting('core.highscores_vocation') %}
|
||||
<br/><small>{{ player.vocation }}</small>
|
||||
|
Reference in New Issue
Block a user