docker-tmserver/xaseco/plugins/chat.records.php

211 lines
7.6 KiB
PHP
Raw Normal View History

2022-06-26 17:43:44 +02:00
<?php
/* vim: set noexpandtab tabstop=2 softtabstop=2 shiftwidth=2: */
/**
* Chat plugin.
* Displays all records of the current track.
* Updated by Xymph
*
* Dependencies: none
*/
Aseco::addChatCommand('recs', 'Displays all records on current track');
function chat_recs($aseco, $command) {
$player = $command['author'];
$login = $player->login;
// split params into array
$arglist = explode(' ', strtolower(preg_replace('/ +/', ' ', $command['params'])));
// process optional relations commands
if ($arglist[0] == 'help') {
if ($aseco->server->getGame() == 'TMN') {
$help = '{#black}/recs <option>$g shows local records and relations' . LF;
$help .= ' - {#black}help$g, displays this help information' . LF;
$help .= ' - {#black}pb$g, your personal best on current track' . LF;
$help .= ' - {#black}new$g, newly driven records' . LF;
$help .= ' - {#black}live$g, records of online players' . LF;
$help .= ' - {#black}first$g, first ranked record on current track' . LF;
$help .= ' - {#black}last$g, last ranked record on current track' . LF;
$help .= ' - {#black}next$g, next better ranked record to beat' . LF;
$help .= ' - {#black}diff$g, your difference to first ranked record' . LF;
$help .= ' - {#black}range$g, difference first to last ranked record' . LF;
$help .= LF . 'Without an option, the normal records list is displayed.';
// display popup message
$aseco->client->query('SendDisplayServerMessageToLogin', $login, $aseco->formatColors($help), 'OK', '', 0);
} elseif ($aseco->server->getGame() == 'TMF') {
$header = '{#black}/recs <option>$g shows local records and relations:';
$help = array();
$help[] = array('...', '{#black}help',
'Displays this help information');
$help[] = array('...', '{#black}pb',
'Shows your personal best on current track');
$help[] = array('...', '{#black}new',
'Shows newly driven records');
$help[] = array('...', '{#black}live',
'Shows records of online players');
$help[] = array('...', '{#black}first',
'Shows first ranked record on current track');
$help[] = array('...', '{#black}last',
'Shows last ranked record on current track');
$help[] = array('...', '{#black}next',
'Shows next better ranked record to beat');
$help[] = array('...', '{#black}diff',
'Shows your difference to first ranked record');
$help[] = array('...', '{#black}range',
'Shows difference first to last ranked record');
$help[] = array();
$help[] = array('Without an option, the normal records list is displayed.');
// display ManiaLink message
display_manialink($login, $header, array('Icons64x64_1', 'TrackInfo', -0.01), $help, array(1.1, 0.05, 0.3, 0.75), 'OK');
}
return;
}
elseif ($arglist[0] == 'pb') {
chat_pb($aseco, $command);
return;
}
elseif ($arglist[0] == 'new') {
chat_newrecs($aseco, $command);
return;
}
elseif ($arglist[0] == 'live') {
chat_liverecs($aseco, $command);
return;
}
elseif ($arglist[0] == 'first') {
chat_firstrec($aseco, $command);
return;
}
elseif ($arglist[0] == 'last') {
chat_lastrec($aseco, $command);
return;
}
elseif ($arglist[0] == 'next') {
chat_nextrec($aseco, $command);
return;
}
elseif ($arglist[0] == 'diff') {
chat_diffrec($aseco, $command);
return;
}
elseif ($arglist[0] == 'range') {
chat_recrange($aseco, $command);
return;
}
// check for relay server
if ($aseco->server->isrelay) {
$message = formatText($aseco->getChatMessage('NOTONRELAY'));
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
return;
}
if (!$total = $aseco->server->records->count()) {
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No records found!'), $login);
return;
}
// display popup window for TMN
if ($aseco->server->getGame() == 'TMN') {
$head = 'Current TOP ' . $aseco->server->records->max . ' Local Records:' . LF;
$msg = '';
$lines = 0;
$player->msgs = array();
$player->msgs[0] = 1;
// create list of records
for ($i = 0; $i < $total; $i++) {
$cur_record = $aseco->server->records->getRecord($i);
$nick = $cur_record->player->nickname;
if (!$aseco->settings['lists_colornicks'])
$nick = stripColors($nick);
$msg .= str_pad($i+1, 2, '0', STR_PAD_LEFT) . '. {#black}'
. str_pad($nick, 20) . '$z - '
. ($cur_record->new ? '{#black}' : '')
. formatTime($cur_record->score) . LF;
if (++$lines > 9) {
$player->msgs[] = $aseco->formatColors($head . $msg);
$lines = 0;
$msg = '';
}
}
// add if last batch exists
if ($msg != '')
$player->msgs[] = $aseco->formatColors($head . $msg);
// display popup message
if (count($player->msgs) == 2) {
$aseco->client->query('SendDisplayServerMessageToLogin', $login, $player->msgs[1], 'OK', '', 0);
} else { // > 2
$aseco->client->query('SendDisplayServerMessageToLogin', $login, $player->msgs[1], 'Close', 'Next', 0);
}
// display ManiaLink window for TMF
} elseif ($aseco->server->getGame() == 'TMF') {
$head = 'Current TOP ' . $aseco->server->records->max . ' Local Records:';
$msg = array();
$lines = 0;
$player->msgs = array();
// reserve extra width for $w tags
$extra = ($aseco->settings['lists_colornicks'] ? 0.2 : 0);
if ($aseco->settings['show_rec_logins'])
$player->msgs[0] = array(1, $head, array(1.2+$extra, 0.1, 0.45+$extra, 0.4, 0.25), array('BgRaceScore2', 'Podium'));
else
$player->msgs[0] = array(1, $head, array(0.8+$extra, 0.1, 0.45+$extra, 0.25), array('BgRaceScore2', 'Podium'));
// create list of records
for ($i = 0; $i < $total; $i++) {
$cur_record = $aseco->server->records->getRecord($i);
$nick = $cur_record->player->nickname;
if (!$aseco->settings['lists_colornicks'])
$nick = stripColors($nick);
if ($aseco->settings['show_rec_logins']) {
$msg[] = array(str_pad($i+1, 2, '0', STR_PAD_LEFT) . '.',
'{#black}' . $nick,
'{#login}' . $cur_record->player->login,
($cur_record->new ? '{#black}' : '') .
($aseco->server->gameinfo->mode == Gameinfo::STNT ?
$cur_record->score : formatTime($cur_record->score)));
} else {
$msg[] = array(str_pad($i+1, 2, '0', STR_PAD_LEFT) . '.',
'{#black}' . $nick,
($cur_record->new ? '{#black}' : '') .
($aseco->server->gameinfo->mode == Gameinfo::STNT ?
$cur_record->score : formatTime($cur_record->score)));
}
if (++$lines > 14) {
$player->msgs[] = $msg;
$lines = 0;
$msg = array();
}
}
// add if last batch exists
if (!empty($msg))
$player->msgs[] = $msg;
// display ManiaLink message
display_manialink_multi($player);
// show chat message for TMO & TMS
} else {
$top = 4;
$msg = $aseco->formatColors("{#server}> Current TOP $top Local Records:{#highlite}");
// create list of records
$total = ($total <= $top ? $total : $top);
for ($i = 0; $i < $total; $i++) {
$cur_record = $aseco->server->records->getRecord($i);
$msg .= LF . ($i+1) . '. ' . str_pad(stripColors($cur_record->player->nickname), 15)
. ' - ' . formatTime($cur_record->score);
}
// show chat message
$aseco->client->query('ChatSendServerMessageToLogin', $msg, $login);
}
} // chat_recs
?>