148 lines
5.4 KiB
PHP
148 lines
5.4 KiB
PHP
<?php
|
|
/* vim: set noexpandtab tabstop=2 softtabstop=2 shiftwidth=2: */
|
|
|
|
/**
|
|
* Uptodate plugin.
|
|
* Checks XASECO version at start-up & MasterAdmin connect, and provides
|
|
* /admin uptodate command.
|
|
* Also merges global blacklist at MasterAdmin connect, and provides
|
|
* /admin mergegbl command.
|
|
* Created by Xymph
|
|
*
|
|
* Dependencies: used by chat.admin.php
|
|
*/
|
|
|
|
Aseco::registerEvent('onSync', 'start_uptodate');
|
|
Aseco::registerEvent('onPlayerConnect', 'connect_uptodate');
|
|
Aseco::addChatCommand('uptodate', 'Checks current version of XASECO', true);
|
|
|
|
function up_to_date($aseco) {
|
|
|
|
$version_url = XASECO_TMN . 'version.txt'; // URL to current version file
|
|
|
|
// grab version file
|
|
$current = trim(http_get_file($version_url));
|
|
if ($current && $current != -1) {
|
|
// compare versions
|
|
if ($current != XASECO_VERSION) {
|
|
$message = formatText($aseco->getChatMessage('UPTODATE_NEW'), $current,
|
|
// hyperlink release page on TMF
|
|
($aseco->server->getGame() == 'TMF' ?
|
|
'$l[' . XASECO_TMN . ']' . XASECO_TMN . '$l' :
|
|
XASECO_TMN));
|
|
} else {
|
|
$message = formatText($aseco->getChatMessage('UPTODATE_OK'), $current);
|
|
}
|
|
} else {
|
|
$message = false;
|
|
}
|
|
return $message;
|
|
} // up_to_date
|
|
|
|
// called @ onSync
|
|
function start_uptodate($aseco, $command) {
|
|
global $uptodate_check;
|
|
|
|
// check version but ignore error
|
|
if ($uptodate_check && $message = up_to_date($aseco)) {
|
|
// show chat message
|
|
$aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message));
|
|
}
|
|
} // start_uptodate
|
|
|
|
// called @ onPlayerConnect
|
|
function connect_uptodate($aseco, $player) {
|
|
global $uptodate_check, $globalbl_merge, $globalbl_url;
|
|
|
|
// check for a master admin
|
|
if ($aseco->isMasterAdmin($player)) {
|
|
// check version but ignore error
|
|
if ($uptodate_check && $message = up_to_date($aseco)) {
|
|
// check whether out of date
|
|
if (!preg_match('/' . formatText($aseco->getChatMessage('UPTODATE_OK'), '.*') . '/', $message)) {
|
|
// strip 1 leading '>' to indicate a player message instead of system-wide
|
|
$message = str_replace('{#server}>> ', '{#server}> ', $message);
|
|
// show chat message
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $player->login);
|
|
}
|
|
}
|
|
|
|
// check whether to merge global black list
|
|
if ($globalbl_merge && $globalbl_url != '') {
|
|
admin_mergegbl($aseco, 'MasterAdmin', $player->login, false, $globalbl_url);
|
|
}
|
|
}
|
|
} // connect_uptodate
|
|
|
|
function admin_uptodate($aseco, $command) {
|
|
|
|
$login = $command['author']->login;
|
|
|
|
// check version or report error
|
|
if ($message = up_to_date($aseco)) {
|
|
// strip 1 leading '>' to indicate a player message instead of system-wide
|
|
$message = str_replace('{#server}>> ', '{#server}> ', $message);
|
|
// show chat message
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
|
|
} else {
|
|
$message = '{#server}> {#error}Error: can\'t access the last version!';
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
|
|
}
|
|
} // admin_uptodate
|
|
|
|
function admin_mergegbl($aseco, $logtitle, $login, $manual, $url) {
|
|
global $globalbl_united;
|
|
|
|
// download & parse global black list
|
|
$blacklist = http_get_file($url);
|
|
if ($blacklist && $blacklist != -1) {
|
|
if ($globals = $aseco->xml_parser->parseXml($blacklist, false)) {
|
|
// get current black list
|
|
$blacks = get_blacklist($aseco); // from chat.admin.php
|
|
|
|
// merge new global entries
|
|
$new = 0;
|
|
foreach ($globals['BLACKLIST']['PLAYER'] as $black) {
|
|
if (!array_key_exists($black['LOGIN'][0], $blacks)) {
|
|
// check for United account if needed
|
|
if (!isset($black['ACCOUNT'][0]) || !$globalbl_united ||
|
|
($globalbl_united && $black['ACCOUNT'][0] == 'United')) {
|
|
$aseco->client->addCall('BlackList', array($black['LOGIN'][0]));
|
|
$new++;
|
|
}
|
|
}
|
|
}
|
|
// send all entries and ignore results
|
|
if (!$aseco->client->multiquery(true)) {
|
|
trigger_error('[' . $this->client->getErrorCode() . '] BlackList (merge) - ' . $this->client->getErrorMessage(), E_USER_ERROR);
|
|
}
|
|
|
|
// update black list file if necessary
|
|
if ($new > 0) {
|
|
$filename = $aseco->settings['blacklist_file'];
|
|
$aseco->client->addCall('SaveBlackList', array($filename));
|
|
}
|
|
|
|
// check whether to report new mergers
|
|
if ($new > 0 || $manual) {
|
|
// log console message
|
|
$aseco->console('{1} [{2}] merged global blacklist [{3}] new: {4}', $logtitle, $login, $url, $new);
|
|
|
|
// show chat message
|
|
$message = formatText('{#server}> {#highlite}{1} {#server}new login{2} merged into blacklist',
|
|
$new, ($new == 1 ? '' : 's'));
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
|
|
}
|
|
} else {
|
|
$message = formatText('{#server}> {#error}Error: can\'t parse {#highlite}$i{1}{#error}!',
|
|
$url);
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
|
|
}
|
|
} else {
|
|
$message = formatText('{#server}> {#error}Error: can\'t access {#highlite}$i{1}{#error}!',
|
|
$url);
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login);
|
|
}
|
|
} // admin_mergegbl
|
|
?>
|