* @author Slawkens * @copyright 2019 MyAAC * @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')) { require SYSTEM . 'countries.conf.php'; } $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'])) { $order = 'name_asc'; } else if($order == 'vocation_asc' || $order == 'vocation_desc') { $order = $promotion . 'vocation_' . (str_contains($order, 'asc') ? 'asc' : 'desc'); } $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_time = 'skulltime'; if($db->hasColumn('players', 'skull_time')) { $skull_time = 'skull_time'; } $outfit_addons = false; $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype'; if($db->hasColumn('players', 'lookaddons')) { $outfit .= ', lookaddons'; $outfit_addons = true; } $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); $settingVocations = setting('core.vocations'); $settingVocationsAmount = setting('core.vocations_amount'); $players = []; foreach($playersOnline as $player) { $skull = ''; if($player['skulltime'] > 0) { if($player['skull'] == 3) { $skull = ' '; } elseif($player['skull'] == 4) { $skull = ' '; } elseif($player['skull'] == 5) { $skull = ' '; } } 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 = true; $result = ServerRecord::where('world_id', configLua('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']) . ')' : ''); } } } return [ 'players' => $players, 'record' => $record, 'vocations' => $vocations, ]; }); $twig->display('online.html.twig', array( 'players' => $cached['players'], 'record' => $cached['record'], 'vocations' => $cached['vocations'], 'vocs' => $cached['vocations'], // deprecated, to be removed 'order' => $order, )); // search bar $twig->display('characters.form.html.twig');