server->records->count()) == 0) { $totalnew = -1; } else { // check whether to show range if ($aseco->settings['show_recs_range']) { // get the first & last ranked records $first = $aseco->server->records->getRecord(0); $last = $aseco->server->records->getRecord($total-1); // compute difference between records if ($aseco->server->gameinfo->mode != Gameinfo::STNT) { $diff = $last->score - $first->score; $sec = floor($diff/1000); $hun = ($diff - ($sec * 1000)) / 10; } else { // Stunts $diff = $first->score - $last->score; } } // get list of online players $players = array(); foreach ($aseco->server->players->player_list as $pl) { $players[] = $pl->login; } // collect new records and records by online players $totalnew = 0; // go through each record for ($i = 0; $i < $total; $i++) { $cur_record = $aseco->server->records->getRecord($i); // if the record is new then display it if ($cur_record->new) { $totalnew++; $record_msg = formatText($aseco->getChatMessage('RANKING_RECORD_NEW_ON'), $i+1, stripColors($cur_record->player->nickname), ($aseco->server->gameinfo->mode == Gameinfo::STNT ? $cur_record->score : formatTime($cur_record->score))); // always show new record $records .= $record_msg; } else { // check if player is online if (in_array($cur_record->player->login, $players)) { $record_msg = formatText($aseco->getChatMessage('RANKING_RECORD_ON'), $i+1, stripColors($cur_record->player->nickname), ($aseco->server->gameinfo->mode == Gameinfo::STNT ? $cur_record->score : formatTime($cur_record->score))); // check if last ranked record if ($mode != 0 && $i == $total-1) { $records .= $record_msg; } // check if always show (start of/during track) elseif ($mode == 1 || $mode == 2) { $records .= $record_msg; } else { // show record if < show_min_recs (end of track) if ($mode == 3 && $i < $aseco->settings['show_min_recs']) { $records .= $record_msg; } } } else { $record_msg = formatText($aseco->getChatMessage('RANKING_RECORD'), $i+1, stripColors($cur_record->player->nickname), ($aseco->server->gameinfo->mode == Gameinfo::STNT ? $cur_record->score : formatTime($cur_record->score))); // check if last ranked record if ($mode != 0 && $i == $total-1) { $records .= $record_msg; } // show offline record if < show_min_recs-2 (during track) elseif (($mode == 2 && $i < $aseco->settings['show_min_recs']-2) || // show offline record if < show_min_recs (start/end of track) (($mode == 1 || $mode == 3) && $i < $aseco->settings['show_min_recs'])) { $records .= $record_msg; } } } } } // define wording of the ranking message switch ($mode) { case 0: $timing = 'during'; break; case 1: $timing = 'before'; break; case 2: $timing = 'during'; break; case 3: $timing = 'after'; break; } $name = stripColors($aseco->server->challenge->name); if ($aseco->server->getGame() == 'TMF' && isset($aseco->server->challenge->tmx->name) && $aseco->server->challenge->tmx->name != '') $name = '$l[http://' . $aseco->server->challenge->tmx->prefix . '.tm-exchange.com/main.aspx?action=trackshow&id=' . $aseco->server->challenge->tmx->id . ']' . $name . '$l'; // define the ranking message if ($totalnew > 0) { $message = formatText($aseco->getChatMessage('RANKING_NEW'), $name, $timing, $totalnew); } elseif ($totalnew == 0 && $records != '$n') { // check whether to show range if ($aseco->settings['show_recs_range']) { $message = formatText($aseco->getChatMessage('RANKING_RANGE'), $name, $timing, ($aseco->server->gameinfo->mode == Gameinfo::STNT ? $diff : sprintf("%d.%02d", $sec, $hun))); } else { $message = formatText($aseco->getChatMessage('RANKING'), $name, $timing); } } elseif ($totalnew == 0 && $records == '$n') { $message = formatText($aseco->getChatMessage('RANKING_NONEW'), $name, $timing); } else { // $totalnew == -1 $message = formatText($aseco->getChatMessage('RANKING_NONE'), $name, $timing); } // append the records if any if ($records != '$n') { $records = substr($records, 0, strlen($records)-2); // strip trailing ", " $message .= LF . $records; } // show to player or all if ($login) { // strip 1 leading '>' to indicate a player message instead of system-wide $message = str_replace('{#server}>> ', '{#server}> ', $message); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } else { if (($window & 4) == 4 && function_exists('send_window_message')) send_window_message($aseco, $message, ($mode == 3)); else $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); } } // show_trackrecs function chat_newrecs($aseco, $command) { // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $command['author']->login); return; } // show only newly driven records show_trackrecs($aseco, $command['author']->login, 0, 0); } // chat_newrecs function chat_liverecs($aseco, $command) { // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $command['author']->login); return; } // show online & show_min_recs-2 records show_trackrecs($aseco, $command['author']->login, 2, 0); } // chat_liverecs function chat_best($aseco, $command) { // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $command['author']->login); return; } // display player records, best first disp_recs($aseco, $command, true); } // chat_best function chat_worst($aseco, $command) { // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $command['author']->login); return; } // display player records, worst first disp_recs($aseco, $command, false); } // chat_worst /* * Universal function to get list of all records for a player. * Called by disp_recs (chat_best & chat_worst), chat_summary and * chat_stats (in chat.stats.php). */ function get_recs($pid) { global $aseco; // get player's record for each track $list = array(); $order = ($aseco->server->gameinfo->mode == Gameinfo::STNT ? 'DESC' : 'ASC'); $query = 'SELECT Uid,PlayerId FROM records r LEFT JOIN challenges c ON (r.ChallengeId=c.Id) WHERE Uid IS NOT NULL ORDER BY ChallengeId ASC,Score ' . $order . ',Date ASC'; $result = mysql_query($query); $last = ''; while ($row = mysql_fetch_object($result)) { // check for new track & reset rank if ($last != $row->Uid) { $last = $row->Uid; $pos = 1; } if (isset($list[$row->Uid])) continue; // store player's challenges & records if ($row->PlayerId == $pid) { $list[$row->Uid] = $pos; continue; } $pos++; } mysql_free_result($result); // return list return $list; } // get_recs function disp_recs($aseco, $command, $order) { global $jb_buffer; $player = $command['author']; $target = $player; // check for optional login parameter if any admin if ($command['params'] != '' && $aseco->allowAbility($player, 'chat_bestworst')) if (!$target = $aseco->getPlayerParam($player, $command['params'], true)) return; // check for records if ($list = get_recs($target->id)) { // sort for best or worst records $order ? asort($list) : arsort($list); // get new/cached list of tracks $newlist = getChallengesCache($aseco); // from rasp.funcs.php // create list of records $player->tracklist = array(); if ($aseco->server->getGame() == 'TMN') { $head = ($order ? 'Best' : 'Worst') . ' Records for ' . $target->nickname . '$z:' . LF . 'Id Rec Name' . LF; $recs = ''; $tid = 1; $lines = 0; $player->msgs = array(); $player->msgs[0] = 1; foreach ($list as $uid => $pos) { // does the uid exist in the current server track list? if (array_key_exists($uid, $newlist)) { $row = $newlist[$uid]; // store track in player object for jukeboxing $trkarr = array(); $trkarr['name'] = $row['Name']; $trkarr['environment'] = $row['Environnement']; $trkarr['filename'] = $row['FileName']; $trkarr['uid'] = $row['UId']; $player->tracklist[] = $trkarr; // format track name $trackname = $row['Name']; if (!$aseco->settings['lists_colortracks']) $trackname = stripColors($trackname); // grey out if in history if (in_array($row['UId'], $jb_buffer)) $trackname = '{#grey}' . stripColors($trackname); else $trackname = '{#black}' . $trackname; $recs .= '$z' . str_pad($tid, 3, '0', STR_PAD_LEFT) . '. ' . str_pad($pos, 2, '0', STR_PAD_LEFT) . '. ' . $trackname . LF; $tid++; if (++$lines > 9) { $player->msgs[] = $aseco->formatColors($head . $recs); $lines = 0; $recs = ''; } } } // add if last batch exists if ($recs != '') $player->msgs[] = $aseco->formatColors($head . $recs); // display popup message if (count($player->msgs) == 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $player->login, $player->msgs[1], 'OK', '', 0); } elseif (count($player->msgs) > 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $player->login, $player->msgs[1], 'Close', 'Next', 0); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No records found!'), $player->login); } } elseif ($aseco->server->getGame() == 'TMF') { $envids = array('Stadium' => 11, 'Alpine' => 12, 'Bay' => 13, 'Coast' => 14, 'Island' => 15, 'Rally' => 16, 'Speed' => 17); $head = ($order ? 'Best' : 'Worst') . ' Records for ' . str_ireplace('$w', '', $target->nickname) . '$z:'; $recs = array(); if ($aseco->server->packmask != 'Stadium') $recs[] = array('Id', 'Rec', 'Name', 'Author', 'Env'); else $recs[] = array('Id', 'Rec', 'Name', 'Author'); $tid = 1; $lines = 0; $player->msgs = array(); // no extra width for $w tags due to nickname width in header if ($aseco->server->packmask != 'Stadium') $player->msgs[0] = array(1, $head, array(1.59, 0.12, 0.1, 0.8, 0.4, 0.17), array('Icons128x128_1', 'NewTrack', 0.02)); else $player->msgs[0] = array(1, $head, array(1.42, 0.12, 0.1, 0.8, 0.4), array('Icons128x128_1', 'NewTrack', 0.02)); foreach ($list as $uid => $pos) { // does the uid exist in the current server track list? if (array_key_exists($uid, $newlist)) { $row = $newlist[$uid]; // store track in player object for jukeboxing $trkarr = array(); $trkarr['name'] = $row['Name']; $trkarr['author'] = $row['Author']; $trkarr['environment'] = $row['Environnement']; $trkarr['filename'] = $row['FileName']; $trkarr['uid'] = $row['UId']; $player->tracklist[] = $trkarr; // format track name $trackname = $row['Name']; if (!$aseco->settings['lists_colortracks']) $trackname = stripColors($trackname); // grey out if in history if (in_array($row['UId'], $jb_buffer)) $trackname = '{#grey}' . stripColors($trackname); else { $trackname = '{#black}' . $trackname; // add clickable button if ($aseco->settings['clickable_lists'] && $tid <= 1900) $trackname = array($trackname, $tid+100); // action id } // format author name $trackauthor = $row['Author']; // add clickable button if ($aseco->settings['clickable_lists'] && $tid <= 1900) $trackauthor = array($trackauthor, -100-$tid); // action id // format env name $trackenv = $row['Environnement']; // add clickable button if ($aseco->settings['clickable_lists']) $trackenv = array($trackenv, $envids[$row['Environnement']]); // action id if ($aseco->server->packmask != 'Stadium') $recs[] = array(str_pad($tid, 3, '0', STR_PAD_LEFT) . '.', str_pad($pos, 2, '0', STR_PAD_LEFT) . '.', $trackname, $trackauthor, $trackenv); else $recs[] = array(str_pad($tid, 3, '0', STR_PAD_LEFT) . '.', str_pad($pos, 2, '0', STR_PAD_LEFT) . '.', $trackname, $trackauthor); $tid++; if (++$lines > 14) { $player->msgs[] = $recs; $lines = 0; $recs = array(); if ($aseco->server->packmask != 'Stadium') $recs[] = array('Id', 'Rec', 'Name', 'Author', 'Env'); else $recs[] = array('Id', 'Rec', 'Name', 'Author'); } } } // add if last batch exists if (count($recs) > 1) $player->msgs[] = $recs; if (count($player->msgs) > 1) { // display ManiaLink message display_manialink_multi($player); } else { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No records found!'), $player->login); } } } else { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No records found!'), $player->login); } } // disp_recs function chat_summary($aseco, $command) { global $maxrecs; $player = $command['author']; $target = $player; // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $player->login); return; } // check for optional login parameter if any admin if ($command['params'] != '' && $aseco->allowAbility($player, 'chat_summary')) if (!$target = $aseco->getPlayerParam($player, $command['params'], true)) return; // check for records if ($list = get_recs($target->id)) { // sort for best records asort($list); // get new/cached list of tracks $newlist = getChallengesCache($aseco); // from rasp.funcs.php // collect summary of first 3 records and count total $show = 3; $message = ''; $total = 0; $cntrec = 0; $currec = 0; foreach ($list as $uid => $rec) { // stop upon unranked record if ($rec > $maxrecs) break; // check if rec is for existing track if (array_key_exists($uid, $newlist)) { // count total ranked records $total++; // check for first 3 records if ($show > 0) { // check for same record if ($rec == $currec) { $cntrec++; } else { // collect next record sum if ($currec > 0) { $message .= formatText($aseco->getChatMessage('SUM_ENTRY'), $cntrec, ($cntrec > 1 ? 's' : ''), $currec); $show--; } // count first occurance of next record $cntrec = 1; $currec = $rec; } } } } // if less than 3 records, add the last one found if ($show > 0 && $currec > 0) { $message .= formatText($aseco->getChatMessage('SUM_ENTRY'), $cntrec, ($cntrec > 1 ? 's' : ''), $currec); $show--; } if ($message) { // define text version of number of top-3 records switch (3-$show) { case 1: $show = 'one'; break; case 2: $show = 'two'; break; case 3: $show = 'three'; break; } // show chat message $message = substr($message, 0, strlen($message)-2); // strip trailing ", " $message = formatText($aseco->getChatMessage('SUMMARY'), $target->nickname, $total, ($total > 1 ? 's' : ''), $show) . $message; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $player->login); } else { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No ranked records found!'), $player->login); } } else { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No ranked records found!'), $player->login); } } // chat_summary // define sorting function for descending top-3's function top3_compare($a, $b) { // compare #1 records if ($a[0] < $b[0]) return 1; elseif ($a[0] > $b[0]) return -1; // compare #2 records if ($a[1] < $b[1]) return 1; elseif ($a[1] > $b[1]) return -1; // compare #3 records if ($a[2] < $b[2]) return 1; elseif ($a[2] > $b[2]) return -1; // all equal return 0; } // top3_compare function chat_topsums($aseco, $command) { $player = $command['author']; // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $player->login); return; } if ($aseco->server->getGame() == 'TMN') { $head = 'TOP 100 of Top-3 Record Holders:'; $top = 100; $bgn = '{#black}'; // nickname begin $end = '$z'; // ... & end colors } elseif ($aseco->server->getGame() == 'TMF') { $head = 'TOP 100 of Top-3 Record Holders:'; $top = 100; $bgn = '{#black}'; // nickname begin } else { $head = '{#server}> TOP 4 of Top-3 Record Holders:{#highlite}'; $top = 4; $bgn = '{#highlite}'; $end = '{#highlite}'; } // get new/cached list of tracks $newlist = getChallengesCache($aseco); // from rasp.funcs.php // get current list of track IDs $query = 'SELECT Id,Uid FROM challenges'; $result = mysql_query($query); $tidlist = array(); while ($row = mysql_fetch_object($result)) { if (array_key_exists($row->Uid, $newlist)) $tidlist[] = $row->Id; } // collect top-3 records $recs = array(); $order = ($aseco->server->gameinfo->mode == Gameinfo::STNT ? 'DESC' : 'ASC'); foreach ($tidlist as $tid) { // get top-3 ranked records on this track $query = 'SELECT login FROM players,records WHERE players.id=records.playerid AND challengeid=' . $tid . ' ORDER BY score ' . $order . ',date ASC LIMIT 3'; $result = mysql_query($query); // tally top-3 record totals by login if ($row = mysql_fetch_array($result)) { if (isset($recs[$row[0]])) { $recs[$row[0]][0]++; } else { $recs[$row[0]] = array(1,0,0); } if ($row = mysql_fetch_array($result)) { if (isset($recs[$row[0]])) { $recs[$row[0]][1]++; } else { $recs[$row[0]] = array(0,1,0); } if ($row = mysql_fetch_array($result)) { if (isset($recs[$row[0]])) { $recs[$row[0]][2]++; } else { $recs[$row[0]] = array(0,0,1); } } } } mysql_free_result($result); } if (empty($recs)) { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No players with ranked records found!'), $player->login); return; } // sort players by #1, #2 & #3 records uasort($recs, 'top3_compare'); if ($aseco->server->getGame() == 'TMN') { $records = ''; $i = 1; $lines = 0; $player->msgs = array(); $player->msgs[0] = 1; foreach ($recs as $login => $top3) { // obtain nickname for this login $nick = $aseco->getPlayerNick($login); if (!$aseco->settings['lists_colornicks']) $nick = stripColors($nick); $records .= LF . str_pad($i, 2, '0', STR_PAD_LEFT) . '. ' . $bgn . str_pad($nick, 20) . $end . ' - ' . str_pad($top3[0], 3, ' ', STR_PAD_LEFT) . ' / ' . str_pad($top3[1], 3, ' ', STR_PAD_LEFT) . ' / ' . str_pad($top3[2], 3, ' ', STR_PAD_LEFT); $i++; if (++$lines > 9) { $player->msgs[] = $aseco->formatColors($head . $records); $lines = 0; $records = ''; } if ($i > $top) break; } // add if last batch exists if ($records != '') $player->msgs[] = $aseco->formatColors($head . $records); // 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); } } elseif ($aseco->server->getGame() == 'TMF') { $records = array(); $i = 1; $lines = 0; $player->msgs = array(); // reserve extra width for $w tags $extra = ($aseco->settings['lists_colornicks'] ? 0.2 : 0); $player->msgs[0] = array(1, $head, array(0.85+$extra, 0.1, 0.45+$extra, 0.3), array('BgRaceScore2', 'LadderRank')); foreach ($recs as $login => $top3) { // obtain nickname for this login $nick = $aseco->getPlayerNick($login); if (!$aseco->settings['lists_colornicks']) $nick = stripColors($nick); $records[] = array(str_pad($i, 2, '0', STR_PAD_LEFT) . '.', $bgn . $nick, str_pad($top3[0], 3, ' ', STR_PAD_LEFT) . ' / ' . str_pad($top3[1], 3, ' ', STR_PAD_LEFT) . ' / ' . str_pad($top3[2], 3, ' ', STR_PAD_LEFT)); $i++; if (++$lines > 14) { $player->msgs[] = $records; $lines = 0; $records = array(); } if ($i > $top) break; } // add if last batch exists if (!empty($records)) $player->msgs[] = $records; // display ManiaLink message display_manialink_multi($player); } else { // TMS/TMO $records = $head; $i = 1; foreach ($recs as $login => $top3) { // obtain nickname for this login $nick = stripColors($aseco->getPlayerNick($login)); $records .= LF . $i . '. ' . $bgn . str_pad($nick, 15) . $end . ' - ' . str_pad($top3[0], 3, ' ', STR_PAD_LEFT) . ' / ' . str_pad($top3[1], 3, ' ', STR_PAD_LEFT) . ' / ' . str_pad($top3[2], 3, ' ', STR_PAD_LEFT); $i++; if ($i > $top) break; } // show chat message $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($records), $player->login); } } // chat_topsums function chat_toprecs($aseco, $command) { global $maxrecs; $player = $command['author']; // check for relay server if ($aseco->server->isrelay) { $message = formatText($aseco->getChatMessage('NOTONRELAY')); $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $player->login); return; } if ($aseco->server->getGame() == 'TMN') { $head = 'TOP 100 Ranked Record Holders:'; $top = 100; $bgn = '{#black}'; // nickname begin $end = '$z'; // ... & end colors } elseif ($aseco->server->getGame() == 'TMF') { $head = 'TOP 100 Ranked Record Holders:'; $top = 100; $bgn = '{#black}'; // nickname begin } else { $head = '{#server}> TOP 4 Ranked Record Holders:{#highlite}'; $top = 4; $bgn = '{#highlite}'; $end = '{#highlite}'; } // get new/cached list of tracks $newlist = getChallengesCache($aseco); // from rasp.funcs.php // get current list of track IDs $query = 'SELECT Id,Uid FROM challenges'; $result = mysql_query($query); $tidlist = array(); while ($row = mysql_fetch_object($result)) { if (array_key_exists($row->Uid, $newlist)) $tidlist[] = $row->Id; } // collect record totals $recs = array(); $order = ($aseco->server->gameinfo->mode == Gameinfo::STNT ? 'DESC' : 'ASC'); foreach ($tidlist as $tid) { // get ranked records on this track $query = 'SELECT login FROM players,records WHERE players.id=records.playerid AND challengeid=' . $tid . ' ORDER BY score ' . $order . ',date ASC LIMIT ' . $maxrecs; $result = mysql_query($query); // update record totals by login while ($row = mysql_fetch_array($result)) { if (isset($recs[$row[0]])) $recs[$row[0]]++; else $recs[$row[0]] = 1; } mysql_free_result($result); } if (empty($recs)) { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No players with ranked records found!'), $player->login); return; } // sort for most records arsort($recs); if ($aseco->server->getGame() == 'TMN') { $records = ''; $i = 1; $lines = 0; $player->msgs = array(); $player->msgs[0] = 1; foreach ($recs as $login => $rec) { // obtain nickname for this login $nick = $aseco->getPlayerNick($login); if (!$aseco->settings['lists_colornicks']) $nick = stripColors($nick); $records .= LF . str_pad($i, 2, '0', STR_PAD_LEFT) . '. ' . $bgn . str_pad($nick, 20) . $end . ' - ' . $rec; $i++; if (++$lines > 9) { $player->msgs[] = $aseco->formatColors($head . $records); $lines = 0; $records = ''; } if ($i > $top) break; } // add if last batch exists if ($records != '') $player->msgs[] = $aseco->formatColors($head . $records); // 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); } } elseif ($aseco->server->getGame() == 'TMF') { $records = array(); $i = 1; $lines = 0; $player->msgs = array(); // reserve extra width for $w tags $extra = ($aseco->settings['lists_colornicks'] ? 0.2 : 0); $player->msgs[0] = array(1, $head, array(0.7+$extra, 0.1, 0.45+$extra, 0.15), array('BgRaceScore2', 'LadderRank')); foreach ($recs as $login => $rec) { // obtain nickname for this login $nick = $aseco->getPlayerNick($login); if (!$aseco->settings['lists_colornicks']) $nick = stripColors($nick); $records[] = array(str_pad($i, 2, '0', STR_PAD_LEFT) . '.', $bgn . $nick, $rec); $i++; if (++$lines > 14) { $player->msgs[] = $records; $lines = 0; $records = array(); } if ($i > $top) break; } // add if last batch exists if (!empty($records)) $player->msgs[] = $records; // display ManiaLink message display_manialink_multi($player); } else { // TMS/TMO $records = $head; $i = 1; foreach ($recs as $login => $rec) { // obtain nickname for this login $nick = stripColors($aseco->getPlayerNick($login)); $records .= LF . $i . '. ' . $bgn . str_pad($nick, 15) . $end . ' - ' . $rec; $i++; if ($i > $top) break; } // show chat message $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($records), $player->login); } } // chat_toprecs ?>