107 lines
3.1 KiB
PHP
107 lines
3.1 KiB
PHP
<?php
|
|
/* vim: set noexpandtab tabstop=2 softtabstop=2 shiftwidth=2: */
|
|
|
|
/**
|
|
* Msglog plugin.
|
|
* Keeps log of system messages, and displays the messages log.
|
|
* Created by Xymph
|
|
*
|
|
* Dependencies: none
|
|
*/
|
|
|
|
Aseco::addChatCommand('msglog', 'Displays log of recent system messages');
|
|
|
|
// handles action id "7223" for /msglog button
|
|
Aseco::registerEvent('onPlayerManialinkPageAnswer', 'event_msglog');
|
|
Aseco::registerEvent('onPlayerConnect', 'msglog_button');
|
|
|
|
global $msgbuf; // message history buffer
|
|
global $msglen; // length of message history
|
|
global $linlen; // max length of message line
|
|
global $winlen; // number of message lines
|
|
|
|
$msgbuf = array();
|
|
$msglen = 21;
|
|
$linlen = 800;
|
|
$winlen = 5;
|
|
|
|
function send_window_message($aseco, $message, $scoreboard) {
|
|
global $msgbuf, $msglen, $linlen, $winlen;
|
|
|
|
// append message line(s) to history
|
|
$message = explode(LF, $message);
|
|
foreach ($message as $item) {
|
|
// break up long (report) lines into chunks
|
|
$multi = explode(LF, wordwrap('$z$s' . $item, $linlen, LF . '$z$s$n'));
|
|
foreach ($multi as $line) {
|
|
// drop oldest message line if buffer full
|
|
if (count($msgbuf) >= $msglen) {
|
|
array_shift($msgbuf);
|
|
}
|
|
$msgbuf[] = $aseco->formatColors($line);
|
|
}
|
|
}
|
|
|
|
// check for display at end of track
|
|
if ($scoreboard) {
|
|
$aseco->client->query('GetChatTime');
|
|
$timeout = $aseco->client->getResponse();
|
|
$timeout = $timeout['CurrentValue'] + 5000; // podium animation
|
|
} else {
|
|
$timeout = $aseco->settings['window_timeout'] * 1000;
|
|
}
|
|
$lines = array_slice($msgbuf, -$winlen);
|
|
display_msgwindow($aseco, $lines, $timeout);
|
|
} // send_window_message
|
|
|
|
function chat_msglog($aseco, $command) {
|
|
global $msgbuf;
|
|
|
|
$player = $command['author'];
|
|
$login = $player->login;
|
|
|
|
if ($aseco->server->getGame() == 'TMF') {
|
|
if (!empty($msgbuf)) {
|
|
$header = 'Recent system message history:';
|
|
$msgs = array();
|
|
foreach ($msgbuf as $line)
|
|
$msgs[] = array($line);
|
|
|
|
// display ManiaLink message
|
|
display_manialink($login, $header, array('Icons64x64_1', 'NewMessage'), $msgs, array(1.53), 'OK');
|
|
} else {
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No system message history found!'), $login);
|
|
}
|
|
} else {
|
|
$message = $aseco->getChatMessage('FOREVER_ONLY');
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
|
|
}
|
|
} // chat_msglog
|
|
|
|
|
|
// called @ onPlayerConnect
|
|
function msglog_button($aseco, $player) {
|
|
|
|
display_msglogbutton($aseco, $player->login);
|
|
} // msglog_button
|
|
|
|
// called @ onPlayerManialinkPageAnswer // Handles ManiaLink style responses
|
|
// [0]=PlayerUid, [1]=Login, [2]=Answer
|
|
function event_msglog($aseco, $answer) {
|
|
|
|
// leave actions other than 7223 to other handlers
|
|
if ($answer[2] == 7223) {
|
|
// get player
|
|
$player = $aseco->server->players->getPlayer($answer[1]);
|
|
|
|
// log clicked command
|
|
$aseco->console('player {1} clicked command "/msglog "', $player->login);
|
|
|
|
// /msglog
|
|
$command = array();
|
|
$command['author'] = $player;
|
|
chat_msglog($aseco, $command);
|
|
}
|
|
} // event_msglog
|
|
?>
|