login; // collect players/nations stats $query = 'SELECT COUNT(Id), COUNT(DISTINCT Nation), SUM(TimePlayed) FROM players'; $res = mysql_query($query); if (mysql_num_rows($res) > 0) { $row = mysql_fetch_row($res); $players = $row[0]; $nations = $row[1]; $totaltime = $row[2]; mysql_free_result($res); $playdays = floor($totaltime / (24 * 3600)); $playtime = $totaltime - ($playdays * 24 * 3600); } else { mysql_free_result($res); trigger_error('No players/nations stats found!', E_USER_ERROR); } // get server uptime $aseco->client->query('GetNetworkStats'); $network = $aseco->client->getResponse(); $aseco->server->uptime = $network['Uptime']; $updays = floor($aseco->server->uptime / (24 * 3600)); $uptime = $aseco->server->uptime - ($updays * 24 * 3600); // showing info for TMN if ($aseco->server->getGame() == 'TMN') { $stats = 'Welcome to: ' . $aseco->server->name . '$z' . LF . LF; $stats .= '$gServer Date : {#black}' . date('M d, Y') . LF; $stats .= '$gServer Time : {#black}' . date('H:i:s T') . LF; $stats .= '$gUptime : {#black}' . $updays . ' day' . ($updays == 1 ? ' ' : 's ') . formatTimeH($uptime * 1000, false) . LF; $stats .= '$gTrack Count : {#black}' . $aseco->server->gameinfo->numchall . LF; $stats .= '$gGame Mode : {#black}' . $aseco->server->gameinfo->getMode() . LF; switch ($aseco->server->gameinfo->mode) { case 0: $stats .= '$gPoints Limit : {#black}' . $aseco->server->gameinfo->rndslimit . LF; break; case 1: $stats .= '$gTime Limit : {#black}' . formatTime($aseco->server->gameinfo->timelimit) . LF; break; case 2: $stats .= '$gPoints Limit : {#black}' . $aseco->server->gameinfo->teamlimit . LF; break; case 3: $stats .= '$gTime Limit : {#black}' . formatTime($aseco->server->gameinfo->lapslimit) . LF; break; } $stats .= '$gMax Players : {#black}' . $aseco->server->maxplay . LF; $stats .= '$gMax Specs : {#black}' . $aseco->server->maxspec . LF; $stats .= '$gRecs/Track : {#black}' . $maxrecs . LF; if ($feature_votes) { $stats .= '$gVoting info : {#black}/helpvote' . LF; } else { $stats .= '$gVote Timeout : {#black}' . formatTime($aseco->server->votetime) . LF; $stats .= '$gVote Ratio : {#black}' . round($aseco->server->voterate, 2) . LF; } if ($admin_contact) { $stats .= '$gAdmin Contact: {#black}' . $admin_contact . LF; } $stats .= LF . '$gVisited by $f80' . $players . ' $gPlayers from $f40' . $nations . ' $gNations' . LF; $stats .= 'who together played: {#black}' . $playdays . ' day' . ($playdays == 1 ? ' ' : 's ') . formatTimeH($playtime * 1000, false) . ' $g!'; // display popup message $aseco->client->query('SendDisplayServerMessageToLogin', $login, $aseco->formatColors($stats), 'OK', '', 0); // showing info for TMF } elseif ($aseco->server->getGame() == 'TMF') { // get more server settings in one go $comment = $aseco->client->addCall('GetServerComment', array()); $coppers = $aseco->client->addCall('GetServerCoppers', array()); $cuprpc = $aseco->client->addCall('GetCupRoundsPerChallenge', array()); if (!$aseco->client->multiquery()) { trigger_error('[' . $aseco->client->getErrorCode() . '] GetServer (multi) - ' . $aseco->client->getErrorMessage(), E_USER_WARNING); } else { $response = $aseco->client->getResponse(); $comment = $response[$comment][0]; $coppers = $response[$coppers][0]; $cuprpc = $response[$cuprpc][0]['CurrentValue']; } $header = 'Welcome to: ' . $aseco->server->name; $stats = array(); $stats[] = array('Server Date', '{#black}' . date('M d, Y')); $stats[] = array('Server Time', '{#black}' . date('H:i:s T')); $stats[] = array('Zone', '{#black}' . $aseco->server->zone); $field = 'Comment'; // break up long line into chunks with continuation strings $multicmt = explode(LF, wordwrap($comment, 35, LF . '...')); foreach ($multicmt as $line) { $stats[] = array($field, '{#black}' . $line); $field = ''; } $stats[] = array('Uptime', '{#black}' . $updays . ' day' . ($updays == 1 ? ' ' : 's ') . formatTimeH($uptime * 1000, false)); if ($aseco->server->isrelay) $stats[] = array('Relays', '{#black}' . $aseco->server->relaymaster['Login'] . ' / ' . $aseco->server->relaymaster['NickName']); else $stats[] = array('Track Count', '{#black}' . $aseco->server->gameinfo->numchall); $stats[] = array('Game Mode', '{#black}' . $aseco->server->gameinfo->getMode()); switch ($aseco->server->gameinfo->mode) { case 0: $stats[] = array('Points Limit', '{#black}' . $aseco->server->gameinfo->rndslimit); break; case 1: $stats[] = array('Time Limit', '{#black}' . formatTime($aseco->server->gameinfo->timelimit)); break; case 2: $stats[] = array('Points Limit', '{#black}' . $aseco->server->gameinfo->teamlimit); break; case 3: $stats[] = array('Time Limit', '{#black}' . formatTime($aseco->server->gameinfo->lapslimit)); break; case 4: $stats[] = array('Time Limit', '{#black}' . formatTime(5 * 60 * 1000)); // always 5 minutes? break; case 5: $stats[] = array('Points Limit', '{#black}' . $aseco->server->gameinfo->cuplimit . '$g R/C: {#black}' . $cuprpc); break; } $stats[] = array('Max Players', '{#black}' . $aseco->server->maxplay); $stats[] = array('Max Specs', '{#black}' . $aseco->server->maxspec); $stats[] = array('Recs/Track', '{#black}' . $maxrecs); if ($feature_votes) { $stats[] = array('Voting info', '{#black}/helpvote'); } else { $stats[] = array('Vote Timeout', '{#black}' . formatTime($aseco->server->votetime)); $stats[] = array('Vote Ratio', '{#black}' . round($aseco->server->voterate, 2)); } // check for TMUF server if ($aseco->server->rights) { $stats[] = array('Rights', '{#black}United' . ($aseco->allowAbility($player, 'server_coppers') ? ' $gCoppers: {#black}' . $coppers : '')); } else { // TMNF $stats[] = array('Rights', '{#black}Nations'); } $stats[] = array('Ladder Limits', '{#black}' . $aseco->server->laddermin . '$g - {#black}' . $aseco->server->laddermax); if ($admin_contact) { $stats[] = array('Admin Contact', '{#black}' . $admin_contact); } $stats[] = array(); $stats[] = array('Visited by $f80' . $players . ' $gPlayers from $f40' . $nations . ' $gNations'); $stats[] = array('who together played: {#black}' . $playdays . ' day' . ($playdays == 1 ? ' ' : 's ') . formatTimeH($playtime * 1000, false) . ' $g!'); // display ManiaLink message display_manialink($login, $header, array('Icons64x64_1', 'DisplaySettings', 0.01), $stats, array(1.0, 0.3, 0.7), 'OK'); } else { // TMS/TMO $stats = '{#server}>> Server Stats' . LF; $stats .= 'Showing info of ' . $aseco->server->name . LF; // no info actually shown // show chat message $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($stats), $login); } } // chat_server function chat_xaseco($aseco, $command) { global $admin_contact; // from rasp.settings.php $player = $command['author']; $login = $player->login; $uptime = time() - $aseco->uptime; $updays = floor($uptime / (24 * 3600)); $uptime = $uptime - ($updays * 24 * 3600); // showing info for TMN if ($aseco->server->getGame() == 'TMN') { $info = 'XASECO info: ' . $aseco->server->name . '$z' . LF . LF; $info .= '$gVersion : {#black}' . XASECO_VERSION . LF; $info .= '$gUptime : {#black}' . $updays . ' day' . ($updays == 1 ? ' ' : 's ') . formatTimeH($uptime * 1000, false) . LF; $info .= '$gWebsites : {#black}' . XASECO_ORG . LF; $info .= '$g {#black}' . XASECO_TMN . LF; $info .= '$g {#black}' . XASECO_TMF . LF; $info .= '$g {#black}' . XASECO_TM2 . LF; $info .= '$gCredits : {#black}Main author: Xymph (since v0.8)' . LF; $info .= '$g {#black}Original authors: $nFlo, Assembler Maniac, Jfreu & others$m' . LF; if (isset($aseco->masteradmin_list['TMLOGIN'])) { // count non-LAN logins $count = 0; foreach ($aseco->masteradmin_list['TMLOGIN'] as $lgn) { if ($lgn != '' && !isLANLogin($lgn)) { $count++; } } if ($count > 0) { $field = 'Masteradmin'; if ($count > 1) $field .= 's'; else $field .= ' '; $field .= ' : '; foreach ($aseco->masteradmin_list['TMLOGIN'] as $lgn) { // skip any LAN logins if ($lgn != '' && !isLANLogin($lgn)) { $info .= '$g' . $field . '{#black}' . $aseco->getPlayerNick($lgn) . '$z' . LF; $field = ' '; } } } } if ($admin_contact) { $info .= '$gAdmin Contact: {#black}' . $admin_contact . LF; } // display popup message $aseco->client->query('SendDisplayServerMessageToLogin', $login, $aseco->formatColors($info), 'OK', '', 0); // showing info for TMF } elseif ($aseco->server->getGame() == 'TMF') { // prepare Welcome message $welcome = formatText($aseco->getChatMessage('WELCOME'), stripColors($player->nickname), $aseco->server->name, XASECO_VERSION); $header = 'XASECO info: ' . $aseco->server->name; $info = array(); $info[] = array('Version', '{#black}' . XASECO_VERSION); $field = 'Welcome'; $welcome = preg_split('/{br}/', $aseco->formatColors($welcome)); foreach ($welcome as $line) { $info[] = array($field, '{#black}' . $line); $field = ''; } $info[] = array('Uptime', '{#black}' . $updays . ' day' . ($updays == 1 ? ' ' : 's ') . formatTimeH($uptime * 1000, false)); $info[] = array('Websites', '{#black}$l[' . XASECO_ORG . ']' . XASECO_ORG . '$l'); $info[] = array('', '{#black}$l[' . XASECO_TMN . ']' . XASECO_TMN . '$l'); $info[] = array('', '{#black}$l[' . XASECO_TMF . ']' . XASECO_TMF . '$l'); $info[] = array('', '{#black}$l[' . XASECO_TM2 . ']' . XASECO_TM2 . '$l'); $info[] = array('Credits', '{#black}Main author: Xymph (since v0.8)'); $info[] = array('', '{#black}Original authors: Flo, Assembler Maniac, Jfreu & others'); if (isset($aseco->masteradmin_list['TMLOGIN'])) { // count non-LAN logins $count = 0; foreach ($aseco->masteradmin_list['TMLOGIN'] as $lgn) { if ($lgn != '' && !isLANLogin($lgn)) { $count++; } } if ($count > 0) { $field = 'Masteradmin'; if ($count > 1) $field .= 's'; foreach ($aseco->masteradmin_list['TMLOGIN'] as $lgn) { // skip any LAN logins if ($lgn != '' && !isLANLogin($lgn)) { $info[] = array($field, '{#black}' . $aseco->getPlayerNick($lgn) . '$z'); $field = ''; } } } } if ($admin_contact) { $info[] = array('Admin Contact', '{#black}' . $admin_contact); } // display ManiaLink message display_manialink($login, $header, array('BgRaceScore2', 'Warmup'), $info, array(1.0, 0.3, 0.7), 'OK'); } else { // TMS/TMO $info = '{#server}>> XASECO Info' . LF; $info .= 'Showing info of ' . $aseco->server->name . LF; // no info actually shown // show chat message $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($info), $login); } } // chat_xaseco function chat_plugins($aseco, $command) { $player = $command['author']; // display plugins list for TMN if ($aseco->server->getGame() == 'TMN') { $head = $aseco->formatColors('Currently active plugins:{#black}') . LF; $list = ''; $lines = 0; $player->msgs = array(); $player->msgs[0] = 1; // create list of plugins foreach ($aseco->plugins as $plugin) { $list .= $plugin . LF; if (++$lines > 14) { $player->msgs[] = $head . $list; $lines = 0; $list = ''; } } // add if last batch exists if ($list != '') $player->msgs[] = $head . $list; // display popup message if (count($player->msgs) == 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $player->login, $player->msgs[1], 'OK', '', 0); } else { // > 2 $aseco->client->query('SendDisplayServerMessageToLogin', $player->login, $player->msgs[1], 'Close', 'Next', 0); } // display plugins list for TMF } elseif ($aseco->server->getGame() == 'TMF') { $head = 'Currently active plugins:'; $list = array(); $lines = 0; $player->msgs = array(); $player->msgs[0] = array(1, $head, array(0.7), array('Icons128x128_1', 'Browse', 0.02)); // create list of plugins foreach ($aseco->plugins as $plugin) { $list[] = array('{#black}' . $plugin); if (++$lines > 14) { $player->msgs[] = $list; $lines = 0; $list = array(); } } // add if last batch exists if (!empty($list)) $player->msgs[] = $list; // display ManiaLink message display_manialink_multi($player); } // TMO/TMS } // chat_plugins function chat_nations($aseco, $command) { if ($aseco->server->getGame() == 'TMN') $top = 10; elseif ($aseco->server->getGame() == 'TMF') $top = 10; else // TMS/TMO $top = 4; $query = 'SELECT Nation, COUNT(Nation) AS count FROM players GROUP BY Nation ORDER BY count DESC LIMIT ' . $top; $res = mysql_query($query); // collect and sort nations if (mysql_num_rows($res) > 0) { $nations = array(); while ($row = mysql_fetch_row($res)) { $nations[$row[0]] = $row[1]; } mysql_free_result($res); } else { trigger_error('No players/nations found!', E_USER_WARNING); mysql_free_result($res); return; } arsort($nations); if ($aseco->server->getGame() == 'TMN') { $nats = 'TOP 10 Most Visiting Nations:'; $bgn = '{#black}'; // nation begin $end = '$g'; // ... & end colors // compile sorted nations $i = 1; foreach ($nations as $nat => $tot) { $nats .= LF . $i++ . '. ' . $bgn . $nat . $end . ' - ' . $tot; } // display popup message $aseco->client->query('SendDisplayServerMessageToLogin', $command['author']->login, $aseco->formatColors($nats), 'OK', '', 0); } elseif ($aseco->server->getGame() == 'TMF') { $header = 'TOP 10 Most Visiting Nations:'; $nats = array(); $bgn = '{#black}'; // nation begin // compile sorted nations $i = 1; foreach ($nations as $nat => $tot) { $nats[] = array($i++ . '.', $bgn . $nat, $tot); } // display ManiaLink message display_manialink($command['author']->login, $header, array('Icons128x128_1', 'Credits'), $nats, array(0.8, 0.1, 0.4, 0.3), 'OK'); } else { // TMS/TMO $nats = '{#server}> TOP 4 Most Visiting Nations:{#highlite}'; $bgn = '{#highlite}'; $end = '{#highlite}'; // compile sorted nations $i = 1; foreach ($nations as $nat => $tot) { $nats .= LF . $i++ . '. ' . $bgn . $nat . $end . ' - ' . $tot; } // show chat message $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($nats), $command['author']->login); } } // chat_nations ?>