142 lines
4.8 KiB
PHP
142 lines
4.8 KiB
PHP
<?php
|
|
/* vim: set noexpandtab tabstop=2 softtabstop=2 shiftwidth=2: */
|
|
|
|
/**
|
|
* Chat plugin.
|
|
* Displays main list of players.
|
|
* Updated by Xymph
|
|
*
|
|
* Dependencies: none
|
|
*/
|
|
|
|
Aseco::addChatCommand('players', 'Displays current list of nicks/logins');
|
|
|
|
// handles action id's "2001"-"2200" for /stats
|
|
Aseco::registerEvent('onPlayerManialinkPageAnswer', 'event_players');
|
|
|
|
function chat_players($aseco, $command) {
|
|
|
|
// use only first parameter
|
|
$command['params'] = explode(' ', $command['params'], 2);
|
|
$player = $command['author'];
|
|
$player->playerlist = array();
|
|
|
|
if ($aseco->server->getGame() == 'TMN') {
|
|
$head = 'Players On This Server:' . LF . 'Id {#nick}Nick $g/{#login} Login $g/{#black} $nNation$m'. LF;
|
|
$msg = '';
|
|
$pid = 1;
|
|
$lines = 0;
|
|
$player->msgs = array();
|
|
$player->msgs[0] = 1;
|
|
// create list of players, optionally by (sub)string
|
|
foreach ($aseco->server->players->player_list as $pl) {
|
|
if (strlen($command['params'][0]) == 0 ||
|
|
stripos(stripColors($pl->nickname), $command['params'][0]) !== false ||
|
|
stripos($pl->login, $command['params'][0]) !== false) {
|
|
$plarr = array();
|
|
$plarr['login'] = $pl->login;
|
|
$player->playerlist[] = $plarr;
|
|
|
|
$msg .= '$g' . str_pad($pid, 2, '0', STR_PAD_LEFT) . '. {#black}' .
|
|
str_ireplace('$w', '', $pl->nickname) . '$z / ' .
|
|
($aseco->isAnyAdmin($pl) ? '{#logina}' : '{#login}') . $pl->login .
|
|
'$g / {#black}$n' . $pl->nation . '$m' . LF;
|
|
$pid++;
|
|
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', $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 player(s) found!'), $player->login);
|
|
}
|
|
|
|
} elseif ($aseco->server->getGame() == 'TMF') {
|
|
$head = 'Players On This Server:';
|
|
$msg = array();
|
|
$msg[] = array('Id', '{#nick}Nick $g/{#login} Login', '{#black}Nation');
|
|
$pid = 1;
|
|
$lines = 0;
|
|
$player->msgs = array();
|
|
$player->msgs[0] = array(1, $head, array(1.3, 0.1, 0.9, 0.3), array('Icons128x128_1', 'Buddies'));
|
|
// create list of players, optionally by (sub)string
|
|
foreach ($aseco->server->players->player_list as $pl) {
|
|
if (strlen($command['params'][0]) == 0 ||
|
|
stripos(stripColors($pl->nickname), $command['params'][0]) !== false ||
|
|
stripos($pl->login, $command['params'][0]) !== false) {
|
|
$plarr = array();
|
|
$plarr['login'] = $pl->login;
|
|
$player->playerlist[] = $plarr;
|
|
|
|
// format nickname & login
|
|
$ply = '{#black}' . $pl->nickname . '$z / ' .
|
|
($aseco->isAnyAdmin($pl) ? '{#logina}' : '{#login}') . $pl->login;
|
|
// add clickable button
|
|
if ($aseco->settings['clickable_lists'] && $pid <= 200)
|
|
$ply = array($ply, $pid+2000); // action id
|
|
|
|
$nat = $pl->nation;
|
|
if (strlen($nat) > 14)
|
|
$nat = mapCountry($nat);
|
|
$msg[] = array(str_pad($pid, 2, '0', STR_PAD_LEFT) . '.',
|
|
$ply, '{#black}' . $nat);
|
|
$pid++;
|
|
if (++$lines > 14) {
|
|
$player->msgs[] = $msg;
|
|
$lines = 0;
|
|
$msg = array();
|
|
$msg[] = array('Id', '{#nick}Nick $g/{#login} Login', '{#black}Nation');
|
|
}
|
|
}
|
|
}
|
|
// add if last batch exists
|
|
if (count($msg) > 1)
|
|
$player->msgs[] = $msg;
|
|
|
|
// display ManiaLink message
|
|
if (count($player->msgs) > 1) {
|
|
display_manialink_multi($player);
|
|
} else { // == 1
|
|
$aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No player(s) found!'), $player->login);
|
|
}
|
|
}
|
|
} // chat_players
|
|
|
|
|
|
// called @ onPlayerManialinkPageAnswer
|
|
// Handles ManiaLink player responses
|
|
// [0]=PlayerUid, [1]=Login, [2]=Answer
|
|
function event_players($aseco, $answer) {
|
|
|
|
// leave actions outside 2001 - 2200 to other handlers
|
|
if ($answer[2] >= 2001 && $answer[2] <= 2200) {
|
|
// get player
|
|
$player = $aseco->server->players->getPlayer($answer[1]);
|
|
$target = $player->playerlist[$answer[2]-2001]['login'];
|
|
|
|
// log clicked command
|
|
$aseco->console('player {1} clicked command "/stats {2}"',
|
|
$player->login, $target);
|
|
|
|
// close main window because /stats can take a while
|
|
mainwindow_off($aseco, $player->login);
|
|
// /stats selected player
|
|
$command = array();
|
|
$command['author'] = $player;
|
|
$command['params'] = $target;
|
|
chat_stats($aseco, $command);
|
|
}
|
|
} // event_players
|
|
?>
|