mirror of
https://github.com/slawkens/myaac.git
synced 2025-10-15 18:24:56 +02:00
Merge branch 'main' into feature/2fa
This commit is contained in:
@@ -227,10 +227,15 @@ if($save)
|
||||
}
|
||||
|
||||
$accountDefaultCoins = setting('core.account_coins');
|
||||
if($db->hasColumn('accounts', 'coins') && $accountDefaultCoins > 0) {
|
||||
if(HAS_ACCOUNT_COINS && $accountDefaultCoins > 0) {
|
||||
$new_account->setCustomField('coins', $accountDefaultCoins);
|
||||
}
|
||||
|
||||
$accountDefaultCoinsTransferable = setting('core.account_coins_transferable');
|
||||
if((HAS_ACCOUNT_COINS_TRANSFERABLE || HAS_ACCOUNT_TRANSFERABLE_COINS) && $accountDefaultCoinsTransferable > 0) {
|
||||
$new_account->setCustomField(ACCOUNT_COINS_TRANSFERABLE_COLUMN, $accountDefaultCoinsTransferable);
|
||||
}
|
||||
|
||||
$tmp_account = $email;
|
||||
if (!config('account_login_by_email')) {
|
||||
$tmp_account = (USE_ACCOUNT_NAME ? $account_name : $account_id);
|
||||
|
@@ -123,16 +123,10 @@ if($db->hasColumn('players', 'promotion'))
|
||||
$promotion = ',players.promotion';
|
||||
|
||||
$outfit_addons = false;
|
||||
$outfit = '';
|
||||
|
||||
$settingHighscoresOutfit = setting('core.highscores_outfit');
|
||||
|
||||
if($settingHighscoresOutfit) {
|
||||
$outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
|
||||
if($db->hasColumn('players', 'lookaddons')) {
|
||||
$outfit .= ', lookaddons';
|
||||
$outfit_addons = true;
|
||||
}
|
||||
$outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
|
||||
if($db->hasColumn('players', 'lookaddons')) {
|
||||
$outfit .= ', lookaddons';
|
||||
$outfit_addons = true;
|
||||
}
|
||||
|
||||
$configHighscoresPerPage = setting('core.highscores_per_page');
|
||||
@@ -146,17 +140,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 +216,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 +247,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 +283,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 +319,8 @@ $twig->display('highscores.html.twig', [
|
||||
'types' => $types,
|
||||
'linkPreviousPage' => $linkPreviousPage,
|
||||
'linkNextPage' => $linkNextPage,
|
||||
'totalResults' => $totalResults,
|
||||
'page' => $page,
|
||||
'baseLink' => $baseLink,
|
||||
'updatedAt' => $updatedAt,
|
||||
]);
|
||||
|
@@ -9,18 +9,21 @@
|
||||
* @link https://my-aac.org
|
||||
*/
|
||||
|
||||
use MyAAC\Cache\Cache;
|
||||
use MyAAC\Models\ServerConfig;
|
||||
use MyAAC\Models\ServerRecord;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Who is online?';
|
||||
|
||||
if (setting('core.account_country'))
|
||||
if (setting('core.account_country')) {
|
||||
require SYSTEM . 'countries.conf.php';
|
||||
}
|
||||
|
||||
$promotion = '';
|
||||
if($db->hasColumn('players', 'promotion'))
|
||||
if($db->hasColumn('players', 'promotion')) {
|
||||
$promotion = '`promotion`,';
|
||||
}
|
||||
|
||||
$order = $_GET['order'] ?? 'name_asc';
|
||||
if(!in_array($order, ['country_asc', 'country_desc', 'name_asc', 'name_desc', 'level_asc', 'level_desc', 'vocation_asc', 'vocation_desc'])) {
|
||||
@@ -30,106 +33,116 @@ else if($order == 'vocation_asc' || $order == 'vocation_desc') {
|
||||
$order = $promotion . 'vocation_' . (str_contains($order, 'asc') ? 'asc' : 'desc');
|
||||
}
|
||||
|
||||
$orderExplode = explode('_', $order);
|
||||
$orderSql = $orderExplode[0] . ' ' . $orderExplode[1];
|
||||
$cached = Cache::remember("online_$order", setting('core.online_cache_ttl') * 60, function() use($db, $promotion, $order) {
|
||||
$orderExplode = explode('_', $order);
|
||||
$orderSql = $orderExplode[0] . ' ' . $orderExplode[1];
|
||||
|
||||
$skull_type = 'skull';
|
||||
if($db->hasColumn('players', 'skull_type')) {
|
||||
$skull_type = 'skull_type';
|
||||
}
|
||||
$skull_type = 'skull';
|
||||
if($db->hasColumn('players', 'skull_type')) {
|
||||
$skull_type = 'skull_type';
|
||||
}
|
||||
|
||||
$skull_time = 'skulltime';
|
||||
if($db->hasColumn('players', 'skull_time')) {
|
||||
$skull_time = 'skull_time';
|
||||
}
|
||||
$skull_time = 'skulltime';
|
||||
if($db->hasColumn('players', 'skull_time')) {
|
||||
$skull_time = 'skull_time';
|
||||
}
|
||||
|
||||
$outfit_addons = false;
|
||||
$outfit = '';
|
||||
if (setting('core.online_outfit')) {
|
||||
$outfit_addons = false;
|
||||
$outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
|
||||
if($db->hasColumn('players', 'lookaddons')) {
|
||||
$outfit .= ', lookaddons';
|
||||
$outfit_addons = true;
|
||||
}
|
||||
}
|
||||
|
||||
$vocs = [];
|
||||
if (setting('core.online_vocations')) {
|
||||
foreach($config['vocations'] as $id => $name) {
|
||||
$vocs[$id] = 0;
|
||||
}
|
||||
}
|
||||
$vocations = array_map(function ($name) {
|
||||
return 0;
|
||||
}, setting('core.vocations'));
|
||||
|
||||
if($db->hasTable('players_online')) // tfs 1.0
|
||||
$playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players`, `players_online` WHERE `players`.`id` = `players_online`.`player_id` AND `accounts`.`id` = `players`.`account_id` ORDER BY ' . $orderSql);
|
||||
else
|
||||
$playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id` ORDER BY ' . $orderSql);
|
||||
if($db->hasTable('players_online')) // tfs 1.0
|
||||
$playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players`, `players_online` WHERE `players`.`id` = `players_online`.`player_id` AND `accounts`.`id` = `players`.`account_id` ORDER BY ' . $orderSql);
|
||||
else
|
||||
$playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id` ORDER BY ' . $orderSql);
|
||||
|
||||
$players_data = [];
|
||||
$players = 0;
|
||||
$data = '';
|
||||
foreach($playersOnline as $player) {
|
||||
$skull = '';
|
||||
if (setting('core.online_skulls'))
|
||||
{
|
||||
if($player['skulltime'] > 0)
|
||||
{
|
||||
if($player['skull'] == 3)
|
||||
$settingVocations = setting('core.vocations');
|
||||
$settingVocationsAmount = setting('core.vocations_amount');
|
||||
|
||||
$players = [];
|
||||
foreach($playersOnline as $player) {
|
||||
$skull = '';
|
||||
if($player['skulltime'] > 0) {
|
||||
if($player['skull'] == 3) {
|
||||
$skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
|
||||
elseif($player['skull'] == 4)
|
||||
}
|
||||
elseif($player['skull'] == 4) {
|
||||
$skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
|
||||
elseif($player['skull'] == 5)
|
||||
}
|
||||
elseif($player['skull'] == 5) {
|
||||
$skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($player['promotion'])) {
|
||||
if((int)$player['promotion'] > 0)
|
||||
$player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
|
||||
}
|
||||
|
||||
$players_data[] = array(
|
||||
'name' => getPlayerLink($player['name']),
|
||||
'player' => $player,
|
||||
'level' => $player['level'],
|
||||
'vocation' => $config['vocations'][$player['vocation']],
|
||||
'country_image' => setting('core.account_country') ? getFlagImage($player['country']) : null,
|
||||
'outfit' => setting('core.online_outfit') ? setting('core.outfit_images_url') . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
|
||||
);
|
||||
|
||||
if (setting('core.online_vocations')) {
|
||||
$vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
|
||||
}
|
||||
}
|
||||
|
||||
$record = '';
|
||||
if(count($players_data) > 0) {
|
||||
if( setting('core.online_record')) {
|
||||
$result = null;
|
||||
$timestamp = false;
|
||||
if($db->hasTable('server_record')) {
|
||||
$timestamp = true;
|
||||
$result = ServerRecord::where('world_id', $config['lua']['worldId'])->orderByDesc('record')->first()->toArray();
|
||||
} else if($db->hasTable('server_config')) { // tfs 1.0
|
||||
$row = ServerConfig::where('config', 'players_record')->first();
|
||||
if ($row) {
|
||||
$result = ['record' => $row->value];
|
||||
}
|
||||
}
|
||||
|
||||
if($result) {
|
||||
$record = $result['record'] . ' player' . ($result['record'] > 1 ? 's' : '') . ($timestamp ? ' (on ' . date("M d Y, H:i:s", $result['timestamp']) . ')' : '');
|
||||
if(isset($player['promotion'])) {
|
||||
if((int)$player['promotion'] > 0)
|
||||
$player['vocation'] += ($player['promotion'] * $settingVocationsAmount);
|
||||
}
|
||||
|
||||
$players[] = array(
|
||||
'name' => getPlayerLink($player['name']),
|
||||
'player' => $player,
|
||||
'level' => $player['level'],
|
||||
'vocation' => $settingVocations[$player['vocation']],
|
||||
'skull' => $skull,
|
||||
'country_image' => getFlagImage($player['country']),
|
||||
'outfit' => setting('core.outfit_images_url') . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'],
|
||||
);
|
||||
|
||||
$vocations[($player['vocation'] > $settingVocationsAmount ? $player['vocation'] - $settingVocationsAmount : $player['vocation'])]++;
|
||||
}
|
||||
|
||||
$record = '';
|
||||
if(count($players) > 0) {
|
||||
if( setting('core.online_record')) {
|
||||
$result = null;
|
||||
$timestamp = false;
|
||||
if($db->hasTable('server_record')) {
|
||||
$timestamp = $db->hasColumn('server_record', 'timestamp');
|
||||
$serverRecordQuery = ServerRecord::query();
|
||||
|
||||
if ($db->hasColumn('server_record', 'world_id')) {
|
||||
$serverRecordQuery->where('world_id', configLua('worldId'));
|
||||
}
|
||||
|
||||
$result = $serverRecordQuery->orderByDesc('record')->first();
|
||||
if ($result) {
|
||||
$result = $result->toArray();
|
||||
}
|
||||
} else if($db->hasTable('server_config')) { // tfs 1.0
|
||||
$row = ServerConfig::where('config', 'players_record')->first();
|
||||
if ($row) {
|
||||
$result = ['record' => $row->value];
|
||||
}
|
||||
}
|
||||
|
||||
if($result) {
|
||||
$record = $result['record'] . ' player' . ($result['record'] > 1 ? 's' : '') . ($timestamp ? ' (on ' . date("M d Y, H:i:s", $result['timestamp']) . ')' : '');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'players' => $players,
|
||||
'record' => $record,
|
||||
'vocations' => $vocations,
|
||||
];
|
||||
});
|
||||
|
||||
$twig->display('online.html.twig', array(
|
||||
'players' => $players_data,
|
||||
'record' => $record,
|
||||
'vocs' => $vocs,
|
||||
'players' => $cached['players'],
|
||||
'record' => $cached['record'],
|
||||
'vocations' => $cached['vocations'],
|
||||
'vocs' => $cached['vocations'], // deprecated, to be removed
|
||||
'order' => $order,
|
||||
));
|
||||
|
||||
//search bar
|
||||
// search bar
|
||||
$twig->display('characters.form.html.twig');
|
||||
?>
|
||||
|
Reference in New Issue
Block a user