server->jfreu->red; $yel = $aseco->server->jfreu->yellow; $whi = $aseco->server->jfreu->white; $blu = $aseco->server->jfreu->blue; $gre = $aseco->server->jfreu->green; $admin = $command['author']; $login = $admin->login; // check if chat command was allowed for a masteradmin/admin/operator if ($aseco->isMasterAdmin($admin)) { $logtitle = 'MasterAdmin'; $chattitle = $aseco->titles['MASTERADMIN'][0]; } else { if ($aseco->isAdmin($admin) && $aseco->allowAdminAbility('chat_jfreu')) { $logtitle = 'Admin'; $chattitle = $aseco->titles['ADMIN'][0]; } else { if ($aseco->isOperator($admin) && $aseco->allowOpAbility('chat_jfreu')) { $logtitle = 'Operator'; $chattitle = $aseco->titles['OPERATOR'][0]; } else { // write warning in console $aseco->console($login . ' tried to use Jfreu chat command (no permission!): ' . $command['params']); // sends chat message $aseco->client->query('ChatSendToLogin', $red.'You don\'t have the required admin rights to do that!', $login); return false; } } } // check for unlocked password if ($aseco->settings['lock_password'] != '' && !$admin->unlocked) { // write warning in console $aseco->console($login . ' tried to use Jfreu chat command (not unlocked!): ' . $command['params']); // sends chat message $aseco->client->query('ChatSendToLogin', $red.'You don\'t have the required admin rights to do that!', $login); return false; } // split params into arrays & insure optional parameters exist $arglist = explode(' ', $command['params'], 2); if (!isset($arglist[1])) $arglist[1] = ''; $command['params'] = explode(' ', preg_replace('/ +/', ' ', $command['params'])); if (!isset($command['params'][1])) $command['params'][1] = ''; // Show jfreuAdmin help. if ($command['params'][0] == 'help') { // show Jfreu commands on command line showHelp($admin, $aseco->server->jfreu->admin_commands, 'Jfreu admin', true, false); } // Display jfreuAdmin help. elseif ($command['params'][0] == 'helpall') { // display Jfreu commands in popup with descriptions showHelp($admin, $aseco->server->jfreu->admin_commands, 'Jfreu admin', true, true, 0.45); } // Set autochangename ON/OFF. elseif ($command['params'][0] == 'autochangename') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->autochangename = true; // log console message $aseco->console('{1} [{2}] set autochangename: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoChangeName: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->autochangename = false; // log console message $aseco->console('{1} [{2}] set autochangename: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoChangeName: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'AutoChangeName is: '.$whi. ($aseco->server->jfreu->autochangename ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set ranklimit ON/OFF. elseif ($command['params'][0] == 'setrank') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->ranklimit = true; // log console message $aseco->console('{1} [{2}] set rank limiting: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set RankLimit: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); if ($aseco->server->jfreu->autochangename) { $servername = $aseco->server->jfreu->servername . $aseco->server->jfreu->top . $aseco->server->jfreu->limit; $aseco->client->query('SetServerName', $servername); } } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->ranklimit = false; // log console message $aseco->console('{1} [{2}] set rank limiting: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set RankLimit: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); if ($aseco->server->jfreu->autochangename) { $servername = $aseco->server->jfreu->servername . ' NoLimit'; $aseco->client->query('SetServerName', $servername); } } } else { $message = $yel.'> '.$blu.'RankLimit is: '.$whi. ($aseco->server->jfreu->ranklimit ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set ranklimit value. elseif ($command['params'][0] == 'setlimit') { if ($command['params'][1] != '') { if (is_numeric($command['params'][1]) && $command['params'][1] > 0 && $command['params'][1] < 2000000) { if ($aseco->server->jfreu->autorank) { set_ranklimit($aseco, $command['params'][1], 2); } else { set_ranklimit($aseco, $command['params'][1], 0); } write_config_xml($aseco); // log console message $aseco->console('{1} [{2}] set (auto)ranklimit: {3}', $logtitle, $login, $command['params'][1]); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid ranklimit value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } else { $message = $yel.'> '.$blu.'RankLimit value is: '.$whi.$aseco->server->jfreu->limit.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } // Set autorank ON/OFF. elseif ($command['params'][0] == 'autorank') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->autorank = true; // log console message $aseco->console('{1} [{2}] set autoranking: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoRank: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); autorank($aseco, $command); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->autorank = false; // log console message $aseco->console('{1} [{2}] set autoranking: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoRank: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); set_ranklimit($aseco, $aseco->server->jfreu->limit, 0); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'AutoRank is: '.$whi. ($aseco->server->jfreu->autorank ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set offset value. elseif ($command['params'][0] == 'offset') { if ($command['params'][1] != '') { if (is_numeric($command['params'][1]) && $command['params'][1] > -1000 && $command['params'][1] < 1000) { $aseco->server->jfreu->offset = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set autorank offset: {3}', $logtitle, $login, $aseco->server->jfreu->offset); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoRank Offset to: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $aseco->server->jfreu->offset); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); autorank($aseco, $command); write_config_xml($aseco); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid offset value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } else { $message = $yel.'> '.$blu.'AutoRank Offset value is: '.$whi.$aseco->server->jfreu->offset.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set hardlimit value. elseif ($command['params'][0] == 'hardlimit') { if ($command['params'][1] != '') { if (is_numeric($command['params'][1]) && $command['params'][1] >= 0 && $command['params'][1] < 2000000) { $aseco->server->jfreu->hardlimit = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set hardlimit: {3}', $logtitle, $login, $aseco->server->jfreu->hardlimit); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set HardLimit to: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $aseco->server->jfreu->hardlimit); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid hardlimit value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } elseif ($aseco->server->jfreu->hardlimit > 0) { $message = $yel.'> '.$blu.'HardLimit value is: '.$whi.$aseco->server->jfreu->hardlimit.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } else { $message = $yel.'> '.$blu.'HardLimit is: '.$whi.'OFF'.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set autorankminplayers value. elseif ($command['params'][0] == 'autorankminplayers') { if ($command['params'][1] != '') { if (is_numeric($command['params'][1]) && $command['params'][1] >= 0 && $command['params'][1] < 50) { $aseco->server->jfreu->autorankminplayers = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set autorankminplayers: {3}', $logtitle, $login, $aseco->server->jfreu->autorankminplayers); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoRankMinPlayer to: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $aseco->server->jfreu->autorankminplayers); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); autorank($aseco, $command); write_config_xml($aseco); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid minplayers value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } else { $message = $yel.'> '.$blu.'AutoRankMinPlayer value is: '.$whi.$aseco->server->jfreu->autorankminplayers.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set autorankvip ON/OFF. elseif ($command['params'][0] == 'autorankvip') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->autorankvip = true; // log console message $aseco->console('{1} [{2}] set autorankvip: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoRankVIP: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->autorankvip = false; // log console message $aseco->console('{1} [{2}] set autorankvip: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set AutoRankVIP: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'AutoRankVIP is: '.$whi. ($aseco->server->jfreu->autorankvip ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set maxplayers value. elseif ($command['params'][0] == 'maxplayers') { if ($command['params'][1] != '') { if ($command['params'][1] >= 0 && $command['params'][1] < 150) { $aseco->server->jfreu->maxplayers = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set maxplayers: {3}', $logtitle, $login, $aseco->server->jfreu->maxplayers); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set MaxPlayers to: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $aseco->server->jfreu->maxplayers); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid maxplayers value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } else { $message = $yel.'> '.$blu.'MaxPlayers value is: '.$whi.$aseco->server->jfreu->maxplayers.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set kickhirank ON/OFF. elseif ($command['params'][0] == 'kickhirank') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->kickhirank = true; // log console message $aseco->console('{1} [{2}] set kickhirank: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set KickHiRank: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->kickhirank = false; // log console message $aseco->console('{1} [{2}] set kickhirank: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set KickHiRank: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'KickHiRank is: '.$whi. ($aseco->server->jfreu->kickhirank ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Displays rank limit settings elseif ($command['params'][0] == 'listlimits') { if ($aseco->server->getGame() == 'TMN') { $limits = 'Current rank limit settings:' . LF; $limits .= ' $gRank limiting : {#black}' . ($aseco->server->jfreu->ranklimit ? 'ON' : 'OFF') . LF; $limits .= ' $gRank limit : {#black}' . $aseco->server->jfreu->limit . LF; $limits .= ' $gHard limit : {#black}' . $aseco->server->jfreu->hardlimit . LF; $limits .= ' $gAuto ranking : {#black}' . ($aseco->server->jfreu->autorank ? 'ON' : 'OFF') . LF; $limits .= ' $gAutorank offset : {#black}' . $aseco->server->jfreu->offset . LF; $limits .= ' $gAutorank limit : {#black}' . $aseco->server->jfreu->autolimit . LF; $limits .= ' $gAutorank minplayers: {#black}' . $aseco->server->jfreu->autorankminplayers . LF; $limits .= ' $gAutorank VIP : {#black}' . ($aseco->server->jfreu->autorankvip ? 'ON' : 'OFF') . LF; $limits .= ' $gMaxplayers HiRank : {#black}' . $aseco->server->jfreu->maxplayers . LF; $limits .= ' $gKickHiRank : {#black}' . ($aseco->server->jfreu->kickhirank ? 'ON' : 'OFF'); // display popup message $aseco->client->query('SendDisplayServerMessageToLogin', $login, $aseco->formatColors($limits), 'OK', '', 0); } elseif ($aseco->server->getGame() == 'TMF') { $header = 'Current rank limit settings:'; $limits = array(); $limits[] = array('Rank limiting', '{#black}' . ($aseco->server->jfreu->ranklimit ? 'ON' : 'OFF')); $limits[] = array('Rank limit', '{#black}' . $aseco->server->jfreu->limit); $limits[] = array('Hard limit', '{#black}' . $aseco->server->jfreu->hardlimit); $limits[] = array('Auto ranking', '{#black}' . ($aseco->server->jfreu->autorank ? 'ON' : 'OFF')); $limits[] = array('Autorank offset', '{#black}' . $aseco->server->jfreu->offset); $limits[] = array('Autorank limit', '{#black}' . $aseco->server->jfreu->autolimit); $limits[] = array('Autorank minplayers', '{#black}' . $aseco->server->jfreu->autorankminplayers); $limits[] = array('Autorank VIP', '{#black}' . ($aseco->server->jfreu->autorankvip ? 'ON' : 'OFF')); $limits[] = array('Maxplayers HiRank', '{#black}' . $aseco->server->jfreu->maxplayers); $limits[] = array('KickHiRank', '{#black}' . ($aseco->server->jfreu->kickhirank ? 'ON' : 'OFF')); // display ManiaLink message display_manialink($login, $header, array('Icons128x128_1', 'ProfileAdvanced', 0.02), $limits, array(0.8, 0.4, 0.4), 'OK'); } } // KickWorst (kick X worst players) elseif ($command['params'][0] == 'kickworst' && $command['params'][1] != '') { if (is_numeric($command['params'][1]) && $command['params'][1] > 0 && $command['params'][1] < 50) { $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} kicks the {#highlite}{3}{#message} worst ranked player{4}.', $chattitle, $admin->nickname, $command['params'][1], ($command['params'][1] == 1 ? '' : 's')); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); kick_worst($aseco, $command['params'][1]); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid kickworst value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } // Players (display players list) elseif ($command['params'][0] == 'players') { $admin->playerlist = array(); $admin->msgs = array(); // remember players parameter for possible refresh $admin->panels['plyparam'] = $command['params'][1]; $onlineonly = (strtolower($command['params'][1]) == 'live'); // create new list of online players $aseco->client->resetError(); $onlinelist = array(); // get current players on the server (hardlimited to 300) if ($aseco->server->getGame() == 'TMF') $aseco->client->query('GetPlayerList', 300, 0, 1); else $aseco->client->query('GetPlayerList', 300, 0); $players = $aseco->client->getResponse(); if ($aseco->client->isError()) { trigger_error('[' . $aseco->client->getErrorCode() . '] GetPlayerList - ' . $aseco->client->getErrorMessage(), E_USER_WARNING); } else { foreach ($players as $pl) if ($aseco->server->getGame() == 'TMF') { // on relay, check for player from master server if (!$aseco->server->isrelay || floor($pl['Flags'] / 10000) % 10 == 0) $onlinelist[$pl['Login']] = array('login' => $pl['Login'], 'spec' => $pl['SpectatorStatus']); } else { $onlinelist[$pl['Login']] = array('login' => $pl['Login'], 'spec' => $pl['IsSpectator']); } } $playerlist = array(); // use online list? if ($onlineonly) { foreach ($aseco->server->jfreu->playerlist as $pl => $entry) { if (array_key_exists($pl, $onlinelist)) $playerlist[$pl] = $entry; } } else { // search for known logins foreach ($aseco->server->jfreu->playerlist as $pl => $entry) { if ($command['params'][1] == '' || stripos($pl, $command['params'][1]) !== false) $playerlist[$pl] = $entry; } // append vip list foreach ($aseco->server->jfreu->vip_list as $pl) { // check if vip is not yet in the new list and matches search if ($pl != '' && !array_key_exists($pl, $playerlist) && ($command['params'][1] == '' || stripos($pl, $command['params'][1]) !== false)) { ajouter_joueur_liste($aseco, $pl, true, false); $playerlist[$pl] = $aseco->server->jfreu->playerlist[$pl]; } } } if (!empty($playerlist)) { if ($aseco->server->getGame() == 'TMN') { $head = ($onlineonly ? 'Online' : 'Known') . ' Players On This Server:' . LF . 'Id ' . ($aseco->server->jfreu->badwords ? 'Bw ' : '') . '{#nick}Nick $g/{#login} Login' . LF; $msg = ''; $pid = 1; $lines = 0; $admin->msgs[0] = 1; foreach ($playerlist as $pl => $entry) { $plarr = array(); $plarr['login'] = $pl; $admin->playerlist[] = $plarr; // check for badwords filtering $msg .= '$g' . str_pad($pid, 2, '0', STR_PAD_LEFT) . '. ' . ($aseco->server->jfreu->badwords ? $entry->badwords . ' ' : '') . '{#black}' . str_ireplace('$w', '', $aseco->getPlayerNick($pl)) . '$z / ' . ($aseco->isAnyAdminL($pl) ? '{#logina}' : '{#login}') . $pl . LF; $pid++; if (++$lines > 9) { $admin->msgs[] = $aseco->formatColors($head . $msg); $lines = 0; $msg = ''; } } // add if last batch exists if ($msg != '') $admin->msgs[] = $aseco->formatColors($head . $msg); // display popup message if (count($admin->msgs) == 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'OK', '', 0); } elseif (count($admin->msgs) > 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'Close', 'Next', 0); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No player(s) found!'), $login); } } elseif ($aseco->server->getGame() == 'TMF') { $head = ($onlineonly ? 'Online' : 'Known') . ' Players On This Server:'; $msg = array(); // check for badwords filtering if ($aseco->server->jfreu->badwords) { $msg[] = array('Id', '{#nick}Nick $g/{#login} Login', '$nCount', 'BadW', 'Ban', 'Ban', 'Left', 'UnBan', 'VIP', 'Spec'); $admin->msgs[0] = array(1, $head, array(1.591, 0.15, 0.5, 0.10, 0.12, 0.12, 0.12, 0.12, 0.121, 0.12, 0.12), array('Icons128x128_1', 'Buddies')); } else { $msg[] = array('Id', '{#nick}Nick $g/{#login} Login', 'Ban', 'Ban', 'Left', 'UnBan', 'VIP', 'Spec'); $admin->msgs[0] = array(1, $head, array(1.371, 0.15, 0.5, 0.12, 0.12, 0.12, 0.121, 0.12, 0.12), array('Icons128x128_1', 'Buddies')); } $pid = 1; $lines = 0; $time = time(); foreach ($playerlist as $pl => $entry) { $plarr = array(); $plarr['login'] = $pl; $admin->playerlist[] = $plarr; // format nickname & login $ply = '{#black}' . str_ireplace('$w', '', $aseco->getPlayerNick($pl)) . '$z / ' . ($aseco->isAnyAdminL($pl) ? '{#logina}' : '{#login}') . $pl; // define colored column strings $bdw = '$ff3+1'; $bn1 = '$f301Hour'; $bn2 = '$f0324H'; $ubn = '$c3fUnBan'; $gst = '$3c3Add'; $ugt = '$393Remove'; $usp = '$09fUnSpec'; $off = '$09cOffln'; $plr = '$09cPlayer'; $spc = '$09cSpec'; // check whether temporarily banned if ($entry->banned > $time) { $remain = round(($entry->banned - $time) / 60); // compute mins if ($remain > 60) { // check for >1 hour $remain = sprintf('%dh%02d', $remain / 60, $remain % 60); } } else { $remain = false; } // always add clickable buttons if ($pid <= 200) { $ply = array($ply, $pid+2000); if (array_key_exists($pl, $onlinelist)) { $bdw = array($bdw, -4000-$pid); $bn1 = array($bn1, -4200-$pid); $bn2 = array($bn2, -4400-$pid); if ($remain !== false) $ubn = array($ubn, -4600-$pid); if (in_array($pl, $aseco->server->jfreu->vip_list)) $gst = array($ugt, -5000-$pid); else $gst = array($gst, -4800-$pid); if ($entry->speconly) $spc = array($usp, -5200-$pid); elseif (!$onlinelist[$pl]['spec']) $spc = $plr; } else { // determine offline operations $bn1 = array($bn1, -4200-$pid); $bn2 = array($bn2, -4400-$pid); if ($remain !== false) $ubn = array($ubn, -4600-$pid); if (in_array($pl, $aseco->server->jfreu->vip_list)) $gst = array($ugt, -5000-$pid); else $gst = array($gst, -4800-$pid); $spc = $off; } } else { // no more buttons if (in_array($pl, $aseco->server->jfreu->vip_list)) $gst = $ugt; if (array_key_exists($pl, $onlinelist)) { if ($entry->speconly) $spc = $usp; elseif (!$onlinelist[$pl]['spec']) $spc = $plr; } else { $spc = $off; } } // check for badwords filtering if ($aseco->server->jfreu->badwords) $msg[] = array(str_pad($pid, 2, '0', STR_PAD_LEFT) . '.', $ply, $entry->badwords, $bdw, $bn1, $bn2, ($remain !== false ? $remain : 'none'), $ubn, $gst, $spc); else $msg[] = array(str_pad($pid, 2, '0', STR_PAD_LEFT) . '.', $ply, $bn1, $bn2, ($remain !== false ? $remain : 'none'), $ubn, $gst, $spc); $pid++; if (++$lines > 14) { $admin->msgs[] = $msg; $lines = 0; $msg = array(); if ($aseco->server->jfreu->badwords) $msg[] = array('Id', '{#nick}Nick $g/{#login} Login', '$nCount', 'BadW', 'Ban', 'Ban', 'Left', 'UnBan', 'VIP', 'Spec'); else $msg[] = array('Id', '{#nick}Nick $g/{#login} Login', 'Ban', 'Ban', 'Left', 'UnBan', 'VIP', 'Spec'); } } // add if last batch exists if (count($msg) > 1) $admin->msgs[] = $msg; // display ManiaLink message if (count($admin->msgs) > 1) { display_manialink_multi($admin); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No player(s) found!'), $login); } } } else { $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No player(s) found!'), $login); } } // Unspec (unspec a player) elseif ($command['params'][0] == 'unspec' && $command['params'][1] != '') { if (!$target = $aseco->getPlayerParam($admin, $command['params'][1])) return; if (isset($aseco->server->jfreu->playerlist[$target->login]) && $aseco->server->jfreu->playerlist[$target->login]->speconly) { $aseco->server->jfreu->playerlist[$target->login]->speconly = false; $aseco->server->jfreu->playerlist[$target->login]->isvip = true; // log console message $aseco->console('{1} [{2}] unSpec-ed [{3}]', $logtitle, $login, $target->login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} unSpecs {#highlite}{3}{#message}.', $chattitle, $admin->nickname, clean_nick($target->nickname)); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); if ($aseco->server->jfreu->autorank) { autorank($aseco, $command); } } else { $message = $yel.'> '.$red.'Login: '.$whi.$target->login.$red.' is not SpecOnly!'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Add VIP (permanent !!) elseif ($command['params'][0] == 'addvip' && $command['params'][1] != '') { if (!$target = $aseco->getPlayerParam($admin, $command['params'][1])) return; if (in_array($target->login, $aseco->server->jfreu->vip_list)) { $message = $yel.'> '.$blu.'Login: '.$whi.$target->login.$blu.' is already in VIP list.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } $aseco->server->jfreu->vip_list[] = $target->login; write_lists_xml($aseco); // log console message $aseco->console('{1} [{2}] adds VIP [{3}]', $logtitle, $login, $target->login); // show chat message $message = $yel.'>> '.$blu.'New VIP: '.$whi.$target->login.$blu.' / '.$whi.clean_nick($target->nickname).'.'; $aseco->client->query('ChatSendServerMessage', $message); // mark player as VIP $aseco->server->jfreu->playerlist[$target->login]->isvip = true; } // Remove VIP (permanent !!) elseif ($command['params'][0] == 'removevip' && $command['params'][1] != '') { if (!$target = $aseco->getPlayerParam($admin, $command['params'][1], true)) return; if (($i = array_search($target->login, $aseco->server->jfreu->vip_list)) === false) { $message = $yel.'> '.$blu.'Login: '.$whi.$target->login.$blu.' is not in VIP list.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } $aseco->server->jfreu->vip_list[$i] = ''; write_lists_xml($aseco); // log console message $aseco->console('{1} [{2}] removes VIP [{3}]', $logtitle, $login, $target->login); // show chat message $message = $yel.'>> '.$blu.'Login: '.$whi.$target->login.$blu.' removed from VIP list.'; $aseco->client->query('ChatSendServerMessage', $message); // mark player as non-VIP if (isset($aseco->server->jfreu->playerlist[$target->login])) { $aseco->server->jfreu->playerlist[$target->login]->isvip = false; } } // Add VIP_Team (permanent !!) elseif ($command['params'][0] == 'addvipteam' && $command['params'][1] != '') { $team = $command['params'][1]; if (in_array($team, $aseco->server->jfreu->vip_team_list)) { $message = $yel.'> '.$blu.'Team: '.$whi.$team.$blu.' is already in VIP_Team list.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } $aseco->server->jfreu->vip_team_list[] = $team; write_lists_xml($aseco); // log console message $aseco->console('{1} [{2}] adds VIP_Team [{3}]', $logtitle, $login, $team); // show chat message $message = $yel.'>> '.$blu.'New VIP_Team: '.$whi.$team.$blu.'.'; $aseco->client->query('ChatSendServerMessage', $message); } // Remove VIP_Team (permanent !!) elseif ($command['params'][0] == 'removevipteam' && $command['params'][1] != '') { $team = $command['params'][1]; if (($i = array_search($team, $aseco->server->jfreu->vip_team_list)) === false) { $message = $yel.'> '.$blu.'Team: '.$whi.$team.$blu.' is not in VIP_Team list.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } $aseco->server->jfreu->vip_team_list[$i] = ''; write_lists_xml($aseco); // log console message $aseco->console('{1} [{2}] removes VIP_Team [{3}]', $logtitle, $login, $team); // show chat message $message = $yel.'>> '.$blu.'Team: '.$whi.$team.$blu.' removed from VIP_Team list.'; $aseco->client->query('ChatSendServerMessage', $message); } // Display VIPs list elseif ($command['params'][0] == 'listvips') { $admin->playerlist = array(); $admin->msgs = array(); if ($aseco->server->getGame() == 'TMN') { $head = 'Current VIPs:' . LF . 'Id {#nick}Nick $g/{#login} Login' . LF; $msg = ''; $pid = 1; $lines = 0; $admin->msgs[0] = 1; foreach ($aseco->server->jfreu->vip_list as $player) { if ($player != '') { $plarr = array(); $plarr['login'] = $player; $admin->playerlist[] = $plarr; $msg .= '$g' . str_pad($pid, 2, '0', STR_PAD_LEFT) . '. {#black}' . $aseco->getPlayerNick($player) . '$z / {#login}' . $player . LF; $pid++; if (++$lines > 9) { $admin->msgs[] = $aseco->formatColors($head . $msg); $lines = 0; $msg = ''; } } } // add if last batch exists if ($msg != '') $admin->msgs[] = $aseco->formatColors($head . $msg); // display popup message if (count($admin->msgs) == 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'OK', '', 0); } elseif (count($admin->msgs) > 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'Close', 'Next', 0); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No VIP(s) found!'), $login); } } elseif ($aseco->server->getGame() == 'TMF') { $head = 'Current VIPs:'; $msg = array(); if ($aseco->settings['clickable_lists']) $msg[] = array('Id', '{#nick}Nick $g/{#login} Login$g (click to Remove)'); else $msg[] = array('Id', '{#nick}Nick $g/{#login} Login'); $pid = 1; $lines = 0; $admin->msgs[0] = array(1, $head, array(0.9, 0.1, 0.8), array('Icons128x128_1', 'Invite')); foreach ($aseco->server->jfreu->vip_list as $player) { if ($player != '') { $plarr = array(); $plarr['login'] = $player; $admin->playerlist[] = $plarr; // format nickname & login $ply = '{#black}' . str_ireplace('$w', '', $aseco->getPlayerNick($player)) . '$z / {#login}' . $player; if ($aseco->settings['clickable_lists']) $ply = array($ply, -5600-$pid); // action id // action id $msg[] = array(str_pad($pid, 2, '0', STR_PAD_LEFT) . '.', $ply); $pid++; if (++$lines > 14) { $admin->msgs[] = $msg; $lines = 0; $msg = array(); if ($aseco->settings['clickable_lists']) $msg[] = array('Id', '{#nick}Nick $g/{#login} Login$g (click to Remove)'); else $msg[] = array('Id', '{#nick}Nick $g/{#login} Login'); } } } // add if last batch exists if (count($msg) > 1) $admin->msgs[] = $msg; // display ManiaLink message if (count($admin->msgs) > 1) { display_manialink_multi($admin); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No VIP(s) found!'), $login); } } } // Display VIP_Teams list elseif ($command['params'][0] == 'listvipteams') { $admin->playerlist = array(); $admin->msgs = array(); if ($aseco->server->getGame() == 'TMN') { $head = 'Current VIP_Teams:' . LF . 'Id {#nick}Team' . LF; $msg = ''; $pid = 1; $lines = 0; $admin->msgs[0] = 1; foreach ($aseco->server->jfreu->vip_team_list as $team) { if ($team != '') { $plarr = array(); $plarr['login'] = $team; $admin->playerlist[] = $plarr; $msg .= '$z' . str_pad($pid, 2, '0', STR_PAD_LEFT) . '. {#black}' . $team . LF; $pid++; if (++$lines > 9) { $admin->msgs[] = $aseco->formatColors($head . $msg); $lines = 0; $msg = ''; } } } // add if last batch exists if ($msg != '') $admin->msgs[] = $aseco->formatColors($head . $msg); // display popup message if (count($admin->msgs) == 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'OK', '', 0); } elseif (count($admin->msgs) > 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'Close', 'Next', 0); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No VIP_Team(s) found!'), $login); } } elseif ($aseco->server->getGame() == 'TMF') { $head = 'Current VIP_Teams:'; $msg = array(); if ($aseco->settings['clickable_lists']) $msg[] = array('Id', '{#nick}Team$g (click to Remove)'); else $msg[] = array('Id', '{#nick}Team'); $pid = 1; $lines = 0; $admin->msgs[0] = array(1, $head, array(0.8, 0.1, 0.7), array('Icons128x128_1', 'Invite')); foreach ($aseco->server->jfreu->vip_team_list as $team) { if ($team != '') { $plarr = array(); $plarr['login'] = $team; $admin->playerlist[] = $plarr; $msg[] = array(str_pad($pid, 2, '0', STR_PAD_LEFT) . '.', ($aseco->settings['clickable_lists'] ? array('{#black}' . $team, -5800-$pid) : // action id '{#black}' . $team)); $pid++; if (++$lines > 14) { $admin->msgs[] = $msg; $lines = 0; $msg = array(); if ($aseco->settings['clickable_lists']) $msg[] = array('Id', '{#nick}Team$g (click to Remove)'); else $msg[] = array('Id', '{#nick}Team'); } } } // add if last batch exists if (count($msg) > 1) $admin->msgs[] = $msg; // display ManiaLink message if (count($admin->msgs) > 1) { display_manialink_multi($admin); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No VIP_Team(s) found!'), $login); } } } // Saves vip/team lists elseif ($command['params'][0] == 'writelists') { write_lists_xml($aseco); $message = $yel.'> '.$whi.'Jfreu lists'.$yel.' written.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // Loads vip/team lists elseif ($command['params'][0] == 'readlists') { $aseco->server->jfreu->vip_list = array(); $aseco->server->jfreu->vip_team_list = array(); read_lists_xml($aseco); read_guest_list($aseco); $message = $yel.'> '.$whi.'Jfreu lists'.$yel.' read.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // Set badwords ON/OFF. elseif ($command['params'][0] == 'badwords') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->badwords = true; // log console message $aseco->console('{1} [{2}] set badwords bot: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set BadWords bot: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->badwords = false; // log console message $aseco->console('{1} [{2}] set badwords bot: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set BadWords bot: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'BadWords is: '.$whi. ($aseco->server->jfreu->badwords ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set badwordsban ON/OFF. elseif ($command['params'][0] == 'badwordsban') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->badwordsban = true; // log console message $aseco->console('{1} [{2}] set badwords ban: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set BadWordsBan: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->badwordsban = false; // log console message $aseco->console('{1} [{2}] set badwords ban: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set BadWordsBan: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'BadWordsBan is: '.$whi. ($aseco->server->jfreu->badwordsban ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set badwordsnum value. elseif ($command['params'][0] == 'badwordsnum') { if ($command['params'][1] != '' && is_numeric($command['params'][1])) { if ($command['params'][1] > 0 && $command['params'][1] < 10) { $aseco->server->jfreu->badwordsnum = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set badwordsnum: {3}', $logtitle, $login, $aseco->server->jfreu->badwordsnum); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set BadWordsNum to: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $aseco->server->jfreu->badwordsnum); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'BadWordsNum value is: '.$whi.$aseco->server->jfreu->badwordsnum.$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set badwordstime value. elseif ($command['params'][0] == 'badwordstime') { if ($command['params'][1] != '' && is_numeric($command['params'][1])) { if ($command['params'][1] > 0 && $command['params'][1] <= 24 * 60) // 1 day { $aseco->server->jfreu->badwordstime = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set badwordstime: {3}', $logtitle, $login, $aseco->server->jfreu->badwordstime); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set BadWordsTime to: {#highlite}{3}{#message} mins.', $chattitle, $admin->nickname, $aseco->server->jfreu->badwordstime); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'BadWordsTime value is: '.$whi.$aseco->server->jfreu->badwordstime.$blu.' mins.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Give extra badword warning {login/ID} elseif ($command['params'][0] == 'badword' && $command['params'][1] != '') { if (!$target = $aseco->getPlayerParam($admin, $command['params'][1])) return; badword_found($target->login, $target->nickname, ''); } // Ban player temporarily (/jfreu banfor /H ) elseif ($command['params'][0] == 'banfor' && $command['params'][1] != '' && isset($command['params'][2])) { if (!$target = $aseco->getPlayerParam($admin, $command['params'][2], true)) return; // check time parameter $time = $command['params'][1]; if (strtolower(substr($time, -1)) == 'h') { $time = substr($time, 0, -1); if (is_numeric($time)) { $time *= 60; // convert to hours } else { $message = $yel.'> '.$whi.$command['params'][1].$red.' is not a valid time!'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } } elseif (!is_numeric($time) || $time <= 0) { $message = $yel.'> '.$whi.$command['params'][1].$red.' is not a valid time!'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); return; } // format time value if ($time > 60) { // check for >1 hour $ban = sprintf('%d {#message}hour%s {#highlite}%02d {#message}min%s', $time / 60, (floor($time / 60) == 1 ? '' : 's'), $time % 60, (($time % 60) == 1 ? '' : 's')); } else { $ban = sprintf('%d {#message}min%s', $time, ($time == 1 ? '' : 's')); } // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} bans {#highlite}{3}{#message} for {#highlite}{4}.', $chattitle, $admin->nickname, clean_nick($target->nickname), $ban); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); banfor($aseco, $target->login, $time); } // UnBans temporarily banned player elseif ($command['params'][0] == 'unban') { if (!$target = $aseco->getPlayerParam($admin, $command['params'][1], true)) return; if (isset($aseco->server->jfreu->playerlist[$target->login])) { if ($aseco->server->jfreu->playerlist[$target->login]->banned > 0) { $aseco->server->jfreu->playerlist[$target->login]->banned = 0; $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} unbans {#highlite}{3}{#message}.', $chattitle, $admin->nickname, clean_nick($target->nickname)); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_bans_xml($aseco); return; } } $message = $yel.'> '.$whi.$target->login.$red.' is not a banned player!'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // Displays temporarily banned players elseif ($command['params'][0] == 'listbans') { $admin->playerlist = array(); $admin->msgs = array(); if ($aseco->server->getGame() == 'TMN') { $head = 'Temporarily Banned Players:' . LF . 'Id {#nick}Nick $g/{#login} Login $g/{#black} Time' . LF; $msg = ''; $pid = 1; $lines = 0; $admin->msgs[0] = 1; $time = time(); foreach ($aseco->server->jfreu->playerlist as $player => $entry) { // check for banned players if ($entry->banned > $time) { $plarr = array(); $plarr['login'] = $player; $admin->playerlist[] = $plarr; $remain = round(($entry->banned - $time) / 60); // compute mins if ($remain > 60) { // check for >1 hour $remain = sprintf('%dh%02d', $remain / 60, $remain % 60); } $msg .= '$g' . str_pad($pid, 2, '0', STR_PAD_LEFT) . '. {#black}' . str_ireplace('$w', '', $aseco->getPlayerNick($player)) . '$z / {#login}' . $player . '$g / {#black}' . $remain . LF; $pid++; if (++$lines > 9) { $admin->msgs[] = $aseco->formatColors($head . $msg); $lines = 0; $msg = ''; } } } // add if last batch exists if ($msg != '') $admin->msgs[] = $aseco->formatColors($head . $msg); // display popup message if (count($admin->msgs) == 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'OK', '', 0); } elseif (count($admin->msgs) > 2) { $aseco->client->query('SendDisplayServerMessageToLogin', $login, $admin->msgs[1], 'Close', 'Next', 0); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No player(s) found!'), $login); } } elseif ($aseco->server->getGame() == 'TMF') { $head = 'Temporarily Banned Players:'; $msg = array(); if ($aseco->settings['clickable_lists']) $msg[] = array('Id', '{#nick}Nick $g/{#login} Login$g (click to UnBan)', '{#black}Time'); else $msg[] = array('Id', '{#nick}Nick $g/{#login} Login', '{#black}Time'); $pid = 1; $lines = 0; $admin->msgs[0] = array(1, $head, array(1.1, 0.1, 0.8, 0.2), array('Icons64x64_1', 'NotBuddy')); $time = time(); foreach ($aseco->server->jfreu->playerlist as $player => $entry) { // check for banned players if ($entry->banned > $time) { $plarr = array(); $plarr['login'] = $player; $admin->playerlist[] = $plarr; $remain = round(($entry->banned - $time) / 60); // compute mins if ($remain > 60) { // check for >1 hour $remain = sprintf('%dh%02d', $remain / 60, $remain % 60); } // format nickname & login $ply = '{#black}' . str_ireplace('$w', '', $aseco->getPlayerNick($player)) . '$z / {#login}' . $player; if ($aseco->settings['clickable_lists']) $ply = array($ply, -5400-$pid); // action id $msg[] = array(str_pad($pid, 2, '0', STR_PAD_LEFT) . '.', $ply, '{#black}' . $remain); $pid++; if (++$lines > 14) { $admin->msgs[] = $msg; $lines = 0; $msg = array(); if ($aseco->settings['clickable_lists']) $msg[] = array('Id', '{#nick}Nick $g/{#login} Login$g (click to UnBan)', '{#black}Time'); else $msg[] = array('Id', '{#nick}Nick $g/{#login} Login', '{#black}Time'); } } } // add if last batch exists if (count($msg) > 1) $admin->msgs[] = $msg; // display ManiaLink message if (count($admin->msgs) > 1) { display_manialink_multi($admin); } else { // == 1 $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors('{#server}> {#error}No player(s) found!'), $login); } } } // Message from Server (/jfreu message ) elseif ($command['params'][0] == 'message' && $command['params'][1] != '') { $message = $whi.'['.$aseco->server->name.$whi.'] $z$s' . $arglist[1]; $aseco->client->query('ChatSendServerMessage', $message); } // Message from Player (/jfreu player ) elseif ($command['params'][0] == 'player' && $command['params'][1] != '') { if (!$target = $aseco->getPlayerParam($admin, $command['params'][1])) return; $text = explode(' ', $arglist[1], 2); // don't use $s as a subtle hint this isn't the actual player saying it $message = '$z['.$target->nickname.'$z] '.$text[1]; $aseco->client->query('ChatSendServerMessage', $message); } // Set PF (BAD BAD BAD) {map} or {time}/OFF. elseif ($command['params'][0] == 'nopfkick') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'OFF' || $command['params'][1] == '0') { $aseco->server->jfreu->pf = 0; $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set NoPfKick: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (isset($aseco->server->jfreu->pf_list[$command['params'][1]])) { $aseco->server->jfreu->pf = $aseco->server->jfreu->pf_list[$command['params'][1]]; $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set NoPfKick on {#highlite}{3}{#message} map.', $chattitle, $admin->nickname, $command['params'][1]); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (is_numeric($command['params'][1]) && $command['params'][1] > 0 && $command['params'][1] < 600000) { $aseco->server->jfreu->pf = $command['params'][1]; $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set NoPfKick time: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $command['params'][1]); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } else { $message = $yel.'> '.$blu.'Map '.$whi.$command['params'][1].$blu.' is not in PF list.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // log console message $aseco->console('{1} [{2}] set NoPfKick: {3}', $logtitle, $login, $aseco->server->jfreu->pf); } else { $message = $yel.'> '.$blu.'NoPfKick is: '.$whi. ($aseco->server->jfreu->pf == 0 ? 'OFF' : 'ON').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Cancel vote - redundant with /admin cancel elseif ($command['params'][0] == 'cancel') { global $feature_votes; // from rasp.settings.php // disabled if chat-based votes are enabled if (!$feature_votes) { $aseco->client->query('CancelVote'); $message = $yel.'>> '.$blu.'Vote canceled.'; $aseco->client->query('ChatSendServerMessage', $message); } } // Set novote ON/OFF. elseif ($command['params'][0] == 'novote') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->novote = true; // log console message $aseco->console('{1} [{2}] set novote: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set NoVote: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->novote = false; // log console message $aseco->console('{1} [{2}] set novote: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set NoVote: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'NoVote is: '.$whi. ($aseco->server->jfreu->novote ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set unspecvote ON/OFF. elseif ($command['params'][0] == 'unspecvote') { if ($command['params'][1] != '') { if (strtoupper($command['params'][1]) == 'ON') { $aseco->server->jfreu->unspecvote = true; // log console message $aseco->console('{1} [{2}] set /unspec vote: ON', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set UnSpecVote: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'ON'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } elseif (strtoupper($command['params'][1]) == 'OFF') { $aseco->server->jfreu->unspecvote = false; // log console message $aseco->console('{1} [{2}] set /unspec vote: OFF', $logtitle, $login); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set UnSpecVote: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, 'OFF'); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } } else { $message = $yel.'> '.$blu.'UnSpecVote is: '.$whi. ($aseco->server->jfreu->unspecvote ? 'ON' : 'OFF').$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Set infomessages ON/OFF. elseif ($command['params'][0] == 'infomessages') { if ($command['params'][1] != '') { if ($command['params'][1] >= 0 && $command['params'][1] <= 2) { $aseco->server->jfreu->infomessages = $command['params'][1]; // log console message $aseco->console('{1} [{2}] set info messages: {3}', $logtitle, $login, $command['params'][1]); // show chat message $message = formatText('{#server}>> {#message}{1}$z$s {#highlite}{2}$z$s{#message} set InfoMessages: {#highlite}{3}{#message}.', $chattitle, $admin->nickname, $command['params'][1]); $aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message)); write_config_xml($aseco); } else { $message = '{#server}> {#highlite}' . $command['params'][1] . '{#error} is not a valid infomessages value!'; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } else { $message = $yel.'> '.$blu.'InfoMessages is: '.$whi. $aseco->server->jfreu->infomessages .$blu.'.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } } // Saves Jfreu config elseif ($command['params'][0] == 'writeconfig') { write_config_xml($aseco); $message = $yel.'> '.$whi.'Jfreu config'.$yel.' written.'; $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } // Loads Jfreu config elseif ($command['params'][0] == 'readconfig') { read_config_xml($aseco); $message = $yel.'> '.$whi.'Jfreu config'.$yel.' read. Servername: '.$whi . $aseco->getServerName(); $aseco->client->query('ChatSendServerMessageToLogin', $message, $login); } else { $message = '{#server}> {#error}Unknown Jfreu command or missing parameter(s): {#highlite}$i ' . $arglist[0] . ' ' . $arglist[1]; $aseco->client->query('ChatSendServerMessageToLogin', $aseco->formatColors($message), $login); } } // chat_jfreu // called @ onPlayerManialinkPageAnswer // Handles ManiaLink jfreu responses // [0]=PlayerUid, [1]=Login, [2]=Answer function event_jfreu($aseco, $answer) { // leave actions outside -5600 - -4001 to other handlers if ($answer[2] < -5600 && $answer[2] > -4001) return; // get player & possible parameter $player = $aseco->server->players->getPlayer($answer[1]); if (isset($player->panels['plyparam'])) $param = $player->panels['plyparam']; // check for /jfreu badword command if ($answer[2] >= -4200 && $answer[2] <= -4001) { $target = $player->playerlist[abs($answer[2])-4001]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu badword {2}"', $player->login, $target); // badword selected player $command = array(); $command['author'] = $player; $command['params'] = 'badword ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu banfor 1H command elseif ($answer[2] >= -4400 && $answer[2] <= -4201) { $target = $player->playerlist[abs($answer[2])-4201]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu banfor 1H {2}"', $player->login, $target); // banfor 1H selected player $command = array(); $command['author'] = $player; $command['params'] = 'banfor 1H ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu banfor 24H command elseif ($answer[2] >= -4600 && $answer[2] <= -4401) { $target = $player->playerlist[abs($answer[2])-4401]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu banfor 24H {2}"', $player->login, $target); // banfor 24H selected player $command = array(); $command['author'] = $player; $command['params'] = 'banfor 24H ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu unban command elseif ($answer[2] >= -4800 && $answer[2] <= -4601) { $target = $player->playerlist[abs($answer[2])-4601]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu unban {2}"', $player->login, $target); // unban selected player $command = array(); $command['author'] = $player; $command['params'] = 'unban ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu addvip command elseif ($answer[2] >= -5000 && $answer[2] <= -4801) { $target = $player->playerlist[abs($answer[2])-4801]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu addvip {2}"', $player->login, $target); // addvip selected player $command = array(); $command['author'] = $player; $command['params'] = 'addvip ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu removevip command elseif ($answer[2] >= -5200 && $answer[2] <= -5001) { $target = $player->playerlist[abs($answer[2])-5001]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu removevip {2}"', $player->login, $target); // removevip selected player $command = array(); $command['author'] = $player; $command['params'] = 'removevip ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu unspec command elseif ($answer[2] >= -5400 && $answer[2] <= -5201) { $target = $player->playerlist[abs($answer[2])-5201]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu unspec {2}"', $player->login, $target); // unspec selected player $command = array(); $command['author'] = $player; $command['params'] = 'unspec ' . $target; chat_jfreu($aseco, $command); // log clicked command $aseco->console('player {1} clicked command "/jfreu players {2}"', $player->login, $param); // refresh players window $command['params'] = 'players ' . $param; chat_jfreu($aseco, $command); } // check for /jfreu unban command in listbans elseif ($answer[2] >= -5600 && $answer[2] <= -5401) { $target = $player->playerlist[abs($answer[2])-5401]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu unban {2}"', $player->login, $target); // unban selected player $command = array(); $command['author'] = $player; $command['params'] = 'unban ' . $target; chat_jfreu($aseco, $command); // check whether last player was unbanned $bansleft = false; $time = time(); foreach ($aseco->server->jfreu->playerlist as $entry) { if ($entry->banned > $time) { $bansleft = true; break; } } if (!$bansleft) { // close main window mainwindow_off($aseco, $player->login); } else { // log clicked command $aseco->console('player {1} clicked command "/jfreu listbans"', $player->login); // refresh listbans window $command['params'] = 'listbans'; chat_jfreu($aseco, $command); } } // check for /jfreu removevip command in listvips elseif ($answer[2] >= -5800 && $answer[2] <= -5601) { $target = $player->playerlist[abs($answer[2])-5601]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu removevip {2}"', $player->login, $target); // removevip selected player $command = array(); $command['author'] = $player; $command['params'] = 'removevip ' . $target; chat_jfreu($aseco, $command); // check whether last vip was removed $vipsleft = false; foreach ($aseco->server->jfreu->vip_list as $lg) { if ($lg != '') { $vipsleft = true; break; } } if (!$vipsleft) { // close main window mainwindow_off($aseco, $player->login); } else { // log clicked command $aseco->console('player {1} clicked command "/jfreu listvips"', $player->login); // refresh listvips window $command['params'] = 'listvips'; chat_jfreu($aseco, $command); } } // check for /jfreu removevipteam command in listvipteams elseif ($answer[2] >= -6000 && $answer[2] <= -5801) { $target = $player->playerlist[abs($answer[2])-5801]['login']; // log clicked command $aseco->console('player {1} clicked command "/jfreu removevipteam {2}"', $player->login, $target); // removevip selected player $command = array(); $command['author'] = $player; $command['params'] = 'removevipteam ' . $target; chat_jfreu($aseco, $command); // check whether last vipteam was removed $teamsleft = false; foreach ($aseco->server->jfreu->vip_team_list as $tm) { if ($tm != '') { $teamsleft = true; break; } } if (!$teamsleft) { // close main window mainwindow_off($aseco, $player->login); } else { // log clicked command $aseco->console('player {1} clicked command "/jfreu listvipteams"', $player->login); // refresh listvips window $command['params'] = 'listvipteams'; chat_jfreu($aseco, $command); } } } // event_jfreu ?>